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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren