i2c problem

Gast #254164
Lesenswert?

hallo,

ich hab ein seltsames Problem.
Ich versuche ein Thermometer zu bauen.
Hardware: DS620, Mega8, 3*7Segmentanzeige...

Jetzt hab ich folgendes Problem...
Ich kann den Sensor einwandfrei einstellen, also Änderungen im
Config-register des DS620 vornehmen. Schreiben geht also.
Nachdem ich die Temperaturumwandlung gestartet habe, möchte ich
die Temperatur-register auslesen. Und da taucht das Problem auf,
genauer gesagt hier:

;----------------------------------------------------------------------- 
-------
;Receive Date 2bytes
;----------------------------------------------------------------------- 
-------
receive_data_2bytes:

ldi r16, (1<<twint)|(1<<twea)|(1<<twen)
out twcr, r16

r_dat0:

in r16,twcr
sbrs r16, 7
rjmp r_dat0


in receive_h, twdr

ldi r16, (1<<twint)|(1<<twen)
out twcr, r16

r_dat1:

in r16,twcr
sbrs r16, 7
rjmp r_dat1

in receive_l, twdr

ret

Der Mega bleibt immer in der r_dat0: schleife hängen...

Hab Ihr eine Idee warum???
Ach ja der komplette Code is im Anhang...

Danke Hias
Angehängte Dateien:
Gast #254167
Lesenswert?

Danke für den Link!
Hab meinen Code überprüft und um den µC interne Überwachung erweitert.
Mein Code müsste stimmen.
Jetzt drängen sich bei mir folgende Fragen auf:

Kann ich die Schaltung für Lesen und Schreiben verwenden??
Seite 10:
http://www.semiconductors.philips.com/acrobat_download/applicationnotes/AN97055.pdf

Wie lang darf das Kabel sein?
Wie groß sollten die Pullups sein?

Kann evtl der Sensor defekt sein? Schreiben geht.. aber lesen nicht???

Danke Hias
#254168
Lesenswert?

>Kann ich die Schaltung für Lesen und Schreiben verwenden??
>Seite 10:

Ja die Schaltung funktioniert für die Lese-und Schreibzugriffe.

Um einen Hardwarefehler auszuschließen, kannst Du jeweils
einen PIN (SDA/SCL) vom µC und vom Sensor auf Masse legen und somit ein
LOW simulieren.

Liegt / kommt die Pegeländerung beim µC/Sensor an?

>Wie lang darf das Kabel sein?
Richtet sich nach den Kabel-Kapazitäten und der SCL Frequenz und den
Pullups


>Wie groß sollten die Pullups sein?
Manche Sensoren können nur wenige mA (ca. 3mA) schalten.
Gern verwendet man Konstantstromquellen
Gast #254169
Lesenswert?

Danke schon mal...

Ich habe ein normales Modem-Kabel verwendet. Als so ein mit dem ein
Modem an die Telefon-Dose angeschlossen wird. Länge 1,5m.
Is das zu lang?

Pullups hab ich mal ein wenig verkleinert.
2,2K auf der 5V Seite... 1,2K auf der 3V Seite
keine Änderung....

Ich versteh das nicht.... wenn ich Schreiben kann (und das funktioniert
100%) warum geht das dann nicht?
Ich denke dass die Schaltsignale des Sensors nicht ankommen.
Des heist wiederum, dass dieser die anliegenden mA nicht Schalten
kann?
Also Pullups vergrößern? Damit Strom kleiner wird...
Was hat es mit der Konstantstromquelle auf sich?

Kann man einen Defekt eines FETS ausschließen wenn ich schreiben kann?
Gast #254173
Lesenswert?

Ich weiß jetzt übrigens den Fehler des FET's.
Da is noch ne Diode drinen und die war kaputt...
Naja...

Zum Projekt.
Eine simple Anzeige der Temperatur und Steuerung eines Heizstabes ist
das Ziel. Für viele mag das zwar als "überdimensioniert" wirken aber
ich möchle damit mein Ätzbad auf gleicher Temp halten.
Die Einschalt bzw. die Auschalttemperatur wird über zwei Taster
einstellbar. Wenn ich damit fertig bin veröffentliche ich gerneCode und
Schaltplan.

Danke nochmal Bernhard!

Hias
Gast #254175
Lesenswert?

Das war eher ein Glück. Habe ihn und noch zwei von Platinen vom
Elektroschrott. : )
Denke das sich den aber auch als Sample bei Maxim zusenden lassen
kann... Obwohl ich eher nicht der Freund von solchen Geschichten
bin...
Hias
Gast #254176
Lesenswert?

Hallo nochmal!

Ich hab nach wie vor ein Problem....
Manchmal erhalte ich Daten vom Sensor manchmal nicht.
Manchmal geht das Ding einwandfrei, plotzlich fällt es aus. Und es geht
auch nach einem Reset nicht mehr. Nach mehrmaligen Reseten geht es auf
einmal wieder...
Frage:
Sensor kaputt?
Pullups nicht in Ordnung?
Irgendwelche Störungen an dem Verbindungskabel?
CodeFehler?

Was meint ihr?

Hias
Angehängte Dateien:
#254177
Lesenswert?

Hab mal über Dein Assembler-Code geschaut.

Warum Du 2 Interrupts verwendest, kann ich momentan nicht
nachvollziehen?

.org 0x008
rjmp refresh

.org 0x009
rjmp timer0

Kleiner Tipp, um die Usache der Abstürze schneller zu lokalisieren.
Verbessere einfach Deine Fehlerroutinen, damit Du siehst, wo sich das
System aufhängt.
Gast #254179
Lesenswert?

Also wegen den 2 Interrupts...
Ich verwende einen das ich alle 5 sekunden die neue Temperatur
anzeige...
Der andere is für die Multiplexanzeige und für die Taster zuständig...

Ich weiß nicht wie ich an den Fehlerroutinen was ändern soll.
Einerseits soll abgewartet werden bis eine Operation vom Sensor
bestätigt wird. Andererseits is es so das wenn der Sensor aus
irgendwelchen Gründen auch immer diese Bestätigung nicht ausgibt, der
µC  genau an dieser Stelle hängt.
Ich habe übrigens diese schon anders lokalisiert. Das Problem liegt
nach  wie vor beim Lesen der Temperatur aus dem Sensor.
ABER warum geht das Stundenlang wieder gut? Und dann auf einmal nicht
mehr?? Von dem her scheidet für mich ein Softwarefehler aus.
Das einzige was ich mir vorstellen könnte is dass irgendwann sich die
beiden Interrupts in die quere kommen. Allerdings glaube ich zu wissen
dass der Timer1 eine Vorrangstellung gegenüber des Timer0 hat!?

Zu der Fehleranalyse an der SCL bzw. SDA-Leitung...
Was macht SCL wenn keine Daten übertragen werden? (high?)
Was macht SDA wenn keine Daten übertragen werden? (auch high?)

Was ich mir noch vorstellen könnte, dass irgendwas den µC stört...
Was is mit offenen Pins?
Was is mit Handystrahlung?
Funktnetzen...
Können die irgendwie den µC stören?
Hias
#254180
Lesenswert?

...jetzt muss ich alles noch einmal schreiben, da der Server vorhin
nicht wollte..... macht aber nichts

>Ich weiß nicht wie ich an den Fehlerroutinen was ändern soll.

Gerade da sollte man sinvolle Fehlerroutinen einbauen, Du siehst ja,
dass das System sich auch mal aufhängen kann, aus welchen Gründen auch
immer.

In Deinem konkreten Fall, würde vielleicht schon eine Watch-Dog
Überwachung genügen.

Ich lege Dir mal mein momentanes Projekt mit bei (es ist zwar noch
nicht fertig), vielleicht kann ich Dich dadurch etwas inspirieren.

>Allerdings glaube ich zu wissen
>dass der Timer1 eine Vorrangstellung gegenüber des Timer0 hat!?

Der Interrupt mit der niedrigsten Adresse hat immer Vorrang.

>Zu der Fehleranalyse an der SCL bzw. SDA-Leitung...
>Was macht SCL wenn keine Daten übertragen werden? (high?)
>Was macht SDA wenn keine Daten übertragen werden? (auch high?)
Genau, beide führen HIGH - Pegel

>Was ich mir noch vorstellen könnte, dass irgendwas den µC stört...
>Was is mit offenen Pins?
>Was is mit Handystrahlung?
>Funktnetzen...
>Können die irgendwie den µC stören?

Theoretisch ja, desshalb sollte die Software schon einiges ausbügeln
können.

Gruß

Bernhard
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren