Forum: Mikrocontroller und Digitale Elektronik LM75 und C-Control


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.