2db I2C busz lekérdezése egyszerre.
2db I2C busz lekérdezése egyszerre.
szia Robert!
Szeretnék építeni egy termosztátot, ami majd kapcsolja a kazánunkat, meg a keringetőszivatyút.
Van egy alap kapcsolásom, ami egy DS1620-as I2c buszos hőszenzort olvas ki.
Ezzel semmi gond nincs, mert megadom neki a be és kikapcsolási hőmérséklet értéket és az egyik port lábbal vezérlem a kazánt.
De nekem kéne egy másik szenzort is olvasnom amivel a keringető szivattyút vezérlem, mert amíg van a rendszerben forróvíz addig nyugottan keringethetné, aztán meg lekapcsol, ha lehül
itt az alap program, ezt írnám át.
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Th As Byte
Dim Tl As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.7 , Rs = Portb.6
Config Lcd = 16 * 2
Deflcdchar 0 , 14 , 17 , 17 , 17 , 14 , 32 , 32 , 32 'degree
Deflcdchar 1 , 4 , 14 , 31 , 32 , 32 , 32 , 32 , 32 'up
Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 31 , 14 , 4 'down
Deflcdchar 3 , 32 , 32 , 32 , 31 , 31 , 32 , 32 , 32 'equal
Config Sda = Portd.1
Config Scl = Portd.0
Cls
Cursor Off
'write TH
I2cstart
I2cwbyte &H90
I2cwbyte &HA1
I2cwbyte 25
I2cstop
'--------------
'write TL
I2cstart
I2cwbyte &H90
I2cwbyte &HA2
I2cwbyte 20
I2cstop
'--------------
'read TH
I2cstart
I2cwbyte &H90
I2cwbyte &HA1
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Th , Nack
I2cstop
'--------------
'read TL
I2cstart
I2cwbyte &H90
I2cwbyte &HA2
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tl , Nack
I2cstop
'--------------
'read config
I2cstart
I2cwbyte &H90
I2cwbyte &HAC
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Confg , Nack
I2cstop
'--------------
Goto Loop
'read counter
Readcnt:
I2cstart
I2cwbyte &H90
I2cwbyte &HA8
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Count , Nack
I2cstop
Return
'--------------
'read slope
Readslp:
I2cstart
I2cwbyte &H90
I2cwbyte &HA9
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Slope , Nack
I2cstop
Return
'--------------
Loop:
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
'read config
I2cstart
I2cwbyte &H90
I2cwbyte &HAC
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Confg , Nack
I2cstop
'--------------
Wait 1
If Templsb = 128 Then Templsb = 5 Else Templsb = 0
Locate 1 , 1
Lcd "**** " ; Tempmsb ; "," ; Templsb ; Chr(0) ; "C" ; " ****"
Locate 2 , 1
Lcd "L=" ; Tl ; " " ; "H=" ; Th ; " "
Locate 1 , 12
If Confg = 8 Then Lcd Chr(3)
If Confg = 72 Then Lcd Chr(1)
If Confg = 104 Then Lcd Chr(2)
Goto Loop
Meg lehet azt csinálni, hogy kiolvassa a második szenzort is vagy ne bonyolítsam túl, értem azt, hogy adok neki egy időzítést, hogy 20 perc múlva kapcsoljon ki aztán kész!
gerry
Szeretnék építeni egy termosztátot, ami majd kapcsolja a kazánunkat, meg a keringetőszivatyút.
Van egy alap kapcsolásom, ami egy DS1620-as I2c buszos hőszenzort olvas ki.
Ezzel semmi gond nincs, mert megadom neki a be és kikapcsolási hőmérséklet értéket és az egyik port lábbal vezérlem a kazánt.
De nekem kéne egy másik szenzort is olvasnom amivel a keringető szivattyút vezérlem, mert amíg van a rendszerben forróvíz addig nyugottan keringethetné, aztán meg lekapcsol, ha lehül
itt az alap program, ezt írnám át.
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Th As Byte
Dim Tl As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.7 , Rs = Portb.6
Config Lcd = 16 * 2
Deflcdchar 0 , 14 , 17 , 17 , 17 , 14 , 32 , 32 , 32 'degree
Deflcdchar 1 , 4 , 14 , 31 , 32 , 32 , 32 , 32 , 32 'up
Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 31 , 14 , 4 'down
Deflcdchar 3 , 32 , 32 , 32 , 31 , 31 , 32 , 32 , 32 'equal
Config Sda = Portd.1
Config Scl = Portd.0
Cls
Cursor Off
'write TH
I2cstart
I2cwbyte &H90
I2cwbyte &HA1
I2cwbyte 25
I2cstop
'--------------
'write TL
I2cstart
I2cwbyte &H90
I2cwbyte &HA2
I2cwbyte 20
I2cstop
'--------------
'read TH
I2cstart
I2cwbyte &H90
I2cwbyte &HA1
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Th , Nack
I2cstop
'--------------
'read TL
I2cstart
I2cwbyte &H90
I2cwbyte &HA2
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tl , Nack
I2cstop
'--------------
'read config
I2cstart
I2cwbyte &H90
I2cwbyte &HAC
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Confg , Nack
I2cstop
'--------------
Goto Loop
'read counter
Readcnt:
I2cstart
I2cwbyte &H90
I2cwbyte &HA8
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Count , Nack
I2cstop
Return
'--------------
'read slope
Readslp:
I2cstart
I2cwbyte &H90
I2cwbyte &HA9
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Slope , Nack
I2cstop
Return
'--------------
Loop:
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
'read config
I2cstart
I2cwbyte &H90
I2cwbyte &HAC
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Confg , Nack
I2cstop
'--------------
Wait 1
If Templsb = 128 Then Templsb = 5 Else Templsb = 0
Locate 1 , 1
Lcd "**** " ; Tempmsb ; "," ; Templsb ; Chr(0) ; "C" ; " ****"
Locate 2 , 1
Lcd "L=" ; Tl ; " " ; "H=" ; Th ; " "
Locate 1 , 12
If Confg = 8 Then Lcd Chr(3)
If Confg = 72 Then Lcd Chr(1)
If Confg = 104 Then Lcd Chr(2)
Goto Loop
Meg lehet azt csinálni, hogy kiolvassa a második szenzort is vagy ne bonyolítsam túl, értem azt, hogy adok neki egy időzítést, hogy 20 perc múlva kapcsoljon ki aztán kész!
gerry
-
Robert
Ha a 2 szenzornak más az I2C buszon a címe, akkor megoldható. Épp ez az I2C busz lényege.
Mintha itt a 90-es címen lenne...
Én hasonlót akarok most (ablak belső és külső hőfokregisztálás (mintapélda) és ot két I2C-s TCN75-s IC van a buszon. Különbözőa kettő címe. Én a két mérést javasolnám mindenképp, mert hideg illetve fagyos időben más a hűlési állandó....
És ha már olyanod van, akkor beépítenék egy olyat hogy napi ill heti hőprogram, illetve regisztrálni is fogyasztást hőfokot, miegyebet:))
Mintha itt a 90-es címen lenne...
Én hasonlót akarok most (ablak belső és külső hőfokregisztálás (mintapélda) és ot két I2C-s TCN75-s IC van a buszon. Különbözőa kettő címe. Én a két mérést javasolnám mindenképp, mert hideg illetve fagyos időben más a hűlési állandó....
És ha már olyanod van, akkor beépítenék egy olyat hogy napi ill heti hőprogram, illetve regisztrálni is fogyasztást hőfokot, miegyebet:))
-
Robert
En a TCN75-s chippel játszom, hasonlóan az előzőhöz, ez is hőmérőchip és SMD:). Az I2C busz max 10 m lehet biztonsággal (illetve lejjebb véve a sebességet lehet nagyobb is).
Ki fofom próbálni mit szól a 20 m árnyékolt kábelhez és a 10kHz-s buszsebességhez:)
Appnotes a DS1631/1621 chiphez:
http://pdfserv.maxim-ic.com/en/an/app176.pdf
Mondjuk az 1 sec mérési időre vigyázz az adatlap szerint!
Ki fofom próbálni mit szól a 20 m árnyékolt kábelhez és a 10kHz-s buszsebességhez:)
Appnotes a DS1631/1621 chiphez:
http://pdfserv.maxim-ic.com/en/an/app176.pdf
Mondjuk az 1 sec mérési időre vigyázz az adatlap szerint!
-
Robert
A Wait 1 a programodban a 9 bites felbontás esetén igaz csak. Én kicsit ráhagynék, az adatlapja a hőmérőnek ír 1 sec mérési időről. Ennyire csak nem kritikus a mérés....
Valamint kell 1 secenként mérni? Én valamiféle szubrutinos dologba raknám be, hogy a
- főprogram fut
- mérés kell, megszakít a program, mérésindítás jel kiküld
- főprogramba vissza
- 1.1 sec letelt? ->mérés eredmény beolvasás
- főprogram, 1. pont....
Így a chipben a beállítást, regisztrálást egyebeket tudsz ezidő alatt vinni....
Valamint kell 1 secenként mérni? Én valamiféle szubrutinos dologba raknám be, hogy a
- főprogram fut
- mérés kell, megszakít a program, mérésindítás jel kiküld
- főprogramba vissza
- 1.1 sec letelt? ->mérés eredmény beolvasás
- főprogram, 1. pont....
Így a chipben a beállítást, regisztrálást egyebeket tudsz ezidő alatt vinni....
Mondjuk azt nem értem, hogy minek kell ekkora program a szenzor beállításához, kiolvasásához, beállításához.
Mert láttam több programot is ami ilyen hőmérséklet szenzort használ de sokkal rövidebb a progija.
itt van egy, ami szegmens kijelzőhöz van és rövid, pedig a kijelzést is vezérli.
Dim Digit1 As Byte
Dim Digit2 As Byte
Dim N As Byte
Dim Teller As Byte
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Const Display1 = &B00000100
Const Display2 = &B00001000
Declare Sub Convert(number As Byte)
Declare Sub Readtemp(tempmsb As Byte)
Config Portb = Output
Config Portd = Output
Config Sda = Portd.1
Config Scl = Portd.0
Loop:
Call Readtemp(tempmsb)
For Teller = 1 To 20
Call Convert(tempmsb)
Waitms 5
Next Teller
Goto Loop
End 'end program
Digits:
Data &H02 , &H9E , &H24 , &H0C , &H98 , &H48 , &H40 , &H1E , &H00 , &H08
Sub Readtemp(tempmsb As Byte)
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
Sub Convert(number)
N = Number Mod 10
Digit1 = Lookup(n , Digits)
Portd = Display1
Portb = Digit1
Waitms 5
N = Number \ 10
Digit2 = Lookup(n , Digits)
Portd = Display2
Portb = Digit2
Waitms 5
Portd = 0
End Sub Convert
Más:
Kipróbáltam a megszakítást is a 4 digites kijelzőmnél, de nem boldogulok vele.
Csináltam egy kijelzési ciklust, ami kiírja a szegmensekre egymás után a számokat, eddig jó. Az INT0 és INT1 lábakra csináltam meg a megszakítást.
Most csak azt próbáltam ki, hogy ha a kijelzőn világítanak a számok pl.: 0000, akkor, ha megnyomom a gombot megszakad a folyamatos kijelzés az egyik szám felvillan, ahol éppen járt a kijelzés és utána ment minden rendesen. Ez valahogy nem úgy működik, ahogy elképzeltem.
Én azt szeretném, hogy a számok folyamatosan világítsanak és gombnyomásra se szakadjon meg a folyamat.
De ha berágok teszek erre is egy LCD kijelzőt!
Mert láttam több programot is ami ilyen hőmérséklet szenzort használ de sokkal rövidebb a progija.
itt van egy, ami szegmens kijelzőhöz van és rövid, pedig a kijelzést is vezérli.
Dim Digit1 As Byte
Dim Digit2 As Byte
Dim N As Byte
Dim Teller As Byte
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Const Display1 = &B00000100
Const Display2 = &B00001000
Declare Sub Convert(number As Byte)
Declare Sub Readtemp(tempmsb As Byte)
Config Portb = Output
Config Portd = Output
Config Sda = Portd.1
Config Scl = Portd.0
Loop:
Call Readtemp(tempmsb)
For Teller = 1 To 20
Call Convert(tempmsb)
Waitms 5
Next Teller
Goto Loop
End 'end program
Digits:
Data &H02 , &H9E , &H24 , &H0C , &H98 , &H48 , &H40 , &H1E , &H00 , &H08
Sub Readtemp(tempmsb As Byte)
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
Sub Convert(number)
N = Number Mod 10
Digit1 = Lookup(n , Digits)
Portd = Display1
Portb = Digit1
Waitms 5
N = Number \ 10
Digit2 = Lookup(n , Digits)
Portd = Display2
Portb = Digit2
Waitms 5
Portd = 0
End Sub Convert
Más:
Kipróbáltam a megszakítást is a 4 digites kijelzőmnél, de nem boldogulok vele.
Csináltam egy kijelzési ciklust, ami kiírja a szegmensekre egymás után a számokat, eddig jó. Az INT0 és INT1 lábakra csináltam meg a megszakítást.
Most csak azt próbáltam ki, hogy ha a kijelzőn világítanak a számok pl.: 0000, akkor, ha megnyomom a gombot megszakad a folyamatos kijelzés az egyik szám felvillan, ahol éppen járt a kijelzés és utána ment minden rendesen. Ez valahogy nem úgy működik, ahogy elképzeltem.
Én azt szeretném, hogy a számok folyamatosan világítsanak és gombnyomásra se szakadjon meg a folyamat.
De ha berágok teszek erre is egy LCD kijelzőt!
Mondjuk azt nem értem, hogy minek kell ekkora program a szenzor beállításához, kiolvasásához, beállításához.
Mert láttam több programot is ami ilyen hőmérséklet szenzort használ de sokkal rövidebb a progija.
itt van egy, ami szegmens kijelzőhöz van és rövid, pedig a kijelzést is vezérli.
Dim Digit1 As Byte
Dim Digit2 As Byte
Dim N As Byte
Dim Teller As Byte
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Const Display1 = &B00000100
Const Display2 = &B00001000
Declare Sub Convert(number As Byte)
Declare Sub Readtemp(tempmsb As Byte)
Config Portb = Output
Config Portd = Output
Config Sda = Portd.1
Config Scl = Portd.0
Loop:
Call Readtemp(tempmsb)
For Teller = 1 To 20
Call Convert(tempmsb)
Waitms 5
Next Teller
Goto Loop
End 'end program
Digits:
Data &H02 , &H9E , &H24 , &H0C , &H98 , &H48 , &H40 , &H1E , &H00 , &H08
Sub Readtemp(tempmsb As Byte)
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
Sub Convert(number)
N = Number Mod 10
Digit1 = Lookup(n , Digits)
Portd = Display1
Portb = Digit1
Waitms 5
N = Number \ 10
Digit2 = Lookup(n , Digits)
Portd = Display2
Portb = Digit2
Waitms 5
Portd = 0
End Sub Convert
Más:
Kipróbáltam a megszakítást is a 4 digites kijelzőmnél, de nem boldogulok vele.
Csináltam egy kijelzési ciklust, ami kiírja a szegmensekre egymás után a számokat, eddig jó. Az INT0 és INT1 lábakra csináltam meg a megszakítást.
Most csak azt próbáltam ki, hogy ha a kijelzőn világítanak a számok pl.: 0000, akkor, ha megnyomom a gombot megszakad a folyamatos kijelzés az egyik szám felvillan, ahol éppen járt a kijelzés és utána ment minden rendesen. Ez valahogy nem úgy működik, ahogy elképzeltem.
Én azt szeretném, hogy a számok folyamatosan világítsanak és gombnyomásra se szakadjon meg a folyamat.
De ha berágok teszek erre is egy LCD kijelzőt!
Mert láttam több programot is ami ilyen hőmérséklet szenzort használ de sokkal rövidebb a progija.
itt van egy, ami szegmens kijelzőhöz van és rövid, pedig a kijelzést is vezérli.
Dim Digit1 As Byte
Dim Digit2 As Byte
Dim N As Byte
Dim Teller As Byte
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Const Display1 = &B00000100
Const Display2 = &B00001000
Declare Sub Convert(number As Byte)
Declare Sub Readtemp(tempmsb As Byte)
Config Portb = Output
Config Portd = Output
Config Sda = Portd.1
Config Scl = Portd.0
Loop:
Call Readtemp(tempmsb)
For Teller = 1 To 20
Call Convert(tempmsb)
Waitms 5
Next Teller
Goto Loop
End 'end program
Digits:
Data &H02 , &H9E , &H24 , &H0C , &H98 , &H48 , &H40 , &H1E , &H00 , &H08
Sub Readtemp(tempmsb As Byte)
'start convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
'-------------
'read temperature
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
Sub Convert(number)
N = Number Mod 10
Digit1 = Lookup(n , Digits)
Portd = Display1
Portb = Digit1
Waitms 5
N = Number \ 10
Digit2 = Lookup(n , Digits)
Portd = Display2
Portb = Digit2
Waitms 5
Portd = 0
End Sub Convert
Más:
Kipróbáltam a megszakítást is a 4 digites kijelzőmnél, de nem boldogulok vele.
Csináltam egy kijelzési ciklust, ami kiírja a szegmensekre egymás után a számokat, eddig jó. Az INT0 és INT1 lábakra csináltam meg a megszakítást.
Most csak azt próbáltam ki, hogy ha a kijelzőn világítanak a számok pl.: 0000, akkor, ha megnyomom a gombot megszakad a folyamatos kijelzés az egyik szám felvillan, ahol éppen járt a kijelzés és utána ment minden rendesen. Ez valahogy nem úgy működik, ahogy elképzeltem.
Én azt szeretném, hogy a számok folyamatosan világítsanak és gombnyomásra se szakadjon meg a folyamat.
De ha berágok teszek erre is egy LCD kijelzőt!
-
Robert
Az I2C busz bizgetése is a interrupt alatt történik, fogadjunk:)
Amúgy a kijelző hogy ne vibráljon (ha időosztással több 7szegmensest vezérelsz, legalább 16Hz/kijelzővel kell menni. Ez 4 digit esetén 16*4 ~ 75Hz.
Ezt én a timerre raknám hogy _mindenképp_ ne szakadjon meg (ugyis 1 port állítás, így gyors lehet. Az interrupt részen csak 1 bitet billentenék be (jelzőbit) amit a fő programmagban le lehetne kezelni....
Az I2C esetén az ack után 80 msec várakozás van! (legalábbis a beépített I2C esetén). Nem próbáltam, mailban kaptam én is hogy ilyen márpedig van. Nálam ilyen kritikus még nem kellett....
De a Timeren lógjon a kijelzés és az inten csak jelzőbitállítás. Ha meg pofátlan vagy:) akkor egy Tiny2313 a kijelzőkkel elmolyolgat, és soros buszán át átküldöd mit írjon ki. Még mindíg olcsóbb mint egy LCD:).
És kétprocesszoros rendszered lesz:)
Amúgy a kijelző hogy ne vibráljon (ha időosztással több 7szegmensest vezérelsz, legalább 16Hz/kijelzővel kell menni. Ez 4 digit esetén 16*4 ~ 75Hz.
Ezt én a timerre raknám hogy _mindenképp_ ne szakadjon meg (ugyis 1 port állítás, így gyors lehet. Az interrupt részen csak 1 bitet billentenék be (jelzőbit) amit a fő programmagban le lehetne kezelni....
Az I2C esetén az ack után 80 msec várakozás van! (legalábbis a beépített I2C esetén). Nem próbáltam, mailban kaptam én is hogy ilyen márpedig van. Nálam ilyen kritikus még nem kellett....
De a Timeren lógjon a kijelzés és az inten csak jelzőbitállítás. Ha meg pofátlan vagy:) akkor egy Tiny2313 a kijelzőkkel elmolyolgat, és soros buszán át átküldöd mit írjon ki. Még mindíg olcsóbb mint egy LCD:).
És kétprocesszoros rendszered lesz:)
-
Robert
Nos átrágtam a programodat, most épp 2 hőmérőIC-vel játszom.
A programodat végigolvasva, nagy része nincs is használva:)
A TCN75 IC alapértelmezetten (a TCN75A is) szépen kiolvasható I2C buszon, nem kell piszkálni a config biteket.
A lényeg:
I2Cstart
I2Cwrite chip_címe
i2cWrite Configbit 'ez &H00
i2cread msbbyte,ack 'Ez a felso bit
i2cread, lsbbyte,nack 'Ez az also bit
i2cstop
Szóval ennyi a program lényege (lefordítva ~300 byte). Nálam LCD kijelző(4*16)+8kbyte EEPROMba adatmentés+sorosport adatküldés esetén maga a program "csicsázva" ~1,5 kbyte.
A programodat végigolvasva, nagy része nincs is használva:)
A TCN75 IC alapértelmezetten (a TCN75A is) szépen kiolvasható I2C buszon, nem kell piszkálni a config biteket.
A lényeg:
I2Cstart
I2Cwrite chip_címe
i2cWrite Configbit 'ez &H00
i2cread msbbyte,ack 'Ez a felso bit
i2cread, lsbbyte,nack 'Ez az also bit
i2cstop
Szóval ennyi a program lényege (lefordítva ~300 byte). Nálam LCD kijelző(4*16)+8kbyte EEPROMba adatmentés+sorosport adatküldés esetén maga a program "csicsázva" ~1,5 kbyte.
-
Robert
Én az árával nem békéltem meg.
A TCN75 chip (ill LM75/76/79) ~250-300 Ft. A DS1820-as ahol kapható 1200-ért láttam....
Mondjuk a M16 panelen ott a helye, de nem akarom beültetni. Ahhoz sztem draga egy kicsit a chip. Mondjuk 4-500 Ft amit max. ér. Mindjuk az 1Wire előnye, hogy 3 vezeték elég (+5V/GND/adat). Viszont hátrány pl ipari sorozatnál), hogy a felfűzöttek esetén tudni kell előre a sorozatszámot, mert az ugye chipenként változik:))). Így a bővítés/csere macerás lehet. vagy a programba bele kell írni, hogy lekérdezze a teljes buszt hogy ki van rajta.....(ez meg ugye kódpazarlás...) Ha az eepromba rakja a serialt, akkor valamivel előrébb lehet lenni....
A TCN75 chip (ill LM75/76/79) ~250-300 Ft. A DS1820-as ahol kapható 1200-ért láttam....
Mondjuk a M16 panelen ott a helye, de nem akarom beültetni. Ahhoz sztem draga egy kicsit a chip. Mondjuk 4-500 Ft amit max. ér. Mindjuk az 1Wire előnye, hogy 3 vezeték elég (+5V/GND/adat). Viszont hátrány pl ipari sorozatnál), hogy a felfűzöttek esetén tudni kell előre a sorozatszámot, mert az ugye chipenként változik:))). Így a bővítés/csere macerás lehet. vagy a programba bele kell írni, hogy lekérdezze a teljes buszt hogy ki van rajta.....(ez meg ugye kódpazarlás...) Ha az eepromba rakja a serialt, akkor valamivel előrébb lehet lenni....
-
Vendég
Robert írta:Én az árával nem békéltem meg.
A TCN75 chip (ill LM75/76/79) ~250-300 Ft. A DS1820-as ahol kapható 1200-ért láttam....
Mondjuk a M16 panelen ott a helye, de nem akarom beültetni. Ahhoz sztem draga egy kicsit a chip. Mondjuk 4-500 Ft amit max. ér. Mindjuk az 1Wire előnye, hogy 3 vezeték elég (+5V/GND/adat). Viszont hátrány pl ipari sorozatnál), hogy a felfűzöttek esetén tudni kell előre a sorozatszámot, mert az ugye chipenként változik:))). Így a bővítés/csere macerás lehet. vagy a programba bele kell írni, hogy lekérdezze a teljes buszt hogy ki van rajta.....(ez meg ugye kódpazarlás...) Ha az eepromba rakja a serialt, akkor valamivel előrébb lehet lenni....
Egy apró helyesbítés : az 1 wire az tényleg csak egy drót. (Na jó kettő, mert kell neki a gnd is)