Hallo!
Ich versuche seit Tagen, dem LM75 vernünftige Temperaturwerte zu
entlocken. Leider scheitert es schon daran, dass der IC wie tot scheint.
Ich bekomme weder ein ACK noch Datenbits auf den Bus.
Ich verwende ein Atmega 16, programmiere mit AVR Tools 4.0 und WINAVR
und benutze die Funktionen aus diesem Thread
Beitrag "I2C-Master [ohne TWI (Softwarelösung) für die ATMEGAs"
zum Debuggen hab ich ein OSZI sowie die Simulationsumgebung von AVR
Studio.
4.7k Pullups an SDA und SCL sind genauso verbaut wie ein 100nF C
zwischen VCC und GND. SCL Frequenz liegt bei ca 10kHz. Anbei ist das
Oszi-Bild, den Code hab ich auch nochmal dazu gepackt..
Die Bitfolge, die vom atmega auf den Bus gelegt wird, sieht vernünftig
aus, es fehlt, wie gesagt nur die antwort vom LM75. Adressbits sind alle
auf GND, also 000. das Adressbyte im ganzen sieht so aus: 0b10010001.
Hallo Simon,
das LM75 muß immer eine Pause (Wandlerzeit, Datenblatt) zwischen den
einzelnen Auslesevorgängen haben. Ich hatte das gleiche Problem und mein
Testprogramm sah ähnlich aus, nachdem ich ein Delay eingefügt hatte
kamen korrekte Temperaturwerte.
Gruß Dirk
Wenn exterene Pullups dran sind, dann könnte das Umschalten des I2C_PORT
raus, es reicht dann in der i2c_master_init einmal I2C_PORT &= ~(1<<SDA)
drin zu haben.
ok, aber das löst mein problem immer noch nicht.. hab alles nochmal
überprüft. temperaturschonend gelötet, verdrahtung doppelt und dreifacht
kontrolliert. kann also eigentlich nur ein softwareproblem sein...
Hast Du das (!SCL) Problem behoben ? Denn das verhindert die richtige
Funktion zumindest eines Codeteils, allerdings ob das den Totalausfall
zur Folge hat, kann ich nicht sagen. Alternativ mit HW TWI probiert ?
das mit dem (!SCL) hat doch nur zur folge, dasss die clock länger auf
low gehalten wird sowie, dass beim starten länger gewartet wird. problem
ist aber immer noch, auch wenn ich die i2c_try_scl komplett
auskommentiere..
Die Prüfung auf SCL ist dazu da, um dem Slave Clockstretching zu
ermöglichen, nur hat's der Autor falsch geschrieben.
Du hast es ausgebessert und nochmal versucht ?
Ich sehe keinen Sinn darin, es auszukommentieren. Jedoch wenn es
auskommentiert wird, dann sollte sich der Clock auf ca. 90kHz erhöhen
(was der Baustein auch locker kann), nochmal nachgemessen ?
Schau mal hier:
I2C Master Interface
http://homepage.hispeed.ch/peterfleury/avr-software.html
Das ist Code der auch funktioniert und nicht Zusammengefrickeltes von
jemand der wie beim "!SCL" nicht merkt, daß wenn er den Pin abfragen
will, nicht die Pinnummer prüfen darf.
Du hast sicher gesehen, daß SCL = PC0 = 0 und damit while((!0) &&
(start_trials <50)) draus wird, was von der Programmlogik recht sinnfrei
ist. Das würde mein Vertrauen zum Rest des Codes doch ein wenig
erschüttern.
Immerhin mit lustigem Überraschungseffekt, je nachdem ob SCL als Pin0
oder >= Pin1 definiert ist, funktioniert der Code anders. Nur nie, wie
er soll :D
danke auch für den link. allerdings hab ich die hw-twi nicht zum laufen
bekommen, weil ich probleme mit dem twint hatte, was nie gesetzt wurde
und andererseits erfordert mein projekt die sotwarelösung, weil ich
ziemlich viele lm75 abfragen muss...
hat jemand ne adäquate sw lösung parat? hab nich so viel brauchbares
gefunden... thx
Simon schrieb:> hat jemand ne adäquate sw lösung parat?
Ich hätte eine HW Lösung parat die schon seit längerem mit einem DS75LV
läuft. Wie viele Sensoren brauchst du denn? Beim LM75 kann man ohne
Probleme bis zu 8 Sensoren an einen µC mit HW-TWI auslesen.
so, ich hab jetzt die soft-i2c von fleury zum laufen bekommen, bitmuster
sieht genauso aus auf dem oszi wie zuvor, aber ich krieg immernoch kein
ack oder daten....
> andererseits erfordert mein projekt die sotwarelösung, weil ich> ziemlich viele lm75 abfragen muss...> hat jemand ne adäquate sw lösung parat? hab nich so viel brauchbares> gefunden...
Du hast ja mittlerweile rausgefunden, daß mein Link die Softwarelösung
war :D
Wieviele LM75 hast Du ?
Besteht die Möglichkeit, daß der Käfer tot ist ?
Kannst Du einen Screenshot posten, die Bits vom Start bis zur ersten ACK
besser aufgelöst ?
Nicht zufällig SCL und SDA vertauscht ;-) ?
nein, hab nix vertauscht.
wenn alles fertig ist, sollens etwa 100 LM75 werden..
anbei der screenshot.
verkabelung ist ziemlich sicher ziemlich richtig... :)
Screnshot sieht ok aus. Hab' auf einem ATM32 eine als funktionierend
bekannte Soft TWI laufen lassen, allerdings ohne LM75, deshalb auch kein
Feedback. Hier mal angehängt.
Hängt der LM75 allein am Bus ? Leitungslänge ?
Alles was über den LM75 zu lesen ist, deutet darauf hin, daß dies ein
recht unkomplizierter Baustein ist.
Versuch' doch vor dem Lesen den Pointer explizit auf das
Temperaturregister zu setzen. Auch wenn der laut DB bereits so steht...
hab jetzt auch n logic analyser angeschlossen und ich bekomme die
gleichen ergebnisse wie in deinem screenshot. dein Adressbyte hat den
Wert 0x91 mit dem Zusatz Read. 0x91 an sich entspricht aber schon dem
8-Bit Adressbyte mit dem gesetzten Read-Bit also 0b10010001. Damit wird
das Read Bit also eigentlich zweimal angegeben, einmal mit dem "Read"
Zusatz und im Hex Wert an sich oder?
habs auch mit dem pointer preset versucht, nutzt auch nichts.
achso, ja hängt alleine dran und die leitung ist im moment vielleicht 30
cm.
hab mir jetzt paar andere ic2 temperatursensoren bestellt, mal sehen ob
die funktionieren.
Kannst Du den LM75 mit der HW TWI austesten ? Schon klar, daß HW TWI
letzten Endes nicht Deine Lösung sein wird, aber wäre interessant
eventuelle Unterschiede im Timing zu sehen.
Zeig' mal einen der von Dir verwendeten Codes für die HW TWI. Hast Du
einen anderen TWI Baustein zum ausprobieren, damit Du feststellen
kannst, woran's hängt ?
Ich weis nicht, was da grundlegend falsch läuft, TWI ist nix besonders
Schwieriges. Kann mir auch nicht vorstellen, daß die LM75 alle defekt
sind. Wieviele hast Du davon zum testen ?
Kannst Du ein aussagefähiges Foto von Deinem Aufbau machen ?