Forum: Mikrocontroller und Digitale Elektronik atmega8 timer problem


von mehlspeise (Gast)


Lesenswert?

Hallo

Habe folgendes Problem:

Möchte mit dem atmega8(auf stk 500) Port B toggeln. Mir ist egal bei 
welcher frequenz die leds getoggelt werden haupsache es ist sichtbar.
Habe folgendes Program geschrieben aber es haut nicht hin. Es leuchten 
immer alle leds.





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

unsigned int x;

void start_timer0(void) {

  TCCR0 =  0x02;
  TIMSK =  0x01;
  TCNT0 =  255;
  sei();
}


ISR(TIMER0_OVF_vect) {

x++;

if(x==500)
{
  PORTB=0x00;
}

if(x==1000)
{
  PORTB=0xff;
}

}


int main(void)
{

start_timer0();

DDRB=0xff;

for(;;){}

}

von Jean P. (fubu1000)


Lesenswert?

Hallo,

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

volatile unsigned int x;

void start_timer0(void) {

  TCCR0 =  0x05;
  TIMSK =  0x01;
    sei();
}


ISR(TIMER0_OVF_vect) {

x++;

if(x==4)
{
  PORTB=0x00;
}

if(x==8)
{
  PORTB=0xFF;
  x = 0;
}

}


int main(void)
{

start_timer0();

DDRB=0xFF;

while(1)
;

}


Dann sollte deine LEd ca. alle Sekunde blinken , bei 1Mhz takt , 
ansonsten natürlich fixer.

Gruß

von Jean P. (fubu1000)


Lesenswert?


von Johannes M. (johnny-m)


Lesenswert?

Fabian Ostner wrote:
> Achso und lies das mal durch ;-)
> http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Hmmm, vielleicht selber mal durchlesen. x wird ausschließlich in dem 
Interrupt Handler verwendet. Das volatile ist deshalb überflüssig...

von Jean P. (fubu1000)


Lesenswert?

Bis jetzt noch ja ;)

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.