Atmega 328P LED will nicht richtig über Interrupts blinken

Gast #3387570
Lesenswert?

Liebe Genies,

ich versuch schon den ganzen tag simpelst eine LED über interrupts 
blinken zu lassen. Ich habe gefühlt 100 beiträge gelesen, finde dennoch 
meinen Fehler nicht. der Atmega 328 lauft auf einer platine auf 20MHz.
Vielleicht findet ja einer von euch meine(n) Fehler?
tausend Dank im Vorraus

Markus



#include <avr/io.h>
#include <asf.h>
#include <math.h>
#include <stdlib.h>
#ifndef F_CPU
#define F_CPU 20000000UL
#endif
#include <util/delay.h>
#include <avr/interrupt.h>


void servo_init(void);

#define SERVOPIN 1
#define SERVOPORT PORTD
#define DDRSERVO DDRD

int t=0;


ISR(TIMER0_COMPA_vect)        //interrupt
  {

    t++;

  }

void servo_init(void)
{
  TIMSK0|=(1<<OCIE0A);                 //interrupts
  TCCR0B |= (1<<CS00);                 //Prescale=1,
  TCCR0A |= (1<<WGM01);                 // CTC mode
  OCR0A = 199;                   //alle 10µs ein IRQ 0,00001s
  DDRSERVO|=(1<<SERVOPIN);               //LED Pin als ausgang

}

int main (void)
{


  servo_init();
  sei ();                //iknterrups an

  while(1)
  {

  if (t<20000)SERVOPORT|=(1<<SERVOPIN);  //bis zum 20000. durchlaufen 
des Interrupts LED AN (200ms)
  else SERVOPORT |=~(0<<SERVOPIN);  //ab dann LED AUS
  if(t>40000) t=0;      // bei 40000. interruptdurchlauf t zurücksetzen 
(insg. 400ms)

    }
  }

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