Witam,
Napisałam kod do odbioru protokołu RC5 na ATmega16. Wszystko działa dobrze. Chciałem go zaimplementować na ATmega8L, ale niestety nie działa. Sprawdzałem datasheet, ale nie znalazłem nic, co mogło być przyczyną. Chodzi o Timer1.
Myślałem, że kod jest bardziej przenośny.
Proszę o sprawdzenie kodu:
Napisałam kod do odbioru protokołu RC5 na ATmega16. Wszystko działa dobrze. Chciałem go zaimplementować na ATmega8L, ale niestety nie działa. Sprawdzałem datasheet, ale nie znalazłem nic, co mogło być przyczyną. Chodzi o Timer1.
Myślałem, że kod jest bardziej przenośny.
Proszę o sprawdzenie kodu:
//ATmega8L kwarc zewnetrzny 4MHz
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t g_licznik = 0;
SIGNAL(TIMER1_COMPA_vect)
{
g_licznik++;
}
int rc5(void)
{
{
TODO
}
TIMSK = 0b00000000; // WYLACZENIE TIMER1
g_licznik = 0;
}
int main(void)
{
int komenda = 0;
DDRD =0x00; //wejscia
TCCR1B |= (1 << WGM12); // Ustawia timer w tryb CTC
OCR1A = 25; // Ustawia wartość pożądaną na 20kHz(50us) dla preskalera 8
TCCR1B |= (1 << CS11); // Ustawia timer z preskalerem Fcpu/8
sei();
while(1)
{
if(!(PIND & 0x40)) // odbiornik podlaczony do 0b1000000
{
TIMSK |= (1 << OCIE1A); // Zezwolenie na przerwania dla CTC
komenda = rc5();
}
TODO
}
}
Można go znaleść na stronie