www.mikrocontroller.net

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


Autor: Dietmar E (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram Quehl (quehl)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.