Fórum témák

» Több friss téma
Fórum » LM75 és LM75A használata
Lapozás: OK   1 / 1
(#) HiMen hozzászólása Márc 3, 2016 /
 
LM75 hőmérő IC-t használok jó ideje BS2SX mikrovezérlővel. Most úgy alakult, hogy LM75A -IC-t kaptam. Ugyan úgy bekötöm, de ezzel nem működik. Ugyan azt az értéket küldi változatlanul, de minden bekapcsoláskor más az érték. (mindent lecseréltem már, akkor sem megy).
Mi lehet a gond? Szerintem valahogy másképp kell programozni...? Tud valaki segíteni? Hátha kiszúrná valaki a hibát, ami elkerülte a figyelmemet.

Íme a program:

' {$STAMP BS2sx} ' BS2SX mikrokontrollert használunk
' {$PBASIC 2.5} ' A 2.5-ös nyelv utasításait használjuk

I2CSCL CON 12
I2CSDA CON 13
I2CBuff VAR Byte
I2CCommand VAR Byte
I2CData VAR Byte
I2CDA VAR Byte

Reg_hi VAR Byte ' A felső regiszter
Reg_lo VAR Byte ' Az alsó regiszter
Buffer VAR Byte ' Ebben tároljuk majd az ideiglenes adatokat

' ------------------------------------
ujra:


GOSUB Register_Read
DEBUG "Homerseklet: ", DEC Reg_hi, " ", DEC Reg_lo, CR
PAUSE 500
GOTO ujra

' ---------------------------------------------------------------------------------------
Register_Read:
GOSUB I2C_Start

Buffer = %10010010 ' Slave address: 1001, Az LM75 címe:001, Írási művelet: 0
GOSUB I2COutByte ' Kiküldjük a Buffer értékét
Buffer = %00000000 ' Pointer beállítása:az utolsó 2 bit:00 => hőmérséklet-leolvasás
GOSUB I2COutByte ' Kiküldjük a Buffer értékét

GOSUB I2C_Start ' Restart következik, mivel egy újabb címet küldünk.

Buffer = %10010011 ' Slave address: 1001, Az LM75 címe:001, Olvasási művelet: 1
GOSUB I2COutByte ' Kiküldjük a Buffer értékét

GOSUB I2CInByte ' Beolvasunk egy byte-ot, és
Reg_hi=Buffer ' elmentjük azt a Reg_hi - ban.

LOW I2CSDA ' Nyugtázik, hogy vettük az adatot. Ack-jel: I2CSDA alacsony.
HIGH I2CSCL ' Ezt egy órajelciklussal kivisszük: Először 1-re majd
LOW I2CSCL ' 0-ra állítjuk az SCL-vonalat.


GOSUB I2CInByte ' Beolvasunk egy újabb byte-ot,
Reg_lo=Buffer ' s ezt a Reg_lo - ban tároljuk.

HIGH I2CSDA ' Mivel mind a két regiszter olvasása megörtént, nem küldünk
HIGH I2CSCL ' Ack jelet az LM75-nek.
LOW I2CSCL '

GOSUB I2C_Stop ' STOP állapotba térünk át...
RETURN
' ---------------------------------------------------------------------------------------
I2C_Start: ' A hőmérő STOP állapotának megszakítása.
OUTPUT I2CSDA ' Az I2CSDA vonalat és
OUTPUT I2CSCL ' az I2CSCL vonalat is kimenetre állítjuk.
PAUSE 300 ' A két egymást követő mérés között várunk
HIGH I2CSDA ' Mindkét vonalat magas szintre állítjuk. Ha az IC STOP állapotban
HIGH I2CSCL ' volt, akkor eddig is magasak voltak, ami nem baj...
LOW I2CSDA ' A START állapot előállításához előbb az SDA,
LOW I2CSCL ' majd az I2CSCL vonalakat állítjuk 0-ra.
RETURN
' ---------------------------------------------------------------------------------------
I2C_Stop: ' Az I/O műveletek vége után a STOP állapotba váltunk
OUTPUT I2CSDA ' Az I2CSDA vonalat kimenetre állítjuk
HIGH I2CSCL ' Az I2CSCL vonalat, majd pedig
HIGH I2CSDA ' az I2CSDA vonalat is 1 re állítjuk.
RETURN
' ---------------------------------------------------------------------------------------
I2CInByte: ' Egy byte beolvasása I2C-n
SHIFTIN I2CSDA, I2CSCL, MSBPRE, [Buffer] ' Az I2C-n érkező adatok Buffer-be mentése
OUTPUT I2CSDA ' Az I2CSDA vonalat kimenetre állítjuk, hogy Ack jelet küldhessünk
RETURN
' ---------------------------------------------------------------------------------------
I2COutByte: ' Egy byte kiküldése I2C-n
SHIFTOUT I2CSDA, I2CSCL, MSBFIRST, [Buffer] ' A Bufferben tárolt byte kiküldése I2C-n
LOW I2CSDA ' I2CSDA vonalat 0-ra állítjuk
INPUT I2CSDA ' Bemenetre váltunk, mert az IC Ack jelet fog adni
HIGH I2CSCL ' Előállítunk egy órajelciklust
LOW I2CSCL ' 1-re, majd 0-ra állítjuk az órajel-vonalat
RETURN
(#) kaqkk válasza HiMen hozzászólására (») Márc 3, 2016 /
 
Töltsd le mindkét adatlapot és hasonlítsd össze , majd a különbségek megmutatják mit kell változtatnod a programon
(#) HiMen válasza kaqkk hozzászólására (») Márc 3, 2016 /
 
Azon már túl vagyok! Összehasonlítottam. Nem látok különbséget.

Csak majd a beolvasott adatot kell máshogy átszámítani. De attól még a beolvasott adatnak változnia kellene a hőmérsékletre...
(#) Hp41C válasza HiMen hozzászólására (») Márc 4, 2016 /
 
Kell még egy harmadik is: I2C Bus Specification
Mekkora sebességgel megy az a BS2SX? Mennyi idő telik el pl. az I2C_START subrutinben a HIGH I2CSCL és a LOW I2CSDA között? A sopecifikáció szerint standard módban min. 4 .. 4.7uS -nek kell lennie az SCL magas ill. alacsony szint idejének, min. 4.7 us -nak a START előkészítési idejének,...
(#) HiMen válasza Hp41C hozzászólására (») Márc 4, 2016 /
 
Nem túl gyors, a 1 wire IC-ket nem is tudom vele kiolvasni...

A régi LM75 IC-ket a fenti program gond nélkül olvassa. Csak az LM75A (kínából rendelteket) nem.

Most betettem minden sor elé egy 10 mS -os késleltetést. Az LM75 továbbra is megy az LM75a továbbra sem... Kiír két számot és az változatlanul marad...
(#) HiMen válasza Hp41C hozzászólására (») Márc 4, 2016 /
 
Te, ez mér!
Ha bekapcsolom 21 192 -őt ír ki.
Ha ráteszem az ujjamat akkor 26 160 -at.
hagyom lehülni, megint 21 192 -őt.

Csak nem mér újra a működése alatt. Mondom én, hogy szoftveres gond van, valamit másképp kell az A szériánál... De vajon mit?
Tehát nem csinál újabb mérést a működése alatt.
(#) HiMen válasza HiMen hozzászólására (») Márc 4, 2016 /
 
Megvan!

A két kiolvasás és a stop között maradt ez:
HIGH I2CSDA
HIGH I2CSCL
LOW I2CSCL

Kiszedtem és működik! Érdekes, hogy az LM75 eltűrte a dolgot, de az A már nem...

Köszönöm aki foglalkozott vele!
(#) _JANI_ hozzászólása Dec 25, 2018 /
 
Sziasztok!
Csak az lenne a kérdésem, hogy az LM75-ből kiolvasott adatokból hogyan lesz valós kijelezhető decimális érték. A pozitív mérési adatokkal még csak tudnék valamit kezdeni, csak a negatív értékek átváltását nem értem.
Lásd: LM75-ös adatlapján a 12. oldalon a táblázatot. ( Link. )
(#) bitmixer válasza _JANI_ hozzászólására (») Dec 25, 2018 / 1
 
Nem tudom, válasz-e a kérdésedre, de ha jól megnézed, a negatív hőmérsékletek legfelső bitje 1.
Ezt levágod, megjegyzed "-" előjelnek, a maradék 8 bitet meginvertálod, hozzáadsz 1-et, és máris megvan az eredmény. Innentől azonos a dolog a pozitív értékekkel.
Ezt kérdezted?
A hozzászólás módosítva: Dec 25, 2018
(#) _JANI_ válasza bitmixer hozzászólására (») Feb 4, 2019 /
 
Igen ez volt a kérdés! Köszönöm.

A módszer a Kettes komplemens képzés: Link .
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem