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
Schau mal nach unter: http://www.mikrocontroller.net/forum/read-4-246060.html Vielleicht findest Du dann einen Fehler?
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
>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
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?
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?
Ich habe den Fehler gefunden! Ein Low ging nicht vom sensor zum µC durch. Andersrum schon! Fet erneuert und scho gehts. Danke nochmal
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?
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
Gern geschehen, Wo hast Du den DS620 her? Und was kostet er? Bei Reichelt habe ich ihn nicht gefunden.
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
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
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.
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
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
...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
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...
>ER geht und das jetzt definitiv...
wohin geht er denn, Richtung Sondermüll? ;)
Woran lag es denn?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.