Több LM75 használata...

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 19. péntek, 19:09

Hello.

Elég alap dolgot kérdezek, de most ismerkedek avr-el. Adott 3 db LM75, amit I2C-n kellene vezérelni. TINY24 lenne a proc, termosztát-hőkapcsoló, 2*16os LCDvel. A progi már félig megy, jelenleg MEGA8on, csak a 3 LM75öt nem tudom megkülönböztetni. Azt hogy kell?? :oops:
(gondolom A0A1A2 lábbal állítom be a címet, csak ezt nem tudom milyet, és azt hogy kell meghívni.... :( )

Bocsi, de még tényleg elég kezdő vagyok...

Előre is köszi a segítséget!
Üdv. Gergő

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 19:19

Bascom könyv -> I2C fejezetben az alapok....
Az A1/A2/A3 a cím, amin meg tudod a chipet szólítani....

http://avr.tavir.hu/modules.php?name=Co ... age&pid=17

Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 19. péntek, 21:11

Aha, értem... Ezek alapján ezt dobtam össze:

LM75 adatlapon sokadik olvasásra megtaláltam a címet 1001 - A0A1A2
...
Const Lm75write = &H90
Const Lm75read = &H91
Const Lm75resolution = 0.0625
I2cstart
I2cwbyte 1001100
I2cwbyte Lm75read
I2crbyte Tempbytehi , Ack
I2crbyte Tempbytelo , Nack
I2cstop
I2cstart
I2cwbyte 1001000
I2cwbyte Lm75read
I2crbyte Tempbytehi2 , Ack
I2crbyte Tempbytelo2 , Nack
I2cstop
......

Sajnos nem akar menni....Tuti valamit rosszul írtam.
Tudnál segíteni, mit gondoltam rosszul?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 21:20

i2cdetect programod látja a chipeket?

ill mi a hiba nálad?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 21:26

Kód: Egész kijelölése

'********************************************************************
'* Program nev: Duino-Mini-all.bas                                  *
'* Board      : AVR-Duino MiniBoard v1                              *
'* Fordito    : BASCOM AVR, (V.1.11.9.1R)                           *
'* Datum      : 2008-05-28                                          *
'* Honlap     : http://avr.tavir.hu                                 *
'*                                                                  *
'* Irta       : Cseh Róbert                                         *
'* E-mail     : csehrobert@tavir.hu                                 *
'********************************************************************
'i2cdetect.bas

'--- Alapadatok ---
$crystal = 16000000                                         'Sebesseg
'$regfile = "M168def.dat"                                    'Chip
$regfile = "M328pdef.dat"                                   'Chip
$baud = 9600
$swstack = 128
$hwstack = 128
$framesize = 128
  Dim Temp1b As Byte
  Dim Temp2b As Byte


'configure the used port pin for I2C
Config I2cdelay = 10                                        ' default slow mode:5
Config Sda = Portc.4
Config Scl = Portc.5

   Print "I2c-locator 1=no_device 0=device"
   Print
   Print "     0    2    4    6    8    A    C    E"
   Print " 00 ";
   For Temp1b = 0 To 254 Step 2
      Temp2b = Temp1b Mod 16                                ' addresses
      If Temp2b = 0 And Temp1b > 0 Then
         Print                                              ' end of line?
         Print " " ; Hex(temp1b) ; " ";
      End If
      I2cstart                                              ' generate start
      I2cwbyte Temp1b
      Print " " ; Err ; "   ";                              ' 1 no device, 0 device
      I2cstop
   Next Temp1b
   Print
 End


A prg elején a felparaméterezést javítsd ki....

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 21:29

LM75 amúgy alklmatlan termosztátnak. A mérési pontossága 0.5...1 fok!

DS1820, vagy Pt100 kellene inkább....

LM75 tájékoztató mérésre jó....


Ja és a hőérzet az páratartalomfüggő is! Igy a SHT11 szenzor is szóbajöhetne...

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 21:51

Megvan!


2x adod ki az olvasási címet!

Hibás/error!:

Kód: Egész kijelölése

Const Lm75write = &H90
Const Lm75read = &H91
Const Lm75resolution = 0.0625
I2cstart
I2cwbyte 1001100
I2cwbyte Lm75read
I2crbyte Tempbytehi , Ack
I2crbyte Tempbytelo , Nack
I2cstop
I2cstart
I2cwbyte 1001000
I2cwbyte Lm75read
I2crbyte Tempbytehi2 , Ack
I2crbyte Tempbytelo2 , Nack
I2cstop


helyett!

OK:

Kód: Egész kijelölése

Const Lm75write = &H90
Const Lm75read = &H91
Const Lm75resolution = 0.0625
I2cstart
I2cwbyte 1001100
' I2cwbyte Lm75read - ez nem kell! vagy ez, vagy az előző sor!
I2crbyte Tempbytehi , Ack
I2crbyte Tempbytelo , Nack
I2cstop
I2cstart
I2cwbyte 1001000
' I2cwbyte Lm75read   - ez nem kell! vagy ez, vagy az előző sor!
I2crbyte Tempbytehi2 , Ack
I2crbyte Tempbytelo2 , Nack
I2cstop

Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 19. péntek, 22:25

LM75 nem hőmérőnek kell, csak annyit kell megoldani, hogy egy cső hőmérsékletét mérje (sacc/kb már elég pontos), elektromos szelepet állítva.
Lényeg: bőven elég az 1-2 fokos pontosság. Mind1, hogy 40 vagy 43 fokos a víz, csak ne 80legyen.

Viszont a progi miníg nem megy... Egyik chipen minden A láb gnd, másikon A2 vcc.. Címeknek rendben kell lennie...

Van led, ami a do loop ciklusban világít, majd kialszik. de folyamatosan megy, mintha a progi megfagyna... Pedig az olvasáson kívül csak a 2-2 értéket íratom ki..... :?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 22:27

Akkor a teljes programot lehetne látni?

Így látatlanban csak ötletbörze.....


És ha 1etlen chipt íratsz ki?
És ha utána másiknak a címét adod meg, akkor azt írja ki?

Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 19. péntek, 22:36

Kód: Egész kijelölése

$regfile = "m8def.dat"
$crystal = 8000000

Config Sda = Portd.4
Config Scl = Portd.3
Config I2cdelay = 100
Config Pind.0 = Output

Const Lm75write = &H90
Const Lm75read = &H91
Const Lm75resolution = 0.0625


Dim Tempbytelo As Byte
Dim Tempbytehi As Byte


Dim Tempbytelo1 As Byte
Dim Tempbytehi1 As Byte

Do
  initlcd
  Cursor Off
  Set Portd.0
  'reSet Portd.1
  Cls
  Wait 1
  I2cinit
  I2cstart
I2cwbyte 1001000
 'I2cwbyte Lm75read                                          ' - ez nem kell! vagy ez, vagy az előző sor!
I2crbyte Tempbytehi , Ack
I2crbyte Tempbytelo , Nack
I2cstop
I2cstart
I2cwbyte 1001100
' I2cwbyte Lm75read                                          '  - ez nem kell! vagy ez, vagy az előző sor!
I2crbyte Tempbytehi1 , Ack
I2crbyte Tempbytelo1 , Nack
I2cstop

Lcd Tempbytehi
Locate 1 , 8
Lcd Tempbytelo

Lowerline
Lcd Tempbytehi1
Locate 2 , 8
Lcd Tempbytelo1

Wait 1
Loop
End

Ez már a teljesen lecsupaszított rész, de ez sem megy.... :(

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 19. péntek, 22:46

Az I2C detect at látja a chipet?
De MIT ÍR KI nálad?


Szerintem hibásan címzed a chipet...


Saját mintám, 1 db chipre:
(az LCD-t, chipet, sebességet, LM75 (TCN75) címet, sorosportot állítsd be...)

Kód: Egész kijelölése

$crystal = 16000000                                         'orajel
$regfile = "m168def.dat"                                    'chip
$baud = 9600                                                '0.16%

'lcd
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.7 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portd.5 , Rs = Portd.4

'i2c
'configure the used port pin for I2C
Config I2cdelay = 10                                        ' default slow mode:5
Config Sda = Portc.4
Config Scl = Portc.5

Dim Tempmsb As Byte                                         'Egesz fok
Dim Templsb As Byte                                         'Tort fok
Const T75aw = &H90                                          'Irasi cim  (1001.000x)
Const T75ar = &H91                                          'Olvasási cim  (1001.000x)

I2cinit
Print "Start..."

Do
   I2cstart
   I2cwbyte T75aw
   I2cwbyte &H00
   I2cstop
   I2cstart
   I2cwbyte T75ar
   I2crbyte Tempmsb , Ack
   I2crbyte Templsb , Nack
   I2cstop
   If Templsb = 128 Then Templsb = 5 Else Templsb = 0
   Locate 4 , 1
   Print "OnBrd:" ; Tempmsb ; "," ; Templsb ; "  "
   Cls
   Lcd "OnBrd:" ; Tempmsb ; "," ; Templsb ; ""
   Wait 1
Loop

Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 19. péntek, 22:57

I2C detectet nem tudom, hogy kell használni, és hogy mit kellene kiírnia.

Jelenleg a progi amit küldtem 4db "255"öt ír ki és villog..

1db chip nekem is megy, azzal semmi baj, de akkor nem címet írok, hanem

Kód: Egész kijelölése

2cstart
Const Lm75write = &H90
Const Lm75read = &H91
Const Lm75resolution = 0.0625 

I2cwbyte Lm75read
  I2crbyte Tempbytehi , Ack
  I2crbyte Tempbytelo , Nack

Ezzel megy tökéletesen.... Szerintem is a címzés nem jó... De adatlap azt írja:1001 és utána A2A1A0

Nem tudom már mi van vele... Elszomorít...

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. november 20. szombat, 4:09

Kód: Egész kijelölése

Do
   I2cstart
   I2cwbyte 10010001
   I2cwbyte &H00
   I2cstop
   I2cstart
   I2cwbyte 10010000
   I2crbyte Temp1msb , Ack   'Egész fok
   I2crbyte Temp1lsb , Nack   'Félfok
   I2cstop

   I2cstart
   I2cwbyte 10010011
   I2cwbyte &H00
   I2cstop
   I2cstart
   I2cwbyte 10010010
   I2crbyte Temp2msb , Ack
   I2crbyte Temp2lsb , Nack
   I2cstop

   I2cstart
   I2cwbyte 10010101
   I2cwbyte &H00
   I2cstop
   I2cstart
   I2cwbyte 10010100
   I2crbyte Temp3msb , Ack
   I2crbyte Temp3lsb , Nack
   I2cstop

   I2cstart
   I2cwbyte 10010111
   I2cwbyte &H00
   I2cstop
   I2cstart
   I2cwbyte 10010110
   I2crbyte Temp4msb , Ack
   I2crbyte Temp4lsb , Nack
   I2cstop

Locate 1,1 : Lcd Temp1msb;",";Temp1lsb
Locate 1,6 : Lcd Temp2msb;",";Temp2lsb
Locate 2,1 : Lcd Temp3msb;",";Temp3lsb
Locate 2,6 : Lcd Temp4msb;",";Temp4lsb

Loop


Talán így!

Kód: Egész kijelölése

Dim A As Byte
Dim Lm75w As Byte
Dim Lm75r As Byte
Dim Tempa(4) As Byte
Dim Tempb(4) As Byte

Do
A=1

For A=1 To 4
Select Case A
   Case 1:
         Lm75w=&H90
         Lm75r=&H91
   Case 2:
         Lm75w=&H92
         Lm75r=&H93
   Case 3:
         Lm75w=&H94
         Lm75r=&H95
   Case 4:
         Lm75w=&H96
         Lm75r=&H97
End Select

I2cstart
I2cwbyte Lm75w
I2cwbyte &H00                                               'Regiszter: Hőmérséklet adatok
I2cstop

I2cstart
I2cwbyte Lm75r
I2crbyte Tempa(a) , Ack
I2crbyte Tempb(a) , Nack
I2cstop
Next

'LCD kiírás
Locate 1 , 1 : Lcd Tempa(1) ; "," ; Tempb(1)
Locate 1 , 6 : Lcd Tempa(2) ; "," ; Tempb(2)
Locate 2 , 1 : Lcd Tempa(3) ; "," ; Tempb(3)
Locate 2 , 6 : Lcd Tempa(4) ; "," ; Tempb(4)

Loop
End


Vagy esetleg így!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. november 20. szombat, 6:59

A programod azért hibás, mert:
1, hibás eszközt címzel,
2, NEM mondod meg, hogy melyik regisztert akarod kiolvasni, hanem olvasol _valamit_.
3, Csak az első kiolvasásod jó, a többi nem (látatlanban)

Az I2Cdetect programot nem véletlen kérdem. Ezzel tudod meglesni, h melyik címen kommunikál chiped! (sorosporton át küdi vissza az eredményt)

Avatar
gergobmwe30
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2010. október 24. vasárnap, 6:00
Tartózkodási hely: Sajóhídvég, BAZ megye

HozzászólásSzerző: gergobmwe30 » 2010. november 20. szombat, 17:31

8O Aha, akkor ez nem annyira egyszerű mint ahogy elképzeltem...

Tuti valami nem stimmel a címzéssel, mert a két programot kipróbálva sem jutottam eredményre... Tünet ugyanaz: 1. prog nem olvas semmit, második csak azt, aminél a0a1a2 0-n van, azt amin a2-t 1re állítom nem olvassa...

Ja, és magában mind a 2 lm75 müxik...

próbálkozok még, hátha sikerül valami....


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég