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

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.