Problem z Timerami w Atmega64L

Feb 21, 2009 10 Replies

Witam, mam problem z poprawnym uruchomieniem timerow na w/w atmedze. Do tej pory bawilem sie Atmega32 i problemow nie bylo.



Problem tkwi w tym, ze nie dzialaja mi przerwania od timerow. Dodatkowo wydaje mi sie (jedynie z obserwacji), ze zmiana preskalerow tez nie wplywa na szybkosc zliczania... Porownywanie z wzorcami porownania z OCR(x) tez...



Timery poprostu licza sobie od 0 do 255 i automatycznie zeruja sie. i tak w nieskonczonosc, zawsze z ta sama predkoscia.



Atmega64L taktowana wewnetrznym generatorem RC 1MHz Zasilanie 3.3V



Ponizej zamieszczam przykladowy problem, ktory NIE dziala na Atmedze64L, natomiast bezblednie dziala na Atmedze32:



#include <avr/interrupt.h>



#include <avr/signal.h>



#include <avr/iom32.h>



volatile unsigned int interrupts2 = 0; volatile unsigned int interrupts0 = 0;



void io_init(void) { DDRG &= ~(1 << PG3); // Wejscie TOSC2 - 32kHz DDRG &= ~(1 << PG4); // Wejscie TOSC1



DDRD &= ~(1 << PD2); // Wejscie RxD DDRD |= (1 << PD3); // Wyjscie TxD }



ISR(SIG_OVERFLOW2) { interrupts2++; TCNT2 = 0; }



ISR(SIG_OVERFLOW0) { interrupts0++; TCNT0 = 0; }



int main(void) {



io_init(); uart_init();



TIMSK &= ~(1 << TOIE2); TIMSK &= ~ (1 << OCIE2); ASSR |= (1 << AS2); TCCR2 |= (1 << CS22); TCCR2 |= (1 << CS20);



while(ASSR&0x07);



TIMSK |= (1 << TOIE2); TIMSK |= (1 << OCIE2); OCR2 = 0x99;


TIMSK |= (1 << TOIE0); TIMSK |= (1 << OCIE0); TCCR0 &= ~(1 << WGM00); TCCR0 &= ~(1 << WGM01); TCCR0 |= (1 << CS02); TCCR0 &= ~(1 << CS01); TCCR0 &= ~(1 << CS00);



SREG |= 0x80;



while(1) {



}

return 0; }



Rezultat wyrzucam sobie na konsole COM za pomoca uarta Zmienne interrupts0 i interrupts2 sa ciagle rowne zero...



Prosze o jakies wskazowki, bo juz mi rece opadaja :(



Pozdrawiam, Piotr


snipped-for-privacy@gmail.com denied rebel lies:

[...]

Czasem nie TIMSK2 i TIMSK0 (odpowiednio)?

snipped-for-privacy@gmail.com pisze:

sei(); ??

On 21 Lut, 11:50, snipped-for-privacy@gmail.com wrote: ...

1) includujesz plik nagłówkowy od ATmegi32 (iom32.h) 2) W atmedze64 w ASSR niema bitu AS2 więcej błędów nie widzę ;]

pozdrawiam Robert Zemła

Zrob sobie przysluge i ustawiaj typ procka w makefile, w zrodlach po prostu:

#include <avr/io.h>

Prawdopodobnie kompilujesz na Mega32 i dziwisz sie ze na 64 nie dziala (oprocz tego moga byc roznice pomiedzy 32 i 64, z glowy nie pamietam).

Tomek

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required