Tiny2313-Timer im WinAVR

Gast #1455737
Hi Leute!

Wollte mir mal zum Verständnis einen Timer in WinAVR debuggen. Wenn ich 
folgenden Code mit dem AVR 2313 anschauen möchte, läuft zwar der 
Debugger, nur die Timer Routine (ISR) wird nicht angesprungen. Weiß 
jemand was ich falsch gemacht hab?? 1000 Dank im Voraus!!!!


#ifndef F_CPU
#define F_CPU 3686400
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>


int sekunde=0;

ISR (TIMER1_COMP1_vect)
{
sekunde++;
}

static void initTimer(void) {
    TCCR1B = 1<<WGM12 | 1<<CS10;          // divide by 1
                                          // clear on compare
    OCR1A = 10 ; // Output Compare Register
    TCNT1 = 0;                            // Timmer startet mit 0


    TIMSK = 1<<OCIE1A;                    // beim Vergleichswertes 
Compare Match

}


void main(void){
int sekunde=0;
DDRB=0xff;
initTimer();

for(;;){
PORTB=sekunde;

}
}
Gast
Danke für eure Antworten!

Zu 1) - OK, hab den Code angepaßt.
ZU 2) - ok, hab ich auch angepaßt


Trotzdem läuft's im Debugger nicht. Ich möchte eigentlich nur mal einen 
Timer zum laufen bringen, der auf das ISR-Event reagiert....

Mein Code steigt im Debugger nach einmaligem Durchlauf einfach aus...

Hat jemand ein Codebeispiel für einen Tiny2313, bei dem auf ein 
Timer-Interrupt reagiert wird? Das Problem ist, daß im GCC-Tutorial 
nicht auf die A + B Register beim Tiny2313 eingegangen wird.

Danke schonmal!!!!!


------------Code-----------

#ifndef F_CPU
#define F_CPU 3686400
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>


volatile uint16_t sekunde=0;

ISR (TIMER1_COMP1_vect)
{
sekunde++;
}

static void initTimer(void) {
    TCCR1B = 1<<WGM12 | 1<<CS10;          // divide by 1
                                          // clear on compare
    OCR1A = 10 ; // Output Compare Register
    TCNT1 = 0;                            // Timmer startet mit 0


    TIMSK = 1<<OCIE1A;                    // beim Vergleichswertes 
Compare Match

}


void main(void){
int sekunde=0;
DDRB=0xff;
initTimer();
sei();

for(;;){
PORTB=sekunde;

}
}
ES FUNKTIONIERT!!!!

Oh mann - hab in der .h Datei vom anderen 2313-iC nachgeschaut!!

Danke Stefan für den Tip!!

Jetzt muß ich nur noch rauskriegen, warum PortB nicht hochzählt. Hab's 
auch schon mit 'nem 8-Bit Int probiert - geht aber nicht.....

Hast du da evtl. auch noch ein Tip für mich?? :-)

Danke nochmal!!!!!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.