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
@Bastler: 10nF sowohl als auch angebracht. @Dirk: ok, hab ich gemacht. 400 ms nach Stop-Vorgang. Problem besteht aber immer noch...
Das hier in i2c_try_scl ist Unsinn:
1 | while((!SCL) && (start_trials <50)) |
2 | ...
|
3 | if(!SCL) return 0 ; return 1; |
4 | ...
|
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
ach du schreck, stimmt natürlich. jetzt wunderts mich garnix mehr... :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.
ca 100... :) also 12 Busse sollten es schon sein...
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....
Poste doch mal einen Schaltplan und die aktuelle Software.
> 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.
nein funktioniert nicht. das twint wird nie gesetzt. keine ahnung woran das liegt, hab schon verschieden boards und codes ausprobiert....
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.