Forum: Mikrocontroller und Digitale Elektronik LM75 mit Software TWI auslesen (Atmega 16, C)


von Simon (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Bastler (Gast)


Lesenswert?

100n direkt am Mega16 und einen am LM75?

Bei mir gab es Probleme ohne 100nF direkt am LM75.

von Dirk K. (dirk_k)


Lesenswert?

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

von Simon (Gast)


Lesenswert?

@Bastler: 10nF sowohl als auch angebracht.

@Dirk: ok, hab ich gemacht. 400 ms nach Stop-Vorgang. Problem besteht 
aber immer noch...

von MWS (Gast)


Lesenswert?

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.

von Simon (Gast)


Lesenswert?

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...

von MWS (Gast)


Lesenswert?

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 ?

von Simon (Gast)


Lesenswert?

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..

von MWS (Gast)


Lesenswert?

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 ?

von MWS (Gast)


Lesenswert?

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

von Simon (Gast)


Lesenswert?

ach du schreck, stimmt natürlich. jetzt wunderts mich garnix mehr... :D

von Simon (Gast)


Lesenswert?

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

von remote1 (Gast)


Lesenswert?

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.

von Simon (Gast)


Lesenswert?

ca 100... :) also 12 Busse sollten es schon sein...

von Simon (Gast)


Lesenswert?

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....

von Lehrmann M. (ubimbo)


Lesenswert?

Poste doch mal einen Schaltplan und die aktuelle Software.

von MWS (Gast)


Lesenswert?

> 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 ;-) ?

von Simon (Gast)


Lesenswert?

nein, hab nix vertauscht.

wenn alles fertig ist, sollens etwa 100 LM75 werden..

anbei der screenshot.

verkabelung ist ziemlich sicher ziemlich richtig... :)

von Simon (Gast)


Angehängte Dateien:

Lesenswert?

hier der screenshot

von MWS (Gast)


Angehängte Dateien:

Lesenswert?

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...

von Simon (Gast)


Lesenswert?

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.

von Simon (Gast)


Lesenswert?

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.

von MWS (Gast)


Lesenswert?

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.

von Simon (Gast)


Lesenswert?

nein funktioniert nicht. das twint wird nie gesetzt. keine ahnung woran 
das liegt, hab schon verschieden boards und codes ausprobiert....

von MWS (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.