‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Category:

Bit-Banging I2C (TWI) Software slave AVR

Простенькая задачка, но ковырял я её недели две, наверное.
Дело в том, что значительная часть модулей "Большого уха" имеет свои собственные набортные мозги в виде милипиздрических контроллерчиков ATtiny84. Оные чипы хоть и имеют внутри себя некий USI (universal serial interface), но после вдумчивого осмотра этого чуда я пришёл к выводу, что выигрыш от его использования незначителен. И понадеялся, что необходимые мне для работы интерфейсы я реализую чисто программными методами.

Например, для связи с чипами DDS и PLL используется старый-добрый SPI, в режиме мастера. Нет ничего проще - сдвиговый регистр и формирование такта делается в несколько строк.

Но вот понадобилось связать все модули в единую "сеть". Первоначально планировалось использовать шину I2C, так и спроектировано - трёхвольтовая шина обходит все-все платы, заходит в центральный контроллер, кой всеми ими и командует.

И с узлами I2C, реализованными аппаратно (микросхемы часов, перепрограммируемой ПЗУ, 16-битного порта), всё прекрасно работает. А с софтварной реализацией вот не склеилось.

Перепробовал несколько разных вариантов реализации, скачал образец с сайта Atmel (он не подходит под задачу, т.к. использует всё-таки некоторые аппаратные возможности контроллера - а у меня на всех платах ничего из используемого не выведено), прочитал пару веток специализированных форумов... где меня обрадовали, что чисто программную реализацию I2C сделать "очень сложно" и без поддержки со стороны железа почти невозможно добиться скоростей выше десятка кбит/с при частоте процессора 8МГц (у меня именно так - все "тиньки" тактируются от внутреннего RC-генератора... так проще, хоть и не очень стабильно).

Я уже почти отчаялся. Но потом осенило... Вощем, таки сделал я правильный finite state machine, даже с обработкой ошибок и всего такого - и удалось получить максимальную задержку реакции контроллера примерно в 5.5 мкс. То есть шина спокойно работает на скорости 100 кбит/с и ещё чуть запаса есть.

Прям даже настроение улучшилось. А то я жуть как не люблю такие ситуации, когда простая с виду задачка ставит в тупик.

Проект "Большое ухо" ещё на чуть-чуть приблизился к релизу.

P.S. Надо бы выложить код, хотя бы на AVRFreaks
P.P.S. И никакого ассемблера, если не считать за него вставки типа asm("nop");
Tags: приключения Электроника, радио
Subscribe

  • "Железный купол" в деле

    Впечатляет. И как удачно зашло на фоне коррупционного скандала с Нетаньяху...

  • письки мисиськи

    Они жили долго и счастливо, и вместе сгнили в общей могиле.

  • Просто так.

    Рекламный ролик школы города Фиксбург, на африкаанс и английском. Ну и что? Да так, просто этот Фиксбург не на каждой карте есть: население всего…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 11 comments

  • "Железный купол" в деле

    Впечатляет. И как удачно зашло на фоне коррупционного скандала с Нетаньяху...

  • письки мисиськи

    Они жили долго и счастливо, и вместе сгнили в общей могиле.

  • Просто так.

    Рекламный ролик школы города Фиксбург, на африкаанс и английском. Ну и что? Да так, просто этот Фиксбург не на каждой карте есть: население всего…