AtTiny2313 Timer1 kein Interrupt

Gast #1805995
Ich benutze den AtTiny2313 mit einem externen 10MHz Quarz.
Nun will ich ein Interrupt, das 25 mal pro Sekunde auftritt, dafür nehme 
ich den Timer1 mit einem Vorteiler von 1/64 und lade das OCR1A noch mit 
6249.
Nun bekomme ich leider keinen Interrupt.

Hier mein Code:
1
ISP(TIMER1_COMPA_vect)
2
{
3
  PORTB= 0xFF;
4
}
5

6
int main(void)
7
{
8
  
9
  TCCR1A &= ~((1<<WGM11) | (1<<WGM10));
10
  TCCR1B |= (1<<WGM12);                  // Modus 4 CTC
11
  TCCR1B &= ~(1<<WGM13);
12
  TCCR1B |= (1<<CS11) | (1<<CS10);      // Prescaler 1/64
13
  TIMSK |= (1<<OCIE1A);
14
  
15
  OCR1A = 6249;        // Obergrenze auf 6249 setzten
16
  
17
  sei();        // Einschalten der Interrupts
18
  
19
  DDRB = 0xFF;
20
  PORTB = 0x00;
21
  
22
  while(1==1)
23
  {
24
  }
25
  
26
  return 0;
27
}
_|-|_ schrieb:
> ISP
Gibts nicht. Heißt eigentlich ISR.
Ich gehe davon aus, dass du in deinem richtigen Quellcode auch die 
entsprechenden Includes hast:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>

Davon abgesehen, simuliere ich den Code in AVR-Studio kommt der erste 
Interrupt nach ~40ms - der Rest stimmt also.

mfG
Markus
Gast
ok, ja danke
das war eindeutig das Problem, jetzt tut's.

Aber warum gibt mir der compiler da keinen fehler?
ich verwende avr-gcc

Naja, hauptsache es tut
Gast
> Aber warum gibt mir der compiler da keinen fehler?
> ich verwende avr-gcc

Fehler gibts keinen, weils keiner ist. Aber schöne Warnings gibts auf 
Anfrage - zumindest wenn er noch die passenden Header bekommt:
1
$ head -n 4 main.c 
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4

5
ISP(TIMER1_COMPA_vect)
6
$ avr-gcc -Wall -mmcu=attiny2313 -o main main.c 
7
main.c:5: warning: return type defaults to ‘int’
8
main.c: In function ‘ISP’:
9
main.c:7: warning: control reaches end of non-void function

..was wünscht man sich mehr? :-)
Stefan P. schrieb:
> Wird wegoptimiert -> Es geht direkt weiter bei "return"....

Quark: Eine Endlosschleife kannst du mit keiner Optimierung der Welt 
wegtransformieren weil sie eben von Natur aus Endlos ist. Dagegen sagt 
es dem Compiler aber, dass der Code danach niemals aufgerufen werden 
kann.

@g457:
Warnings zur Compile-Time führen gerne Mal zu Laufzeitfehlern.
Daher sollte man Compiler-Warnings nur genau dann ignorieren wenn man 
Ursache, Bedeutung und Auswirkungen kennt.

mfG
Markus
Gast
markusj schrub:
> @g457:
> Warnings zur Compile-Time führen gerne Mal zu Laufzeitfehlern.
> Daher sollte man Compiler-Warnings nur genau dann ignorieren wenn man
> Ursache, Bedeutung und Auswirkungen kennt.

Ähm wie meinen? Deswegen hab ich sie dem TO hier doch extra reinzitiert, 
eben weil Warnings entgegen landläufiger Meinunung ∗nicht∗ dazu da sind, 
um ignoriert zu werden. Ich bin im übrigen sogar dafür, dass -Wall per 
default an sein sollte. Hätte der TO das gehabt (und die Warnings 
korrekt interpretiert), dann hätte er auch den Fehler selbst gefunden 
:-)

Nix für ungut.
g457 schrieb:

Pardon, der Beitrag war falsch adressiert, das war eigentlich für _|-|_ 
(Gast) (er sich angesprochen fühlen möge ;)! Irgendwie wäre das ja sonst 
ein Widerspruch in sich gewesen.

Zu -Wall: Könnte man glatt ne Petition zu machen, ich habe neben -Wall 
noch einen Stapel weiterer -W Schalter aktiv, daher bin ich es gewohnt 
dass der Compiler sich über jeden Mist (oder manchmal auch nicht-Mist) 
auslässt:
-Wall -W -Wextra -Wundef -Wunreachable-code -Wstrict-prototypes 
-Winit-self -Wno-main

Letzterer Schalter klemmt die "main gibt kein int zurück"-Meckerei ab, 
da ich main typischerweise als
1
__attribute__((OS_main,noreturn)) void main(void)
 definiere.

mfG
Markus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.