Timer0 Atmega16

Gast #3172106
Lesenswert?

Hallo
ich habe mich mal an die Programmierung eines Timers gewagt. Bin noch 
blutiger Anfänger. Habe einen Atmega16 und ein STK500 board auf dem ich 
nach dem Überlauf des Timers zwei Leds leuchten sollen. Beim Start des 
Programms soll eine Led leuchten. Die Start Led leuchtet nur der Timer 
zählt wohl nicht da ich nie 2 Leds am leuchten haben. Vielleicht kann 
mir jemand sagen was ich falsch gemacht habe. Hier mein Programm:

#include <avr/interrupt.h>

#include <avr/io.h>

ISR (TIMER0_OVF_vect)
{
    TCNT0 = 0x64; //reload counter value (50Hz)
    DDRC=0x03;

}


void init_timer1(void)
{
  //timer0-Initialisierung für 50Hz
  TCCR0 = 0x00; //stop
  //ASSR  = 0x00; //set async mode
  TCNT0 = 0x64; //set count zählerstart bei 100 (zählt immer bis 255)

  TCCR0 = 0x05; //start timer (Systemtakt / 1024 )
  PORTC =0x00;
  sei();
}


int main(void)
{
  init_timer1();
  TIMSK |=(1<<TOIE0);
    while(1)
    {
        DDRC=0x01;
    }
}
Gast #3172121
Lesenswert?

also bislang habe ich immer mit DDRC und PortC gearbeitet wenn ich 
einzelne LEDS leuchten lassen will. Egal ob per Tastendruck oder per 
delay bis lang hat das immer funktioniert. Wenn ich DDRB und PORTB 
nehmen funktioniert das obere Programm auch nicht.
Gast #3172122
Lesenswert?

Tim schrieb:
> da ich nie 2 Leds am leuchten haben

Nun ja, überleg mal, wie lange die 2. LED leuchten wird - dein 
Hauptprogramm läuft ja schliesslich auch weiter...

Dann solltst du dir angewöhnen, Control-Register immer mit sowas wie

1 << CS00

zu beschreiben, nicht mit reinen hexwerten. Dann siehst du auch besser, 
ob und wo du Fehler bei der Initialisierung gemacht hast.

Ansonsten wendest du das PORT- und das DDR-Register "vertauscht" an. Das 
macht in diese einfachen Fall zwar nichts, aber das Tutorialkapitel zu 
dem Thema solltes du dir nochmals ansehen.

Oliver
Gast #3172131
Lesenswert?

Hi

>also bislang habe ich immer mit DDRC und PortC gearbeitet wenn ich
>einzelne LEDS leuchten lassen will.

Ist ja prinzipiell richtig. Aber DDR bestimmt die Datenrichtung 
(Eingang/Ausgang) und Port bei Ausgängen den Pegel an den Pins.

MfG Spess

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