Arduino friert ein: SPI und PinChange Interrupt

Gast #3015864
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe angefangen den CD Wechsler Emulator code von hier: 
http://www.mikrocontroller.net/attachment/33106/cdc_emu.c
für einen Arduino umzuschreiben. Das Ergebnis hängt im Beitrag.
Leider hängt sich der Arduino (Nano mit Atmega328) auf, sobald ich einen 
Interrupt nutzen will (Int0 mit Pin2).
Sobald sich am Pin2 etwas ändert, Blinkt die LED am Arduino schnell und 
das Programm scheint zu hängen, da kein "Test" mehr über UART ausgegeben 
wird. Auch ein Reset über den Button oder den FTDI bringt nichts, um 
neuen Code zu übertragen, muss ich das USB Kabel abziehen und neu 
anstecken.
Die CDC Emulation über SPI scheint aber weiter zu laufen!?

Ich würde gerne verstehen was hier passiert, da ich es mir nicht 
erklären kann.
Kann mir jemand einen Tip geben?

Grüße
Angehängte Dateien:
Gast #3015916
Lesenswert?
• ▲
▼
Ich könnte mir vorstellen, dass es ein Problem mit der UART Ausgabe 
innerhalb des Interrupt gibt.

Probier mal was einfacheres in den Interupt zu packen, zum Beispiel nur 
einen Pin an / aus zu schalten. Häng an den Pin eine LED dran, und guck 
ob das dann funktioniert.

@ Peter
> Und wo ist der Interrupthandler dazu?

Beim Arduino wird das indirekt über handles gemacht.
1
void setup(){
2
  // ...
3
  attachInterrupt(0, stateChange, RISING);
4
  // ...
5
}
6

7
void stateChange(){
8
 Serial.println("Test");
9
}

Die Reinfolge ist zwar nicht ideal (kein Prototype), aber meines 
Erachtens nach sollte das klappen.
Gast #3016362
Lesenswert?
• ▲
▼
Ja, das funktioniert :) Danke

Eine Frage noch, meint Ihr ich kann das folgende Signal mit einem 
Interrupt und einer Timer Library zerlegen? 
http://martinsuniverse.de/projekte/cdc_protokoll/radio_out.gif
Ich möchte letztendlich auswerten welche Taste am Radio gedrückt wurde.

Mein Ansatz wäre:
bei steigender Flanke -> Timer starten
bei fallender Flanke --> Timer stoppen und Zeit auswerten / merken

Wäre das machbar oder bin ich hier auf dem Holzweg?

Antwort schreiben

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.

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.