[AD]

AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780

Автор DI HALT
Опубликовано 23 Сен 2008 
Рубрики: AVR. Учебный курс
Метки: , , ,

Сегодня разменял четверть века
Сегодня разменял четверть века!
Так случилось, что прикупил я тут себе поприколу LCD дисплейчик две строки по восемь символов. Валялся он в ящике валялся, да чегото поперло меня и решил я его заюзать, попутно вкурив в его работу. О том как подключить к AVR LCD дисплей я вам сейчас и поведаю.

Для начала оговорюсь сразу, что речь тут пойдет о LCD индикаторах на контроллере HD44780, который стал промышленным стандартом де-факто на рынке цифро-буквенных дисплеев. Продается везде где только можно, стоит недорого (8х2 мне обошелся порядка 150 рублей), а также под него написана куча кода. Я же, как обычно, решил изобрести велосипед и сварганить свою собственную тру-библиотеку для работы с этим типом индикаторов. Разумеется на ассемблере, а на чем же еще? ;)

Подключение.
LCD на базе HD44780 подключается к AVR микроконтроллеру напрямую к портам. Есть два способа подключения - на 8 бит и на 4 бита. В восьмибитном режиме немножко проще закидывать байты - не нужно сдвигать байт, зато в четырех битном резко нужно тратить на целых четыре ножки контроллера меньше. Есть еще одна особенность работы в 8-битном режиме — к некоторым контроллерам можно подрубить этот дисплей как внешнее ОЗУ и засылать данные простыми командами пересылки. Лично я подключил его в режиме полного порта у меня один фиг выводы уже девать некуда было, так что не жалко.
  • Выводы DB7…DB0 это шина данных/адреса.
  • E — стробирующий вход. Дрыгом напряжения на этой линии мы даем понять дисплею что нужно забирать/отдавать данные с/на шину данных.
  • RW — определяет в каком направлении у нас движутся данные. Если 0 - то на чтение из дисплея, если 1 то на запись в дисплей.
  • RS — определяет что у нас передается, команда (RS=1) или данные (RS=0). Данные будут записаны в память по текущему адресу, а команда исполнена контроллером.

Со стороны питания все еще проще:

Подключение дисплея
Подключение дисплея
Видимая и скрытая область экранной памяти
Видимая и скрытая область экранной памяти
Структура адресации контроллера HD44780
Структура адресации контроллера HD44780
Формирование символа в ячейке CGRAM
Формирование символа в ячейке CGRAM

  • GND — минус, он же общий.
  • Vcc — плюс питания, обычно 5V
  • V0 — вход контрастности. Сюда нужно подавать напряжение от нуля до напряжения питания, тем самым задается контрастность изображения. Можно поставить переменный резистор, включенный потенциометром и крутить в свое удовольствие. Главное поймать значение максимального контраста, но чтобы не было видно знакомест (серый ореол из квадратов вокруг символа). Если же выставить слишком малый контраст, то символы будут переключаться лениво и задумчиво. Примерно как в калькуляторе у которого сели батарейки.
  • А - это вход Анода светодиодной подсветки. Короче плюс.
  • К - соответственно Катод, он же минус. Подсветка хавает примерно 100мА и поэтому нужно выставить туда токоограничительный резистор на 100 Ом. Кстати, многие ЖК дисплеи имеют на плате пятачки для припайки резисторов. Если прозвонить, то можно убедиться в том, что эти линии ведут на входы питания LCD, поэтому, впаяв резисторы, можно не заморачиваться на запитку подстветки, она будет подключена к питанию контроллера.

Логическая структура LCD контроллера HD44780

Контроллер имеет свой блок управления, который обрабатывает команды и память. Она делится на три вида:

DDRAM - память дисплея. Все что запишется в DDRAM будет выведено на экран. То есть, например, записали мы туда код 0×31 — на экране выскочит символ “1″ т.к. 0х31 это ASCII код цифры 1. Но есть тут одна особенность - DDRAM память гораздо больше чем видимая область экрана. Как правило, DDRAM содержит 80 ячеек — 40 в первой строке и 40 во второй, а на дисплей может двигаться по этой линейке как окошко на логарифмической линейке, высвечивая видимую область. То есть, например, можно засунуть в DDRAM сразу пять пунктов меню, а потом просто гонять дисплей туда сюда, показывая по одному пункту. Для перемещения дисплея есть спец команда. Также есть понятие курсора — это место в которое будет записан следующий символ, т.е. текущее значение счетчика адреса. Курсор не обязательно может быть на экране, он может располагаться и за экраном или быть отключен вовсе.

CGROM - таблица символов. Когда мы записываем в ячейку DDRAM байт, то из таблицы берется символ и рисуется на экране. CGROM нельзя изменить, поэтому важно, чтобы она имела на борту русские буквы. Если, конечно, планируется русскоязычный интерфейс.

CGRAM - тоже таблица символов, но ее мы можем менять, создавая свои символы. Адресуется она линейно, то есть вначале идет 8 байт одного символа, построчно, снизу вверх — один бит равен одной точке на экране. Потом второй символ тем же макаром. Поскольку знакоместо у нас 5 на 8 точек, то старшие три бита роли не играют. Всего в CGRAM может быть 8 символов, соответственно CGRAM имеет 64 байта памяти. Эти программируемые символы имеют коды от 0х00 до 0х08. Так что, закинув, например, в первые 8 байт CGRAM (первый символ с кодом 00) какую нибудь фигню, и записав в DDRAM нуль (код первого символа в CGRAM) мы увидим на экране нашу хрень.

Доступ к памяти.
Тут все просто. Мы командой выбираем в какую именно память и начиная с какого адреса будем писать. А потом просто шлем байты. Если указано, что записываем в DDRAM то на экран (или в скрытую область) полезут символы, если в CGRAM то байты полезут уже в память знакогенератора. Главное потом не забыть переключится обратно на область DDRAM

Система команд.
Система команд проста как мычание. О том, что передается команда контроллеру дисплея сообщит нога RS=0. Сама команда состоит из старшего бита, определяющего за что отвечает данная команда и битов параметров, указывающих контроллеру HD44780 как дальше жить.

Таблица команд:

DB7DB6DB5DB4DB3DB2DB1DB0Значение
00000001Очистка экрана. Счетчик адреса на 0 позицию DDRAM
0000001-Адресация на DDRAM сброс сдвигов, Счетчик адреса на 0
000001I/DSНастройка сдвига экрана и курсора
00001DCBНастройка режима отображения
0001S/CR/L--Сдвиг курсора или экрана, в зависимости от битов
001DLNF--Выбор числа линий, ширины шины и размера символа
01AGAGAGAGAGAGПереключить адресацию на SGRAM и задать адрес в SGRAM
1ADADADADADADADПереключить адресацию на DDRAM и задать адрес в DDRAM

Теперь поясню что значат отдельные биты:
  • I/D - инкремент или декремент счетчика адреса. По дефолту стоит 0 - инкремент. Т.е. каждый следующий байт будет записан в n+1 ячейку. Если поставить 1 - будет декремент. Не знаю только зачем :)
  • S - сдвиг экрана, если поставить 1 то с каждым новым символом будет сдвигаться окно экрана, пока не достигнет конца DDRAM, наверное удобно будет когда выводишь на экран здоровенную строку, на все 40 символов, чтобы не убегала за экран.
  • D - включить дисплей. Если поставить туда 0 то изображение исчезнет, а мы в это время можем в видеопамяти творить всякие непотребства и они не будут мозолить глаза. А чтобы картинка появилась в эту позицию надо записать 1.
  • С - включить курсор в виде прочерка. Все просто, записали сюда 1 - включился курсор.
  • B - сделать курсор в виде мигающего черного квадрата.
  • S/C сдвиг курсора или экрана. Если стоит 0, то сдвигается курсор. Если 1, то экран. По одному разу за команду
  • R/L - определяет направление сдвига курсора и экрана. 0 - влево, 1 - вправо.
  • D/L - бит определяющий ширину шины данных. 1-8 бит, 0-4 бита
  • N - число строк. 0 - одна строка, 1 - две строки.
  • F - размер символа 0 - 5х8 точек. 1 - 5х10 точек (встречается крайне редко)
  • AG - адрес в памяти CGRAM
  • АD - адрес в памяти DDRAM

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

Задача:

  1. Включить дисплей.
  2. Очистить содержимое.
  3. Сдвинуть курсор на одну позицию.
  4. И записать туда “1″.
Решение (последовательность команд):

Первым делом Инициализация дисплея без которой большая часть дисплеев на HD44780 просто откажется работать. Некоторые виды имеют дефолтные состояние (шина 8 бит, курсор в 0) и им только дисплей включить. Но все же ее лучше сделать, мало ли что там намудрил разработчик. Лишней не будет.

  1. 00111000 Шина 8 бит, 2 строки
  2. 00000001 Очистка экрана
  3. 00000110 Инкремент адреса. Экран не движется

  1. 00001100 Включили дисплей (D=1)
  2. 00000001 Очистили дисплей. Указатель встал на DDRAM
  3. 00010100 Сдвинули курсор (S/C=0) вправо (R/L=1)
  4. 00110001 - это мы уже записали данные (ножка RS=1) код “1″ 0х31

Жирным шрифтом выделен идентификатор команды, ну а остальное по таблице увидите.

Задача: создать свой символ. С кодом 02 и вывести его на экран.
Считаем, что дисплей у нас уже инициализирован и готов к приему данных.

Решение:

  1. 01001001      Выбираем в CGRAM адрес 0х09 - как раз начало второго символа (напомню, что на один символ уходит 8 байт)
  2. 00000001     Это пошли 8 байт данных. (RS=1)
  3. 00000010     Рисуем значок молнии, ну или
  4. 00000100     ССовскую Зиг руну, кому как
  5. 00001000     больше нравится.
  6. 00011111     Старшие три бита не действуют
  7. 00000010     Туда можно писать что угодно, на
  8. 00000100     результат влиять не будет.
  9. 00001000     Последний байт данных  
  10. 10000000      А это уже команда - переключение адреса на DDRAM и указатель на адрес 0000000 - первый символ в первой строке.
  11. 00000010      И снова данные (RS=1), код 02 - именно в него мы засунули нашу молнию.
Опа и он на экране!

Так, с логикой разобрались, пора вкуривать в физику протокола общения. Код я приведу несколько позже, когда вылижу свою библиотеку и заоптимизирую до состояния идеала. Пока же дам алгоритм, а его уж на любом языке программирования реализовать можно. Хоть на ассемблере, хоть на Сях, да хоть на Васике :)

Алгоритм чтения/записи в LCD контроллер HD44780
Направление, а также команда/данные определяются ножками, а чтение и запись осуществляется по переходу строба (вывод Е) из 1 в 0

Инициализация портов

  1. RS, RW, E - в режим выхода.
  2. DB7..DB0 в режим входа. Впрочем, можно их не трогать, дальше переопределим.


Ожидание готовности, чтение флага занятости.
  1. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
  2. RS=0 (команда)
  3. RW=1 (чтение)
  4. E=1 (Готовьсь!!!)
  5. Пауза (14 тактов процессора на 8МГЦ хватало)
  6. Е=0 (Пли!)
  7. Читаем из порта. Если бит 7 (Busy flag) установлен, то повторяем все заново, пока не сбросится.


Запись команды
  1. Ожидание готовности
  2. RS=0 (команда)
  3. RW=0 (запись)
  4. Е=1 (Готовьсь!!!)
  5. Порт на выход
  6. Вывести в порт код команды
  7. Пауза
  8. Е=0 (Пли!)
  9. Орудие на плечо Порт на вход, на всякий случай.


Запись Данных
  1. Ожидание готовности
  2. RS=1 (Данные)
  3. RW=0 (запись)
  4. Е=1 (Готовьсь!!!)
  5. Порт на выход
  6. Вывести в порт код команды
  7. Пауза
  8. Е=0 (Пли!)
  9. Порт на вход, на всякий случай.


Чтение команды
  1. Ожидание готовности
  2. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
  3. RS=0 (команда)
  4. RW=1 (чтение)
  5. Е = 1 (Готовьсь! В этот момент данные из LCD вылазят на шину)
  6. Пауза
  7. Считываем данные с порта
  8. E=0 (Ать!)


Чтение Данных
  1. Ожидание готовности
  2. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
  3. RS=1 (Данные)
  4. RW=1 (чтение)
  5. Е = 1 (Готовьсь! В этот момент данные из LCD вылазят на шину)
  6. Пауза
  7. Считываем данные с порта
  8. E=0 (Ать!)

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

Запись:

  1. E=1
  2. Пауза
  3. Выставили в порт старшую тетраду
  4. E=0
  5. Пауза
  6. Е=1
  7. Пауза
  8. Выставили в порт младшую тетраду
  9. Е=0


Чтение
  1. E=1
  2. Пауза
  3. Читаем из порта старшую тетраду
  4. Е=0
  5. Пауза
  6. Е=1
  7. Пауза
  8. Читаем из порта младшую тетраду
  9. Е=0

Ждите код :) Скоро будет :)
UPD:
А вот и код!

[AD]

Комментарии

RSS feed

52 комментариев »

Comment от Fi5t
2008-09-23 00:50:40

Однако познавательно! Как только появится свободное время, надо будет это все расковырять =) Как раз 8ю атмегу в ДИПе достану и панельу к ней. Надо будет спаять какую-нить полезную хреновину =) В любом случае спасибо автору. Он и на этот раз не подвел. Толковые вещи пишешь =)

 
Comment от Stanislaw K
2008-09-23 02:24:23

C днем рождения!

Comment от DI HALT
2008-09-23 02:29:27

Спасибо!

 
 
Comment от Cyber_RAT
2008-09-23 10:59:42

Поздравляю с четвертью века!
Хороший курс, желаю всяческих идей и возможностей для его развития!!!! ну и здоровья конечно же! куда ж без него.

 
Comment от Dghost
2008-09-23 11:44:40

DI-halt и от меня прими поздравления! Желаю всего перечисленного выше, а также не останавливаться на достигнутом!

 
Comment от Димка
2008-09-23 12:25:32

Поздравляю с Днём Рождения!!!
Успехов тебе в твоих начинаниях!
Пишешь очень интересно и понятно.
Читаю все твои статьи с огромным интересом. Особенно порадовала серия рассказов “Последний Герой труда”.

 
Comment от devmind.livejournal.com
2008-09-23 12:43:00

Поздравляю! Всех благ!

 
Comment от winmike
2008-09-23 14:15:37

0×19! :-)

Comment от nwanomaly Subscribed to comments via email
2008-09-23 16:32:29

+1

есть минивопрос - имеются ли в реальности лсд-дисплеи на 3 вольта?

зы! прошёлся по питерским магазам типа микроники и чипидипа - у них не бывает. а сами дисплеи на 2 строки начинаются от 400 рублей (

Comment от DI HALT
2008-09-23 17:44:58

Вот такие хз. А вот от Nokia 3310 как раз по моему от 3.3 вольта работает.

Хренасе у вас цены. Я могу пойти и Элемент и взять там 16х2 за 180р.

Comment от nwanomaly Subscribed to comments via email
2008-09-23 17:51:08

может просто неудачный день. хотя тут же на днях покупал мегу8535 - 170рэ, а с буковкой L - ровно в 2 раза дороже. это с учётом того, что зимой мне знакомый из москвы из по 100рублей привозил … (

Comment от Elementus Subscribed to comments via email
2008-09-23 20:32:16

Привет всем !!!
приходи к нам мы привезём
ATmega8535L-8PU ATMEL DIP40 110.00
привезём , под заказ ,если сделаете заказ до четверга во вторник на следующей нидели получите.

Comment от DI HALT
2008-09-23 20:53:05

Расслабься, ему из Казахстана ехать дороже выйдет :)

Comment от nwanomaly Subscribed to comments via email
2008-09-23 21:11:36

эта мега мне не нужна уже )
а про 3В спросил вот почему - как раз с мегой (которая L, которая на 3В) достал корпус, который выглядит, как старый большой калькулятер.

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

минус - на сайте ихнем не написан вольтаж, а матчастью по этому поводу я не знаком, так что поиски по времени ещё больше удлиняются (

Comment от DI HALT
2008-09-23 21:51:34

Никто тебе не запрещает запустить низковольтную мегу от 5вольт. Это ее штатное напряжение.

Comment от nwanomaly Subscribed to comments via email
2008-09-23 21:52:54

у меня питание - две батарейки по полтора вольта

Comment от Mazayac
2008-09-23 22:56:45

Работать напрямую от батареек будет, но недолго :D
Напряжение разряженной батареи - 1В, девайс сдохнет задолго до конца ее разряда.
Для батарейного питания ставят повышающие DC-DC преобразователи типа MAX1674-MAX1676.

Comment от nwanomaly Subscribed to comments via email
2008-09-23 23:24:57

это в смысле с 3В будет постоянно 5В пока току в батарейке достаточно?

Comment от Mazayac
2008-09-23 23:33:57

На входе - от 0.7В до 3В, на выходе - стабильные 3.5В или 5В, нужное напряжение выбирается.

Comment от nwanomaly Subscribed to comments via email
2008-09-23 23:46:03

спасиб за инфу

 
 
 
 
 
 
 
 
Comment от real13
2008-09-24 17:43:36

а под заказ можете привезти плату для мини-атс панасоник (плата kx-ta 30674) ?

 
 
 
 
Comment от arkamax
2008-09-23 18:38:55

Бывают, но их сложно найти. Я видел на eBay и на http://www.crystalfontz.com.

 
Comment от XDN Subscribed to comments via email
2008-09-23 20:00:54

Попробуйте МЭЛТ - они могут работать на трёшке, но с более длинными таймаутами.
Но учтите, что инициализация несколько отличается от чистого hd44780, в остальном они совместимы.

 
Comment от Cluster
2008-09-23 21:22:13

Эээ… Я в ЧипеДипе свои 24*2 покупал за 300 рублей.

Comment от nwanomaly Subscribed to comments via email
2008-09-23 21:35:41

вот конкретно сегодня в одном из их магазов - не было (

 
 
 
 
Comment от BaN
2008-09-23 17:00:48

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

Comment от DI HALT
2008-09-23 17:43:57

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

Comment от arkamax
2008-09-23 21:21:54

Согласен полностью про баги… особенно это относится к китайским даташитам, и особенно на LCD.

 
 
 
Comment от arkamax
2008-09-23 18:40:44

Поздравляю с днем рождения, желаю творческих успехов, и восхищаюсь терпением излагать всю эту информацию подробно и доходчиво! Сам занимаюсь AVR-ами примерно два года, и если бы кто-нибудь тогда мне все вот так расписал… :)

 
Comment от arkamax
2008-09-23 18:47:31

Еще покомментирую. Дисплеи на HD44780 бывают очень разные по времени реакции на строб. Обычно дисплеи, рассчитанные на 3В, более медленные, чем на 5В, и требуют более длинных задержек при работе с ними. Удивительно, но по сравнению с HD44780 те же графические контроллеры KS0713 несмотря на бОльший объем передаваемой информации, оказались гораздо быстрее в работе - обновление монохромного экрана 128х64 занимает совсем не много времени. Очень рекомендую внимательно присмотреться к этому семейству… туда можно вывести значительно больше информации, чем на любой текстовый дисплей. И само собой, они прекрасно интерфейсятся с АВР-ами :)

 
Comment от Susanin
2008-09-23 19:55:24

С Днём Рождения!

 
Comment от XDN Subscribed to comments via email
2008-09-23 19:58:21

Мои поздравления!

 
Comment от SiNil Subscribed to comments via email
2008-09-23 23:02:04

С Днем рождения, DI HALT!
Спасибо за тексты, очень интересно и познавательно.

А элементус - это представитель “Элемента”?

Comment от DI HALT
2008-09-23 23:18:17

Да это он. Который на Южная 2А сейчас расположен.

 
 
Comment от SiNil Subscribed to comments via email
2008-09-23 23:23:59

аха, только я их что то там не нашел :-/
обошел всё здание. На днях еще попробую, может тогда еще не успели переехать.

Comment от DI HALT
2008-09-23 23:35:04

Они там уже года два как - там раньше их оптовая база была. С торца здания 2А есть здоровенная железная дверь, похожая на гараж. Вот в нее и сразу же направо. Я тоже первый раз долго искал.

 
 
Comment от SiNil Subscribed to comments via email
2008-09-23 23:43:44

о_О
Ясно, спасибо большое :)
Ещё раз с Днём рождения!

 
Comment от VBKesha
2008-09-24 04:01:50

Поздравляю!!!

 
Comment от Spir0
2008-09-26 12:34:47

Тут спрашивали по поводу 3.3В дисплеев, HD44780 может работать и от 3.3В , но только сам контроллер, для того чтобы было видно что то на дисплее, надо подавать отрицательное напряжение на вход управления контрастом. Или брать расчитанный на 3.3В изначально (по опыту поиска огромный дефицит :) )
Можно еще использовать от Nokia дисплеи (3310, 3410), но они графические поэтому для вывода символа надо писать свою библиотеку (в инете полно готовых), еще очень хорошие TIC32 и TIC149 тоже графические но работают как от 3.3 так и от 5В.
Буква L в индексе контроллера указывает что он может работать от 3В , от 5В он тоже работает нормально :)

 
Comment от WPanda
2008-10-01 16:15:35

Таки на RS должен быть 0, если передается команда.. А в начале статьи написано ровно наоборот. Нет?

Comment от ViC
2008-12-07 21:50:53

Да тоже думаю что опечатка

 
 
Comment от BaN
2008-10-01 21:38:07

Есть такой вопрос, может кто-нибудь сталкивался:
Работаю с МЭЛТ’овским ЖКИ-модулем MT-16S2R, у него контроллер КБ1013ВГ6 (аналог HD44780 и KS0066).

При работе с ним выявилась проблема, заключающаяся в том, что флаг занятости как бы зависает после команд записи в DDRAM. Т.е. я записываю какие-то данные в DDRAM и проверяю в цикле флаг ожидания, и пока он не станет равен нулю, те контроллер не будет готов выполнить следующую команду, дальше ничего не делаю.
Но дело в том, что этот флаг после записи данных в DDRAM не устанавливается в 0 сколько не жди, т.е. все время показывает, будто контроллер занят. Хотя если сделать не проверку флага занятости, а просто задержку времени в 40мкс (это максимальное время записи в DDRAM по документации), то он нормально записывает данные в DDRAM и готов выполнить следующую команду.
Но тот же флаг занятости при выполнении обычной команды, которая не изменяет DDRAM, нормально показывает занят контроллер или нет.
Флаг занятости также как и в случае с записью в DDRAM, не изменяется после выполнения команды установки адреса для последующих операций и выбора области DDRAM.
Похоже, что флаг занятости не изменяется контроллером, если выполнялось какое-то изменение в DDRAM.
В документации на ЖКИ-модуть и на контроллеры КБ1013ВГ6 и HD44780 (на KS0066 я не смотрел) ничего об этом не сказано, поэтому я и хотел спросить, не встречался ли кто с подобным?
Если кто-то сталкивался с подобным, я был бы очень признателен за разъяснение этой ситуации.

Сам просто стал проверять флаг занятости только после команд, не изменяющих DDRAM, а для тех, что изменяют DDRAM делал задержку.
Собственно кусок кода проверки флага занятости:
8-битный интерфейс. PORTA - шина данных, PINC5 - RS, PINC6 - R/W, PINC7 - E:

CBI PORTC, 5
L0:
SBI PORTC, 6
SBI PORTC, 7
NOP
NOP
IN TMP_PRG, PORTA
ANDI TMP_PRG, 0B10000000
CBI PORTC, 7
CBI PORTC, 6
CPI TMP_PRG, 0
BRNE L0

Comment от XDN Subscribed to comments via email
2008-10-01 21:44:07

Я работаю с МЭЛТами. Ничего подобного за ними не замечал. Флаг занятости успешно выставляется как после записи в DDRAM, так и при любой другой операции.
Нет возможности проверить на другом модуле?

Comment от BaN
2008-10-02 17:36:16

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

Comment от BaN
2008-10-03 18:13:58

Проверять на другом модуле не пришлось, нашел ошибку у себя в коде )
Нужно было правильно сделать проверку флага занятости так:
CLR TMP_PRG
OUT DDRA,TMP_PRG
OUT PORTA,ZERO
Label:
SBI PORTC, 6
SBI PORTC, 7
NOP
NOP
IN TMP_PRG, PINA
ANDI TMP_PRG, 0B10000000
CBI PORTC, 7
CBI PORTC, 6
CPI TMP_PRG, 0
BRNE Label
SER TMP_PRG
OUT DDRA,TMP_PRG
А я забыл очистить содержимое порта, после того, как выводил в ЖКИ команды установки адреса для последующих операций и выбора области DDRAM и после записи данных в DDRAM, поэтому бит занятости оставался равным единице все время.

 
 
 
 
Comment от RA3PKJ Subscribed to comments via email
2008-10-04 22:47:30

to DI HALT
Здравствуйте!
Однако давно ищу код для сопряжения AVR c HD44780, так как сам начинающий и не могу это осилить. Буду ждать.
——————
Николай RA3PKJ

Comment от DI HALT
2008-10-04 22:52:57

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

Comment от RA3PKJ Subscribed to comments via email
2008-10-04 23:06:47

OK!
Годится на передачу только.
Спасибо.
————
Николай.
ra3pkj—yandex.ru

Comment от DI HALT
2008-10-05 00:11:29

http://easyelectronics.ru/files/MultiDebug2.rar
вот держи. Думаю догнишь что там к чему. Расчитано изначально на мегу8535

 
 
 
 
Comment от RA3PKJ Subscribed to comments via email
2008-10-05 00:50:33

Получил. У меня AT90S8515.
Буду разбираться. Еще раз спасибо.

Comment от DI HALT
2008-10-10 04:14:46
 
 
Comment от penzet
2008-10-11 15:29:25

Управление LCD-дисплеем HD44780 по одному проводу
Автор Noureddine Benabadji
18.03.2008 г.
LCD-дисплеи с контроллером HD44780 являются пожалуй одними из самых популярных символьных дисплеев для встраиваемых систем. Единственным их недостатком можно считать необходимость задействования для управления дисплеем шести I/O-линий микроконтроллера в 4-разрядном режиме либо одиннадцати I/O-линий в 8-разрядном режиме. Для сокращения числа управляющих линий можно использовать преобразователи последовательного кода в параллельный на основе стандартной логики. Однако, управлять HD44780-совместимыми LCD-дисплеями можно даже по одной линии. Такую функцию гораздо удобнее возложить не на микросхемы жёсткой логики, а на программируемый микроконтроллер, сократив, таким образом, стоимость и занимаемую схемой на печатной плате площадь. Этим целям в полной мере удовлетворяют микроконтроллеры Microchip серии PIC10F в миниатюрном корпусе SOT23–6.

Схемотехническое решение, показанное на рисунке, может оказаться полезным для многих встраиваемых систем с ограниченным числом выводов, потому как способно управлять HD44780-совместимыми LCD-дисплеями посредством однопроводной линии передачи данных, задействуя простой асинхронный RS232 протокол на скорости 9600baud. В схеме применён PIC10F202, но подойдёт любой микроконтроллер из этого семейства, потому что хорошо оптимизированный программный код (прошивка 1) состоит из всего лишь 256 слов. Увеличить скорость выше 9600baud не представляется возможным, так как PIC10F202 содержит внутренний RC-генератор с точностью 1%, а LCD-дисплей требует задержку длиной 1.6ms для некоторых инструкций, таких как «очистка дисплея». Программный код представлен в виде исходников с комментариями для LCD232 модуля; основная программа состоит из дисплейной заставки на 2 секунды и дальнейшего бесконечного цикла для ожидания 1 байта команды, максимум 16 байт данных и нуля ASCII. В тестовых целях сопряжения дисплея с внешней встраиваемой PIC-системой можно воспользоваться простой прошивкой на ассемблере (прошивка 2).

 
Имя (обязательно)
E-mail (required - never shown publicly)
Если ваш комментарий содержит ссылки, то он должен будет пройти премодерацию
Ваш комментарий (уменьшить поле | увеличить поле)
Вы можете использовать <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line=""> в комментариях.
[AD]

Материалы сайта являются авторскими. Копирование и публикация материалов без активной ссылки на первоисточник запрещено.

Реклама: