Sida 1 av 1
Vad har jag glömt? (AVR, C, Timer1)
Postat: 10 mars 2007, 19:24:27
av PaNiC
Jag ska ha interrupt på timer1 output compare. Men med nedanstående kod snurrar inte timern. Vad har jag glömt?
Kod: Markera allt
void setup(void)
{
DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
DDRD = 0b00011000;
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
TCCR1B = 1<<CS11 | 1<<CS10 | 1<<CTC1;
OCR1B = 31250;
TIMSK = 1<<OCIE1B;
sei();
}
int main(void)
{
setup();
for(;;)
{
PORTB = TCNT1L;
}
}
Postat: 10 mars 2007, 19:38:45
av thepirateboy
Vilken uC? Funkar det i simulatorn?
Postat: 10 mars 2007, 19:43:55
av PaNiC
90s8515.
Har inte kunnat prova simulatorn då den inte fungerar. Något kaiko med VC++ Runtimen. Ska installera om windows ikväll.
Postat: 10 mars 2007, 21:45:53
av thepirateboy
Du kan prova att uppgradera till AVR Studio 4.13 b528, då bör simulatorn funka.
http://www.atmel.com/dyn/products/tools ... ol_id=2725
Postat: 10 mars 2007, 22:11:29
av cykze
Du verkar ha aktiverat interrupt för "Output Compare Match" utan att ha någon interrupt-funktion som fångar upp interrupten.
Postat: 10 mars 2007, 23:30:07
av PaNiC
cykze, jag har en funktion som tar det. Inte tagit med den här bara.
Men nu är det testat med simulator också, och timern går inte.
Postat: 11 mars 2007, 08:53:29
av oJsan
Det fungerar alltså inte i simulatorn?! Kan det inte bara vara så att det tar vääldigt lång tid att simulera alla cykler?
Och vad händer i funktionen som tar avbrottet? Hur kan du veta att den funktionen inte körs? (Skicka ALL kod)
Verkar "PORTB = TCNT1L; " bara stå still så är det ju ett tecken på att timern inte går...
En viktig fråga: Fungerar någon annan programvara i din nuvarande uppkoppling?
Postat: 11 mars 2007, 10:09:13
av PaNiC
Hittade felet nu. Compare match uppstår av någon anledning på OCR1A fast det inte ska och TCCR1B, CTC1 nollar således TCNT1-registren innan de har hunnit räkna upp.
Postat: 11 mars 2007, 18:32:52
av AntiZ
I Mega88 är Prescalern för Timer1 och Timer0 ihoplänkade (kan ha olika värde dock) men när man vill reseta prescalern för Timer0, så ryker Timer1's prescaler också. Inte något sådant skumt.