Дисплей 16х1 от ККМ "Элвес Микро"
- Войдите на сайт для отправки комментариев
Ср, 21/11/2018 - 12:51
Здравствуйте!
Отковырял от списанного кассового аппарата "Элвес Микро" блок индикации с дисплеем 16х1. Документацию на данный дисплей в Интернете найти не удалось. Подключил его к UNO (порты А4 и А5). Хочу в дальнейшем применить его в каком-нибудь своем устройстве, но пока не получается найти с ним общий язык.

Схема подключения такая:

Скетч для отладки:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,1);
void setup()
{
lcd.init();
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.print("Hello, world!");
}
Компиллируется без ошибок, но дисплей не работает. Думаю, что или подключаюсь не к тем контактам, хотя пробовал менять местами А4 и А5, или адрес не верный.
Подскажите, пожалуйста, как еще можно попробовать "договориться" с дисплеем.
а с чего ты взял, что адрес у него 0х27? И что он вапще по i2c подключается?
Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"
Адрес от балды, так как информацию по этому дисплею не нашел.
Запустить сканер I2C - он увидел?
Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"
Адрес от балды, так как информацию по этому дисплею не нашел.
чето фигня какая-то. У меня никак не складывается. как это "схема на сайте производителя" есть, а "информации в инете не нашел"
Зачем в скетче два раза lcd.init() - чтоб до дисплея лучше доходило? :)
RomYch13, да по пинам видно что это обычный "серийник" , к I2C не имеет никакого отношения. Без документации на формат данных заюзать неполучится, киньте это в помойку и не морочьте голову себе и нам :)
Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"
Адрес от балды, так как информацию по этому дисплею не нашел.
чето фигня какая-то. У меня никак не складывается. как это "схема на сайте производителя" есть, а "информации в инете не нашел"
Вот я тоже хотел за это спросить. :)
Перед помойкой, для успокоения совести, запусти всёжэ I2C сканер, на всякий случай.
Зачем в скетче два раза lcd.init() - чтоб до дисплея лучше доходило? :)
В экземпле к ликвидкристал-и2с два инита стоит ;) Зачем - не понимаю.
Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили!
Я ахреневаю, дорогая редакция!
Запрос в гугл "Элвес Микро схема" и первый же результат - полный комплект принципиальных и монтажных схем на этот кассовый аппарат, включая и "блок индикации", как там этот дисплей называется.
Запрос в гугл "Элвес Микро схема" и первый же результат - полный комплект принципиальных и монтажных схем на этот кассовый аппарат, включая и "блок индикации", как там этот дисплей называется.
У вас интернет другой системы. Дорогой, наверное, поэтому там больше информации по дисплеям.
Наверное. Кстати, глянул на схему .... мда, там экран ITS-E0806SRNP и перед ним 8 сдвиговых регистров CD4015BCM. Значит никакого I2C там, разумеется и близко нет. Работать с дисплеем как-то само собой можно, но надо разбираться с даташитом ITS-E0806SRNP а потом "кормить" его через сдвиговые регистры.
Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили!
Железка дома, а я на работе :)
Кстати, при сканировании надо "подтягивать" А4 и А5 резисторами по 10кОм к +5В?
Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили!
Железка дома, а я на работе :)
Кстати, при сканировании надо "подтягивать" А4 и А5 резисторами по 10кОм к +5В?
Надо, если в дисплее оные не распаяны
Надо, если в дисплее оные не распаяны
Особенно если в CD4015BCM откуда-нибудь I2C возьмётся :)
Как и ожидалось, не сканируется железяка.
Но визуально сильно отличается от документации, возможно у меня какая-то более поздняя версия.
Вот что получилось на варианте дисплея на восьми CD4015BCM:
/* * Распайка индикатора на CD4015 со стороны индикатора первая нога левая * 1 - DRES * 2 - ACCLO красный светодиод * 3 - CHARGE зеленый светодиод * 4 - DCLK * 5 - DDAT * 6 - NC * 7 - UCC 5V * 8 - UCC 5V * 9 - GND * 10- GND */ int resPin = 2; int clockPin = 3; int dataPin = 4; int simv[11]={// знакогенератор B11111100, //0 _____ B10000100, //1 | D6 | B11011001, //2 D5 | | D7 B11001101, //3 |_____| B10100101, //4 | D0 | B01101101, //5 D4 | | D2 B01111101, //6 |_____| o D1 B11000100, //7 D3 B11111101, //8 B11101101, //9 B00000000, //пусто }; void setup() { pinMode(resPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); // ******** СБРОС РЕГИСТРОВ ****** digitalWrite(resPin, HIGH); digitalWrite(resPin, LOW); } void loop() { for (int i = 0; i < 8; i++) { shiftOut(dataPin, clockPin,LSBFIRST,simv[i]);} delay(3); }Скетч выводит цифры от 0 до 7.
Нет, к сожалению, не работает.
Нет, к сожалению, не работает.
Я тоже проверял, на CD4015 - без проблем. А эти не хотят, хотя судя по схемам сигналы- те же. И никакой документации по ним не нашел.
... никакой документации по ним не нашел.
Аналогично
Если еще актуально...
Недавно попался мне такой. Работает по протоколу holtek HT1621. В инете есть инфа.
Подключил к LPC2146 (эклз из помойки :) ). Если нужен быстрокод для тестов - могу поделиться
+1 за отзывчивость!
а код выкладывайте, если не ТС, то может кому другому пригодится
и тема будет завершенной
#include <LPC214x.h> #include "ht1621.h" #define BIAS 0x52 #define OSC 0x18 //System clock source, on-chip RC oscillator #define SYSEN 0x01 //Turn on system oscillator #define LCDON 0x03 //Turn on LCD bias generator #define LCDOFF 0x04 #define BIAS12 0x24 //0010-abX0-X LCD 1/2 bias option ab=00: 2 commons option ab=01: 3 commons option ab=10: 4 commons option #define BIAS13 0x29 //0010-abX1-X LCD 1/3 bias option ab=00: 2 commons option ab=01: 3 commons option ab=10: 4 commons option #define TONE4K 0x40 //Tone frequency, 4kHz #define F128 0xA7 //Time base/WDT clock output:128Hz The WDT time-out flag after: 1/32s #define IRQEN 0x88 //Enable IRQ output #define WDTEN 0x06 //Enable time base output void wr_Data(uint8_t pos, uint8_t val, uint16_t mask,uint8_t s); uint8_t i,m,m1; uint8_t arr1[18][3]={ { 0xBC , 0xAC,0x8A}, //0 { 0xB0 , 0xAC,0x80}, //1 { 0xB4 , 0xA8,0x8E}, //2 { 0xB0 , 0xAC,0x8E}, //3 { 0xB8 , 0xAC,0x84}, //4 { 0xB8 , 0xA4,0x8E}, //5 { 0xBC , 0xA4,0x8E}, //6 { 0xB0 , 0xAC,0x88}, //7 { 0xBC , 0xAC,0x8E}, //8 { 0xB8 , 0xAC,0x8E}, //9 { 0xBC , 0xAC,0x8C}, //A { 0xBC , 0xA4,0x86}, //b { 0xBC , 0xA0,0x8A}, //C { 0xB4 , 0xAC,0x86}, //d { 0xBC , 0xA0,0x8E}, //E { 0xBC , 0xA0,0x8C}, //F { 0xB0 , 0xA0,0x84}, //- { 0xB0 , 0xA0,0x80}};// uint16_t arr2[18][3]={ { 0x14E , 0x4A,0x34}, //0 { 0x146 , 0x40,0x30}, //1 { 0x14C , 0x46,0x34}, //2 { 0x14E , 0x46,0x30}, //3 { 0x146 , 0x4C,0x30}, //4 { 0x14A , 0x4E,0x30}, //5 { 0x14A , 0x4E,0x34}, //6 { 0x14E , 0x40,0x30}, //7 { 0x14E , 0x4E,0x34}, //8 { 0x14E , 0x4E,0x30}, //9 { 0x14E , 0x4C,0x34}, //A { 0x142 , 0x4E,0x34}, //b { 0x148 , 0x4A,0x34}, //C { 0x146 , 0x46,0x34}, //d { 0x148 , 0x4E,0x34}, //E { 0x148 , 0x4C,0x34}, //F { 0x140 , 0x44,0x30}, //- { 0x140 , 0x40,0x30}};// uint16_t arr3[18][3]={ { 0x2E , 0x1A,0x04}, //0 { 0x26 , 0x10,0x00}, //1 { 0x2C , 0x16,0x04}, //2 { 0x2E , 0x16,0x00}, //3 { 0x26 , 0x1C,0x00}, //4 { 0x2A , 0x1E,0x00}, //5 { 0x2A , 0x1E,0x04}, //6 { 0x2E , 0x10,0x00}, //7 { 0x2E , 0x1E,0x04}, //8 { 0x2E , 0x1E,0x00}, //9 { 0x2E , 0x1C,0x04}, //A { 0x22 , 0x1E,0x04}, //b { 0x28 , 0x1A,0x04}, //C { 0x26 , 0x16,0x04}, //d { 0x28 , 0x1E,0x04}, //E { 0x28 , 0x1C,0x04}, //F { 0x20 , 0x14,0x00}, //- { 0x20 , 0x10,0x00}};// //первый разряд не подключен. здесь каша: uint16_t arr4[18][3]={ { 0x15A , 0x16E,0x08}, //0 { 0x150 , 0x162,0x08}, //1 { 0x154 , 0x16E,0x08}, //2 { 0x150 , 0x16E,0x08}, //3 { 0x158 , 0x16E,0x08}, //4 { 0x158 , 0x16E,0x00}, //5 { 0x15C , 0xA4,0x00}, //6 { 0x150 , 0xAC,0x08}, //7 { 0x15C , 0xAC,0x08}, //8 { 0x158 , 0xAC,0x08}, //9 { 0x15C , 0xAC,0x08}, //A { 0x15C , 0xA4,0x00}, //b { 0x15C , 0xA0,0x00}, //C { 0x154 , 0xAC,0x08}, //d { 0x15C , 0xA0,0x00}, //E { 0x15C , 0xA0,0x00}, //F { 0x150 , 0xA0,0x00}, //- { 0x150 , 0xA0,0x00}};// int main(void) { IO0DIR |= ddat|dclk|dres| (1<<20);// ноги именованы как на схеме. 20 - порт для светодиода cs(1,1); delay(20); out_cmd (0x0C); out_cmd (0x18); out_cmd (0xE3); out_cmd (0x01);//(0b00000001); //SYSTEM ENABLE out_cmd (0x03);//(0b00000011); //TURN ON LCD out_cmd (0x29);//(0b00101000); //BIAS & COM //out_cmd (0x09);//(0b00000001); //beep // out_cmd (0x24); //elves out_cmd (0x88); // on led clear_all(); for (m1=0;m1<255;m1++) { out_cmd (0x29); for (m=0;m<7;m++) { wr_Data(8, m1&0x1F, 0x200,m); delay1(4000000); IOSET0=(1<<20); delay1(4000000); IOCLR0=(1<<20); } } ddat0; dclk0; while (1) {} } void wr_Data(uint8_t pos, uint8_t val, uint16_t mask,uint8_t s)//(про запас, что выводим, маска, знакоместо - справа налево). самый левый разряд с косяком { uint16_t i,i1,m1,d; //======================= if (s==5) { for (i = 0; i < 3; i++) { cs(0,1); m1=mask; SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>> for (i1 = 0; i1 < 10; i1++) { d=arr2[val][i]; if(d&m1) {ddat1;} else {ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1; } cs(1,1); } } else if (s==6) //========================== { for (i = 0; i < 3; i++) { cs(0,1); m1=mask; SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>> for (i1 = 0; i1 < 10; i1++) { d=arr3[val][i]; if(d&m1) {ddat1;} else {ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1; } cs(1,1); } } else if (s==7) //========================== { for (i = 0; i < 3; i++) { cs(0,1); m1=mask; SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>> for (i1 = 0; i1 < 10; i1++) { d=arr4[val][i]; if(d&m1) {ddat1;} else {ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1; } cs(1,1); } } else //========================= { for (i = 0; i < 3; i++) { cs(0,1); m1=mask; SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>> for (i1 = 0; i1 < 10; i1++) { if(i==2){d=(arr1[val][i]+0x10-0x10*s);}else{d=arr1[val][i] +0x20*s;} if(d&m1) {ddat1;} else {ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1; } cs(1,1); } } }==========================
ht1621.h
==========================
Недавно попался мне такой. Работает по протоколу holtek HT1621. В инете есть инфа.
Подключил к LPC2146 (эклз из помойки :) ). Если нужен быстрокод для тестов - могу поделиться
Если протокол НТ1621, то ваш код немного отличается от обычного для библиотеки ht1621. Или требуется некая перекодировка?
И второй вопрос по поводу использования ЭКЛЗ. Вы использовали его процессор для управления индикатором?
Пока разбирался с этим дисплеем, пришлось переписать под себя библиотеку. Выяснилось, что разработчики платы сильно не заморачивались каким либо упорядочиванием соответствия адрес/сегмент. Если в правой половине хоть каке-то правила соблюдены, то первые три знакоместа просто развели как получится (под них пришлось выделять индивидуальные массивы кодировки). В результате первый разряд индикатора так и не подключил полноценно, в силу пересечения адресов пары сегментов со 2-м разрядом. К стати и в ккм первое знакоместо не используется полностью.
По эклз инфа взята отсюда (спасибо автору): http://www.kovlev.ru/eklz.html
На плате эклз снесен криптопроцессор за ненадобностью. Все остальное присутствует для экспериментов и изучения матчасти.
Хотел прикрепить фото своего чудо-макета, но что-то сайт не захотел принять.
Что-то компилироваться не хочет, возможно из-за отсутствия библиотеки LPS214x.h. У Вас нет более детального описания протокола обмена. От 1621 скорее всего отличия значительные. Во всяком случае у нее отсутствует звук. И что-то странное с бардаком в разрядах. По идее все сегменты индикатора соединены внутри дисплея и такого быть не должно. Просто какая-то хитрая адресация. И возможно у Вас немного не такой дисплей. У вас в комментариях упоминается возможность программного включения светодиода. На моих платах стоят два светодиода, напрямую выведенные на разъем.
давайте по порядку - чем пользуетесь ? я использую Keil (для ARM) и все здесь под него заточено. просто компилите и все.
в описании 1621 действительно нет команды на включение подсветки (я говорю про светодиоды - это подсветка дисплея 88h). не хотел про это упоминать - но подсказала это мне ida. к стати и основная последовательность команд инициализации (1,3,24,40,e3,a7,6) от нее же. два led (red и green) "живут" самостоятельно и к 1621 отношения не имеют. в моем коде к ним нет обращения - можно зацепить на P0.20. это у меня тестовый led и сидит на плате эклз на разъеме.
и еще - у Вас точно UTC (P-D030801CT-E) ? с каплей на плате ? просто у элвес-микро было две модификации дисплеев - вот этот и на дискретных регистрах, как в документации на ккм.
да, и про звук вот выдержка из описания:
Извините , я думал это под ардуино ИДЕ, поэтому ничего не понятно. Дисплей такой, с другоим вариантом, я разобрался, скетч здесь выкладывал. Просто тех дисплеев немного, а этого варианта десяток еще сохранился. Буду разбираться.
поставьте Keil и все получится. могу hex выложить для 2146 (48), проверите.
Ктати насчет Keil, где лучше про него почитать. И достаточно-ли демо версии?
просто говорим поисковику keil, и например открываем вот это:
https://bravikov.wordpress.com/2016/02/21/начало-работы-с-stm32-в-keil-mdk-arm/
или вот это
http://narodstream.ru/stm-urok-1-ustanovka-keil-μvision/
вообще на официальном сайте заполняем ни к чему не обязывающую форму
https://www.keil.com/demo/eval/arm.htm
и качаем демо
но можно как обычно ч/з torrent найти удобные для себя варианты.
я использую 4.73. ставил 5-ю версию, но через чур навернута.
демо вполне достаточно. отличный отладчик симулятор. работает все - ограничение только размеру кода. вот здесь неплохо для начала http://www.embed.com.ua/arm/pervyiy-samostoyatelnyiy-proekt-v-keil/
Заинтриговали, почитал про LPC? оказывается внутри никому не нужной и практически халявной ЭКЛЗ спрятан нехилый процессор да и остальное достаточно грамотно сделано. Вы какие-то проекты на этой базе уже делали, или пока только изучение,
изучаю. и сделал бы. да только что ? на нем много чего можно. usb к стати в полный рост работает. и загрузчики есть. ну вольтметры всякие термометры измерители емкости и пр. хрень пробовал. примеров миллион на 2146. есть еще эклз на lpc2364 КС. эта вообще с постоянно включенным шим может от 1.5v работать
к стати работает на рекомендованных 60 мгц, но разгоняется легко до 120 и вполне себя так нормально чувстствует
Если до конца проникнитесь, то очень рекомендую вот это. Вполне так все доходчиво и прям в точку.
https://studfiles.net/preview/2385253/
В общем камушек интересный, только нужно найти ему достойное применение. Для тех задач, которые приходится решать и ардуины за глаза. Да и поздновато уже начинать, лет 40 назад наверное взялся - бы без раздумий. А сейчас и глаза уже не те, да и мозги не так быстро соображают. Только по старой радиолюбительской привычке не могу пройти мимо безхозной железки, а применение ее под большим вопросом. А насчет ЭКЛЗ - в принципе компактная готовая надежная система, которая может хранить и обрабатывать данные. Привязать к ней простенький интерфейсный блочек и пусть трудится. Конечно в данном варианте не удастся использовать все возможности процессора, но вычислительные возможности вполне. Ну а если вывести все порты, то никакая ардуинка ей в подметки не годится, да еще и нахалву.
по поводу бесхозной железки - выложите ардуинскую библиотеку для 1621. счас прилепим. тамже на атмеле все ?
и кс тати вот: https://github.com/pilnikov/HT1621-Arduino-Library/tree/master/Ht1621-library-Master
Что-то не прокатило. Хотя библиотека вроде должна подойти, но в ней косяки, во всяком случае на этапе инициализации с Вашей отличается. Так у Вас первые команды 1 и 3, а там 2 и 4, явно лишний нолик в конце добавлен. Возможно и в других командах косяки. А Ваши команды с даташитом совпадают.
Вот кусочек из библиотеки , где явное несовпадение с даташитом и Вашей инициализацией:
отлично, что взялись. не беда - завалим железку.
по порядку
команды правильные, только обратите внимание - чипу надо сказать :
100 (подать команду. 3 бита)
сама команда 0000 0001
и еще один пустой бит, неважно какой.
должно быть как в даташите 100 0000 0001 X - итого 12 бит
как делается здесь:
SS,RW,DATA - делаем соответствие
data -> ddat
rw -> dclk
ss (скорее всего cs) -> dres
у Вас так ?
проблема скорее всего во времянке. я всетаки рекомендую поставить keil и прогнать все в логическом анализаторе в отладчике. увидите во всяком случае что зачем следует.
И еще - в Вашем дисплее нет команды чтения. нет физически вывода RD. поэтому производится только запись. и по коду надо смотреть, чтобы не было обращения к чтению.
вот эти строчки закомментируйте
Так все и сделал, ладно это не горит. Поковыряюсь еще. Насчет кейла - от атмеги тоже поддерживает?
команды правильные, только обратите внимание - чипу надо сказать :
100 (подать команду. 3 бита)
сама команда 0000 0001
и еще один пустой бит, неважно какой.
должно быть как в даташите 100 0000 0001 X - итого 12 бит
как делается здесь:
Т.е. если я привык использовать десчтичные, или шестнадцатеричные то при переводе двоичных из бмблиотеки младшим байтом считается 1 ый? И при переводе младший не учитывается?
по поводу keil похоже за угол завел... нет поддержки
http://www.keil.com/support/docs/1655.htm
как понять что этот гад завелся:
при подаче команды:
88H (08H) должна загореться подсветка
09H должен запищать
https://drive.google.com/open?id=1Hzz-psf9OUCspGcLSilVI64ICbYwkpA0
Ок! Спасибо еще раз внимательно почитаю даташит. Немного в голове прояснилось. Нужен был толчок.
это они так упростили себе жизнь. здесь неважно где конец одного и начало другого
важно в целом выдержать последовательность передачи бит (формат посылки) от cs \ до /cs
Ясно, а я пытался найти логику. Еще раз спасибо.
это они так упростили себе жизнь. здесь неважно где конец одного и начало другого
важно в целом выдержать последовательность передачи бит (формат посылки) от cs \ до /cs