| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Ардуино и дисплей покупателя - vfd как подключить/управлять https://radiokot.ru/forum/viewtopic.php?f=66&t=183038 |
Страница 1 из 7 |
| Автор: | Energizer-A [ Чт июн 02, 2022 21:44:23 ] |
| Заголовок сообщения: | Ардуино и дисплей покупателя - vfd как подключить/управлять |
Тема создана для обмена опытом .. Сюда складываем скетчи и документацию.. Для начала Wincor nixdorf VA63 сам индикатор futaba 2*20 vfd за совсем копейки 200₽ на Авито Москва с rs232 от жадности пять штук.. их там больше сотни со слов продавца - налетай покупай живопись!! ( c usb интерфейсом плата совсем другая кому нужно в здешней барахолке тоже есть = снял мелкосхему sp232 нафиг ( наверное можно и оставить) в площадку на 9 ногу впаял провод от ардуины от TX.. но этого оказалось не достаточно - потребовалось поставить центральную из 5 возможных перемычку !! JP3 дабы установить принудительно Parity off ВОТ ВЕДЬ ГАДЫ и все заработало в лучшем виде ps -- если пинцетом замкнуть кранную левую со стороны индикатора если смотреть, а вообще это jp5 "перемычку" и подать питание - запускается внутренний тест самого индикатора проверки сегментов Спойлер// Скетч тестовый выводит на VFD-дисплей BA63 ля FUTABA хело ворд,и тест ангельскаго шрифта про лису и собаку в разных строчках.// буковки отправляем как строчками так и цифирьками в хексе ASCII #include <SoftwareSerial.h> SoftwareSerial vfd(255,2,0); // This is required, to start an instance of an vfd (TX at pin D2) // можно поменять на любой кроме некоторых смотря какя плата. void setup() { vfd.begin(9600); // Start the vfd at 9600 baud vfd.write(0x1b); // выбор кодовой страницы рус - но печатать из под ардуино vfd.write(0x52); // сможет только после обработки кодером из cp1251 в cp866 vfd.write(0x35); delay (100); // подождем вдруг ему нужно время осознать } void CLS () { // очистка экрана vfd.write(0x1b); vfd.write(0x5b); vfd.write(0x32); vfd.write(0x4a); } void set_cursor (int str, int col) { // установить курсор // строка , колонка str = str + 0x30; col = col + 0x30; vfd.write(0x1b); vfd.write(0x5b); vfd.write(str); vfd.write(0x3b); vfd.write(col); vfd.write(0x48); } void loop() { CLS (); set_cursor (1,4); vfd.print("HELLO "); // можно печатать строкой vfd.write(0x20); // space // можно передавать букавки кодами символов vfd.write(0x57); // W vfd.write(0x4F); // O vfd.write(0x52); // R vfd.write(0x4c); // L vfd.write(0x44); // D vfd.write(0x20); // space delay (5000); // подождеми посмотрим set_cursor (2,0); vfd.print("the quick brown fox"); delay (5000); // подождеми посмотрим set_cursor (2,0); vfd.print("jumps over the lazy"); delay (5000); // подождеми посмотрим set_cursor (2,0); vfd.print(" dog "); delay (5000); // подождеми посмотрим } К сожалению набор команд этого дисплея очень бедный - в лёгкую нет возможности прописать свои символы в память..вот это по настоящему трабла.. очень хочется.. Так же нет сдвига автоматического символов как у других дисплеев бывает - по этому к тереть и ставить курсор заново. Дока пдф гуглится моментом по этому аттачить нет смысла.. Про перемычки упоминание их функций удалось обнаружить в доке другого 4х строчного индикатора ,этой конторы va66 На гитхаюе нашлась либа с классами https://github.com/MrTransistorsChannel/NixdorfVFD Возможно она была сделана для usb версии .. в функции софтваре сериал включена инверсия.. для 232 версии этот параметр другой - дефолтный - нет инверсии. Так что пора пилить часики |
|
| Автор: | alr5000 [ Пт июн 03, 2022 23:03:06 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
200₽ на Авито Москва с rs232 от жадности пять штук.. их там больше сотни со слов продавца Я у него и покупал. И друзья по несколько штук взяли... |
|
| Автор: | OlegRu [ Сб июн 04, 2022 01:54:03 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Мой вариант подключения: перемычку J3 надо замкнуть. Скорость по умолчанию будет 9600. Микрухи выпаивать не надо !!! ), подключаемся к CN3 (это нераспаянные пины около центрального разъема 1. RX платы дисплея = TX от ардуино (в моем случае от D6) 2. - пустой 3 +12В 4. 0В - земля Строка инициализации будет = SoftwareSerial vfd(255, 6, 1); //это для выхода с пина D6. |
|
| Автор: | Energizer-A [ Сб июн 04, 2022 11:34:30 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Предлагаю всем желающим в теме оставлять свои библиотеки для других дисплеев в формате который был предложен кодером с гитхаба в первом посте В последствии это должно дать универсальность вставки кода в другие проекты, в том числе с индикаторами и стандартным для ардуино - текстовыми LCD. И вот в аттаче та же самая либа и хеловорд, но запиленная для GIGATECH DSP850C (он же Promag DSP 851c) пойдет для всей серии DSP800 и все на той же софтваре сериал. чуть позже допилю ее по шрифту - скорее всего будет кривая Ё и ё // потом поправлю.. |
|
| Автор: | abomin [ Пн июн 06, 2022 09:12:36 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino. Библиотекой не оформлял (пока лень разбираться)) Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль. СпойлерКод: // serialesp8266clock.ino // // Libraries needed: // Time.h & TimeLib.h: https://github.com/PaulStoffregen/Time // Timezone.h: https://github.com/JChristensen/Timezone // NTPClient.h: https://github.com/arduino-libraries/NTPClient // ESP8266WiFi.h & WifiUDP.h: https://github.com/ekstrand/ESP8266wifi // Вывод на VFD дисплей Futaba M202MD10C, выравнивание текста, кириллицу и анимацию прикрутил abomin #include <ESP8266WiFi.h> #include <WifiUDP.h> #include <String.h> #include <Wire.h> #include <NTPClient.h> #include <Time.h> #include <TimeLib.h> #include <Timezone.h> // Define NTP properties #define NTP_OFFSET 60 * 60 // In seconds #define NTP_INTERVAL 60 * 1000 // In miliseconds #define NTP_ADDRESS "ca.pool.ntp.org" // change this to whatever pool is closest (see ntp.org) // Set up the NTP UDP client WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL); const char* ssid = "SSID"; // insert your own ssid const char* password = "PASSWORD"; // and password String date; String t; const char * days[] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"} ; const char * months[] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"} ; const byte CYR_init_string[7] = {0x00, 0x01, 0x02, 0x0A, 0x14, 0x04, 0x20}; // кодовая страница СР-866, курсор выключить, яркость 20% const int dispStringSize = 20; // сколько символов в строке дисплея const int kadr = 60; // задержка для смены спрайта const byte userDefinedSymbol[] = {0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0x1E}; const byte fromL2R[] = {0x1D, 0x1C, 0x1A, 0x19, 0x1A, 0x1C, 0x1D, 0x1D}; const byte fromR2L[] = {0x18, 0x17, 0x16, 0x15, 0x15, 0x16, 0x17, 0x18}; const byte sprite[][8] = { {0x00, 0x70, 0xE8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 1, user defined symbol #15 {0x00, 0x70, 0xE8, 0xF8, 0xE0, 0x70, 0x00, 0X00}, // Pacman 2, user defined symbol #16 {0x00, 0x70, 0xF8, 0xC0, 0xE0, 0x70, 0x00, 0X00}, // Pacman 3, user defined symbol #17 {0x00, 0x70, 0xE0, 0xC0, 0xC0, 0x60, 0x00, 0X00}, // Pacman 4, user defined symbol #18 {0x00, 0x70, 0xB8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 5, user defined symbol #19 {0x00, 0x70, 0xB8, 0xF8, 0x38, 0x70, 0x00, 0X00}, // Pacman 6, user defined symbol #1A {0x00, 0x70, 0xF8, 0x18, 0x38, 0x70, 0x00, 0X00}, // Pacman 7, user defined symbol #1C {0x00, 0x70, 0x38, 0x18, 0x18, 0x30, 0x00, 0X00}, // Pacman 8, user defined symbol #1D {0x00, 0x70, 0xA8, 0xF8, 0x88, 0x70, 0x00, 0X00} // Pacman 9, user defined symbol #1E }; // Перекодировка русского текста для вывода в serial char* RUS(char* StrIn) { char* StrOut=StrIn; // сначала выходную строку приравниваем к входной uint8_t i[4]={0,0,StrIn[0],StrIn[1]}; // создаём "рабочий" байтовый массив из 4-х членов: 0-счётик нечётных байтов входной строки, 1-счётик чётных байтов входной строки, 2-нечётный байт, 3-чётный байт while(i[2]>0&&i[0]<255) // проверяем, что не конец массива (тогда нулевой байт) и ограничиваем длину строки в 254 символов { if(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0) // проверка - кирилица? от "А" до "п"? { StrOut[i[1]]=i[3]-0x10;i[0]++; // переводим в СР-866 } else if(i[2]==0xd0&&i[3]==0x81) // проверка - кирилица? "Ё"? { StrOut[i[1]]=0xF0;i[0]++; // меняем на Ё СР-866 } else if(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90) // проверка - кирилица? от "р" до "я"? { StrOut[i[1]]=i[3]+0x60;i[0]++; // переводим в СР-866 } else if(i[2]==0xd1&&i[3]==0x91) // проверка - кирилица? "ё"? { StrOut[i[1]]=0xF1;i[0]++; // меняем на ё СР-866 } else { StrOut[i[1]]=i[2]; } i[0]++; i[1]++; i[2]=StrIn[i[0]]; i[3]=StrIn[i[0]+1]; } StrOut[i[1]]='\0'; return StrOut; } // п-п печати спрайта void printSprite(byte a, int b, int c) { Serial.write(0x10); // задать вывод символа Serial.write(b); // в b-е знакоместо Serial.write(a); // вывод спрайта a delay (c); } // п-п очистки (забоя) последнего символа void backspace() { Serial.write(8); // backspace Serial.write(32); // space } // п-п задания след. позиции вывода символа слева вверху void goLeftUpCorner() { Serial.write(0x10); // задать вывод символа Serial.write(0x00); // в нулевое знакоместо } // Выравнивание строки по центру String centerJustify(String inputString) { int needSpaces = (dispStringSize - inputString.length()) / 2; String outputString = ""; for(int i = 0; i < needSpaces; i++) outputString += ' '; outputString += inputString; for(int i = 0; i < (needSpaces - 1); i++) outputString += ' '; return outputString; } // void setup () { Serial.begin(9600); // most ESP-01's use 115200 but this could vary timeClient.begin(); // Start the NTP UDP client // инициализировать дисплей for(int i=0; i<7; i++) Serial.write(CYR_init_string[i]); // набиваем пользовательские символы: for(int j=0; j<9; j++) { // девять пользовательских символов Serial.write(03); Serial.write(userDefinedSymbol[j]); for(int i=0; i<8; i++) // 8 байт на символ Serial.write(sprite[j][i]);} // Connect to wifi Serial.println(""); Serial.print(RUS("Подключаюсь к WiFi")); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print(RUS("Подключено к WiFi at ")); Serial.print(WiFi.localIP()); delay(1000); Serial.println(""); Serial.println(""); } void loop() { if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status { date = ""; // clear the variables t = ""; // update the NTP client and get the UNIX UTC timestamp timeClient.update(); unsigned long epochTime = timeClient.getEpochTime(); // convert received time stamp to time_t object time_t local, utc; utc = epochTime; // Then convert the UTC UNIX timestamp to local time TimeChangeRule MSK = {"MSK", Second, Sun, Mar, 2, +120}; //UTC - 5 hours - change this as needed // TimeChangeRule usEST = {"EST", First, Sun, Nov, 2, -360}; //UTC - 6 hours - change this as needed Timezone tMSK(MSK, MSK); local = tMSK.toLocal(utc); // now format the date variables into string with proper names for month, day etc date += day(local); date += " "; date += months[month(local)-1]; date += " "; date += year(local); // сформировать выровненную по центру строку даты char dateChar[date.length()+1]; date.toCharArray(dateChar, sizeof(dateChar)); String dateString = centerJustify(RUS(dateChar)); // format the time if(hour(local) < 10) // add a space if hour is under 10 t += " "; t += hour(local); t += ":"; if(minute(local) < 10) // add a zero if minute is under 10 t += "0"; t += minute(local); // сформировать выровненную по центру строку времени и дня недели String dayNow = days[weekday(local)-1]; char dayChar[23]; dayNow.toCharArray(dayChar, 23); String timeDayChar866 = t + ' ' + RUS(dayChar); String timeDayString = centerJustify(timeDayChar866); // Display the date and time goLeftUpCorner(); Serial.println(timeDayString); Serial.print(dateString); delay (5000); // анимация Pacman for(int i=38; i>19; i--) { // нижняя строка for(int k=0; k<8; k++) printSprite(fromR2L[k], i, kadr); backspace(); } for(int i=0; i<20; i++) { // верхняя строка for(int k=0; k<8; k++) printSprite(fromL2R[k], i, kadr); backspace(); } printSprite(0x1E, 19, 1000); backspace(); goLeftUpCorner(); } else // attempt to connect to wifi again if disconnected { WiFi.begin(ssid, password); delay(1000); } // delay(10000); //Send a request to update every 10 sec (= 10,000 ms) } |
|
| Автор: | alr5000 [ Пн июн 06, 2022 12:29:16 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Супер! Надо будет попробовать на досуге. А где взять нужные библиотеки? И можно ссылку на сам проект? Спасибо! |
|
| Автор: | Energizer-A [ Пн июн 06, 2022 18:37:57 ] | ||
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл | ||
Как и обещал выкладываю тест-пример и библиотеку рядом с ним для GIGATECH DSP850 где поправил шрифт в части подмены "Ё ё" на обычные "Е е" в виду отсутствия их в таблице знакогенератора в DSP850. PS для полного счастья стоит разобраться как залить своих кастомных символов в таблицу знакогенератора этого дисплея.. над этой задачей попробую повозиться - если получится буду счастлив по настоящему, тогда и часики красивые попробую запилить..
|
|||
| Автор: | OlegRu [ Пн июн 06, 2022 22:15:35 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Energizer-A, в дисплее Wincor nixdorf VA63 не удалось еще случайно найти управление яркостью? Я ранее в безымянном китайце нашел такое, собрав воедино несколько бумаг по нему. Там команды управления EPSON. вот функция. но на футабе не работает. void brightnes(byte br){ // яркость установить 1=25%... 4=100% и записать в ячейку EEPROM if (br<1 || br>4) br = 4; if (EEPROM[0] != br) EEPROM[0] = br; // перезапись только, если отличается softportVFD.write(0x1F); softportVFD.write(0x58); softportVFD.write(br); } |
|
| Автор: | Energizer-A [ Вт июн 07, 2022 07:09:22 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
OlegRu, я пока ковыряю dsp850c и там к сожалению этой функции тоже нет..там вообще только один протокол dsp800 и тот обрезан совсем.. по этому много чего нужного нет.. и кастомных символов простым способом тоже не получить по простому.. Кстати видимо тебе спасибо за функцию вывода нуля перед цифрой до 10 -- c2d вчерась запилил часики тестовые тупорылые для обкатки - пригодилась |
|
| Автор: | abomin [ Ср июн 08, 2022 08:09:43 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Рекомендую ознакомиться: http://www.mantrid.ru/forum/showthread.php?t=1683 |
|
| Автор: | Energizer-A [ Ср июн 08, 2022 09:00:41 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
abomin писал(а): Рекомендую ознакомиться Спасибо -весьма познавательно .. Была идея похожая но чуть другая - сделать транслятор i2c в стандартные команды дисплеея покупателя-, что бы имитировала обычный дисплей типа 16*2 - для проектов где код не публикуется или не читаем.. |
|
| Автор: | abomin [ Ср июн 08, 2022 10:19:16 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
...сделать транслятор i2c в стандартные команды дисплеея покупателя... Хорошая идея! И вполне реализуемая, думаю. Встречал в офисных телефонах или факсах ЖК дисплеи с последовательным интерфейсом, а по командам совместимые с HD44780. Даже библиотеки под них есть.
|
|
| Автор: | OlegRu [ Ср июн 08, 2022 10:38:54 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
А какой вариант применения такой конструкции? Включиться с VFD вместо дисплея 1602 или 2002 для случая когда исходная прошивка устройства не доступна и нет возможности заменить библиотеку?Сам по себе без платки расширения (регистр с i2c) дисплей lcd1602 имeeт управление по параллельному порту. Это управление реализуется и просто на ардуинке, если ноги ничем другим не заняты, а это 80% всех устройств. |
|
| Автор: | Energizer-A [ Ср июн 08, 2022 17:38:17 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
OlegRu писал(а): прошивка устройства не доступна и нет возможности заменить библиотеку? Почти так и есть ..где автор не выкладывает исходник в частности. .. для обработки параллельного интерфейса тоже конечно можно.. но чаще мне встречается интересные девайсы которые прям просят яркости на i2с . Дисплеи эти интересны не только из- за часов - в автоматике, в управлении станков и прочего пром оборудования, телеметрии например котельной -- таким дисплеям прям самое место- яркие и крупные и стоимость бросовая.. где код открыт и он на ардуино сях библиотеки сабжевые ложатся прям с пол оборота, а вот где только хекс -путь писать самому с нуля для более менее замысловатого девайса - так себе вариантец.. |
|
| Автор: | OlegRu [ Ср июн 08, 2022 20:56:42 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Кажется, здесь 80% решения https://microkontroller.ru/arduino-proj ... tvo/?amp=1 |
|
| Автор: | alr5000 [ Вс июн 12, 2022 09:49:50 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Ув. Коты, может кто-нибудь подсказать, как на дисплее Wincor BA63 RS232 реализовать управление яркостью? Какая команда для этого нужна? #define DIM не прокатывает |
|
| Автор: | alr5000 [ Ср июн 15, 2022 20:13:09 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Ну и заодно подскажите, есть-ли в таблице символов значок градуса Цельсия? Если да, какой код у него? |
|
| Автор: | OlegRu [ Чт июн 16, 2022 01:47:32 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
0xF8 или 248 Только вот странно, функцией write он выводится, а через printf нет. Итак, градус побежден, осталось с загружаемыми символами разобраться и там до пакмана недалеко. |
|
| Автор: | abomin [ Чт июн 16, 2022 08:55:01 ] |
| Заголовок сообщения: | Re: Ардуино и дисплей покупателя - vfd как подключить/управл |
Я для своего дисплея даташита не нашёл, а в даташите на аналог не все управляющие коды были описаны. Так что пришлось выпаивать контроллер, городить адаптер на проводках, считывать прошивку (благо контроллер оказался незалоченным), и дизассемблировать её. Там оказалась куча недокументированных управляющих кодов, двенадцать переключаемых раскладок-алфавитов и целых девять пользовательских символов. Вот тут - https://embedded.by/406 - чел ковырял дисп, как у меня. |
|
| Страница 1 из 7 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



и все заработало в лучшем виде