-
1. Data: 2009-02-21 10:50:00
Temat: Problem z Timerami w Atmega64L
Od: j...@g...com
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
-
2. Data: 2009-02-21 11:01:26
Temat: Re: Problem z Timerami w Atmega64L
Od: MoonWolf <m...@p...com>
j...@g...com denied rebel lies:
[...]
> TIMSK &= ~(1 << TOIE2);
> TIMSK &= ~ (1 << OCIE2);
> TIMSK |= (1 << TOIE2);
> TIMSK |= (1 << OCIE2);
> TIMSK |= (1 << TOIE0);
> TIMSK |= (1 << OCIE0);
Czasem nie TIMSK2 i TIMSK0 (odpowiednio)?
--
<:> Roger, MoonWolf Out <:>|Easy, boy. What's this
(::) (::)|stupid horse's problem?
(:) JID:m...@j...org(:)| http://karakkhaz.prv.pl
-
3. Data: 2009-02-21 11:06:12
Temat: Re: Problem z Timerami w Atmega64L
Od: j...@g...com
On 21 Lut, 12:01, MoonWolf <m...@p...com> wrote:
> Czasem nie TIMSK2 i TIMSK0 (odpowiednio)?
Nie ma czegos takiego jest TIMSK0 i TIMSK2 jest tylko TIMSK
ktory wyglada tak:
OCIE2 - TOIE2 - TICIE1 - OCIE1A - OCIE1B - TOIE1 - OCIE0 - TOIE0
-
4. Data: 2009-02-21 11:16:37
Temat: Re: Problem z Timerami w Atmega64L
Od: MoonWolf <m...@p...com>
j...@g...com denied rebel lies:
>> Czasem nie TIMSK2 i TIMSK0 (odpowiednio)?
> Nie ma czegos takiego jest TIMSK0 i TIMSK2 jest tylko TIMSK
Fakt. Spojrzałem na pdfa do 644. Mój błąd.
--
<:> Roger, MoonWolf Out <:>|Beware of the man with only
(::) (::)|one gun. It's likely that he
(:) JID:m...@j...org(:)|knows how to use it.
-
5. Data: 2009-02-21 11:30:17
Temat: Re: Problem z Timerami w Atmega64L
Od: PH <s...@w...pl>
j...@g...com pisze:
> Witam, mam problem z poprawnym uruchomieniem timerow na w/w atmedze.
> Do tej pory bawilem sie Atmega32 i problemow nie bylo.
>
sei(); ??
--
PH
-
6. Data: 2009-02-21 11:32:53
Temat: Re: Problem z Timerami w Atmega64L
Od: j...@g...com
On 21 Lut, 12:30, PH <s...@w...pl> wrote:
> sei(); ??
SREG |= 0x80 = sei();
-
7. Data: 2009-02-21 14:48:20
Temat: Re: Problem z Timerami w Atmega64L
Od: j...@g...com
Naprawde nikt nie ma zadnego pomyslu? :S
-
8. Data: 2009-02-21 19:48:00
Temat: Re: Problem z Timerami w Atmega64L
Od: Adam Dybkowski <a...@4...pl>
j...@g...com pisze:
> Naprawde nikt nie ma zadnego pomyslu? :S
Spróbuj prześledzić kod pod symulatorem AVR Studio. Postaw pułapki w
przerwaniach. Jeżeli zadziała - odpal emulację na żywym układzie (przez
JTAG).
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-
9. Data: 2009-02-22 14:38:50
Temat: Re: Problem z Timerami w Atmega64L
Od: Robert Zemła <m...@g...com>
On 21 Lut, 11:50, j...@g...com wrote:
...
>
> Prosze o jakies wskazowki, bo juz mi rece opadaja :(
>
> Pozdrawiam, Piotr
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
-
10. Data: 2009-02-23 10:26:52
Temat: Re: Problem z Timerami w Atmega64L
Od: Tom <T...@n...com>
j...@g...com wrote:
> ...
> Ponizej zamieszczam przykladowy problem, ktory NIE dziala na
> Atmedze64L, natomiast bezblednie dziala na Atmedze32:
>
> ...
> #include <avr/iom32.h>
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