www.mikrocontroller.net

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


Autor: Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
100n direkt am Mega16 und einen am LM75?

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

Autor: Dirk K__ (dirk_k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bastler: 10nF sowohl als auch angebracht.

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

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier in i2c_try_scl ist Unsinn:
  while((!SCL) && (start_trials <50))
...
  if(!SCL) return 0 ; return 1;
...

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.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon (Gast)
Datum:

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

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: remote1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ca 100... :) also 12 Busse sollten es schon sein...

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal einen Schaltplan und die aktuelle Software.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-) ?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, hab nix vertauscht.

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

anbei der screenshot.

verkabelung ist ziemlich sicher ziemlich richtig... :)

Autor: Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier der screenshot

Autor: MWS (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon (Gast)
Datum:

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

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.