Forum: Mikrocontroller und Digitale Elektronik LM75 und C-Control


von Christoph H. (Gast)


Lesenswert?

Hallo Alle,

ich habe hier ein seeehr ernstes Problem mit einer C-Control, mit der
ich einen LM75 über I2C auslesen will.

Das Problem ist, dass ich zwar Werte empfange, diese aber immer nur in
2°-Schritten an- und absteigen. Ich kann das einfach nicht
nachvollziehen, zumal der Quelltext OK zu sein scheint.

Here it goes:

scl = 1 'I2C im Ruhezustand
sda = 1
pause t


sda = 0 : pause t 'Start Condition

scl = 0 : pause t


sda = 1 : tog scl : tog scl 'Geräteadresse senden
sda = 0 : tog scl : tog scl
sda = 0 : tog scl : tog scl
sda = 1 : tog scl : tog scl
sda = 0 : tog scl : tog scl
sda = 0 : tog scl : tog scl
sda = 0 : tog scl : tog scl
sda = 1
scl = 1             'Lesemodus
pause t
scl = 0

DEACT sda

' MSB vom I2C Bus lesen

msb = 0

for i=0 to 7

    scl = 1 : pause t

    if sda  then msb = msb or &B00000001

    if sda = 0 then msb = msb and &B11111110

    msb = msb shl 1

    scl = 0 : pause t

next



sda = 0

scl = 1 :  pause t

scl = 0

DEACT sda

pause t

' LSB vom I2C Bus lesen

lsb = 0

for i=0 to 7

    scl = 1 : pause t

    if sda  then lsb = lsb or &B00000001

    if sda = 0 then lsb = lsb and &B11111110

    lsb = lsb shl 1

    scl = 0 : pause t

next



DEACT sda

tog scl : tog scl



sda = 0

scl = 1 : pause t

sda = 1

print msb;
return

"Print msb" gibt immer nur Werte in Zweierschritten aus, also 20, 22,
24 etc.

Hat jemand eine Ahnung, woher das kommt?

Gruß,

Christoph

von Frank (Gast)


Lesenswert?

Keine Ahnung. Hast Du schon mal ins Datenblatt geschaut? Findest eins
unter Download im http://www.roboternetz.de

von Christoph H (Gast)


Lesenswert?

Klar hab ich da schon geguckt, kannst ja selber nochmal nachssehen, hier
issen Link:
http://www.lysator.liu.se/~alla/files/lm78_stuff/LM75.pdf
mfg

von thkaiser (Gast)


Lesenswert?

Hmmm-ich hab ne Idee:
Du liest ein Bit, AND oder OR-st es in "msb" rein und shiftest dann.
Das würde bedeuten, daß ein Bit, daß in Bit0 des "msb"
reingeAND/OR-ed wird, automatisch nach dem Shift an der Stelle von Bit1
steht. Bit0 von MSB ändert sich nie, da es immer wieder durch den
shift-Befehl gelöscht wird. Setze den shl - Befehl an den Anfang der
Schleife, dann sollte es funktionieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.