Interrupt-Problem (TSic und ZACwire)

Gast #755726
Lesenswert?
• ▲
▼
Kann man in ATMega-Interrupts andere Interrupts ein/ausschalten? Im 
angehängten Code scheint das nicht zu funktionieren. Ich benutze 
abwechselnd Pin-Change-Interrupt und Timer-Interrupt, um den Beginn 
eines Bits zu finden (Pin-Change) und dann dessen Mitte abzuwarten 
(Timer-Interrupt). Die beiden Interrupts sollen sich abwechselnd 
gegenseitig einschalten.

Der Code soll das ZACWire-Protokoll per Interrupts einlesen. 
ZACwire-Sensoren senden Pakete mit 20 Bit. Jedes Bit-Fenster beginnt mit 
einem Wechsel von High auf Low. Dafür nehme ich den Pin-Change-Interrupt 
des ATMega644, Pin B1. Ca 60us später ist das Signal entweder auf High 
gegangen oder Low geblieben - dementsprechend ist es ein 1-Bit oder ein 
0-Bit. Das Bit-Fenster endet nach 125us, bis zu dem Zeitpunkt ist das 
Signal auf jeden Fall High gegangen.

Mein Code - Wechsel zwischen Pin- und Timer-Interrupt (angehängt) - 
funktioniert nur ein Bit lang. Es sieht so aus, als ob der Timer-Code 
den Pin-Change-Interrupt nicht wieder aktivieren kann.
Angehängte Dateien:
#759052
Lesenswert?
• ▲
▼
ich kann kein C und darum kann ich nicht unmittelbar helfen. Ich habe 
das in assembler programmiert, aber noch nicht getestet. Darum einige 
kleine Anregungen:

Die Zeit von 125µs muß nicht stimmen und muß daher gemessen werden. Ich 
denke , diese Zeit wird wohl temperaturabhängig sein und 
fertigungstechn. immer etwas anders.

Pin Change verwende ich nicht ganz so gerne, weil jede kleine Störung 
schon einen PinChange verursachen kann. Aber das könnte auch von der 
Anwendung und deren Umgebung abhängen.

Eine Interruptfreigabe habe ich nicht gefunden. Müßte irgendwas mit SEI 
zu tun haben.

daran gedacht, daß auch die Zwischenflankenwechsel einen Interrupt 
auslösen können?

Ich habe das etwas einfacher gemacht, indem ich auf die erste halbe 
Bitzeit warte und dann jeweils mit der Bitzeit auf die nächsten Samples 
warte. dadurch gibt es evtl. eine Fehlerfortpflanzung, die aber bis zum 
Ende noch gerade im Rahmen liegen müßte. Ob das so funktioniert kann ich 
noch nicht sagen. Der Anfang der Bitzeit braucht dabei nicht gesondert 
abgefragt werden.
Zu Anfang muß eine längere Wartezeit erfolgen. Ist diese berücksichtigt?

mfg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.