В прошивке 3.1 этот баг пофиксен
Код:
if((start_bit_received)&&(high_level_counter > IR_ZERO*8)/*&&(bit_in_rx_buff>=13)*/)
{//Фиксируем окончание приема по таймауту
start_bit_received = false; //отменяем прием
if (bit_in_rx_buff>=13) rx_event = RX_COMPLETE; //Генерим событие "принят пакет"
else rx_event = RX_ERROR; //генерируем событие - "ошибка приёма"
receiver_on = false;//выключаем приемник
if (ir_transmitter_on==false) TIMSK &=~_BV(OCIE2); //если передача не ведётся - выключаем прерывания
}
Надо добавить пару сток
Код:
if (bit_in_rx_buff>=13) rx_event = RX_COMPLETE; //Генерим событие "принят пакет"
else rx_event = RX_ERROR; //генерируем событие - "ошибка приёма"
То есть для 3 версии должно быть так
Код:
ISR(TIMER2_COMP_vect){
timer1++;
volatile uint8_t prt;
prt = TSOP_IN&TSOP_PIN;
if (prt==0) //На ножке ИК-приемника низкий уровень сигнала (пойман сигнал несущей)
{
// PORTA &= ~(1 << 0); //включаем вспомогательный светодиод
low_level_counter++;//Увеличиваем счетчик длительности низкоуровнего сигнала на ножке ИК-приемника
if (chit_detected_counter < (IR_ZERO*1000)) chit_detected_counter++;
if (chit_detected_counter >= (IR_ZERO*1000)) chit_detected=true;
}
else //На ножке ИК-приемника высокий уровень сигнала (пойман сигнал несущей)
{
// PORTA |=(1<<0); //выключаем вспомогательный светодиод
chit_detected_counter = 0;
if (chit_detected) chit_detected=false;
high_level_counter++;///Увеличиваем счетчик длительности высокоуровнего сигнала на ножке ИК-приемника
if((start_bit_received)&&(high_level_counter > IR_ZERO*8))
{//Фиксируем окончание приема по таймауту
start_bit_received = false; //отменяем прием
if (bit_in_rx_buff>=13) rx_event = RX_COMPLETE; //Генерим событие "принят пакет"
else rx_event = RX_ERROR; //генерируем событие - "ошибка приёма"
}
Попробуйте.
Не получится - сам сделаю.
И спасибо за помощь в ловле багов!