www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tiny2313-Timer im WinAVR


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

}
}

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darüber hinaus:

1) volatile

2) Ein Interrupt alle 10 Takte ist völlig illusorisch.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

}
}

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schlag mal den richtigen Namen für die ISR nach.

Autor: Martin T. (thunder1902)
Datum:

Bewertung
0 lesenswert
nicht 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!!!!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Preisler schrieb:

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

Schau dir mal an, wieviele Variablen namens 'Sekunde' du im Programm 
hast.

Autor: Martin T. (thunder1902)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lang' mir gleich an's Hirn!! Oh mann!!

Das ist ja fast peinlich!!

Ich danke euch!!! ;-)

Viele Grüße

Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.