Как приклеить шлейф к дисплею nokia 5110
Перейти к содержимому

Как приклеить шлейф к дисплею nokia 5110

  • автор:

Подключение дисплея от nokia 5110/3310 к AVR

Итак, наконец-то повезло приобрести телефон nokia 5110. В телефоне много разных вкусностей, но нас интересует дисплей.

:warning: Если вы используете AVR-GCC / WinAvr, то вам нужна эта библиотека. Настоятельно рекомендую изучить эту статью.

Телефон, собственно|300

Разбираем телефон и добираемся до дисплея.

|300

Дисплей с печаткой соединяется резиновым шлейфом. Также под дисплеем располагаются светодиоды. Лучше всего отпилить часть печатки с дисплеем и припаять шлейф с коннектором, как я и поступил.

|300 |300

Распиновка дисплея|300

На плате с дисплеем я напаял несколько перемычек, дабы уменьшить количество проводов.

Распиновка на печатке, вид сверху|500

Далее дисплей подключается к микроконтроллеру по такой схеме:

Подключение к МК|300

Я использовал ATmega8, но подойдут и многие другие микроконтроллеры семейства AVR. Пины можно изменить в программе. Схему я питал напряжением 3.3в, но для питания от пяти нужно сделать коммутацию на резисторах. Драйвер собран из нескольких источников. Код для CodeVisionAvr. Русские буквы в набор входят 🙂

Функции приведены ниже

void lcd_init(void); //инициализация дисплея  void lcd_contrast(unsigned char contrast); //установить контраст  void lcd_clear(void); //очистить диплей  void lcd_clear_area(unsigned int line, unsigned char startX, unsigned char endX); //очистить поле  void lcd_clear_line(unsigned int line); //очистить линию  void lcd_gotoxy(unsigned int x, unsigned int y); //переместить курсов в заданную позицию  void lcd_putch(char chr); //вывод символа  void lcd_str(char *str); //вывод строки  void lcd_image( flash unsigned char img[]); //вывод изображения из программы Image generate  void lcd_extrachar(int num); //вывод дополнительных символов (пока только значок заряда, 7x10) 

Пины меняются в заголовочном файле lcd.h

#define LCD_CLK_PIN PORTB.0 #define LCD_DATA_PIN PORTB.1 #define LCD_DC_PIN PORTB.2 #define LCD_RST_PIN PORTB.3 

Стоит напомнить, что префикс flash перед переменной означает, что она сохраняется не в оперативной памяти, а во flash памяти МК. Использовал по причине нехватки памяти при хранении изображений.

Ну и демонстрация работы

|300 |300

|300 |300

Ссылки:

SamPawno

Так получилось что этот дисплей пролежал у меня без дела более года. А вчера решив его испробовать обнаружил что он не исправен. Открывать спор с продавцом уже не имеет ни какого смысла и я решил покурочить данный девайс. К сожалении внутренности сфотографировать я не удосужился. А вскрывать повторно потроха дисплея уже нет желания, благо он сейчас работает должным образом. Отогнув четыре защёлки на задней стороне платы, я снял металлическую рамку, которая удерживает сам дисплей. Думая что он не исправен — я особо с ним не церемонился. Оторвав от дисплея контакты (на фото под платой черная приблуда) подумал может заменить их каким либо шлейфом. Но для этого иго нужно было бы приклеить токопроводящим клеем или лаком (коим вроде и были примазана колодка с контактами). При более тщательном разглядывании «стёклышка» дисплея обнаружил что где то я уже видел такие дорожки

дорожки на стекле дисплея.png

дорожки на стекле дисплея дорожки на стекле дисплея.png (39.2 КБ) 1534 просмотра

Это был дисплей мультиметра. Но там соединение ни на шлейфе ни на контактах, а на какой то резиночке. Это silicone zebra connector — вообщем силиконовый зебра соединитель

silicone zebra connector - силиконовый зебра соединитель.png

silicone zebra connector — силиконовый зебра соединитель silicone zebra connector — силиконовый зебра соединитель.png (72.5 КБ) 1534 просмотра

Но нет худа без добра — тот мультиметр в котором я видел такое соединение, приказал долго жить и без дела лежал в коробочке. Вот из его достав зебру, я вырезал из неё пластиннику нужного мне размера. Сonnector должен плотно прилегать, для этого сделал по высоте его немного побольше. Тщательно зачистив место бедующего прилегания резиночки к стёклышку, установив все детали на место (благо их не много) собрал модуль воедино. Установив нужные библиотеки и залив скетч — любуюсь содеянным.

Немного переделанный скетч из примера к библиотеке Adafruit-PCD8544. Добавлено — функция utf8rus , заменено — падающие звёздочки на снежинки, вставлено — переход goto к отображению русских шрифтов, а также добавлен display.cp437(true) .

Adafruit_PCD8544 display = Adafruit_PCD8544 ( 3 , 4 , 5 , 6 , 7 );

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16

static const unsigned char PROGMEM logo16_glcd_bmp [] =
< B00000001 , B00000000 ,
B00000101 , B01000000 ,
B00000011 , B10000000 ,
B00100001 , B00001000 ,
B11000001 , B00000110 ,
B00110001 , B00011000 ,
B01001101 , B01100100 ,
B00000011 , B10000000 ,
B00000011 , B10000000 ,
B01001101 , B01100100 ,
B00110001 , B00011000 ,
B11000001 , B00000110 ,
B00100001 , B00001000 ,
B00000011 , B10000000 ,
B00000101 , B01000000 ,
B00000001 , B00000000 >;

void setup () Serial . begin ( 9600 );

display . begin ();
display . cp437 ( true );
// инициализация выполнена

// вы можете изменить контраст вокруг, чтобы адаптировать дисплей
// для лучшего просмотра!
display . setContrast ( 50 );

display . display (); // показать заставку
delay ( 2000 );
display . clearDisplay (); // очищает экран и буфер

//goto metka; // russian font

// нарисовать один пиксель
display . drawPixel ( 10 , 10 , BLACK );
display . display ();
delay ( 2000 );
display . clearDisplay ();

//рисовать много линий
testdrawline ();
display . display ();
delay ( 2000 );
display . clearDisplay ();

// рисовать прямоугольники
testdrawrect ();
display . display ();
delay ( 2000 );
display . clearDisplay ();

//нарисовать несколько прямоугольников
testfillrect ();
display . display ();
delay ( 2000 );
display . clearDisplay ();

// нарисовать несколько кругов
testdrawcircle ();
display . display ();
delay ( 2000 );
display . clearDisplay ();

// нарисовать круг, радиус 10 пикселей
display . fillCircle ( display . width ()/ 2 , display . height ()/ 2 , 10 , BLACK );
display . display ();
delay ( 2000 );
display . clearDisplay ();

testdrawroundrect ();
delay ( 2000 );
display . clearDisplay ();

testfillroundrect ();
delay ( 2000 );
display . clearDisplay ();

testdrawtriangle ();
delay ( 2000 );
display . clearDisplay ();

testfilltriangle ();
delay ( 2000 );
display . clearDisplay ();

// нарисуйте первые ~ 12 символов в шрифте
testdrawchar ();
display . display ();
delay ( 2000 );
display . clearDisplay ();

// тесты отображения текста
display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . println ( «Hello, world!» );
display . setTextColor ( WHITE , BLACK ); //«перевернутый» текст
display . println ( 3.141592 );
display . setTextSize ( 2 );
display . setTextColor ( BLACK );
display .print( «0x» ); display . println ( 0xDEADBEEF , HEX );
display . display ();
delay ( 2000 );

//пример вращения
display . clearDisplay ();
display . setRotation ( 1 ); // повернуть на 90 градусов против часовой стрелки, также можно использовать значения 2 и 3, чтобы идти дальше.
display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . println ( «Rotation» );
display . setTextSize ( 2 );
display . println ( «Example!» );
display . display ();
delay ( 2000 );

// вернуться обратно без вращения
display . setRotation ( 0 );

//metka:
// russian font
display . clearDisplay ();
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );
display . setTextSize ( 1 );
display . println ( utf8rus ( «Шрифт 1» ));
display . setTextSize ( 2 );
display . println ( utf8rus ( «Шрифт2» ));
display . setTextSize ( 3 );
display . println ( utf8rus ( «Шр3» ));
display . display ();
delay ( 5000 );

// миниатюрный растровый дисплей
display . clearDisplay ();
display . drawBitmap ( 30 , 16 , logo16_glcd_bmp , 16 , 16 , 1 );
display . display ();

// invert the display
display . invertDisplay ( true );
delay ( 1000 );
display . invertDisplay ( false );
delay ( 1000 );

// нарисовать растровую иконку и анимировать движение
testdrawbitmap ( logo16_glcd_bmp , LOGO16_GLCD_WIDTH , LOGO16_GLCD_HEIGHT );
>

void testdrawbitmap ( const uint8_t * bitmap , uint8_t w , uint8_t h ) uint8_t icons [ NUMFLAKES ][ 3 ];
randomSeed ( 666 ); // какое бы семя

// инициализировать
for ( uint8_t f = 0 ; f < NUMFLAKES ; f ++) icons [ f ][ XPOS ] = random ( display . width ());
icons [ f ][ YPOS ] = 0 ;
icons [ f ][ DELTAY ] = random ( 5 ) + 1 ;

Serial .print( «x: » );
Serial .print( icons [ f ][ XPOS ], DEC );
Serial .print( » y: » );
Serial .print( icons [ f ][ YPOS ], DEC );
Serial .print( » dy: » );
Serial . println ( icons [ f ][ DELTAY ], DEC );
>

while ( 1 ) // нарисовать каждый значок
for ( uint8_t f = 0 ; f < NUMFLAKES ; f ++) display . drawBitmap ( icons [ f ][ XPOS ], icons [ f ][ YPOS ], logo16_glcd_bmp , w , h , BLACK );
>
display . display ();
delay ( 200 );

// затем стереть + переместить
for ( uint8_t f = 0 ; f < NUMFLAKES ; f ++) display . drawBitmap ( icons [ f ][ XPOS ], icons [ f ][ YPOS ], logo16_glcd_bmp , w , h , WHITE );
//подвинь это
icons [ f ][ YPOS ] += icons [ f ][ DELTAY ];
//если его нет, реините
if ( icons [ f ][ YPOS ] > display . height ()) icons [ f ][ XPOS ] = random ( display . width ());
icons [ f ][ YPOS ] = 0 ;
icons [ f ][ DELTAY ] = random ( 5 ) + 1 ;
>
>
>
>

void testdrawchar ( void ) display . setTextSize ( 1 );
display . setTextColor ( BLACK );
display . setCursor ( 0 , 0 );

for ( uint8_t i = 0 ; i < 168 ; i ++) if ( i == '\n' ) continue ;
display . write ( i );
//if ((i > 0) && (i % 14 == 0))
//display.println();
>
display . display ();
>

void testdrawcircle ( void ) for ( int16_t i = 0 ; i < display . height (); i += 2 ) display . drawCircle ( display . width ()/ 2 , display . height ()/ 2 , i , BLACK );
display . display ();
>
>

void testfillrect ( void ) uint8_t color = 1 ;
for ( int16_t i = 0 ; i < display . height ()/ 2 ; i += 3 ) // alternate colors
display . fillRect ( i , i , display . width ()- i * 2 , display . height ()- i * 2 , color % 2 );
display . display ();
color ++;
>
>

void testdrawtriangle ( void ) for ( int16_t i = 0 ; i < min ( display . width (), display . height ())/ 2 ; i += 5 ) display . drawTriangle ( display . width ()/ 2 , display . height ()/ 2 - i ,
display . width ()/ 2 — i , display . height ()/ 2 + i ,
display . width ()/ 2 + i , display . height ()/ 2 + i , BLACK );
display . display ();
>
>

void testfilltriangle ( void ) uint8_t color = BLACK ;
for ( int16_t i = min ( display . width (), display . height ())/ 2 ; i > 0 ; i -= 5 ) display . fillTriangle ( display . width ()/ 2 , display . height ()/ 2 — i ,
display . width ()/ 2 — i , display . height ()/ 2 + i ,
display . width ()/ 2 + i , display . height ()/ 2 + i , color );
if ( color == WHITE ) color = BLACK ;
else color = WHITE ;
display . display ();
>
>

void testdrawroundrect ( void ) for ( int16_t i = 0 ; i < display . height ()/ 2 - 2 ; i += 2 ) display . drawRoundRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , display . height ()/ 4 , BLACK );
display . display ();
>
>

void testfillroundrect ( void ) uint8_t color = BLACK ;
for ( int16_t i = 0 ; i < display . height ()/ 2 - 2 ; i += 2 ) display . fillRoundRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , display . height ()/ 4 , color );
if ( color == WHITE ) color = BLACK ;
else color = WHITE ;
display . display ();
>
>

void testdrawrect ( void ) for ( int16_t i = 0 ; i < display . height ()/ 2 ; i += 2 ) display . drawRect ( i , i , display . width ()- 2 * i , display . height ()- 2 * i , BLACK );
display . display ();
>
>

void testdrawline () <
for ( int16_t i = 0 ; i < display . width (); i += 4 ) display . drawLine ( 0 , 0 , i , display . height ()- 1 , BLACK );
display . display ();
>
for ( int16_t i = 0 ; i < display . height (); i += 4 ) display . drawLine ( 0 , 0 , display . width ()- 1 , i , BLACK );
display . display ();
>
delay ( 250 );

display . clearDisplay ();
for ( int16_t i = 0 ; i < display . width (); i += 4 ) display . drawLine ( 0 , display . height ()- 1 , i , 0 , BLACK );
display . display ();
>
for ( int8_t i = display . height ()- 1 ; i >= 0 ; i -= 4 ) display . drawLine ( 0 , display . height ()- 1 , display . width ()- 1 , i , BLACK );
display . display ();
>
delay ( 250 );

display . clearDisplay ();
for ( int16_t i = display . width ()- 1 ; i >= 0 ; i -= 4 ) display . drawLine ( display . width ()- 1 , display . height ()- 1 , i , 0 , BLACK );
display . display ();
>
for ( int16_t i = display . height ()- 1 ; i >= 0 ; i -= 4 ) display . drawLine ( display . width ()- 1 , display . height ()- 1 , 0 , i , BLACK );
display . display ();
>
delay ( 250 );

display . clearDisplay ();
for ( int16_t i = 0 ; i < display . height (); i += 4 ) display . drawLine ( display . width ()- 1 , 0 , 0 , i , BLACK );
display . display ();
>
for ( int16_t i = 0 ; i < display . width (); i += 4 ) display . drawLine ( display . width ()- 1 , 0 , i , display . height ()- 1 , BLACK );
display . display ();
>
delay ( 250 );
>

/* Перекодировать русские шрифты из UTF-8 в Windows-1251 */
String utf8rus ( String source )
int i , k ;
String target ;
unsigned char n ;
char m [ 2 ] = < '0' , '\0' >;

k = source . length (); i = 0 ;

while ( i < k ) n = source [ i ]; i ++;

if ( n >= 0xC0 ) switch ( n ) case 0xD0 : n = source [ i ]; i ++;
if ( n == 0x81 ) < n = 0xA8 ; break ; >
if ( n >= 0x90 && n break ;
>
case 0xD1 : n = source [ i ]; i ++;
if ( n == 0x91 ) < n = 0xB8 ; break ; >
if ( n >= 0x80 && n break ;
>
>
>
m [ 0 ] = n ; target = target + String ( m );
>
return target ;
>

Как приклеить шлейф к дисплею nokia 5110

вообще-то проблема не в этом! Массив при таком обьявлении определенной длины получается!
Вы лучше посмотрите на функцию путстр — там есть ограничение на самый первый символ. помоему он не 14 а аж 20-й . ибо если задать вывод символа ниже начала таблицы символов там условие стоит и оно просто не выводит ничего!
А вообще я пользуюсь всегда простой конструкцией для вывода текста

unsigned char a2[LcdBufSize];

или вот ещё кусок кода

sprintf(a2, «t%u=%+.4f\xf8C\n\r»,i+1, ds_temp);
lcd_clear_row(1+i);
lcd_gotoxy(1,1+i);
lcd_putstr(a2); // выводим на экранчик «t1=-0.0000C»

Ни разу ещё не подводила и т.д. всегда отрабатывает корректно вообще не представляю как по-другому можно

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам — это может быть вход в метро.

Заголовок сообщения:
Добавлено: Ср янв 06, 2010 19:02:15

Опытный кот

Совершенно случайно попался мне под руку проект LC метра на PIC и дисплее от nokia 3310. Автор оказался не жадным и прикрепил исходник к проекту, там караз был исходник функций LCD. Я коечто позаимствувал. Делюсь тем что у меня вышло

Вложения:
3310.rar [10.2 KiB]
Скачиваний: 1135

_________________
Я не Сашок.

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Заголовок сообщения:
Добавлено: Пн янв 18, 2010 15:11:23

Встал на лапы

А в дисплеях от телефона NOKIA 3310 и NOKIA 5110 контроллеры одинаковые стоят?

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Заголовок сообщения:
Добавлено: Пн янв 18, 2010 21:38:37
sachok писал(а):

Совершенно случайно попался мне под руку проект LC метра на PIC и дисплее от nokia 3310. Автор оказался не жадным и прикрепил исходник к проекту, там караз был исходник функций LCD.

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Заголовок сообщения:
Добавлено: Сб янв 23, 2010 12:53:23

Открыл глаза

Это автор не жадный!

Заголовок сообщения:
Добавлено: Пн фев 08, 2010 22:03:27

Опытный кот

Здравствуйте! Решил спаять платку для тестов LCD. Сам дисплей планирую питать от 3,3В как по даташиту, есть вопрос по согласованию уровней между МК и дисплеем. Посмотрите пожалуйста прикрепленную схему, можно ли так сделать?

Вложения:
Комментарий к файлу: Схема
cxema.JPG [9.84 KiB]
Скачиваний: 1254

_________________
Я не Сашок.
Заголовок сообщения:
Добавлено: Пн фев 08, 2010 22:24:45

Если чисто для тестов и питай мегу от 3 вольт — переходники не нужны.
Если для тестовых проектов по скорострельности , тады другое дело .

Заголовок сообщения:
Добавлено: Пн фев 08, 2010 22:49:33

Опытный кот

Хочу на железке проверить те функции которые уже написал ну и проверять новые функции, а то Proteus работает у меня 1 мин. и закрывается, а так не интересно) У меня ATmega8-16PU обычная не (8L) так что стабильность работы от 3В не гарантируется, лучше сразу поставлю по резистору и стабилитрону.

_________________
Я не Сашок.

Заголовок сообщения:
Добавлено: Пн фев 08, 2010 23:27:59

Вымогатель припоя

sachok писал(а):
Proteus работает у меня 1 мин. и закрывается, а так не интересно)

Протеус 7.4? с ним у меня такие проблемы были, качал по ссылкам с форума, обновил до 7.6, теперь всё норм.

Заголовок сообщения:
Добавлено: Вт фев 09, 2010 01:55:25

Поставщик валерьянки для Кота

sachok писал(а):
лучше сразу поставлю по резистору и стабилитрону.
может лучше простой резистивный делитель?
Заголовок сообщения:
Добавлено: Чт фев 11, 2010 12:35:37

Опытный кот

У кого то есть пример установки (включения/выключения) пикселя с координатами (х,у) на CVAVR.
Решено!

/*
відображення пікселя з координатами (х, у)
для «увікнення» set = 1
для «вимкнення» set = 0

lcd_set_pixel (1, 2, 1) // «увімкнути»
lcd_set_pixel (1, 2, 0) // «вимкнути»
*/
void lcd_set_pixel(unsigned char x, unsigned char y, unsigned char set)
{
unsigned char value;
unsigned char row;
unsigned char lcd_buffer[8][84];

lcd_gotoxy (x,row);
lcd_send(value, lcd_data);
}

_________________
Я не Сашок.

Последний раз редактировалось sachok Сб фев 13, 2010 19:48:37, всего редактировалось 1 раз.

Заголовок сообщения:
Добавлено: Сб фев 13, 2010 11:46:55

Опытный кот

Ещё возникла идея. Поскольку дисплей потребляет малый ток то возможно на него подать питание с +5В только через 2 последовательно включенных диода 1n4148. Ну и на сигнальных линиях может тоже так сделать?
Поделитесь тем как Вы питаете дисплей, а то не хочу спалить.

_________________
Я не Сашок.

Заголовок сообщения:
Добавлено: Ср мар 03, 2010 22:08:22

Вымогатель припоя

Реализовал программу генератора массива символов — символьный генератор. Программа позволяет генерировать как 5х8, так и 10х16 символы.
Также имеется готовый набор символов (содержащий как английские, так и русские) и функций для работы с ними symbol-generate.c

Заголовок сообщения: Re: Дисплей Nokia 3410 (3310)
Добавлено: Пн апр 05, 2010 16:02:27

Первый раз сказал Мяу!

Коты .
Подскажите в чем может быть проблема?
Дисплей 3310 + мега8
Не могу заставить писать черным по белому т.е. нормально, все отображается в инверсном виде. В чем может быть проблема?
Инициализация такая , перепробовал все — ничего не помогает.

lcd_send(0x21, LCD_CMD); // Перевод LCD в режим внешних команд
lcd_send(0xC8, LCD_CMD); // Set LCD Vop(Contrast = 72)
lcd_send(0x06, LCD_CMD); // Установить температурный коэффициент
lcd_send(0x13, LCD_CMD); // LCD bias mode 1:48
lcd_send(0x20, LCD_CMD); // Перевод LCD в режим cтандартных команд, Горизонтальная адресация (внутренние команды)
lcd_send(0x0C, LCD_CMD); // LCD в нормальный режим отображения (черным по белому)

Протеус отображает в инверсном виде, хотя если загрузить в него другой (чужой) hex, то все работает нормально где копать?

Заголовок сообщения: Re: Дисплей Nokia 3410 (3310)
Добавлено: Пн апр 05, 2010 19:44:21

Встал на лапы

Столкнулся с курьезом: подключил дисп Nokia 5210 (84×48, PCD8544). Его особая привлекательность в том, что он малых габаритов, и имеет удобный контактный шлейф, который не плавится при пайке, но! Изображение на нем отзеркалено справа-налево. как программно можно подкорректировать? или прийдется знакоген переписывать? а может команда есть какая? точно знаю, что в Nokia 1100 дисплее есть команда на «отзеркаливание» изображения, но она, естественно, для PCD8544 не катит.
Изображение
Изображение

Заголовок сообщения: Re: Дисплей Nokia 3410 (3310)
Добавлено: Вт апр 06, 2010 10:59:13

Поставщик валерьянки для Кота

Попробуйте ингициализировать дисплей как в даташите
по идее я на него не нашел такой функции слева направо или справа налево но с другой стороны. да неприятно. а с третей большая ли разница для знакогенератора. просто перед каждым символом позиционировать курсор и читать не 12345678 а 87654321 из таблицы шрифта

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам — это может быть вход в метро.

Заголовок сообщения: Re: Дисплей Nokia 3410 (3310)
Добавлено: Вт апр 06, 2010 11:09:12

Поставщик валерьянки для Кота

lerik писал(а):

Коты .
. Протеус отображает в инверсном виде, хотя если загрузить в него другой (чужой) hex, то все работает нормально где копать?

Вот моя процедурка инициализации

RES=0;
delay_ms(100);
RES=1;
delay_ms(100);
writecomm(0x21); // LCD Extended Commands.
//writecomm(0xC8); // Set LCD Vop (Contrast).
writecomm(0b10000000|mem_contr);
writecomm(0x06); // Set Temp coefficent.
writecomm(0x13); // LCD bias mode 1:48.
writecomm(0b01000101); //Переводим СКРОЛЛИНГ вверх на пол строки — вторая строка = первая на экране
writecomm(0x20); // LCD Standard Commands, Horizontal addressing mode.
writecomm(0x0C); // LCD in normal mode.

Так как впринципе всё одинаково то скорее всего у вас СПИ порт настроен неправильно(не та полярность такта)
Вот моя инициализашка порта СПИ

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2*4000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам — это может быть вход в метро.

Заголовок сообщения: Re:
Добавлено: Вт апр 06, 2010 11:33:19

Поставщик валерьянки для Кота

sachok писал(а):

Здравствуйте! Решил спаять платку для тестов LCD. Сам дисплей планирую питать от 3,3В как по даташиту, есть вопрос по согласованию уровней между МК и дисплеем. Посмотрите пожалуйста прикрепленную схему, можно ли так сделать?

Я делаю проще. я взял на линии данных от мк(который от 5-ти вольт) до LCD поставил килоомные резисторы а питание организовал простым линейником L1117-3.3 нагруженным не только самим LCD а ещё и 200 омным резистором. в сам контроллер уже встроены защитные диоды к питанию в них оно спокойно упирается. а чтоб небыло паразитного питания стабилизатор работает по типу стабилитрона не экономично .. согласен. можно было бы взять микруху для согласования уровней чтото типа HCT244-й или её подобное но..у мя итак работает на 4 мегагерцах а в бОльшей скорости я смысла не вижу экранная матрица всёравно инерционна.

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам — это может быть вход в метро.

Обзор LCD дисплея Nokia 5110

Обзор LCD дисплея Nokia 5110

В предыдущих статьях рассказывал как вывести информацию на LCD1602, OLED и TFT дисплеи их часто можно встретить в различных проектах. В этой статье расскажу об еще одном дисплеи NOKIA 5110, который так же очень популярный. Главной особенность этого дисплея является способность выводить не только текст, но и графические данные.

Технические параметры:

► Контроллере PCD8544;
► Разрешение экрана: 84 x 48 точек;
► Размеры экрана: 36 х 24 мм;
► Напряжение питания логики: 2,7 – 3,3В;
► Габариты: 43,8 х 43,4 х 13,2 мм;
► Вес: 14 г.

Описание дисплея Nokia 5110

Дисплей Nokia 5110 управляется с помощью контроллера PCD8544 (производитель Philips). Контроллер управляет дисплеем с разрешением 84 × 48 пикселей, в качестве связи с микроконтроллером (arduino) используется интерфейс последовательной шины, аналогичный SPI. Согласно документации, чип PCD8544 работает диапазоне от 2,7 до 3,3 В в том числе и логическая часть. Таким образом, при подключении к пяти вольтной Arduino необходимо понизить логическое напряжение до 3В.

Назначение контактов.
► RST — Сброс дисплея, при логическом нуле происходит сброс изображения на дисплеи.
► CE — включение чипа. при логическом нуле чип активен.
► D/C — сообщение дисплею, являются ли данные команда или отображаемыми данными.
► DIN — вывод последовательных данных для интерфейса SPI.
► CLK — вывод последовательного тактового сигнала для интерфейса SPI.
► VCC — вывод питания для ЖК-дисплея.
► BL — управляет подсветкой дисплея. Чтобы контролировать его яркость, вы можете добавить потенциометр или подключить этот вывод к любому выводу Arduino с поддержкой ШИМ.
► GND — земля.

Подключение LCD дисплея Nokia 5110 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Графический LCD дисплей Nokia 5110 — 84×84 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Резистор 1 кОм, 0.125 Вт x 5 шт.
► Резистор 330 Ом, 0.125 Вт x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
Подключение не сложено и так как мы используем программный SPI, можно использовать любые цифровые контакты Arduino. В примере выводы CLK, DIN, DC, CE и RST от дисплея подключаем в выводам Arduino от 7 до 3. Так как дисплей не льзя подключать напрямую к Arduino, воспользуемся самым простым способом, добавим резисторы 10 кОм между выводами CLK, DIN, D/C и RST и резистор 1 кОм между контактами CE. А вывод подсветки (BL) подключен к 3,3 В через токоограничивающий резистор 330 Ом.

Установка библиотек:
Для работы с дисплеем Nokia 5110 необходимо установить две библиотеку «Adafruit PCD8544 Nokia 5110 LCD» и «Adafruit GFX» Чтобы установить библиотеки, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «nokia», найдите библиотеку «Adafruit PCD8544 Nokia 5110 LCD» и установите данную библиотеку.

Теперь установим вторую библиотеку, вводим в поиск «Adafruit GFX» и устанавливаем «Adafruit GFX Library«

Программа:
Теперь запускаем среду разработку Arduino IDE и загружаем скетч в контроллер.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *