Tiny2313-Timer im WinAVR

Gast #1455737
Lesenswert?

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 #1455777
Lesenswert?

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;

}
}
#1455805
Lesenswert?

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

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