Forum: Mikrocontroller und Digitale Elektronik I2C Beispielprogramme für AT89C5131


von Werner Salcher (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!
Habe mir eine Testplatine für den AT89C5131 gebaut! Funktioniert echt
super!
Ich habe auch mit dem I2C- Anschluss experimentiert (I2C Baustein PCF
8574 8 bit I/O- Baustein). Habe mir dazu ein Beispielprogramm von der
ATMEL- Seite besorgt. Funktioniert!!!!

Meine Frage:
Ich habe mir auch den LM75 (Temeratursensor auf I2C- Basis) gekauft.
Wie kann ich den Temperaturwert des LM75 abfragen.
Ich kann nach dem Senden der Slaveadresse einen Wert auslesen (z.B beim
PCF 8574). Beim LM75 muss ich aber nach dem Senden der Slaveadresse zwei
Werte zurück lesen. Wie geht das???
Gibt es dazu für den AT89C5131 irgendwo Beispielprogramme???
Das selbe Problem habe ich natürlich auch wenn ich einen I2C- Slave
habe, bei dem ich zwei oder drei Werte nach dem Senden der Slaveadresse
senden möchte.

Vielleicht hat jemand schon ein C-Programm für mein Anliegen
geschrieben.

Danke für Eure Hilfe!

Werner

von Michael Jungnickl (Gast)


Lesenswert?

Hallo Werner,

der LM75 Chip hat verschiedene Register. Achtung: Dabei wird die
Adresse des anzusprechenden Registers nicht direkt übergeben. D.h. du
musst sie zuerst einstellen. Anschließend kannst du jeweils entweder
auf die Temperatur (Faktor 2 falsch) oder einen der beiden Hysterese
Werte zugreifen, oder auf das Configurations Register. Dazu gibt es für
den LM75 auch eine Anleitung (von National Semiconductors?) mit genauer
Aufschlüsselung der Bitfelder. Am i2c Bus ist noch wichtig, dass du
kein Stopp-Bit zwischen zwei 8 Bit Werten schickst, wenn diese einen 16
Bit Wert (z.B. Temperatur) bilden! Deshalb brauchst du für 16 Bit eine
andere Funktion als für 8 Bit.

Tschüß

Michael Jungnickl

von Jörg (Gast)


Lesenswert?

Sieh mal hier nach, ist zwar in Assembler,
aber sehr gut kommentiert.

http://sprut.de/electronic/pic/programm/thermo75/thermo75.htm

Wenn ich das Datenblatt des LM75 und den Code von Sprut richtig
gelesen
habe, musst Du direkt nach dem Empfang des 1. Bytes ein ACK statt
des Stopp-Bits senden und erneut ein Byte vom LM75 abfragen, welches
dann den 0.5°C-Wert darstellt - dann kommt das Stopp-Bit

(Hoffentlich war das richtig)

Hinweis: Sprut benutzt zwei Functionen für die beiden Bytes,
aber das wirst Du schon sehen.

Tschö JoJo

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.