Forum: Mikrocontroller und Digitale Elektronik Interrupt-Problem (TSic und ZACwire)


von Dietmar E (Gast)


Angehängte Dateien:

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.

von Wolfram Q. (quehl)


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

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.