Arduino ignoriert Code

Gast #6133566
Lesenswert?

Hallo,

ich habe folgendes Problem mit einem Arduino UNO, wenn ich in dem Sketch 
(siehe Anhang) noch eine Zeile in die Funktion ISR(TIMER0_COMPA_vect) 
einfüge wird diese nicht ausgeführt.

Weiß jemand warum das so ist und wie man das Lösen kann?

Danke im vorraus
Angehängte Dateien:
Gast #6133577
Lesenswert?

ich schrieb:
> Weiß jemand warum das so ist und wie man das Lösen kann?

      row_cnt = 1;
      Serial.println(row_cnt);  //Wird nicht ausgeführt

Die Verwendung von Serial.print ist in ISRs verboten, das haengt 
typischerweise, da es selbst Interrupts verwendet. Besser ein LED 
blinken oder so.

Die Variablen wie row_cnt brauchen ein volatile in der Deklaration.

leo
Gast #6135458
Lesenswert?

ich schrieb:
> Ich habe mal das Serial.println rausgeworfen und will Pin A0 anstelle an
> und ausschalten. Ich habe bis jetzt damit auch keinen Erfolg.

Das digitalWrite(rowClkPin,!digitalRead(rowClkPin)); sollte natürlich in 
die Funktion ISR(TIMER0_COMPA_vect).
Gast #6135494
Lesenswert?

ich schrieb:
> Geht auch mit einem volatile nicht.

Ich sehe gerade, du nutzt unter Arduino Environment den Timer0.

Das kann nicht gehen denn Arduino benutzt den schon.

(Einschränkung: habe mir den Code nicht genau angeschaut,
in Ausnahmefällen mag das gehen. Für den Anfänger ist
das zu vermeiden, es gibt ja noch den Timer 1)
#6135584
Lesenswert?

Hallo,

wenn er im gesamten Sketch Timer 0 gegen Timer 1 getauscht hat, passiert 
gar nichts, rein absolut nichts. Nur seine Timer Initialisierung sollte 
er nochmal überdenken. Mit Register-Veroderung anfangen ist selten gut. 
Hier lautert die echte Falle.

Ich lösche bei der Initialisierung grundsätzlich immer zuerst TCCRnB. 
Damit ist der Timer gestoppt und kann keinen weiteren "Unsinn" machen. 
Auch setze ich die Prescaler erst ganz zum Schluss der Initialisierung. 
Ansonsten würde er zu zeitig loslaufen mitten in der noch 
unvollständigen Konfiguration. Alle   Bits der anderen Register werden 
Zeilenweise verodert, dann kann man weniger Blödsinn machen. Schon rein 
optisch wegen. Außer man möchte jedes Bit kommentieren. Aber selbst da 
fängt man ohne Veroderung an.
1
TCCR1A = (1<<COM1B1) // Kommentar
2
       | (1<<WGM11)  // Kommentar
3
       | (1<<WGM10)  // Kommentar
4
       ;


Man darf auch nicht vergessen Register zu löschen die man selbst gerade 
nicht benötigt, z.Bsp. TIMSKn.

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