Sida 1 av 1

kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 12 juli 2009, 23:46:47
av lizerdboy
Har suttit och krånglat med de här i riktigt många timmar nu,

kör avr-gcc till en mega328p 20Mhz

har samma setup för två 8 bitars timers som ska funka på samma sätt.

men saken är att jag får två olika resultat.

från timer0 så får jag 13ms mellan triggningarna, och signalen är inte ren, utan de kommer pulser som är mycket längre än 13ms.

från timer2 så får jag 132us mellan triggningarna, och signalen är helt ren, bara fyrkantsvåg.

signalerna tar jag ut på två pinnar out1 och out2

Någon som har en idee vart felet kan ligga någonstanns ??

Avr Studio rapporterar inga fel.

hoppas någon ser nått :wink:

Edit***

nu när jag la in allt i ett nytt projekt för att lättare kunna debugga så får jag ingenting ut från timer0 och out1

nu har jag verkligen ingen aning om vad jag har missat. :oops:

Kod: Markera allt



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


#define OUT1					   			_BV(PORTC3)
#define OUT2					   			_BV(PORTC4)


void init_Timer0(void);
void init_Timer2(void);


ISR(TIMER0_COMPA_vect);
ISR(TIMER2_COMPA_vect);



int main (void)
{

	DDRC |= 0b00011000;


   	init_Timer0();

   	init_Timer2();

	sei();                   //  Enable global interrupts

   	for (;;) // Loop forever
   	{
   	}

}





void init_Timer0(void)
{


     TCCR0A |= (1 << WGM01); // Configure timer 0 for CTC mode

     TIMSK0 |= (1 << OCIE0A); // Enable CTC interrupt

     OCR0A   = 254; // Set CTC compare value

     TCCR0B |= (1<<CS00) | (0<<CS01) | (1 << CS02); // 1024


}
void init_Timer2(void)
{

     TCCR2A |= (1 << WGM21); // Configure timer 0 for CTC mode

     TIMSK2 |= (1 << OCIE2A); // Enable CTC interrupt

     OCR2A   = 254; // Set CTC compare value

     TCCR2B |= (1<<CS20) | (0<<CS21) | (1 << CS22); // 1024


} 


/*--------------------------------------------------------------------------------------------------
Timer interrupt

--------------------------------------------------------------------------------------------------*/

ISR(TIMER0_COMPA_vect)
{

   PORTC ^= OUT1;

}

/*--------------------------------------------------------------------------------------------------
Timer interrupt

--------------------------------------------------------------------------------------------------*/

ISR(TIMER2_COMPA_vect)
{

   PORTC ^= OUT2;

} 



Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:05:02
av v-g
Någon pre/postscaler som spökar? Kan inget om AVR tyvärr ;)

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:05:53
av Stinrew
Jag har inte riktigt förstått dina problem än, dock borde det skilja 8x mellan interrupten. Inställningarna är inte identiska mellan 0- och 2-. Den här raden är fel:

Kod: Markera allt

TCCR2B |= (1<<CS20) | (0<<CS21) | (1 << CS22); // 1024
Den ger inte /1024, utan bara /128. Du måste även sätta CS21 till 1 för att få till /1024.

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:09:07
av lizerdboy
Stinrew: inte vad som står i manualen iaf ??

CS02 CS01 CS00 Description
0 0 0 No clock source (Timer/Co
0 0 1 clkI/O/(No prescaling)
0 1 0 clkI/O/8 (From prescaler)
0 1 1 clkI/O/64 (From prescaler)
1 0 0 clkI/O/256 (From prescaler)
1 0 1 clkI/O/1024 (From prescaler)

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:11:10
av Stinrew
Jag talar om timer2, och inte timer0. Menar du att det i ditt datablad står exakt lika för timer2??

EDIT: Nu har jag tankat hem senaste versionen av databladet. Det står som jag säger där. Ta och titta på sidan 162.

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:16:56
av lizerdboy
ii där ser man, den missa jag, i timer 2 ska alla vara satta, thanks

men de förklarar fortfarande inte varför jag får oren signal trån timer 0,
då man tittar med oscilloskop så är vissa pulser mycket längre än 95% övriga.
de e mitt största problem då de verkar som den ger oregelbundna interrupts.

ska testa mera , men thanks Stinrew, har suttit o stirrat mig blind på alla tabeller :)

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:18:55
av Stinrew
Kan du bidra med en skärmdump på oscilloskåpet?

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 00:20:01
av sodjan
> Menar du att det i ditt datablad står exakt lika för timer2??

I så fall är det någon specialversion av databladet
och inte samma som det som man laddar ner från
Atmel just nu... :-)

> men de förklarar fortfarande inte varför jag får oren signal trån timer 0,

Jag har inte kollat så noga, men sannolikt är det störningar mellan
de två interrupten som spökar. Hur blir signalerna om du bara
stänger av den ena timern ?

Är du säker på att den där operationen du har i dina ISR'er
inte stör den andra pinnen ?

Re: kör samma setup för timer 0 och 2, ger olika resultat, AVR

Postat: 13 juli 2009, 07:06:59
av victor_passe
TCCR2B |= (1<<CS20) | (0<<CS21) | (1 << CS22); // 1024
Den sätter inte bit nr CS21 till 0 om den redan är 1.