AVR Lab устройства на микроконтроллерах AVR

Дисплей NOKIA 3310 библиотека для микроконтроллера AVR купить

Наконец-то руки дошли до экспериментов c графическим ЖКИ от NOKIA 3310.
Начал поиски дисплея с того, что проверил доски объявлений на предмет продажи старенького но очень распространенного телефона. Как оказалось люди или хотели большие деньги не оправдано большие или просто напросто уже продали телефон. Решил поискать дисплей как запасную часть, и правильно сделал. Купить смог в магазине Имрад (Киев) дисплей от NOKIA 3310 по цене 20,47 грн (2,57 бакса).
Так он выглядел запакованный в полиэтилен:
дисплей запакованный в полиэтилен

По наивности я решил что дисплей будет новым, оказалось он был просто снят с нерабочего телефона :-) да и как оказалось это был не единственный "сюрприз".

Типы дисплеев


ЖКИ для NOKIA 3310 судя по информации в инетернете двух типов, как минимум:
1. Родные - они сделаны на базе контроллера Philips PCD8544.
2. Китайские - контроллер до сих пор никто не знает какой.

3. Я лично видел еще один вариант дисплея, на металлической части полностью пустое место с левой стороны, а сам контроллер как оказалось родной. При работе с дисплеем оказалось что все работает хорошо, согласной стандартной таблице команд дисплея на основе контроллера Philips PCD8544.
Распиновка дисплея:
распиновка дисплея от nokia 3310

Назначение вывода контроллера дисплея:

Вывод Сигнал Описание Направление данных
1 VDD Питание контроллера дисплея 2,7-3,3 Вольт вход
2 SCLK Тактирующий вывод для последовательного интерфейса SPI Вход
3 SDIN Вход данных последовательного интерфейса SPI Вход
4 D/C Вывод выбора режима ввода данных Данные/Команды Вход
5 SCE Вывод выбора чипа, разрешение на ввод данных в контроллер дисплея Вход
6 GND Вывод Минус питания контроллера Вход
7 VOUT Вывод выходного напряжения контроллера, к нему необходимо подключить кондесатор, минусовым выводом к общему проводнику питания Выход
8 RES Внешний сброс контроллера Вход

Родные дисплеи отличаются тем, что надпись NOKIA непосредственно выбита на металлическом ободке, который крепит дисплей к пластиковому основанию, на котором так же находится клавиатура.
родной оригинальный ЖКИ от nokia 3310

На китайской копии обычно отсутствует надпись NOKIA и место или просто пустое или там находится просто скобка "(" перевернутая на 90 градусов.
не оригинальный дисплей для nokia 3310

Разница в работе дисплеев ощутима, из-за различных контроллеров процесс инициализации дисплеев немного меняется, да и процесс вывода информации на экран тоже. Об этом чуть ниже.

А сейчас расскажу как прикрепить выводы к самому дисплею:
1. Дисплеи бывают в двух вариантах выводов:
а). На дисплее со стороны контактов приклеена двусторонняя платка, на которой находятся металлизированные выводы, к которым теоретически можно подпаяться. После прочтения форумов я все-таки понял что лучше не рисковать, так как в 50% случаев эта платка просто напросто отпадала и люди очень огорчались :-)
Лучше в таком случаи использовать гибкие контакты, которые обычно идут в комплекте.

гибкие контакты дисплея

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

Теперь необходимо подпаять короткие проводки, марку провода лучше всего конечно использовать МГТФ диаметр 0,3 мм примерно, но если нету МГТФ можно применить все что есть под рукой главное что бы проводник был мягкий и легко гнулся.
припаянные проводники к выводам nokia 3310 lcd

2). Далее на монтажной платке, обычно она с отверстиями с шагом 2,5мм выбираем место расположения дисплея. Так чтобы оставить место для припаивания штыревых контактов, к которым потом собственно и будем подключаться далее. Отрезаем нужного размера платку и плоскогубцами вытаскиваем из штирьевых контактов четыре металлических штыря. Ими мы будем крепить сам дисплей к монтажной плате. Итак, фиксируем наш дисплей на монтажной платке, для замеров толщины дисплея лучше всего применить штанген-циркуль, но если нету, можно и на-глаз. Сначала прикладываем дисплей и определяем на каком расстоянии от конца штыря необходимо выполнить загиб, загиб лучше всего делать минимальным, лишь бы он только хорошо держался за дисплей. Выполняем плоскогубцами загиб на каждом из двух штырей и паяльником запаиваем в нижней части дисплея. Для удержания штырей во врем пайки можно использовать те же плоскогубцы, или просто упереть щтыри в деревяшку.

Теперь необходимо прижать без усердства верхнюю часть дисплея и определить на каком расстоянии от края штыря необходимо сделать загиб для верхней части дисплея. Выполняем загиб и выполняем те же операции что и для штырей в нижней части. В результате контактная площадка туго прижата к гибким контактам, гибкие контакты припаяны к проводникам - все как надо! Теперь осталось запаять планку с штыревыми контактами на монтажную платку и подпаять проводники от гибких контактов. У меня в результате вышло следующее:

крепление дисплей с помощью штырей

припаянные проводники

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

Таблица команд контроллера PCD8544:

Команда D/C Байт команды Описание
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
(H=0 или 1)
NOP 0 0 0 0 0 0 0 0 0 Пустая операция (никак не влияет)
Функциональные установки 0 0 0 1 0 0 PD V H Управление питанием, режим ввода, ввод расширенных инструкций (H)
Запись данных 1 D7 D6 D5 D4 D3 D2 D1 D0 Запись байта в ОЗУ дисплея
(H=0)
Зарезервирован 0 0 0 0 0 0 1 X X не используется
Управление экраном 0 0 0 0 0 1 D 0 E Установка режима экрана
Зарезервирован 0 0 0 0 1 X X X X не используется
Установка Y-адреса 0 0 1 0 0 0 Y2 Y1 Y0 Установка Y-адреса в ОЗУ (RAM) 0..5
Установка X-адреса 0 1 X6 X5 X4 X3 X2 X1 X0 Установка X-адреса в ОЗУ (RAM) 0..83
(H=1)
Зарезервирован 0 0 0 0 0 0 0 0 1 не используется
Зарезервирован 0 0 0 0 0 0 0 1 X не используется
Управление температурой 0 0 0 0 0 0 1 TC1 TC0 Установка температурного коэффициента (TCx)
Зарезервирован 0 0 0 0 0 1 X X X не используется
Система смещения 0 0 0 0 1 0 BS2 BS1 BS0 Установка смещения (BSx)
Зарезервирован 0 0 1 X X X X X X не используется
Установка Vop 0 1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop1 Запись Vop в регистр

Таблица назначения битов

Биты 0 1
PD Чип включен Чип выключен
V Горизонтальная адресация Вертикальная адресация
H Используется основной набор инструкций Используется расширенный набор инструкций
D и E
00 Дисплей пуст
01 Нормальный режим
10 Все сегменты включены
11 Инверсный режим
TC1 и TC0
00 Vlcd температурный коэффициент 0
01 Vlcd температурный коэффициент 1
10 Vlcd температурный коэффициент 2
11 Vlcd температурный коэффициент 3

Что касается библиотеки для этого ЖКИ, она содержит всего четыре файла:
main.c - файл собственно в котором находится основной цикл,
n3310.c - файл с набором функций для работы с контроллером дисплея NOKIA 3310,
n3310.h -файл конфигураций,
picture.h - файл с картинкой, в виде координат точек.

Краткое пояснение по программе:

main.c - содержит демонстрационную программу, которая рисует точки по приходу на USART модуль микроконтроллера цифр 2,4,8,6,5.
Частота кварца для данной программы выбрана 8МГц, скорость подключения по USART соответственно 115,2 k
Цифры соответствуют следующим командам:
2 - перемещение курсора вниз,
8 - перемещение курсора вверх,
4 - перемещение курсора влево,
6 - перемещение курсора вправо,
5 - очистка экрана перемещение курсора в центр экрана.
Все перемещения сопровождаются отрисовкой точки в том месте, куда курсор переместился.
Программа не претендует ни на что, она всего лишь для демонстрации работы библиотеки в режиме отрисовки пикселей.


Библиотка для работы с дисплеем


Данная библиотека это симбиоз нескольких библиотека собранных на просторах интернета и скрученных в одну человеком под ником XANDER. За что ему большое спасибо!

Схема подключения ЖКИ к микроконтроллеру:
схема подключения ЖКИ от NOKIA 3310

Напряжение питания контроллера дисплея по документации 3,3Вольта, это значит что уровень управляющих сигналов от микроконтроллера не должен превышать значение в 3,3Вольта. То есть необходимо выбрать один из двух вариантов:

1. Питать микроконтроллер и дисплей от источника с напряжением 3,3Вольта
2. Ставить регулятор по типу LM7803 или LP2980-3.3 в цепь питания дисплея и осуществлять согласование уровней сигналов.
Последний вариант геморный, но и его часто применяют. Согласование обычно производится при помощи стабилитронов на 3,3Вольта или резисторного делителя.

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

Для генерирования своих символов можно использовать удобную программу Symbol generate

Для генерирования точечных рисунков и для конвертирования картинок в точечные рисунки можно использовать программу Image generate

Вот такую рисовалку управляемую при помощи четырех кнопок собирал недавно.

isis Proteus 7.6 SP4 для моделирования цифровых устройств

Комплекс для разработки isis Proteus 7.6 SP4 дает возможность полностью смоделировать и подготовить устройство для разработки и сборки в железе. При правильном и грамотном применении Proteus может реально сократить время на разработку электронного устройства.

Например, если в большой организации роли проектирования железяки и написания программного обеспечения возложены на двух разных человек, то спроектировав модель схемы устройства, можно сразу же приступать к написанию программы для работы данного устройства. Не дожидаясь макета или первой модели собранной в железе.
isis proteus logo

Основа isis Proteus - ядро Spice, к которому уже доступно более 6000 моделей различных электронных приборов от транзисторов до сложных микроконтроллеров, микропроцессоров и ПЛИС. Программа isis Proteus VSM содержит следующие инструменты, доступные для использования:
- виртуальный осциллограф,
- логический анализатор,
- генератор функций,
- генератор шаблонов,
- счетчик-таймер,
- аналоговые вольтметр и амперметр.

Доступно применение протоколов SPI и I2C для простой и недорогой коммуникации приборов или устройств между собой и управляющими устройствами.

Для анализа аналоговых схем и устройств доступен дополнительный инструмент для анализа коэффициента гармоник, нелинейных искажений и т.д.

Больше всего я думаю интересно будет использовать isis Proteus 7.6 SP4 для моделирования цифровых схем, на микроконтроллерах, тех же AVR.

Микроконтроллер участвует в схеме как реальное устройство, выполняя все функции и загруженный в него программный код. Для моделирования доступны все модули микроконтроллера: порты ввода/вывода, счетчики-таймеры, прерывания, модуль USART.

Скачать Proteus 7.6 SP4
Скачать лекарство бесплатно

Простой step-down драйвер стабилизатор для светодиода

Есть у меня фонарик. Petlz Duo Led 14, не вдаваясь в подробности фонарик в целом меня устраивает, кроме единственного момента. В нем есть галогенка, которая толком света не дает и сильно садит батарейку.

Siemens C45 вместо GSM модуля подключаем к микроконтроллеру

Настало время рассказать про то, как очень полезно можно применить старенький мобильный телефон.
В данной статье речь будет идти о мобильном телефоне производства компании Siemens. Серия телефонов подойдет от Siemens С35 до Siemens M55. Так же возможен вариант работы с другими мобильными телефонами, других производителей те же Nokia, Ericsson. Основным требованием к телефону остается возможность подключить дата-кабель, обычно большинство телефонов подключались через конвертер на RS232 (COM порт персонального компьютера), то есть телефон должен работать по протоколу UART.

В интернет можно найти кучу устройств основанных на работе с мобильным телефоном, начиная от систем сигнализации (некоторые даже могут дозваниваться и передавать звук, некоторые даже видео для сетей 3G например). Прошивки правда люди не очень охотно открывают, видимо думают что сколотят состояние на продаже такой прошивки. Одним словом - капитализм V1.1. (звериный оскал).

Я в своё время купил на караваевых дачах для экспериментов Siemens C45 аж за 120 грн :-)
мой siemens c45

Скорость на которой точно работают мобильные телефоны компании Siemens составляет 19 200 бод.
Распиновка соединительного гнезда мобильного телефона показано на рисунке ниже:
распиновка телефонов siemens
Назначение выводов:
1 - земля
2 - сигнал наличия зарядного устройства
3 -
4 -
5 - отправка данных (TX)
6 - прием данных (RX)
7 -
8 -
9 - земля микрофона
10 - микрофон
11 - земля наушников
12 - вывод звука на наушники

Собственно я пользовался только тремя выводами: минус и контакты передачи/приема данных.
ВАЖНО: при подключении ноги микроконтроллера с выводом информации на вход мобильного телефона обязательно необходимо установить стабилитрон на 3Вольта, так как мобильный телефон принимает только 3 Вольта, если дать больше будет глючить и подвисать или вообще перестанет работать.

Схема подключения:
схема подключения attiny2313 к siemens c45

Для того чтобы была возможность работать с телефоном через так называемые AT команды его надо инициализировать, заодно таким образом можна проверить работоспособность самого телефона.
AT команды были разработаны специально для мобильный модулей GSM, AT комманды для телефонов Siemens в PDF формате.

Для отправки коротких текстовых сообщений существует два формата данных:
1. текстовый формат,
2. формат PDU
Соответственно мобильные телефоны должны поддерживать данные форматы если вы хотите посредством их с ними работать.
Что касается текстового формата данных, то не все телефоны поддерживают работу с ним. Для перехода мобильного телефона в режим работы с текстовым форматом необходимо выполнить определенную комманду см. AT комманды.

Благо с форматом PDU работаю все без исключения телефоны.

Ниже представлен код программы которая выполняет отправку смс 1 раз в 2 минуты.
В одно время необходимо тестировал для данное устройство для вывода из рабочего режима вражеского мобильного телефона. Программа рассчитана на работу

  1. //Шлет по 2 sms в минуту
  2. #include <avr/io.h>
  3. #include <stdlib.h>
  4.  
  5. int x,t,i,n,s,lin,b, z;
  6. unsigned char msg1[] = "AT+CMGS=13"; //Команда инициализации отправки СМС
  7. unsigned char msg2[] = "079183609310000001000A81908321528300000153\x1a";
  8. //в формате PDU текст сообщения и номер телефона абонента.
  9.  
  10. #define nop() {asm("nop");}
  11.  
  12. // function delay
  13. void delay(int t)
  14. {
  15. for (x=t; x>0 ;x--)
  16. nop ();
  17. }
  18.  
  19. // Initializing UART
  20. void USART_Init( unsigned int baud )
  21. {
  22. UBRRH = (unsigned char) (baud>>8);
  23. UBRRL = (unsigned char) baud;
  24. UCSRA = (1<<U2X); //Удвоение скорости
  25. UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) );
  26. //Разрешение на прием и н апередачу через USART
  27. UCSRC = (1<<USBS) | (3<<UCSZ0);
  28. }
  29. // Transmiting DATA via UART
  30. void USART_Transmit( unsigned char data )
  31. {
  32. while ( !( UCSRA & (1<<UDRE)) );
  33. UDR = data;
  34. }
  35. //------------------------------------------------------------------------
  36. // 0x0D - возврат каретки (переход в начало строки)
  37. // 0x0A - переход на новую строчку
  38. // Masage out throu port function
  39. void msgout (unsigned char msg[],int line, int back)
  40. {
  41. s=0;
  42. for (;msg[s];s++)
  43. {
  44. USART_Transmit(msg[s]);
  45. }
  46. if (line ==1)//goto new line
  47. {
  48. USART_Transmit(0x0d);
  49. USART_Transmit(0x0a);
  50. }
  51. if (back==1)
  52. {
  53. USART_Transmit(0x0d);
  54. }
  55. }
  56.  
  57. //main function
  58. int main (void)
  59. {
  60. USART_Init (47);//19200 16MHz
  61.  
  62. while(1)
  63. {
  64. for(n=0; n<15; n++)
  65. {
  66. for(lin=0; lin<100; lin++)
  67. {
  68. delay(100);
  69. }
  70. }
  71. msgout(msg1,1,0);
  72. //Генерируем паузы между отправками СМС
  73. srand (20000); //начальное число псевдо-случайного массива
  74. z = rand() % 20000; // конечное число псевдослучайного массива
  75. /Подпрограмма паузы
  76. for(s=0; s<z; s++)
  77. {
  78. for(b=0; b<100; b++)
  79. {
  80. delay(100);
  81. }
  82. }
  83. msgout(msg2,1,0); //Вывод на мобильный телефон СМС в формате PDU
  84. }
  85. }

Отдельно хочу сказать, что все АТ команды отправляемые в мобильный телефон должны заканчиваться символом перехода на новую строку - "\x1a". Его можно увидеть в конце второго сообщения в коде программы.

Проблемы, которые возникли:

Не могу понять по каким причинам телефон перестал нормально реагировать на посылку AT команд.
Отправляю проверочную команду AT в ответ получаю ответ в виде моей команды "AT" и через 10-15 секунд слово "Error". Теоретически это означает что телефон не хочет работать с AT командами. Возникает вопрос, почему так случилось. До этого все работало отлично. Может кто сталкивался с такой проблемой, огромная просьба отписаться.

ИК бампер на микроконтроллере

Ранее в блоге я писал про идею собрать ИК бампер, вот как бы видно настало время описать то, что у меня получилось.

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

RSS-материал