Использован програмный так уже сложилось в данной реализации.
Но я не спорю о надёжности данной шины но вот в Bascom программная реализация оказалась увы... Меня инетересует как это в Bascom всё работает а пока что оно себя показало нет устройства и всё зависло всё надёжность кончилась, то есть неполадка на шине и всё. По SPI похер было на отсутвующее устройство, при записи вообще SPI пофиг что там, даже при чтении отсутвии устройва вообще прочиталось все байты 255 и всё.
Зависает программа после обращения в I2C а не шина или что там могло бы зависнуть что бы ради чего я стал писать бы. Зависнуть неподлюченное или сдозшее устройство как ради такого точно бы не стал.
Хотя при стартовой инициализации зависает когда прерывания еще не включались.
Я видел что отписывались что Bascom реализация I2C такая удогая что работает лишь иногда.
Так о таймере по подробнее можно? Может который еще не запущен? Но Timer1 на mega328 используется для измерения времени, после ухода в обработку приёма таймер останавливается, да и его нельзя трогать никак нельзя!
Тут всё достаточно неоднозначно, после приёма данных с аппарата опрос датчика проиходит при отключенных прерываниях уже, при отсутвии сигнала просто датчик опрашивается для измерения температуры и давления, для отображения их. Это опрос датчика BMP280 на ПДУ для измерения высота аппарата относительно ПДУ. Прерывания не много время тянут там снимаеся время с таймера принимается бит и всё, частота прерываний без сигнала ~20кГц.
Но вообще используются прерывания, да именно по причине прерываний в таких решениях только синхронные шины, асинхронные типа 1wire сбоят, приоритет прерываниям. Зы даже Uart колбасит, потому по Uart общение при отключенной приёме. Но SPI всё чётко! Да там можно это подключить на SPI но всё же надо с I2C разобраться.
Данные на экран выводятся каждую секунду по SPI MAX7456.
Это 1-я версия ПДУ надо всё тут отладить что бы во 2-й уже сразу определиться что где будет.
UART вообще не используется!
Для обмена данными между МК который работет в реальном времени у меня есть протокол полностью фоновый данные передаются синхронно с подтверждением, принял следующий такт. Фоновый потому что не ограничивает время ожидания, данные передаются когда есть такт функции, тут всё хорошо если время есть скорость получается высокая. То есть принял поставил что принял, другой обнаружил что принято передаёт следующий байт/бит зависит от разрядности. UART тут работать не будет нормально.
Да я код добавил а датчик еще не подключался из-за его отсутвия еще. Возможно правда проблема в том что таймеры еще все стоят при конфигурации датчика и там же сразу виснет.
1wire при отсутвии устройка выдаёт ошибку но никаких сбоев в программе не было еще!
Отредактировано RadioHAM-433 (2020-02-23 04:00:37)