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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.