Problemer med brug af Timer med AVR

Det er netop det linien PORTA = PORTA ^0x80; gør. Den toggler udgangen - altså sætter den til det modsatte af, hvad den var før :-)

--
Mvh.

Tomas
Reply to
Tomas .
Loading thread data ...

Carsten skrev:

Jeg prøver forslagene af asap :-)

--
Mvh.

Tomas
Reply to
Tomas .

Nu ser min kode sådan ud.

Resultatet er desværre stadig det samme. :-( (PORTA.7 er stadig konstant ON)

#include

/** * @brief Macro for bitmanipulation */ #define sbi(arg, BitNo) (arg |= (1

Reply to
Tomas .

Tomas, læs nu mit tidligere indlæg......

/Thomas

Reply to
Thomas Lykkeberg

Præcis! Nu virker det!

Koden kom til at se sådan ud:

#include

//Timer 0 overflow ISR interrupt [TIM0_OVF] void timer0_ovf_isr(void) { static unsigned int timecount = 0; //global time counter TCNT0 = 0x06; // start med at tælle fra 6; Tæl til 250 if(++timecount == 1000) { PORTA = PORTA ^ 0x80; // Toggle bit 7 på PortA timecount = 0; // Clear for de næste 500 us } }

void main(void) { // Timer 0 interrupt initialisering TIMSK = 0x02; // Afmask Timer 0 overflow interrupt DDRA = 0x80; // Port A bit 7 er output TCCR0 = 0x02; // Sæt Timer0 til clock/8 som clock input // Global aktivering af interrupts #asm("sei") while(1) ; }

Så TIMSK skal være lig 2 :-)

--
Mvh.

Tomas
Reply to
Tomas .

Ja, det er ikke altid til at se skoven for bare træer ;)

/Thomas

Reply to
Thomas Lykkeberg

Thomas Lykkeberg skrev:

Det må siges :-)

Hvad er det TIMSK gør? TIMer... SK???

--
Mvh.

Tomas
Reply to
Tomas .

"Timer interrupt mask register". Det bruges til at maske de forskellige interrupts associeret med timere/countere i AVR MCU'en

Sig mig en gang, har du ikke et datablad på den AVR du sidder med? :o)

Jeg regner med at det er en ATMega8515:

formatting link

/Thomas

Reply to
Thomas Lykkeberg

Thomas Lykkeberg skrev:

Jo jo :-) Men når man masker interrupts, hvad gør man så?

Jeps. 8515 it is ;-)

--
Mvh.

Tomas
Reply to
Tomas .

S=E5 tillader eller forbyder man interrupts fra en specific kilde. I dit tilf=E6lde tillader du interrupts fra "Timer 0 Over Flow" kilden. Kort sagt har du ved at skrive TMISK =3D 0x02 fortalt interrupt kontrolleren i AVR'en, at du gerne vil afbrydes (interrupt'es) n=E5r timer 0's t=E6ller "flyder over".

/Thomas

Reply to
Thomas Lykkeberg

Thomas Lykkeberg skrev:

OK - Takker. Det hjalp på min forståelse :-) Må dybere ind i databladet og finde mig en liste over det tilladte TMISK'ere...

--
Mvh.

Tomas
Reply to
Tomas .

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.