Forum: Mikrocontroller und Digitale Elektronik Timer0 Atmega16


von Tim (Gast)


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;
    }
}

von spess53 (Gast)


Lesenswert?

Hi

Kann es sein, das du Probleme mit den Funktion von DDRC und PortC hast?

MfG Spess

von Tim (Gast)


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.

von Oliver (Gast)


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

von spess53 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.