Witam
Z braku Atmega8 kupiłem Atmegę88, zastosowałem się do manuala migracji z Atmegi8 na Atmegę8, pozmieniałem rejestry..
Wyświetlacz działa, ale nie działa najważniejsze obsługa zliczania impulsów z urządzenia zewnętrznego i podczas wchodzenia do przerwania INT0_vect samoczynnie się restartuje, wszystkie zmienne wewnątrz procedury przerwania są volatile.
Proszę o jakieś wskazówki.
Pozdarwiam
Z braku Atmega8 kupiłem Atmegę88, zastosowałem się do manuala migracji z Atmegi8 na Atmegę8, pozmieniałem rejestry..
Wyświetlacz działa, ale nie działa najważniejsze obsługa zliczania impulsów z urządzenia zewnętrznego i podczas wchodzenia do przerwania INT0_vect samoczynnie się restartuje, wszystkie zmienne wewnątrz procedury przerwania są volatile.
volatile uint16_t sum_of_bit=0;
volatile uint8_t is_start_frame=0;
#define ENABLE_INTO_ANY EICRA|=_BV(ISC10);EICRA&=~_BV(ISC01);EICRA|=_BV(ISC00);EIFR = (1<<INTF0);EIMSK=_BV(INT0);
#define max 100
volatile uint16_t rfid_c=0;
volatile uint8_t time_pin[max+1];
volatile uint8_t time_pin2[max+1];
#define TIMER_OFF_64() TCCR0A=0;
#define TIMER_ON_64() TCCR0A|=(1<<CS00)|(1<<CS01);
ISR(INT0_vect)
{
int _counter=0;
sum_of_bit=0;
if(rfid_c==max)
{
uint8_t _i=0;
for (_i=0;_i<=max;_i++)
{
sum_of_bit+=time_pin[_i]+time_pin2[_i];
}
}
TIMER_OFF_64();
TIMER_ON_64();
TCNT0=0;
uint8_t _size=60;
uint8_t _size2=120;
if(rfid_c< max)
{
uint8_t _counter=0;
if(bit_is_clear(PIND,PD2))
{
for(_counter=0;_counter<=30000;_counter++)
{
if(bit_is_set(PIND,PD2))
{
break;
}
}
time_pin[rfid_c]=TCNT0;
if((time_pin[rfid_c]>20)&&(time_pin[rfid_c]<=_size)) time_pin[rfid_c]=45;
if((time_pin[rfid_c]>80)&&(time_pin[rfid_c]<=_size2)) time_pin[rfid_c]=90;
if(time_pin[rfid_c]>_size2)
{
rfid_c=0;
}else
{
rfid_c++;
}
}else
{
for(_counter=0;_counter<=30000;_counter++)
{
if(bit_is_clear(PIND,PD2))
{
break;
}
}
time_pin2[rfid_c]=TCNT0;
if((time_pin2[rfid_c]>20)&&(time_pin2[rfid_c]<=_size)) time_pin2[rfid_c]=45;
if((time_pin2[rfid_c]>80)&&(time_pin2[rfid_c]<=_size2)) time_pin2[rfid_c]=90;
}
}
TIMER_OFF_64();
}
....
int main(void)
{
//ustawienia portów
init_ports();
TIMSK0 = 0x04;
TCCR1B = 0x01;
ENABLE_INTO_ANY;
sei();
while (1)
{
_delay_ms(1000);
}
Proszę o jakieś wskazówki.
Pozdarwiam