Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

Мы научились: управлять микроконтроллером и управлять чем то, при помощи микроконтроллера. Теперь, чтобы сделать наше устройство более дружелюбным, будем к нему подключать дисплей.

Сразу оговорюсь дисплей — символьный. Это значит что внутри у него, в памяти, уже есть алфавит. Все что нам нужно — дать команду вывести строку.

Дисплеи бывают разные: разный цвет подсветки экрана, разное количество строк, разное количество символов в строке. Поэтому, здесь рассматривается дисплей WH0802A-YGK-CT, 2 строки по 8 символов, подсветка желтая светодиодная.

Создадим проект в CodeVision. На вкладке LCD укажем порт, к которому будет подключен наш дисплей (PORTD). В строке Char/Line указываем количество символов нашего ЖК дисплея (8).

Генерируем, сохраняем проект. Приводим код к следующему виду:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <mega8.h>
 
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h> 
 
void main(void)
{
PORTD=0x00;
DDRD=0x00;
lcd_init(8);
 
while (1)
{
 
};
}

Добавились новые строчки

#asm
.equ __lcd_port=0x12
#endasm
Дисплей подключен к PORTD
#include <lcd.h> Библиотека для работы с LCD дисплеями

 

Немного изменим код нашей программы:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 #include <mega8.h>
 
#asm
.equ __lcd_port=0x12
#endasm
#include <lcd.h>
 
void main(void)
{
 
PORTD=0x00;
DDRD=0x00;
 
lcd_init(8);
 
lcd_gotoxy(0,0);
lcd_putsf("lesson3");
 
#pragma rl+
lcd_gotoxy(0,1);
lcd_putsf("Урок3");
#pragma rl-
 
while (1)
{
 
};
}
lcd_gotoxy(0,0); Переставить курсор в координату ХУ,х – позиция по горизонтали,у – по вертикали
lcd_putsf(«lesson3»); Вывести слово lesson3 на LCD дисплей
#pragma rl+
lcd_putsf(«Урок3»);
#pragma rl-
Данная директива позволяет вывести на экран русский алфавит, при условии что дисплей его поддерживает

Запустим получившийся код на симуляцию в ISIS Proteus. Как видно первая строчка отображается правильно, а вот вторая кракозябами. Дело в том, что протеус не распознает русский алфавит и если ваш дисплей не будет поддерживать его, то на реальном дисплее тоже будут непонятные символы.

Теперь нужно опробовать все это на настоящем дисплее. Тут есть свои нюансы. Открываем даташит на наш дисплейчик и видим такую вот таблицу с распиновкой:

Наверное, тут все очевидно, но все же:

1 — Земля 0В.

2 — Питание +5В.

3 — Управление контрастностью. Подключается  через переменный резистор.

Светодиодная подсветка. Подключаем как обычный светодиод.

А — подключаем к «+» через токоограничивающий резистор, К — подключаем к «земле» (GND).

Еще один важный момент — микроконтроллер должен тактироваться от кварцевого резонатора, в противном случае корректная работа не гарантируется.

Внешний вид прошитого устройства

Файл прошивки и протеуса доступны тут

206 комментариев: Урок 3. Как подключить ЖК(LCD) дисплей к AVR микроконтроллеру

  • Ув. Админ, помогите подключить к Atmega8 ЖК экран MT-20s4a-2vlw, у него 16 выводов и что-то я запутался что куда. Хотелось бы на порт D его подключить или ему мало одного порта?

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

  • Подключить таки удалось, но теперь другая проблема. Включаю — ничего не видно. Подкручиваю переменник на контрастность (6.8 кОм поставил) — появляются цифры, выставляю нормальную контрастность и выключаю. Включаю — опять ничего не видно, надо полностью на плюс ткнуть контраст (выкрутить переменник до упора), потом опять вести — снова появляются цифры… Так чтоб включил и сразу было всё видно не получается. В чём может быть проблема?

  • плохо пропаяно скорее всего или где то напряжение просаживается, вольтметром измерьте напряжение контраста, потом после выключения сравните

  • Добрый день!
    Подключил WS1602, при этом указав это в мастере CAVR. На экране нет изображения. Только подсветка. На изменения уровня контрастности — нет реакции. Подскажите, пожалуйста, какие уровни должны быть на контактах платы LCD? Спасибо!

  • Здравствуйте, внезапно возникла проблема, по началу все работало нормально потом несколько сегментов LCD (2\4) полностью окрасились. В чем может быть причина? http://cdn.joxi.ru/uploads/prod/2014/04/25/ba4/ace/d569f93a6fd3fef3ec3da2d3b85939e6e5004934.jpg

  • что стоит в строке lcd_init(?)

  • Май, скорее всего дисплейчик помер

  • lcd_init(16); Но до того все нормально работало. А часто они так тупят и с чем может быть связано? Питание вроде норм ( 4,8 В , стабильное), котроллер работает тоже нормально…

  • Май, Попробуйте создать новый голый проект (т.е. только то, что сгенерирует wizard), если дисплей будет чистый, попробуйте добавить код, который выведет текст на первую и вторую строку. Если та же беда, проблема в дисплее.

  • День добрый. Подскажите пожалуйста,как подключить atmega8 к IEE 05464ASSY35119 ?

  • Даниил у меня нет такого дисплея, поэтому не знаю чем вам помочь

  • Добрый вечер, подскажите пожалуйста как подключить atmega128 к WG12864A??

  • Посмотрите 18 урок

  • Подскажите как вывести переменную с памяти МК на LCD экран.

  • char lcd_buf[17];
    void main(void)
    { 
    char a = 0;  
    lcd_init(16);   
     
    while(1)                 
          {            
              sprintf(lcd_buf,"a=%d", a);            
              lcd_puts(lcd_buf);        
          }
    
  • Блина, а где тест? Я его так полюбил! 😀 Спасибо, автор!

  • admin, работал с дисплеями от телефона?
    Купил дисплей Nokia 1100, прочитал кучу статей но негде ничего толкового НЕТ.

  • а почему именно эти ножки именно к тем подключены? Не пойму, где прочитать? Почему не D!1,D2,D3 и все такое

  • У LCD 2 режима, в первый 8 бит, когда используются все ножки D0-D7. Второй 4 бита, когда используются 4 ножки D4-D7. Почитать можно здесь:
    http://avr-start.ru/?p=2048

  • Спасибо, буду изучать

  • Добрый день, не могу понять в чем проблема (повторение проблемы Алексей on 25.04.2014 в 16:24),
    включаю видно работает подсветка, но символы не выводятся 🙁
    МК atmega8l, подключил к порту D как и в статье.
    Мне пришлось выбирать alphanumeric lcd и дисплей модель HD44780 (сам дисплей у меня аналог WH0802A фирмы WINSTAR
    распиновка от дисплея:
    как на рисунке в протеус , подключил
    первый контакт дисплея к земле (минус),
    второй к +5
    третий к +5 через резистор 6 кОм. (пробовал менять и на меньший)
    11, 12, 13,14 к PD4,5,6,7
    В протеусе все работает…
    Но у меня в схеме не подключен кварц, МК работает от внутреннего. (может в этом проблема, сейчас просто нет в наличии). Фьюзы не менял, стоят заводские, прошил через понипрог только сам файл данных не трогая ничего остального.
    Помогите пожалуйста разобраться.

  • Контраст подбирается переменным резистором,, шанс того что вы угадаете постоянным небольшой. Прошивка в статье на 8МГц, мк с завода все на 1МГц, создайте проект заново, с частотой 1МГц.

  • Спасибо за ответ!
    Сделал на 1 МГц, результат тот же 🙁
    Но если я поставил не переменный резистор, все равно я же должен увидеть хоть что нибудь? А проверить работоспособность дисплея можно ли как то?
    Что я еще могу проверить сделать, подскажите?

  • Без резистора не увидишь.

  • Понял, спасибо!
    Возьму резистор, буду пробовать.
    А не посоветуете модель или хотя бы начальные и конечные данные сопротивления?
    Я новичок в схемотехнике и тем более в МК, поэтому если не правильно выразился, извините…

  • Берите любой 5-10 кОм, например SH-083 (СП3-38а)

  • Спасибо!!!

  • Нашел в «свалке» переменный резистор на 6,5 кОм
    Повесил в схему, при изменении сопротивления, изменения на дисплее не заметил, т.е. не ярче не тусклее не делается…
    Сделал вывод текста в цикле вместе с мигающим светодиодом, для того что бы понять работает ли прога, светодиод мигает. Уже не знаю куда смотреть…

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

  • Вывод в цикле я сделал с задержкой в 5 сек…
    Позваниваю контакты, вот вопрос появился, что при подачи +5 на 2 что на 3 по отдельности контакт у дисплея загорается подствека, так и должно быть? я думал что это разные цепи…

  • Да и сопротивление между 2 и 3 контактом у дисплея имеется…
    А как же тогда происходит регуляция, если цепи замкнуты…
    Это я меряю отсоединенный дисплей от схемы…

  • подсветка на 2,3 ножку не может быть завязана, для этого отдельные контакты есть. скиньте фото устройства, можно на почту, можно на форуме

  • Ок, завтра буду на работе, сфоткаю, выложу ссылку, заранее большое спасибо!
    Есть желание разобраться, уже искося поглядываю на старый телефон жены — нокиа 1100 🙂

  • Добрый вечер всем. подскажите как вывести русские буквы на lcd? СV avr 2.x.x не подержует #pragma rl+

  • нужно конвертировать текст, есть такая прога lcd20 она поможет

  • в нижнем левом углу написано : warning unclown #pragma directive что это означает??????

  • Codevision начиная с версии 2 не понимает #pragma. Вариант только пользоваться конвертором текста

  • А ещё в версиях 2.хх не работает верхняя ассемблера вставка, она просто не нужна.
    + всем желающим писать кириллицей следует помнить, что в китайских дисплеях её нет.

  • здравствуйте.подскажите кусок кода!?
    надо что при нажатии определённой кнопки с матричной клавиатуры число выводилось на экран(это я сделал)но как сделать так чтоб оно добавлялось в переменную и там они собирались,но только не плюсовать:скажем так я отправил нажатием на кнопки 1,6,4,9 и они записываются в какую нибудь переменную но не складывая их вместе а так что при чтении этой переменной они выдавались в такой же последовательности как записывались а тоесть в данном случае 1,6,4,9.
    помогите с этим куском кодом накиньте мыслю пожалуйста,пол для пытаюсь сам освоить но результатов ноль…пожалуйста…

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

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

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика