Forum: Mikrocontroller und Digitale Elektronik i2c problem


von Hias (Gast)


Angehängte Dateien:

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

von Hias (Gast)


Lesenswert?

keiner eine idee?
Pullups auf der 3V-Seite und 5V sind 4,7K.
Sind die ok?

von Bernhard S. (bernhard)


Lesenswert?

Schau mal nach unter:

http://www.mikrocontroller.net/forum/read-4-246060.html

Vielleicht findest Du dann einen Fehler?

von Hias (Gast)


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

von Bernhard S. (bernhard)


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

von Hias (Gast)


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?

von Bernhard S. (bernhard)


Lesenswert?

Was brachte denn diese Prüfung?

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

von Hias (Gast)


Lesenswert?

Ich habe den Fehler gefunden!
Ein Low ging nicht vom sensor zum µC durch.
Andersrum schon!

Fet erneuert und scho gehts.

Danke nochmal

von Bernhard S. (bernhard)


Lesenswert?

Prima, freut mich,

meine Bankverbindung gebe ich Dir später ;)

Vielleicht könntest Du dieses interessante Projekt und Deinen
Assembler-Code mal hier veröffentlichen?

Wo hast Du den DS620 her? Und was kostet er?

von Hias (Gast)


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

von Bernhard S. (bernhard)


Lesenswert?

Gern geschehen,

Wo hast Du den DS620 her? Und was kostet er?

Bei Reichelt habe ich ihn nicht gefunden.

von Hias (Gast)


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

von Hias (Gast)


Angehängte Dateien:

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

von Bernhard S. (bernhard)


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.

von Bernhard S. (bernhard)


Lesenswert?

Noch ein kleiner Tipp.

Lass Dir mal den Pegel der SCL und SDA-Leitung durch 2 einfache LED
anzeigen.
(LED über Vorwiderstand von +5V an die beiden PINS des µC).

Kann manchmal ganz hilfreich bei der Fehlersuche sein

von Hias (Gast)


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

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von Hias (Gast)


Lesenswert?

Ich glaubs nicht...
ER geht und das jetzt definitiv...
Der Fehler? Darüber schweige ich lieber ; )
-> in die Ecke gehe zum schämen : )

So jetzt noch Taster dran und fertig...

von Bernhard S. (bernhard)


Lesenswert?

>ER geht und das jetzt definitiv...

wohin geht er denn, Richtung Sondermüll?   ;)

Woran lag es denn?

von Hias (Gast)


Lesenswert?

man sollte das datenblatt genauer lesen...
speziell den abschnitt über mindest-versorgungsspannung...

: (


: D

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.