8Bit Timer/Counter 0

Gast #781210
Lesenswert?

Hallo erstmal.

Ich habe ein Problem mit meinem Atmega 8L. Ich habe alle Parameter 
eingestellt für den 8 Bit Timer/Counter0, aber die angeschlossene 
Leuchtdiode will nicht angehen. Ich verwende den internen clock und noch 
nicht einen Quarz. Oder liegt es vielleicht daran? Richtig angeschlossen 
ist alles an dem Atmega 8L. Hier erstmal das Programm:

#include <stdint.h>
#include <stdlib.h>

#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <avr/wdt.h>

int main (void)
{
 DDRC=1; //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;         //Interrupt für Overflow counter aktiviert
 TCNT0=0;         //counter auf 0 setzen
 PORTC=1;         //PC0 auf 1 setzen->Diode aus
 sei();           //Atkivierung des Global Interrupt

 while(1);       //unendlichschleife

   return 0;
}


ISR(TIMER0_OVF_vec)    //ISR von 8 Bit Timer/Counter0
{
PORTC=0;    //PCO-> wird zu null->LED sollte angehen
}
Gast #781220
Lesenswert?

#include <avr/interrupt.h>
#include <avr/io.h>

Die Reihenfolge der #includes ist nicht egal - pack mal das #include 
<avr/io.h> ganz nach oben. Da sind die prozessorabhängige Defines drin, 
die in anderen headern gebraucht werden.

Oliver
Gast #781255
Lesenswert?

So hab das Programm mal berichtigt und die anderen includes auch mal 
weggemissen, aber geht so immer noch nicht





#include <avr/io.h>
#include <avr/interrupt.h>



int main (void)
{
 DDRC=1;        //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=0b00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;           //Interrupt für Overflow counter aktiviert
 TCNT0=0;           //counter auf 0 setzen
 PORTC=0;           //PC0 auf 1 setzen->Diode an
 sei();             //Atkivierung des Global Interrupt

 while(1);         //unendlichschleife

   return 0;
}


ISR(TIMER0_OVF_vect)    //ISR von 8 Bit Timer/Counter0
{
PORTC=1;    //PCO-> wird zu null->LED sollte aus gehen
}
Gast #781274
Lesenswert?

na ja, aber Simulator ist halt nicht die Realität. ich kann es mir beim 
besten willen nicht erklären. Die led leuchtet vor sich hin, aber aus 
geht sie nicht. Hab die led an einen 100 ohm widerstand gehängt.
Gast #781283
Lesenswert?

So hab jetzt das Programm mal geändert und so geht die led aus. Das 
heisst, der counter zählt auf jeden fall, aber ich komme nicht in die 
ISR


#include <avr/io.h>
#include <avr/interrupt.h>



int main (void)
{
 DDRC=1;        //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=0b00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;           //Interrupt für Overflow counter aktiviert
 TCNT0=0;           //counter auf 0 setzen
 PORTC=0;           //PC0 auf 1 setzen->Diode an
 sei();             //Atkivierung des Global Interrupt

 while(1)         //unendlichschleife
 {
  if(TCNT0==255)
  PORTC=1;

 }

   return 0;
}


ISR(TIMER0_OVF_vect)    //ISR von 8 Bit Timer/Counter0
{
PORTC=1;    //PCO-> wird zu null->LED sollte aus gehen
}

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