AVR Урок 30. Подключаем дисплей 16×2 к МК ATtiny2313



 

Урок 30

Подключаем дисплей 16×2 к МК ATtiny2313

 

Сегодня мы попробовать воспользоваться более простым микроконтроллером ATtiny2313 и подключить к нему символьный дисплей LCD, содержащий две строки по 16 символов.

Дисплей мы будем подключать стандартным способом 4-битным способом.

Сначала начнём, конечно, с микроконтроллера, так как с дисплеем мы уже очень хорошо знакомы из предыдущих уроков.

Откроем даташит контроллера ATtiny2313 и посмотрим его распиновку

 

Image00

Мы видим, что данный контроллер существует в двух видах корпусов, но так как мне в руки он попал в корпусе DIP, то будем мы рассматривать именно эту версию корпуса, да и в принципе, они и не различаются особо, кроме чем по виду, так как количество ножек одинаково — по 20.

Так как ножек 20 по сравнению с 28 ножками контроллера ATMega8, к которым мы уже на протяжении всего времени занимаемся и ещё будем заниматься, то, соответственно, и возможностей также будет меньше.

В принципе, всё, что было у ATmega8, здесь есть, единственное то, что поменьше лапок портов. Но так как задача перед нами стоит попробовать соединить его по шине SPI с другим контроллеров, то нас это удручает не сильно.

Есть ещё некоторые отличия, но они незначительны и мы с ними познакомимся по мере необходимости.

Соберём вот такую вот схемку (нажмите на картинку для увеличения изображения)

 

Image01

Дисплей подключен к ножкам порта D. PD1 и PD2 — к управляющим входам, а остальные к ножкам модуля дисплея D4-D7.

Проект создадим с именем TINY2313_LCD, перенесём в него всё кроме главного модуля из проекта урока 12 по подключению дисплея к Atmega8.

Конечно, некоторые вещи надо будет переделать. Для этого нужно внимательно изучить, к какой ножке что подключено. Шина E дисплея подключена к PD2, а шина RS — к PD1, поэтому внесём изменения в файл lcd.h

 

#define e1 PORTD|=0b00000100 // установка линии E в 1

#define e0 PORTD&=0b11111011 // установка линии E в 0

#define rs1 PORTD|=0b00000010 // установка линии RS в 1 (данные)

#define rs0 PORTD&=0b11111101 // установка линии RS в 0 (команда)

 

Как мы видим из выделения жирным шрифтом, не такие уж и кардинальные изменения у нас произошли.

Теперь информационные входы. Здесь у нас используются ножки PD3-PD6, то есть на 1 пункт сдвинуты по сравнению с подключением к Atmega8, поэтому исправим ещё и кое что в файле lcd.c в функии sendhalfbyte

 

PORTD&=0b10000111; //стираем информацию на входах DB4-DB7, остальное не трогаем

 

 

Но это ещё не всё. Мы раньше передаваемые данные сдвигали на 4, а теперь нам в связи с вышеуказанными изменениями придётся их сдвигать только на 3. Поэтому в той же функции исправим ещё и самую первую строку

 

c<<=3;

 

Вот и все изменения. Согласитесь, не так уж они и велики! Это достигнуто тем, что мы всегда стараемся код писать универсальный и пользоваться именно макроподставновки. Если бы мы в своё время не потратили на это время, то нам пришлось бы исправлять код почти во всех функциях нашей библиотеки.

В главном модуле инициализацию порта D мы не трогаем, пусть весь встаёт в состояние выхода, как и в уроке 12.

Давайте попробуем собрать проект и посмотреть сначала результат в протеусе, так как для него я также сделал проект, который будет также находиться в приложенном архиве с проектом для Atmel Studio

 

Image02

 

У нас всё прекрасно работает! Вот как можно, оказывается быстро переделать проект для одного контроллера под другой.

Протеус — это очень хорошо, но на настоящие детальки посмотреть всегда приятнее. Схема вся была собрана на макетной плате, так как отладочной платы для данного контроллера я не делал и не собирал. Программатор мы подключим через стандартный разъём вот такой вот

 

Image03

 

Вот вся схема

 

Image04

 

Здесь всё стандартно. Подтягивающий резистор на RESET и т.д.

 

 

Теперь, прежде чем прошивать контроллер в avrdude, нам неоходимо выбрать контроллер и считать его флеш-память

 

Image05

 

Затем зайти во вкладки FUSES и установить правильно фьюзы. Так как у нас нет кварцевого резонатора, то мы устанавливаем фьюзы именно так

 

Image06

 

В видеоверсии урока также рассказано, где именно мы это всё берём в технической документации. Так что для кого это важно и кто собирается работать дальше именно с таким МК, то пожалуйста смотрите видеоурок, прикрепленный в самом низу страницы.

Теперь, установив всё именно так, нажимаем кнопку «Программирование» и прошиваем фьюзы.

Затем возвращаемся на первую вкладку, выбираем проект и прошиваем его

 

Image08

 

Смотрим результат нашей работы

 

Image09

 

Всё работает прекрасно!

Таким образом, не прилагая особых усилий. мы переработали проект, предназначенный для одного контроллера линейки AVR, в проект для совсем другого контроллера, подготовив данный контроллер к следующему занятию по подключению его к контроллеру ATmega8 по шине SPI.

 

 

Предыдущий урок Программирование МК AVR Следующий урок

 

Исходный код

 

 

Техническая документация:

Микроконтроллер Attiny2313

Модуль дисплея LCD1602

 

Программатор и дисплей можно приобрести здесь:

Программатор (продавец надёжный) USBASP USBISP 2.0

Дисплей LCD 16×2

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR Подключаем дисплей 16×2 к МК ATtiny2313

3 комментария на “AVR Урок 30. Подключаем дисплей 16×2 к МК ATtiny2313
  1. Александр:

    «Мы раньше передаваемые данные сдвигали на 4, а теперь нам в связи с вышеуказанными изменениями придётся их сдвигать только на 3.»
    Почему? «…мы сдвинем наш входной аргумент влево на 4 бита, так как работаем мы со старшими разрядами шины (4-7)». Мы же по прежнему работаем со старшими разрядами?

  2. Александр:

    Если собирать согласно схеме, то ничего хорошего не получится, так как выводы порта D PD3-PD6 не по порядку подключены к портам D4-D7 дисплея. Вот в проекте протеуса схема собрана правильно.

  3. Sergio:

    Александр, мы сдвигаем влево на 3 бита потому что для даты используем выводы
    PD3-PD6. На атмеге8 мы сдвигали на 4 бита и использовали выводы PD4-PD7.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*