Zabor-33.ru

Строительный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как подключить tft дисплей к микроконтроллеру

Микросхема дисплейного контроллера T CON для LCD панелей TFT

Одним из самых важных элементов современных LCD-панелей является, так называемый, Timing Controller – TCON. Микросхемой TCON осуществляется преобразование сигналов, полученных от видеоконтроллера в сигналы управления столбцовыми драйверами LCD-матрицы. В подавляющем большинстве случаев микросхема TCON входит в состав LCD-панели, т.е. образует вместе с матрицей единый неразборный модуль, и является практически недоступной для диагностики и, тем более, для ремонта. К тому же, вероятность отказа этой микросхема достаточно низка. Но в то же самое время существует значительное количество LCD-панелей, в которых электронная «начинка» доступна, и в случае неисправности ЖК-панели, вполне реально обеспечить более тонкую диагностику на уровне сигналов и отдельных микросхем. Кроме того, знание принципов функционирования контроллера TCON позволит специалистам подходить к ремонту LCD-мониторов более осмысленно и профессионально.

Для начала стоит напомнить нашим читателям некоторые аспекты построения LCD-панелей. Так как современные экраны мониторов образованы матрицами на жидких кристаллах (ЖК), состоящими из большого числа отдельных ячеек, реализовать прямую адресацию всех этих ячеек физически невозможно. Так, например, цветная матрица с разрешением 1600х1200 точек содержит 5.760.000 ячеек ([1600х3]х1200), т.е. для управления ею требуется почти 6 миллионов ключей и столько же управляющих сигналов.

Единственным выходом при реализации ЖК-панели с большим числом элементов изображения является мультиплексирование. Это значит, что элементы изображения (пикселы, точки) находятся на пересечении системы электродов строк (Row) и столбцов (Column). При этом количество элементов управления значительно уменьшается. Если вернуться к нашему примеру, то при использовании матрицы с разрешением 1600х1200 точек, требуется 4800 столбцовых ключей и 1200 строковых ключей. Для повышения технологичности изделия и снижения массогабаритных характеристик строчные и столбцовые ключи имеют, чаще всего, интегральное исполнение, т.е. выполнены в виде микросхем. Такие микросхемы получили название драйверов строк и драйверов столбцов. Типовая блок-схема модуля управления графическим ЖК-дисплеем показана на рис.1.

Рис. 1

Драйверы строк (Row Driver – RD) содержат сдвиговый регистр на N-разрядов, схему преобразования логических уровней в уровни напряжения для управления строками, а также схему управления сменой полярности. В начале кадра в регистр записывается логическая «1». По фронту или спаду сигнала строчной развертки эта единица сдвигается в следующий разряд регистра до тех пор, пока не достигнет последнего разряда. Для наращивания разрядности может использоваться несколько микросхем драйверов строк (метод каскадирования). При каскадировании используется эстафетный механизм, который заключается в следующем: как только в последнем разряде сдвигового регистра появится логическая «1», будет активизироваться микросхема следующего драйвера, т.е. следующим импульсом сигнала строчной развертки эта единица переходит в первый разряд сдвигового регистра следующего драйвера строк.

Драйверы столбцов (Column Driver – CD) построены по другой схеме. Эти драйверы содержат M-разрядный регистр, запись в который может производиться по шине с различной разрядностью. Эта шина может быть и одноразрядной (предельно-простой случай), а может быть и 2-, 4-, 8-разрядной. В современных же микросхемах драйверов столбцов, предназначенных для ЖК-панелей с высоким разрешением, шина может быть и 18 и 36-разрядной. По сигналу строчной развертки данные из буферного регистра переписывается в выходной регистр. Логические уровни выходного регистра преобразуются в рабочие уровни напряжений для управления столбцами графического ЖК-дисплея. Такое преобразование осуществляется схемой смещения, входящей в состав столбцового драйвера.

Большая часть современных мониторов производится на основе матриц с активной адресацией, в которых на пересечении строки и столбца имеется ключевой нелинейный элемент – тонкопленочный транзистор (TFT – Thin Film Transistor). Топология матрицы с активной адресацией показана на рис.2.

Рис. 2

Как видно из этого рисунка, для управления транзистором TFT необходимо обеспечить формирование определенных уровней напряжения на его затворе (GATE) и на его стоке (SOURCE). И из этого же рисунка видно, что столбцовыми драйверами формируются напряжения стока, а драйверами строк обеспечивается формирование напряжений затвора. Поэтому при описании элементной базы LCD-панелей типа TFT понятие столбцового драйвера заменяется термином драйвера стока (Source Driver), а вместо драйвера строки вводится термин драйвер затвора (Gate Driver).

Управление драйверами срок и столбцов осуществляется микросхемой контроллера синхронизации – Timing Controller (TCON). Иногда в литературе микросхему ТCON называют дисплейным контроллером. Как уже говорилось ранее, микросхемой TCON обеспечивается прием и преобразование данных от видеоконтроллера, и перераспределение этих данных по микросхемам драйверов строк и столбцов (рис.3). Как правило, драйверы строк и столбцов ЖК-панели с достаточно высоким разрешением состоят из нескольких микросхем, образующих каскадное соединение.

Читайте так же:
Мокреют пластиковые окна откосы

Рис. 3

Одним из представителей микросхем класса TCON является микросхема SN75LVDS88, разработанная и производимая корпорацией Texas Instruments. Эта микросхема TCON имеет внешний интерфейс LVDS, что, кстати, и следует из маркировки микросхемы. Если быть более точным, то для передачи данных от видеоконтроллера на TCON используется интерфейс FlatLinkTM, являющийся одним из вариантов LVDS. Классический вариант LVDS и его разновидность FlatLinkTM представляет собой четыре пары дифференциальных сигналов для передачи сигналов красного, синего и зеленого цветов, а четвертая дифференциальная пара используется для передачи сигналов синхронизации.

Микросхема SN75LVDS88 традиционно входит в состав LCD-панели и ее функциональным назначением является обеспечение интерфейса между внешним графическим контроллером и TFT-матрицей. Общая блок-схема контроллера SN75LVDS88 представлена на рис.4.

Рис. 4

К особенностям этой микросхемы можно отнести:

— 6-разрядный системный интерфейс;

— поддержка разрешающей способности стандарта XGA;

— поддержка основного потока данных и данных драйверов затвора (Gate Driver);

— наличие дополнительных контактов конфигурации;

— построение по низковольтной технологии CMOS с питающим напряжением 3.3 В;

— наличие входа ФАПЧ c частотой 65 МГц;

— реализация в 100-контактном корпусе типа TQFP;

— устойчивость к электростатическим разрядам величиной до 4 кВ по контактам шины LVDS, все остальные выводы микросхемы выдерживают электростатические разряды до 2кВ;

— повышенная устойчивость к электромагнитным помехам.

Цоколевка корпуса микросхемы SN75LVDS88 представлена на рис.4, а назначение сигналов описывается в табл.1.

Таблица 1.

Обозначение

контакта

Дифференциальная пара (первая) входных сигналов интерфейса FlatLink TM для передачи последовательного потока данных одного из цветов ( R , G , B ) от внешнего графического контроллера.

Дифференциальная пара (вторая) входных сигналов интерфейса FlatLink TM для передачи последовательного потока данных одного из цветов ( R , G , B ) от внешнего графического контроллера.

Дифференциальная пара (третья) входных сигналов интерфейса FlatLink TM для передачи последовательного потока данных одного из цветов ( R , G , B ) от внешнего графического контроллера.

Сигнал тактовой частоты для столбцовых драйверов. Этим сигналом тактируется загрузка в регистры столбцовых драйверов данных, формируемых на выходах ER 0- ER 5, OR 0- OR 5, EB 0- EB 5, OB 0- OB 5, EG 0- EG 5, OG 0- OG 5.

Сигнал тактовый частоты для столбцовых драйверов, сдвинутый по фазе на 180° относительно сигнала CLK .

Дифференциальная пара входных сигналов интерфейса FlatLink TM . Эта пара используется для передачи тактовых сигналов интерфейса LVDS .

Сигнал тактовой частоты, используемый для управления драйвером строк ( Gate Driver ).

Входной сигнал, используемый для управления последовательностью данных, передаваемых на столбцовые драйверы. При установке этого сигнала в низкий уровень (лог.0), контроллером TCON на выходе формируется нормальная последовательность сигналов цвета для загрузки столбцовых драйверов (сначала передаются данные красного, затем зеленого и потом уже синего цвета – RGB ). При установке сигнала DBS в высокий уровень (лог.1) контроллером TCON обеспечивается формирование обратного порядка сигналов цвета – BGR – для загрузки столбцовых драйверов.

Сигнал, являющийся индикатором «полярности» выходных сигналов четного канала данных для столбцовых драйверов ( ER 0- ER 5, EB 0- EB 5, EG 0- EG 5), т.е. этот сигнал показывает, каким уровнем активны сигналы четного канала данных – высоким или низким.

Выходная 6-разрядная шина четных данных красного цвета, при условии, что используется нормальная последовательность загрузки столбцовых драйверов ( RGB ), т.е. когда сигнал DBS установлен в низкий уровень. При «обратном» порядке сигналов цвета ( BGR ), т.е. при высоком уровне сигнала DBS , эти выводы используются для передачи данных синего цвета.

Выходная 6-разрядная шина четных данных синего цвета, при условии, что используется нормальная последовательность загрузки столбцовых драйверов ( RGB ), т.е. когда сигнал DBS установлен в низкий уровень. При «обратном» порядке сигналов цвета ( BGR ), т.е. при высоком уровне сигнала DBS , эти выводы используются для передачи данных красного цвета.

Выходная 6-разрядная шина четных данных зеленого цвета.

Сигнал, являющийся индикатором «полярности» выходных сигналов нечетного канала дан-ных для столбцовых драйверов ( OR 0- OR 5, OB 0- OB 5, OG 0- OG 5), т.е. этот сигнал показывает, каким уровнем активны сигналы нечетного канала данных – высоким или низким.

Читайте так же:
Монтаж подоконников с откосами

Выходная 6-разрядная шина нечетных данных красного цвета, при условии, что используется нормальная последовательность загрузки столбцовых драйверов ( RGB ), т.е. когда сигнал DBS установлен в низкий уровень. При «обратном» порядке сигналов цвета ( BGR ), т.е. при высоком уровне сигнала DBS , эти выводы используются для передачи данных синего цвета.

Выходная 6-разрядная шина нечетных данных синего цвета, при условии, что используется нормальная последовательность загрузки столбцовых драйверов ( RGB ), т.е. когда сигнал DBS установлен в низкий уровень. При «обратном» порядке сигналов цвета ( BGR ), т.е. при высоком уровне сигнала DBS , эти выводы используются для передачи данных красного цвета.

Выходная 6-разрядная шина нечетных данных зеленого цвета.

Записки программиста

Осваиваем работу с цветными TFT-дисплеями на базе ST7735

Если зайти на eBay и ввести в поиске «ST7735», можно найти немало модулей с дисплеем на базе данного контроллера. Модули обычно бывают двух типов — с TFT-дисплеем диагональю 1.44″ и разрешением 128 x 128 пикселей, а также с диагональю 1.8″ и разрешением 128 x 160 пикселей. Последние в большинстве случаев также имеют и разъем для подключения SD-карт. Дисплеи позволят отображать 65536 цветов в палитре R5G6B5. Интересны данные модули тем, что будучи чуть-чуть дороже популярных 0.96-дюймовых OLED-экранчиков на базе SSD1306 предлагают существенно большие разрешение и диагональ, а также в

30 тысяч раз больше цветов.

Fun fact! Еще есть шилд для Arduino от Duinopeak с 1.8-дюймовым дисплеем, джойстиком и разъемом для SD-карт, а также шапка для Raspberry Pi от WaveShare с 1.44-дюймовым дисплеем, джойстиком и тремя кнопками . Однако цена этих модулей с учетом доставки относительно высока. Кроме того, на AliExpress доступны укороченные 0.96-дюймовые модули с разрешением 80 x 160.

Модули питаются от 3.3 В или 5 В, имеют подсветку (которая питается только от 3.3 В, благодаря чему ее легко случайно спалить!) и используют SPI-подобный протокол. Желающие посмотреть на конкретные единички и нолики протокола, могут воспользоваться Sigrok и соответствующим .sr файлом из репозитория sigrok-dumps. Также мной был написан простенький декодер протокола ST7735 для Sigrok, но на момент написания этих строк патч еще не был вмержен в основную ветку (UPD: как оказалось, на самом деле он уже вмержен, см раз и два).

В PulseView протокол выглядит как-то так:

Команды и данные передаются с помощью пинов SCLK и MOSI, с порядком бит msb-first, как в обычном SPI. Здесь байт B1 является кодом команды FRMCTR1, а байты 01, 2C и 2D — аргументами этой команды. Отличить аргументы от команды можно по пину DC (data or command), который имеет низкое напряжение для команд и высокое для данных. Также можно заметить, что CS (chip select) можно смело менять посреди передачи фрейма. Как и в традиционном SPI, чип выбран, когда напряжение на CS низкое. Наконец, пин RES позволяет сбросить состояние контроллера, подав на этот пин низкое напряжение.

Для получения приведенной выше картинки я использовал Arduino Uno и библиотеку для ST7735 от Adafruit. В версиях этой библиотеки старше 1.0.8 также вкорячили поддержку ST7789, с иерархиями классов, обмазкой всего макросами, и всяким таким. Из-за этого код библиотеки стал намного труднее для восприятия. Любопытно, что ST7789 не является слишком уж распространненым контроллером. Он похож на ST7735, но в виде модуля продается только в магазине Adafruit за сравнительно большие деньги. Модуль имеет разрешение 240 x 240 при диагонали 1.54″. В своих проектах я бы не стал использовать этот модуль из-за небольшой диагонали, высокой стоимости и завязки на одного производителя. А для изучения работы интересного мне ST7735 я использовал тэг 1.0.8 библиотеки.

Было решено спортировать библиотеку от Adafruit на STM32. Конечно, под STM32 нашлись и готовые библиотеки. Но, во-первых, использование готового кода — это скучно 🙂 Во-вторых, оно не приводит к появлению нормального понимания работы устройства. Наконец, в-третьих, библиотеки, которые мне удалось найти, были написаны хардкорными бородатыми эмбеддерами, привыкшими делать все напрямую через регистры и бинарные сдвиги. Не будучи хардкорным бородатым эмбеддером, я предпочитаю библиотеки без преждевременных оптимизаций, основанные на HAL, которые легче в поддержке и расширении.

Читайте так же:
Окна пвх с наружными откосами

Интерфейс библиотеки вышел следующим:

void init ( ) <
ST7735_Init ( ) ;
>

void loop ( ) <
// Check border
ST7735_FillScreen ( ST7735_BLACK ) ;

for ( int x = 0 ; x ST7735_WIDTH ; x ++ ) <
ST7735_DrawPixel ( x , 0 , ST7735_RED ) ;
ST7735_DrawPixel ( x , ST7735_HEIGHT — 1 , ST7735_RED ) ;
>

for ( int y = 0 ; y ST7735_HEIGHT ; y ++ ) <
ST7735_DrawPixel ( 0 , y , ST7735_RED ) ;
ST7735_DrawPixel ( ST7735_WIDTH — 1 , y , ST7735_RED ) ;
>

// Check fonts
ST7735_FillScreen ( ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 0 , «Font_7x10» , Font_7x10 ,
ST7735_RED , ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 3 * 10 , «Font_11x18» , Font_11x18 ,
ST7735_GREEN , ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 3 * 10 + 3 * 18 , «Font_16x26» , Font_16x26 ,
ST7735_BLUE , ST7735_BLACK ) ;
HAL_Delay ( 2000 ) ;

// Check color inversion
ST7735_InvertColors ( true ) ;
HAL_Delay ( 2000 ) ;
ST7735_InvertColors ( false ) ;
HAL_Delay ( 2000 ) ;

// Display test image
ST7735_DrawImage ( 0 , 0 , ST7735_WIDTH , ST7735_HEIGHT ,
( uint16_t * ) test_img_128x128 ) ;
HAL_Delay ( 15000 ) ;
>

Пример вывода текста на дисплей с диагональю 1.44″:

Интересно, что если в случае SSD1306 можно было спокойно хранить всю картинку в памяти и каждый раз передавать ее дисплею целиком, то в случае с ST7735 этого уже так просто сделать нельзя. Тут и цвет 16-и битный, а не монохромный, да и разрешение в 2-2.5 раза выше. Чтобы хранить картинку в памяти микроконтроллера, понадобится 32 Кб для дисплея 128 x 128 и 40 Кб для дисплея 128 x 160. Тем временем, какой-нибудь STM32F103C8T6, используемый в Blue Pill, имеет всего 20 Кб RAM. Конечно, используемый в Nucleo-F411RE микроконтроллер STM32F411RET6 имеет уже 128 Кб RAM. Но мне хотелось бы, чтобы библиотека работала на любом микроконтроллере, и желательно без хаков типа использования 4-х битной палитры, уменьшения разрешения или использования индексированных цветов. Поэтому, в отличие от библиотеки для SSD1306, библиотека для ST7735 сразу отправляет все данные дисплею и ничего не хранит в памяти.

В первом приближении, это все, о чем я хотел сегодня рассказать. Желающие ознакомиться с полной версией кода к этой заметке могут найти его на GitHub. Код работает с дисплеями, имеющими разрешение 80 x 160, 128 x 128 и 128 x 160 пикселей, требуется лишь немного подправить файл st7735.h в соответствии с комментариями в нем. Наиболее же полную информацию о ST7735 вы найдете в даташите [PDF].

А доводилось ли вам использовать подобные модули, и если да, то в каких проектах?

Arduino и символьный LCD-дисплей

Как подружить плату Ардуино с символьным дисплеем? Довольно просто! Все ниже по порядку и с подробностями.

Если есть желание получать информацию от Ардуино без подключения к компьютеру и вывода на серийный порт, можно использовать символьный дисплей. Сделать это не так сложно. Полученное удобство от общения неоценимо.
Для работы я использовал символьный LCD-дисплей J204A на базе чипа HD44780, на eBay часто встречается как LCD2004. 4 строки по 20 символов, инвертированный. Куплен с кучей других на eBay, за сущие копейки, от 60 до 100 рублей за штуку. Русский язык не поддерживается по-умолчанию, но это решаемая проблема, об этом как нибудь в следующий раз. И еще коннекторы на схеме не распаяны, придется поработать паяльником.
Для работы с дисплеями используется библиотека LiquidCrystal.h входящая в дефолтную постаку Arduino IDE.

Сам экран.

А результат мы получим вот такой!

На снимке ниже вся работа с паяльником уже выполнена. Гребенка припаяна так специально, с ориентацией подключения с верхней стороны, там же где и экран. Тут видно насколько удобно в таком случае подключать дисплей. Хотя, возможно, кому-то будет удобнее сразу втыкать дисплей в макетную плату, тогда лучше припаять контакты наоборот.

И с другой стороны.

Подключение контактов и использование устройства подробно описано в даташите.

Информация по микроконтроллеру дисплея HD44780-datasheet .

А вот даташита по дисплею LCD2004 я не нашел, но зато в интернетах полным полно таблиц по дисплею LCD1602. Но они практически не отличаются друг от друга. По управлению и подключению полностью идентичны. Отличие только в количестве строк/символов на дисплее. Но это абсолютно не повлияет если у вас 1602.

Читать PDF с техническими данными не обязательно. Ниже я все объясню в деталях, но если нужны подробности, то все можно найти в даташите.

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

Читайте так же:
Орнамент для откосов окна
#КонтактыДля чего используетсяПримечание
1VSS (VSS)GND. Земля. Питание микроконтроллера дисплея.0V
2VDD (VCC)Питающее напряжение для микроконтроллера дисплея.+5V
3V0 (VEE)Контраст символов на дисплее. Подключать лучше через потенциометр.от 0v до +5V
4RS (RS)Выбор регистра.
5RW (R/W)Переключение режима чтения/записи. Утянем на землю, нам нужно только передавать информацию на дисплей.0-запись +5V-чтение
6EТактирование
7D0 (DB0)Передача данных. (Не будем использовать)Данные
8D1 (DB1)Передача данных. (Не будем использовать)Данные
9D2 (DB2)Передача данных. (Не будем использовать)Данные
10D3 (DB3)Передача данных. (Не будем использовать)Данные
11D4 (DB4)Передача данных. (Задействуется)Данные
12D5 (DB5)Передача данных. (Задействуется)Данные
13D6 (DB6)Передача данных. (Задействуется)Данные
14D7 (DB7)Передача данных. (Задействуется)Данные
15A (LED+)+5V Напряжение, подсветка дисплея, через потенциометр можно регулировать яркость дисплея.+5V
16K (LED-)GND Земля, подсветка дисплея0V

Передача данных к дисплею возможна в двух вариантах: по 8 и по 4 бит за такт. Т.к. Ардуино имеет мало контактов, мы будем использовать 4 — этого с лихвой хватает, чтоб обновлять информацию на дисплее с запредельной для восприятия скоростью.

Вот так все это дело у меня подключено. Возможно кажется что это хаос, но тут есть система. Можно выделить красные, зеленые, желтые и оранжевые провода. Красные всегда идут на +5V, зеленые — GND, а желтые и оранжевые — это провода для подключения к Ардуино, по которым идут данные.

Самая важная часть — физическое подключение дисплея. По клику открывается в большом разрешении, где все хорошо видно.
R1 — Резистор 200OM. Сопротивление ограничивающее ток, проходящий через подсветку дисплея.
R2 — Потенциометр с сопротивлением до 10kOM. Кутим ручку, подбираем контраст символов.

И крайне простой скетч, для вывода на экран пары строк.
Скачать.

Результат. Если знать, как все это подключается и как написать код, то время на все работы 5 минут.

Также дисплей может выполнять некоторые функции самостоятельно, а еще есть возможность задать некоторые параметры.

  • Скролить текст;
  • Мигать позицией курсора;
  • Включаться/выключаться.

Обо всех функциях дисплея можно подробнее узнать тут: http://arduino.cc/en/Reference/LiquidCrystal

А теперь бонус!
Подсветка дисплея тратит энергию, которую, при питании от батареи, например, хотелось бы экономить. Я сделал для себя такой вариант — при нажатии на кнопку, включается подсветка дисплея на 5 секунд.

Дисплей подключен почти тем же способом. Осталось только добавить кнопку с вызовом прерывания.
Как сделать такую кнопку подробно описано вот тут: http://compblog.vlukyanov.com/?p=435
Кнопка подключена по этой схеме также ко второму контакту.

Нужно внести небольшие изменения в подключение.
1) Все провода дисплея остаются на местах кроме «А», он был подключен к +5V, теперь подключаем к четвертому пину Ардуино.
2) Добавить кнопку как показано на схеме к контакту 2. Если не понятно, как это сделать, еще раз говорю идем сюда и читаем статью: http://compblog.vlukyanov.com/?p=435

И результат:

Как подключить tft дисплей к микроконтроллеру

Сейчас в интернете множество схем и устройств на основе микроконтроллеров и LCD дисплеев. Одними из распространенных LCD являются дисплеи с контролером HD44780. Это алфавитно-циферный дисплей, встречается с различным количеством строк и символов в строке, но в данном случае это не принципиально.

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

Описание контроллера можно и даже нужно посмотреть здесь.

Теперь перейдем непосредственно к делу. Для простоты собирать буду сначала не в железе а в PROTEUS’е для симуляции, это позволит попробовать не приобретая деталей и не прибегая к пайке, а также отладить программу и получить желаемый результат.

На рисунке ниже: микроконтроллер Atmega16, дисплей lm016l (он как раз таки на основе контролера HD44780):

Для подключения дисплея была использована 4-х разрядная линия данных, значит для передачи данный в контроллер дисплея нам понадобятся только D4-D7. Этот способ подходит в большинстве случаев и требует меньшее количество ног для подключения от микроконтроллера.

Читайте так же:
Закладка оконного проема кирпичом расценка

Для написания прошивки (программы микроконтроллера) я буду использовать CodeVisionAVR. В нашем случае вместе с этой программой будет проще всего начинать знакомится с дисплеем.

Итак запустим CodeVisionAVR и создадим новый проект с использованием встроенного automatic program generator: для этого в меню File выбираем New, File Type выбираем Project и жмем ОК. В появившемся окошке с вопросом жмем на YES. Перед нами открылся генератор создания программы:

Во вкладке Chip выбираем интересующий нас микроконтроллер Atmega16, в поле clock запишем 8, это частота на которой будет работать микроконтроллер. Далее переходим во вкладку LCD. Здесь нам предлагают выбрать порт к которому будет подключаться дисплей, я выбрал PORTC:

После выбора порта генератор выводит нам информацию о том как дисплей должен быть подключен к микроконтроллеру (соответствие выводов микроконтроллера и дисплея). Именно так и подключаем дисплей. Больше нам сейчас никаких настроек не понадобится, поэтому выбираем File -> Generate, Save and Exit, и сохраняем файлы проекта куда-нибудь в отдельную папочку.

Что мы имеем на этом этапе: генератор создал основной каркас со всеми необходимыми настройками, нам останется лишь дописать несколько команд для вывода информации на экран.

background: ecf4fa; border: solid 1px black; float: left;»>

Теперь я уберу из кода лишние комментарии, а строки касающиеся непосредственно настройки микроконтроллера я убера в отдельную процедуру avr_init() для большей наглядности и удобства работы

background: ecf4fa; border: solid 1px black; float: left;»>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
void avr_init( void )
<
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

avr_init(); // Основные настрокий микроконтроллера
lcd_init(16); // Инициализация экрана

while (1)
<
// цикл бесконечного выполнения кода

>;
>

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

lcd_clear() — полная очистка дисплея;
lcd_gotoxy(unsigned char x, unsigned char y) — задает положение курсора на экране, х — номер символа, у — номер строки, нумерация начинается с 0 символа и 0 строки. Если положение курсора не задать то информация будет выводится начиная с 0,0 и продолжать дальше заполняя каждую ячейку экрана.

lcd_putchar(char c ) — выводит на дисплей один символ;

например lcd_putchar(‘N’) — выведет на экран букву N, но эту же букву можно вывести немного по другому: lcd_putchar(0x4E), здесь уже в роли параметра в скобках выступает не сам символ, а его адрес в таблице контролера дисплея (подробнее об этом я напишу в следующей статье);

lcd_puts(char *str) — выводит на дисплей строку из SRAM памяти;

lcd_putsf(char flash *str) — выводит на дисплей строку из FLASH памяти;

Для вывода слова или фразы проще всего использовать следующий вариант:

lcd_putsf(«Naprisar.at.ua»); слово или выражение в кавычках будет выведено на экран именно в таком виде, и не нужно заранее объявлять дополнительные переменные.

С основными функция разобрались теперь пора выводить первую надпись на экран.
Для этого добавим в нашу программу, сразу после lcd_init(16); следующие строки:

background: ecf4fa; border: solid 1px black; float: left;»>

Код готов, теперь подготовим прошивку, для этого поочередно жмем кнопки изображенные на картинке:

и если ошибок нет то в папке с проектом у нас появился файл с раcширением .hex, это и есть файл прошивки, его можно загрузить в PROTEUS или залить в микроконтроллер. В результате должно получится:

Если сразу что то пошло не так, не спешите расстраиваться и отчаиваться, просто внимательно все проверьте, для симуляции в PROTEUS’e не забудьте указать местоположение прошивки в свойствах микроконтроллера и в строке CKSEL Fuses: выбрать Int.RC 8MHz (тактирование от внутреннего генератора с частотой в 8 МГц, эту частоту мы выбирали в начале в генераторе кода).

Исходники программы и проект PROTEUS’a скачать можно ЗДЕСЬ

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector