SPI для ATtiny2313

Во всех микроконтроллерах семейства Mega имеется аппаратный модуль SPI. Он очень прост в своём использовании. После настройки и инициализации модуля нужно записать в регистр SPDR передаваемый байт данных — это запустит генератор тактового сигнала SPI,  данные начнут передаваться от Master к Slave и обратно. После установки флага окончания передачи в SPDR  будет находиться принятый байт. В общем всё  просто. Да и по моему мнению SPI самый лёгкий в освоении и использовании интерфейс, к тому же достаточно скоростной. Однако в некоторых контроллерах семейства Tiny аппаратного SPI нет — там установлен модуль USI, например в очень распространённой и применяемой ATtiny2313. На различных форумах я встречал неоднократные вопросы по поводу использования USI в качестве SPI, т.е. у народа возникают некоторые трудности. ?, хотя, USI, может быть, чуть сложнее SPI, но особых трудностей при разборе его работы возникнуть не должно. Основные части USI — это сдвиговый 8-ми разрядный регистр (для передачи/приёма данных)  и 4-х разрядный счётчик (для определения окончания передачи).  В тонкости построения USI я углубляться не буду — кто захочет разобраться подробнее тот раскурит даташит. Главное отличие работы USI в режиме SPI от аппаратного SPI семейства Mega — то, что синхроимпульсы для передачи/приёма формируются не аппаратно, а,  или программно, или от внешнего источника, или по прерыванию таймера 0. Кроме того, сдвиговый регистр и 4-х разрядный счётчик можно тактировать от разных источников, что позволяет построить на основе USI некоторые дополнительные модули.
В даташите на ATtiny2313 есть программные примеры на ассемблере для работы USI в качестве SPI. Я их переписал на Си, сохранив логику работы один к одному,  и успешно использую в своей работе.
Для демонстрации работы USI в качестве SPI, я возьму микроконтроллерные модули с ATtiny2313 и ATmega8, клавиатуру, в которой использую только одну кнопку и ЖК?.
Опыт №1. 2313-я MASTER 8-я SLAVE.
Скачиваем архив. В нём две папки. В папке USI_SPI — проект для ATtiny2313, а в папке SPI — для ATmega8A. Внимательно просмотрите исходники каждого проекта — там написано, что нужно раскомментировать и что нужно закомментировать для  настройки MASTER/SLAVE (Подсказка: там два варианта главной функции). Также в каждом проекте подключены заголовочный и Си-шный файлы для работы с ЖК? HD44780. Они необходимы для отображения принятых символов. Откомпилируйте проекты, чтобы 2313-я выступала в качестве MASTER, а 8-я — SLAVE и прошейте контроллеры. По разделу defane посмотрите назначение выводов, и,  соответственно им соберите макет (Подсказка: для подключения ЖК? (он подключается к SLAVE), что в 2313-й, что в 8-й используется порт D. PD0 — PD3 МК — DB4 — DB7 ЖК?, PD4 — RS, PD5 — EN). Кнопка (подключается к MASTER)  тоже вешается одинаково — на PD1.
Собрали макет. Подали питание. На ЖК? должна высветиться надпись ОК — значит , по крайней мере: 1) ЖК? подключён правильно; 2) компиляция и прошивка SLAVE прошла успешно. Нажимаем кнопку и наблюдаем на ЖК? SLAVE приём символов (я использовал десятичные цифры. Вот фотка где 2313 — MASTER.
 Опыт №2. 2313-я SLAVE 8-я MASTER.
Теперь компилируем  проекты, чтобы 2313-я выступала в качестве SLAVE, а 8-я — MASTER и соответственно прошиваем. ЖК? подключаем на 2313-ю, а кнопку — на 8-ю. Не забудьте ПОМЕНЯТЬ местами соединители с MISO на MOSI для 8-й. Повторяем действия из опыта №1. Убеждаемся в чёткой работе. Фотку демонстрировать не вижу смысла, т.к. она ничем не отличается, кроме подключения проводов.
В данной реализации SPI, что для ATtiny2313, что для ATmega8A, я не использовал прерывания, а также различные варианты тактирования для 2313. Всё это в Ваших руках, вернее в головах. Целью данной статьи было показать простейшие способы реализации интерфейса SPI.   Для tiny, точно так, как и в даташите, есть два варианта функций передачи данных. Я замерял частоту тактовых сигналов «быстрого» варианта с кварцем 20 МГц — реально вышло 10 МГц!
Готовые исходники, я думаю, пригодятся Вам в дальнейшем творчестве. Всем удачи.

Запись опубликована в рубрике Микроконтроллерный конструктор с метками , . Добавьте в закладки постоянную ссылку.

27 комментариев на «SPI для ATtiny2313»

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.