Attiny2313 Timer1-Interrupt löst nur beim 1. mal aus.

Gast #3282629
Lesenswert?
• ▲
▼
Hallo,
Bin grade dabei einen Würfel mit einem Attiny 2313 zu programmieren.
Dabei soll Zuerst ein taster gedrückt, --> Loswürfeln.
Wird der Taster losgelassen, so bleibt der Würfel langsam stehen.
Wenn er steht, binkt das Ergebniss.
Nach einiger zeit soll er sich selbts wieder abschalten.

Diese zeit soll durch einen Timer eingestellt werden.

Beim 1. Würfeln beim anlegen der Spannung würfelt er richtig, danach 
hört er nicht mehr auf zu blinken.
--> ISR Wird nicht mehr aufgerufen.

Nun muss es einen bedeutenden Unterschied zwischen der ersten 
Initialisierung:
1
  TCCR1A  &= (0<<COM1A0)|(0<<COM1A1);  // CTC Modus
2
  TCCR1B &= (0<<ICNC1)|(0<<ICES1)|(0<<CS11);  // Prescaler 1024
3
  TCCR1B |= (1<<WGM12)|(1<<CS10)|(1<<CS12);  
4
  OCR1A = 0x0020;
5
  TIMSK |= (1<<OCIE1A);      //Compare Interrupt Enable
6
       sei();                     //Globale Interrupts ein

Und allen weiteren Initialisierungen geben:
1
      TCCR1A &= (0<<COM1A0)|(0<<COM1A1);      // CTC Modus
2
      TCCR1B &= (0<<ICNC1)|(0<<ICES1);    
3
      TCCR1B |= (1<<WGM12);
4
      TCNT1=0x0000;                //Zähler rücksetzen 
5
      OCR1A = 0x0020;
6
      TIMSK |= (1<<OCIE1A);            //Compare Interrupt Enable
7
      sei();                    //Globale Interrupts ein
8
      TCCR1B |= (1<<CS10)|(1<<CS12);        // Timer Starten
9
      TCCR1B &= (0<<CS11);

Ich finde ihn nicht.
Muss ich eventuell irgendein Bit, das bei jedem das bein Aufruf der ISR 
gesetzt wird immer wieder zurücksetzen? oder Ähnliches?

Grüße
Matze
#3282665
Lesenswert?
• ▲
▼
Matze schrieb:
> Nun muss es einen bedeutenden Unterschied zwischen der ersten
> Initialisierung:
...
> Und allen weiteren Initialisierungen geben:

Wieso gibt es 2 Initialisierungen?

Üblicherweise wird am Anfang vor der Endlosschleife einmal "richtig" 
initialisiert, später ggf. nur einige Parameter geändert. Dann ist auch 
übersichtlicher, was man tut und warum man das tut.

Gruß Dietrich
Gast #3282727
Lesenswert?
• ▲
▼
Peter II schrieb:
> das ist doch keine Lösung, lerne lieber wie man bits ordentlich löscht.

Das ist ziemlich streng von Dir und so nicht richtig.
Eine Lösung ist, wenn es funktioniert.
Dass es nicht die schickste Lösung ist, stimme ich zu.

Für den ThreadOwner die Zusammenfassung:
Bits setzen:   REGISTER |= (1<<BIT1_NAME) | (1<<BIT2_NAME)
Bits loeschen: REGISTER &= ~((1<<BIT1_NAME) | (1<<BIT2_NAME))

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.