Вторник, 19.03.2024, 13:39 Приветствую Вас Гость

Автозапуск за 1500р. на ЛЮБОЙ сигнализации?! -> at13.ru

Главная | Регистрация | Вход | RSS

Каталог статей


Работа с дисплеем Nokia 5110

Куплен был как то на Aliexpress дисплей Nokia 5110, совместимый с дисплеем от Nokia 3310, в которых используются одинаковые контроллеры. Таким образом, можно было предположить, что этот дисплей должен быть полностью совместим с родным дисплеем от Nokia3310, в принципе, все так и есть. Разрешение дисплея составляет 48х84 пикселя. Основой является контроллер PCD8544 выполненный по технологии COG - Chip On Glass, чип на стекле, по этому дисплей очень хрупкий, это следует учитывать при установки, пайки и креплении.

Кстати наши китайские братья научились клепать такие дисплейчики, на оригинальном дисплее металлизированные контакты а на китайском металлические штырьки или ещё хуже - резинка. Тот дисплей, который «заведется» с использованием библиотек дисплея (размещенных на сайте) для Bascom’а, без какой – либо их доработки, можно будет считать соответствующим оригиналу. Собственно, задача состояла не только в этом, а просто хотелось выяснить, какие изменения надо (если надо!) внести в библиотеки, чтобы каждый из имеющихся дисплеев работал как оригинальный.  

Дисплей 5110 заказанный с китая:

Если смотреть на лицевую сторону дисплея контактами к вверху то выводы считаются с права на лево от 1 до 8. Работает дисплей от 3 вольт (я про оригинал), модули заказанные с китая работают от 5вольт. Бывает иногда косяк с отображением а именно, не выводятся все пиксели, в этом случае рекомендую плотней прижать резинку между дисплеем и платой. Хочу заметить, что распиновка и название некоторых выводов 5110 от 3310 отличается! Вариантов подключения 3310 на других ресурсах полно, а вот работы с 5510 мною замечено не было...

Порядок подключения дисплея к микроконтроллеру следующий:

Вывод din  - portb.4, Вывод scl - portb.3 , Вывод dc - portb.5, Вывод ce -  portc.0 , Вывод reset - vcc

 

Код программы:

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 52


Config Portb.5 = Output
D3310dc Alias Portb.5
Config Portc.0 = Output
D3310ce Alias Portc.0
Config Spi = Soft , Din = None , Dout = Portb.4 , Ss = None , Clock = Portb.3
' din  - portb.4, scl - portb.3 , dc - portb.5, ce -  portc.0 , reset - vcc
Spiinit
$include "3310init.bas"

Call D3310init

Do
Call D3310clear
Call D3310position(1 , 0)
Call D3310print( "cxema21.")
Call D3310position(7 , 1)
Call D3310print( "ucoz.ru")
Call D3310position(2 , 4)
Call D3310print( "cxema21.ru ")
Waitms 5000
Call D3310invert
Waitms 5000
Call D3310uninvert
Waitms 5000
Loop
End
$include "3310end.bas"
Return

Компилируем, прошиваем и радуемся:

Вдруг если дисплей ничего не показывает при условии что монтаж правильный, попробуйте передернуть ногу RESET или просто питание (выключить и заново включить). Более подробная информация по работе с данным дисплеем есть на сайте cxem.net, так что углубляться не буду.

Видео работы:

Команды для работы с 5110(3310):

void LcdSend (unsigned char data, unsigned char cmd); //запись данных в LCD 
void LcdUpdate (void); //копирование буфера в RAM дисплея 
void LcdClear (void); //очистка дисплея 
void LcdInit (void); //настройка SPI и дисплея 
void LcdContrast (unsigned char contrast); //установка контраста 
void LcdMode (unsigned char mode); //режимы дисплея: 0 - blank, 1 - all on, 2 - normal, 3 - inverse 
void LcdPwrMode (void); //инвертирует состояние вкл/выкл дисплея 
void LcdImage (flash unsigned char *imageData); //вывод изображения 
void LcdPixel (unsigned char x, unsigned char y, unsigned char mode); //управление пикселем с координатами x,y 
void LcdLine (int x1, int y1, int x2, int y2, unsigned char mode); //рисование линии 
void LcdCircle(char x, char y, char radius, unsigned char mode); //рисуем круг с координатами центра и радиусом 
void LcdBar(int x1, int y1, int x2, int y2, unsigned char persent); //рисуем батарейку и заполняем ее на % 
void LcdGotoXYFont (unsigned char x, unsigned char y); //установить курсор в положение x,y 
void clean_lcd_buf (void); //очистка текстового буфера 
void LcdChr (int ch); // печатает символ на текущем месте 
void LcdString (unsigned char x, unsigned char y); //печатает строку 
void LcdChrBold (int ch); //печатает символ на текущем месте, большой и жирный) 
void LcdStringBold (unsigned char x, unsigned char y); //печатает большую и жирную строку 
void LcdChrBig (int ch); //печатает символ на текущем месте, большой 
void LcdStringBig (unsigned char x, unsigned char y); //печатает большую строку

Все файлы с архива размещайте в одной папке, нужно чтобы код программы в BASCOM и библиотеки были в одной папке, иначе работать не будет.

Скачать файлы проекта (~20кб.)

Категория: BASCOM AVR | Добавил: Адвансед (17.09.2014)
Просмотров: 13275 | Комментарии: 6 | Теги: LCD, 5110, 3310 | Рейтинг: 4.0/4
Всего комментариев: 6
6 radioprofi  
ВООБЩЕ НЕ РАБОТАЕТ. Порты как автор перечислил распаяны, мк - atmega328.

5 Ev3658  
Сыровато очень. Нельзя вот так вот просто взять и назвать метку названием регистра  biggrin .

4 Artur21  
Отличный урок, спасибо! Доходчиво обьяснили, я думал может дисплей бракованный, тупо прошил вашим исходиком и все заработало

2 willrok  
на последней фотографии термометр с часами, можно ссылку на проект? не нашел что то на сайте

3 Адвансед  
0
на сайте нет этого проекта, т.к. версия коммерческая.

1 Николай  
Спасибо за исходник!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Вход на сайт
Наш опрос
Зачем нужны автомобили?
Всего ответов: 154
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта