Статистика | |
Онлайн лист | |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 | |
Главная » Статьи » Микроконтроллеры |
Микроконтроллер AVR + LCD (HD44780)
Сейчас в интернете множество схем и устройств на основе микроконтроллеров и 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, и сохраняем файлы проекта куда-нибудь в отдельную папочку. Что мы имеем на этом этапе: генератор создал основной каркас со всеми необходимыми настройками, нам останется лишь дописать несколько команд для вывода информации на экран. #include <mega16.h> Теперь я уберу из кода лишние комментарии, а строки касающиеся непосредственно настройки микроконтроллера я убера в отдельную процедуру avr_init() для большей наглядности и удобства работы
Дисплей мы подключили и проинициализировали, теперь нужно на него что нибудь вывести. Для работы с дисплеем в нашем распоряжении есть следующие функции: 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); следующие строки: lcd_clear(); // Чистим экран Код готов, теперь подготовим прошивку, для этого поочередно жмем кнопки изображенные на картинке: и если ошибок нет то в папке с проектом у нас появился файл с раcширением .hex, это и есть файл прошивки, его можно загрузить в PROTEUS или залить в микроконтроллер. В результате должно получится: Если сразу что то пошло не так, не спешите расстраиваться и отчаиваться, просто внимательно все проверьте, для симуляции в PROTEUS'e не забудьте указать местоположение прошивки в свойствах микроконтроллера и в строке CKSEL Fuses: выбрать Int.RC 8MHz (тактирование от внутреннего генератора с частотой в 8 МГц, эту частоту мы выбирали в начале в генераторе кода). Исходники программы и проект PROTEUS'a скачать можно ЗДЕСЬ | |
| |
Категория: Микроконтроллеры | Добавил: Naprisar (02.04.2012) | |
Просмотров: 18949 | Комментарии: 8
| Теги: |
Всего комментариев: 8 | ||||||||
| ||||||||