arduino и lcd от nokia 1202, не получается подключить
- Войдите на сайт для отправки комментариев
Чт, 13/02/2014 - 22:21
Всем привет. Уже который раз пытаюсь подключить дисплей от нокии 1202 но безуспешно. Изображения нет. Пробовал использовать библиотеки для 1100 lcd. Распиновка у них разная, нашел распиновку от 1202:
Поключаю так:
// LCD_PIN_SCE 10 lcd pin 3
// LCD_PIN_SDIN 11 lcd pin 5
// LCD_PIN_RESET 12 lcd pin 2
// LCD_PIN_SCLK 13 lcd pin 6
// lcd pin 7-8 +3.3V
// lcd pin 4-9-10 GND
// lcd pin 11 +LED
Но толку ноль. Поделитесь пожалуйста правильной схемой подключения этого дисплея. Спасибо!

пользуюсь такими. слева для 3.3В схемы. правая для 5В
вот точно рабочий код. вчера только тестил им
подключение в коде расписано. ресет на +3,3 цеплять. на печатках видно
#include <avr/pgmspace.h> #define SC_On PORTD |= 1<<5 // CS PD5 #define Data_On PORTD |= 1<<6 // Data PD6 #define Clock_On PORTD |= 1<<7 // Clock PD7 #define SC_Off PORTD &= ~(1<<5) #define Data_Off PORTD &= ~(1<<6) #define Clock_Off PORTD &= ~(1<<7) static const char mass16x32[10][64] PROGMEM ={ { 0xF8, 0xFC, 0xFA, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //0 0x3F, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x3F, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFE, 0x1F, 0x3F, 0x5F, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, 0xF8, //1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x1F}, { 0x00, 0x00, 0x02, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //2 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x7F, 0x3F, 0xFE, 0xFF, 0xFE, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x5F, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x40, 0x00, 0x00}, { 0x00, 0x00, 0x02, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //3 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}, { 0xF8, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, 0xF8, //4 0x3F, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x1F}, { 0xF8, 0xFC, 0xFA, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x00, 0x00, //5 0x3F, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}, { 0xF8, 0xFC, 0xFA, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x00, 0x00, //6 0x3F, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0xFE, 0xFF, 0xFE, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x1F, 0x3F, 0x5F, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}, { 0x00, 0x00, 0x02, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //7 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x1F}, { 0xF8, 0xFC, 0xFA, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //8 0x3F, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x7F, 0x3F, 0xFE, 0xFF, 0xFE, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x1F, 0x3F, 0x5F, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}, { 0xF8, 0xFC, 0xFA, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFA, 0xFC, 0xF8, //9 0x3F, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFE, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x5F, 0x3F, 0x1F}}; void SendByte(unsigned char mode, unsigned char c){ SC_Off; (mode)? Data_On : Data_Off; Clock_On; Clock_Off; byte i; for(i=0;i<8;i++) { Clock_Off; if (c & 0x80) Data_On; else Data_Off; Clock_On; c <<= 1; } Clock_Off; SC_On; Data_Off; } void Clear_LCD(){ for (int i=0;i<864;i++){ SendByte(1,0x00); } } void Goto_XY(byte x, byte y){ SendByte(0,(0xB0|(y&0x0F))); // установка адреса по Y: 0100 yyyy SendByte(0,(0x00|(x&0x0F))); // установка адреса по X: 0000 xxxx - биты (x3 x2 x1 x0) SendByte(0,(0x10|((x>>4)&0x07))); // установка адреса по X: 0010 0xxx - биты (x6 x5 x4) } void setup() { DDRD |= 0b11100000; //включаем порты на выход с 0 по 2 // Инициализация дисплея Clock_Off; Data_Off; SC_Off; //delay(20); SC_On; SendByte(0,0x2F); // Power control set(charge pump on/off) SendByte(0,0xA4); SendByte(0,0xC8); // mirror Y axis (about X axis) SendByte(0,0xA1); // Инвертировать экран по горизонтали SendByte(0,0xAF); // экран вкл/выкл Clear_LCD(); } void vyvod(int skor){ int temp=skor; // переменная для хранения int c3=temp%10; // третья цифра скорости temp/=10; int c2=temp%10; // вторая цифра скорости temp/=10; int c1=temp%10; // первая цифра скорости simb16x32(c1,20,2); simb16x32(c2,40,2); simb16x32(c3,60,2); } //Вывод символа 16х32 в координаты XY void simb16x32(char n, char x, char y){ char i; Goto_XY(x,y); for (i=0;i<16;i++){ SendByte(1,pgm_read_byte(&(mass16x32[n][i]))); } Goto_XY(x,y+1); for (i=16;i<32;i++){ SendByte(1,pgm_read_byte(&(mass16x32[n][i]))); } Goto_XY(x,y+2); for (i=32;i<48;i++){ SendByte(1,pgm_read_byte(&(mass16x32[n][i]))); } Goto_XY(x,y+3); for (i=48;i<64;i++){ SendByte(1,pgm_read_byte(&(mass16x32[n][i]))); } } void loop() { for(int i=0; i<255; i++){ vyvod(i); delay(300); Clear_LCD(); } }на экране будут большие цифры увеличиваться каждые 300мс
1202 мне один раз попался дохлый. чтобы ни делал не работал. припаял другой сразу все ок
Спасибо! В самом деле оказался не рабочим новый дисплей. Вынял с трупа бу и все заработало!
Мне из 10 попались два дохлых и 4 с битыми пикселями
это же не нокиа, а так называемые аналоги, качество соответсвующее, впрочем и цена ... Тоже соответствует
мне больше везло. на 10+ использованных дисплеев только 1 дохлый
Какую библиотеку посоветуете для данного дисплея?
смотря для каких целей. только текст или еще графика нужна. линии и тп. вторая требовательна к оперативной памяти, мега8 и 168 не подойдет
Буду использовать Atmega328P, от arduino nano. Желательно и графику, делаю велокомп для электро велосипеда. Желательно с разными по величине шрифтами. Пробую эту: https://github.com/igorok107/PCF8814, но там какие то проблемы при попытке вывести int или double:
Lcd.Print(watts); Lcd.Print(" Ватт ");Приходится конвертировать :
Lcd.Print(dtostrf(watts,0,2, buffer)); Lcd.Print(" Ватт ");качайте Nokia1100_Library
http://yadi.sk/d/CXjuENmaEEwun
там разная графика
Спасибо! Будуть пробовать =)
может для такого проекта надо было дисплей покрупнее выбрать?
и стоит недорого
http://www.ebay.com/itm/1-8-Serial-SPI-TFT-LCD-Module-Display-PCB-Adapte...
а там уже плеер радио спидометр одометр управление фарой и так далее.
на таком дисплее это будет информативнее
http://arduino.ru/forum/obshchii/vremya-na-ispolnenie-raznykh-funktsii#c...
тестил максимальную частоту обновления 1202 на 16мгц ардуине
подскажите где скачать картинки для таких дисплеев? когда то было дофига. сейчас не могу найти
точнее анимацию
Интересный дисплей, но думаю цветной будет хуже читатся на солнце. Еще я пытаюсь засунуть этот девайс в корпус обычного велокомпьютера, дисплей от 1202 как раз подходит. Только вот ардуина не вмещается, придется делать плату.
Если не трудно, можете запостить пример использования библиотеки Nokia1100_Library? Спасибо!
#include <Nokia2.h> LCD Display = LCD(); /* LCD_CS 5 LCD_Data 6 LCD_CLK 7 Пиксель Display.drawPixel(x,y,color); Символ Display.drawChar(x,y,char,color,bg,size); Линия Display.drawLine(x0,y0,x1,y1,color); Круг Display.drawCircle(x0,y0,radius,color); Незнаю Display.drawCircleHelper(x0,y0,radius,cornername,color); Залитый круг Display.fillCircle(x0,y0,radius,color); незнаю Display.fillCircleHelper(x0,y0,radius,cornername,delta,color); Треугольник Display.drawTriangle(x0,y0,x1,y1,x2,y2,color); Залитый треугольник Display.fillTriangle(x0,y0,x1,y1,x2,y2,color); Прямоугольник Display.drawRoundRect(x0,y0,width,height,radius,color); со скругленными краями Прямоугольник Display.fillRoundRect(x0,y0,width,height,radius,color); со скругленными краями Курсок в координаты Display.setCursor(x,y); Цвет текста Display.setTextColor(color); Незнаю Display.setTextColor(color,bg); Размер текста Display.setTextSize(size); */ void setup() { Display.Setup(); Display.Clear(); } void loop() { Display.setTextColor(1); Display.setCursor(50,5); Display.print("Jeka_tm"); Display.Update(); Display.drawRoundRect(48,1,45,15 ,3,255); Display.fillCircle(70,40,22,1); Display.setCursor(50,35); Display.setTextColor(0); Display.print("Arduino"); Display.drawChar(0,37,82,1,0,4); Display.drawChar(21,45,82,1,0,3); Display.drawChar(37,51,82,1,0,2); Display.drawLine(0,0,0,20,1); Display.drawTriangle(3,0,3,20,20,20,1); Display.Update(); }Попробовал скомпилировать скетч, но вылазит ошибка:
у меня компилируется. иде какой версии?
1.0.3. Попробую обновить.
пользуюсь такими. слева для 3.3В схемы. правая для 5В
Доброго дня! А можно подробную схему с деталями для 5-ти вольтового подключения?
у меня 1.04 но это врядли. попробуйте следующее
в NokiaChars.h поменять строку
static unsigned char font[] PROGMEM = {на
static const char font[] PROGMEM = {слева направо: 3 резистора по 4.7-5.1К
далее 100ом регулирует яркость подсветки
далее стабилизатор AMS1117-3.3
Спасибо, поправил на const, скомпилировалось. Теперь следующая проблема, пытаюсь сделать шрифт крупнее:
Display.setTextSize(2); Display.setCursor(0,0); Display.print("Watt"); Display.Update();Если выводить один символ то все хорошо, но если несколько, как в коде то символы налазят один на другой.
не в курсе. я особо крупным шрифтом не баловался. но по идее должно все нормально работать. посмотрите либу каким образом размер шрифта влияет на вывод
можете нарисовать любой шрифт сами любого размера и выводить. только надо посмотреть как интегрировать
я лично под конкретную задачу делаю шрифт если какие нибудь не подходят, так и графику
jeka_tm
Поделитесь файлом разводки под дисплей который вы выложили выше? Спасибо!
какую именно?
LCD1 которая, мне главное разводку пинов к дисплею, а я ее уже под себя отредактирую. Кстати в какой программе делали? И еще, под 5В кроме питания и подсветки резисторы на сигнальные линии обязательные?
резисторы обязательны. иначе дисплей сдохнет. в идеале делитель, но и так работает
программа: diptrace (бесплатная)
файл LCD_1202_3.3V
http://yadi.sk/d/CXjuENmaEEwun
Спасибо!
подключил 1110. ох и намучался. но все ради высокой контрастности. оно того стоило
проверил контрастность при разном питании дисплея
Правильно питать от 1.8В и 2.5В. Но по другим тестам можно использовать 3.3В
решил проверить. разницы не заметил
по сравнению с 1202 надо инвертировать по вертикали, и инвертировать дисплей. Хорошо что это делается просто 2 строками кода
Можно попросить выложить печатку для 5 вольтовый версии
https://yadi.sk/d/CXjuENmaEEwun
папка дисплеи. там файл
LCD_1202_3.3V
внутри 2 версии 3.3В и одна 5В
Ребята помогите с дисплеем нокиа 1202 спаял плату под 5 вольт с делителями. Использую библиотеку PCF8814 скачанную в этой ветке.
Но есть проблема все отображается зеркально
Кто знает как инвертировать изображение?
На этом дембилишном форуме нет поиска (((
Кто знает как инвертировать изображение?
На этом дембилишном форуме нет поиска (((
отключи халабуду, которая у тебя режет скрипты и увидишь в правом верхнем углу форму ввода поискового запроса
Как инвертировать изображение на дисплее? Библиотека PCF8814!
https://github.com/igorok107/PCF8814/blob/master/PCF8814.cpp
Почитай описание функций, там руским языком в коментах описано.
Да я уже читал я не знаю как ими воспользоваться поэтому и задаю вопрос!
Ну видел я эту строчку, а куда ее прилепить в коде не знаю.
Да не ужели трудно подсказать?
Так а зачем инвертировать? Поставьте чёрный фон и белый шрифт.
У меня зеркальная картинка уже разобрался сам.
Вот только по оси Х отражается а по У не хочет
у него зеркально отображается.
*можно в зеркало смотреть экран.
У меня зеркальная картинка уже разобрался сам.
Вот только по оси Х отражается а по У не хочет
ага. у меня тоже не получилось сразу обе оси инвертировать. только одна работает. перебирал все возможные коды. тут либо диплей развернуть и учитывать ориентацию дисплея, либо инвертировать по одной оси, а инвертирование по другой делать программно. я так в пульте делал, по другому дисплей было не впихнуть, но оно того не стоит, лучше или просто развернуть или другой дисплей. тот же 1110 вроде подддерживает, и контрастность хорошая? но паять его тяжело
Lcd.Print("Привет");Команда печатает текст а как вывести переменную ?
void setup() { Lcd.Init(); Lcd.Mirror(0, 0); Lcd.Contrast(12);устанавливаешь в Lcd.Mirror(1, 1); и переворачиваешь как хочешь
#define SetXAddr4 0x00 #define SetXAddr3 0x10 void LCD1202::Update(){ for(byte p = 0; p < 9; p++){ SendByte(LCD_C, SetYAddr| p); SendByte(LCD_C, SetXAddr4); SendByte(LCD_C, SetXAddr3); for(byte col=0; col < LCD_X; col++){ SendByte(LCD_D, LCD_RAM[(LCD_X * p) + col]); } } }