Здравствуйте,
Последние две недели пытаюсь использовать прерывания для опроса датчиков. И столкнулся с таким явлением:
(вырезал кусок кода связанный с прерываниями) с компьютера вызываю функцию usbFunctionRead происходит переключение выводов и вызывается прерывание в котором просто считаю число вызовов. В представленном коде все хорошо счет идет последовательный. Но если начать опрашивать еще датчик то все конртроллер зверееет..
В результате счет идет 1 2 5 7 8 10 11 12 15 и т.д. точно последовательность не фиксировал ...
откуда появляются дополнительные срабатывания прерываний??? Ведь получается что за один вызов функции сработало прерывание несколько раз. Срабатывание прерываний настроил на задний фронт ... но ведь это и не важно покуда в первом случае все хорошо, а функции опероса датчика никак не использует прерывания или порт B.
Дополнение:
Даже когда в качестве сигнала прерывания использую выход датчика (сигнал об окончании преобразования) прерывание щелкает несколько раз и ничего в итоге не работает
Раздел: AVR
Последние две недели пытаюсь использовать прерывания для опроса датчиков. И столкнулся с таким явлением:
ISR(INT1_vect)
{
pdata.pressure++;
DDRB=0b11111111;
}
uchar usbFunctionRead(uchar *data, uchar len)
{
DDRB=0b00000000;
}
int main(void)
{
DDRB=0b11111111;
}
(вырезал кусок кода связанный с прерываниями) с компьютера вызываю функцию usbFunctionRead происходит переключение выводов и вызывается прерывание в котором просто считаю число вызовов. В представленном коде все хорошо счет идет последовательный. Но если начать опрашивать еще датчик то все конртроллер зверееет..
ISR(INT1_vect)
{
pdata.pressure++;
DDRB=0b11111111;
}
uchar usbFunctionRead(uchar *data, uchar len)
{
DDRB=0b00000000;
adxl345_getdata(&pdata.ax, &pdata.ay, &pdata.az); // опрос датчика по i2c
}
int main(void)
{
DDRB=0b11111111;
}
В результате счет идет 1 2 5 7 8 10 11 12 15 и т.д. точно последовательность не фиксировал ...
откуда появляются дополнительные срабатывания прерываний??? Ведь получается что за один вызов функции сработало прерывание несколько раз. Срабатывание прерываний настроил на задний фронт ... но ведь это и не важно покуда в первом случае все хорошо, а функции опероса датчика никак не использует прерывания или порт B.
Дополнение:
Даже когда в качестве сигнала прерывания использую выход датчика (сигнал об окончании преобразования) прерывание щелкает несколько раз и ничего в итоге не работает
Раздел: AVR