Gast
#1703781
Hallo, ich habe ein absolut seltsames Verhalten mit einem Atmega88 (AVRStudio 4.18). Der Atmega liest die Temperatur von einem TSIC506-Temperatursensor. Dieser sendet die Daten über das Zacwire-Protokoll (1-wire). Er sendet ca. alle 97.3 ms 2 Datenbytes (+Parity), das dauert dann ca. 2.7 ms. Vor jedem Datenbyte sendet er eine "Strobe Time" im Startbit. Dh. die Zeit zwischen fallender Flanke und steigender Flanke ist die Zeit nach der die folgenden Bits gesampelt werden sollen. Hierzu benutze ich jetzt 2 Interrupts (INT0 und TIMER1_COMPA_vect). Nach der Synchronisation (sicherstellen daß wir uns gerade in den 97ms befinden in denen Funkstille herrscht) beginnt daß samplen der Daten. Nun wird INT0 auf fallende Flanke gesetzt, COMPA ist aus. Bei der ersten fallenden Flanke (Startbit) wird der Timer zurückgesetzt, INT0 auf steigende Flanke. Bei der steigenden Flanke wird der Timer ausgelesen(=Strobetime) und der Wert gespeichert. INT0 wird wieder auf fallende Flanke gesetzt. Bei der nächsten fallenden Flanke (=1. Datenbit) wird INT0 abgeschaltet und COMPA mit der gespeicherten Strobetime initialisiert. Der Timer feuert nun nach Strobetime, das Bit wird gesampelt, COMPA abgeschaltet und INT0 wieder auf fallende Flanke. Das ganze Spiel wiederholt sich jetzt bis alles eingelesen ist. Das ganze funktioniert auch wunderbar, auch das auslesen der Werte über I2C funktioniert. Es gibt nur ein Problem: Das Programm soll in der main-loop noch was anderes machen. Solange die mainloop leer ist funktioniert alles wunderbar. Sobald ich aber nur einen simplen Befehl wie temp=1; ausführe treten sehr oft Parityfehler auf, dh. es werden nicht alle Bits richtig gesampelt. Das kann wohl nur damit zusammenhängen daß die Interrupts verzögert ausgeführt werden. Bei der Zuweisung temp=0 tritt das Problem seltsamerweise nicht auf, wenn ich aber irgendetwas anderes mache als einer Variable den Wert 0 zuzuweisen fangen die Interrupts an zu spinnen ? Den Code kann ich auch gern posten, ich denke aber die Beschreibung ist schneller zu verstehen als der unaufgeräumte Code :) Ich hoffe mal drauf daß ich hier eher eine allgemeine Problematik übersehen habe.