Easyelectronics.ru

Электроника для всех
Текущее время: 17 окт 2018, 21:45

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Затруднения с OLED-индикатором на AT89C55WD
СообщениеДобавлено: 19 ноя 2015, 11:46 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 220
Доброго времени суток всем.
Возникла задача реализовать библиотеку процедур связи с OLED-индикатором на замену старому люминесцентному (тоже с контроллером HD44780, 16x2) на микроконтроллереAT89C55WD. Ввиду того, что прибор безбожно стар, и среда разработки - IAR v4.2 1992 года, код отладить решено было на 16-й Меге на STK500. Поставленная задача была решена на АСМе согласно рекомендациям из даташита последней ревизии на контроллер WS0100.

Далее перенес полученный алгоритм на C в старом IAR на AT89C55WD. И тут возникли проблемы. Индикатор не заводится, либо выдает кашу из пикселей, хотя все реализовывал по тем же точно алгоритмам. Есть подозрение, что дело в чтении флага занятости из порта P0, к которому подключен индикатор и который в отличии от PORTA на AVR двунаправленный и без подтяжки. И вроде бы даже по рекомендациям перед чтением из порта бросил единицы в порт, чтобы ток был посущественнее в порту, но увы - не помогло.
Может, кто-нибудь разъяснить, пожалуйста, что я делаю не так? А то уж подзабыл изрядно тонкости работы с портами в 8051.

Чтобы не быть голословным, привожу код на ASM для AVR, и на С - для 8051-го проца.
Осторожно - возможен быдлокод. По-крайней мере, на AVR за аккуратностью не следил, потому кое-где избыточным оказался.
Процедуры работы с индикатором на AVR: http://pastebin.com/gmYL48S0
OLED_busy_wait - чтение флага занятости;
OLED_wrnibble - запись младшего полубайта в 4 линии индикатора
OLED_wrbyte - запись байта целиком в 4 линии индикатора.
Функции строба на вывод E выделил в два отдельных макроса: http://pastebin.com/MdSrch8W
OLED_strobe_wr - строб, совмещенный с записью в PORTA
OLED_strobe_rd - строб, совмещенный с чтением из PORTA.

Подключен индикатор в 4-выводном режиме к порту A. Выводы E,RS и R/W подключены к выводам 5, 7 и 6 порта A соответственно.


Теперь тоже самое, на Си и для 8051:
http://pastebin.com/1wY6HMEt
OLED_wrnibble - запись полубайта в 4 линии индикатора;
OLED_busy_wait - чтение флага занятости;
OLED_wrbyte - запись байта целиком в 4 линии индикатора;

Подключен индикатор также в 4-хвыводном режиме, к младшей половине порта P0. Выводы E,RS и R/W подключены к выводам порта P3.

P.S. Чтобы избежать вопросов, сразу скажу: IAR старый, потому как проект до меня делался на его огрызках (компилятор да линкер и пара библиотек) чуть ли не 18 лет назад, и никто не занимался обновлением/рефакторингом кода. И никто даже на предприятии не знает, че с этим комплиятором делать.
По той же причине пилится все для контроллера на Си.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с OLED-индикатором на AT89C55WD
СообщениеДобавлено: 19 ноя 2015, 12:16 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 220
UPD: Чтобы не было еще вопросов - добавлю. В обеих процедурах таймеры миллисекундные рассчитаны на тсчет пяти мс. Поэтом вызов таймера delay_timer с единицей в аргументе означает отсчитать 5 мс.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB