Problem z Timerami w Atmega64L

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

Reply to
jotixel
Loading thread data ...

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

[...]

Czasem nie TIMSK2 i TIMSK0 (odpowiednio)?

Reply to
MoonWolf

snipped-for-privacy@gmail.com pisze:

sei(); ??

Reply to
PH

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

Reply to
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

Reply to
Tom

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.