roboforum.ru

Технический форум по робототехнике.

 

Электронный бэйджик, протокол передачи данных

Обсуждение и примеры готовых и самосборных компонент для построения роботов.

Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 26 июн 2012, 04:59

Получил в подарок очередной гаджет: «электронный бэйджик» от Master KIT. Это LED дисплейчик 12х38 точек + USB/ СОМ шнурок. В память дисплея можно загрузить до 8-ми сообщений, общим количеством до 512 символов 8х12. К каждому сообщению можно применить один из 6-ти видов анимации, дополнительно включить мигание или бегушую окантовку экранчика. Единственной управляющей кнопочкой можно переключаться между сообщениями и менять яркость экранчика. Прилагающееся ПО позволяет пользоваться различными шрифтами, вставлять в текст имеющиеся в библиотеке символы и создавать свои.
Игрушка довольно дорогая, сам бы такую не купил. Но, раз уж подарили, решил использовать в хозяйстве, т.е.,например, прикрепить к роботу, чтобы выводить на дисплей тестовую инфу. Единственное, что для этого требуется – расшифровать протокол передачи данных в контроллер дисплея. Немного погуглил, ничего не нашел. И, вооружившись анализатором СОМ порта, разобрался сам. Результаты изысканий прилагаю ниже. Может кому пригодяться. Надеюсь, что не украл «ноу хау» у мастеркитовцев, тем более, что сущность вещицы явно китайская.
Итак, дисплей не имеет встроенной библиотеки символов, т.е. каждый раз надо загружать 12 байт на каждый символ строки. С одной стороны, это снимает ограничения на представления символов. С другой стороны, для загрузки длинной строки, дисплей гаснет секунд на 10. Единственно возможная скорость передачи 1200 бод.
Описание протокола:
1. Протокол односторонний, т.е. от дисплея никаких ответов не требуется.
2. Вначале передается ключевое слово Hello
3. Потом идет какой-то непонятный байт, который не всегда =0, но на что он влияет выяснить так и не удалось. Я оставляю его =0.
4. Затем идут 8 байт настройки анимации сообщений (старший бит- включение мигания, следующие 3 бита – скорость анимации, следующий бит – включение бегущей рамки по краю экранчика, и младшие 3 бита – это тип анимации
5. Далее идут 8 слов по 4 байта, определяющих разбивку памяти на 8 сообщений. Первое целое число (2 байта) должно содержать общее количество предыдущих символов в предыдущих сообщениях+ 0х0800 (для первого сообщения всегда =0х0800 т.к. предыдущих символов нет), второе целое число – это количество символов в этом сообщении. Ограничений на количество символов в одном сообщении вроде нет, но редактор прилагаемой программки ограничивает ввод 315 символами.
6. Далее идет, собственно, карта памяти. Каждый символ кодируется так:
1.jpg
«1» светятся, «0» отдыхают.
1.jpg (22.71 КиБ) Просмотров: 3920

Все сообщения строятся друг за другом по порядку в одну общую строку. Передается сначала верхний ряд (байт) для каждого символа этой строки, затем следующий и так до 12-го. Логичнее было бы передать первый символ целиком (12 байт), потом перейти ко второму и так далее. Но, видимо, контроллеру дисплея так удобнее считывать...

В принципе достаточно передать только то количество символов, которое требуется, т.к. никакой фиксированной длины пакета или контрольных сумм не предусмотрено.

В заключение короткая программа на Python с примерами функций, обеспечивающих передачу данных на дисплей:
Код: Выделить всёРазвернуть
import serial # класс для работы с последовательным портом

sym_cod_8x12={'1':(0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00),
              '2':(0x00,0x7c,0xc6,0x06,0x0c,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00),
              '3':(0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0xc6,0x7c,0x00,0x00),
              '4':(0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x1e,0x00,0x00),
              '5':(0x00,0xfe,0xc0,0xc0,0xfc,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00),
              '6':(0x00,0x7c,0xc6,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0x7c,0x00,0x00),
              '7':(0x00,0xfe,0xc6,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00),
              '8':(0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0x7c,0x00,0x00),
              '9':(0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,0x06,0xc6,0x7c,0x00,0x00),
              '0':(0x00,0x7c,0xc6,0xce,0xde,0xf6,0xe6,0xc6,0xc6,0x7c,0x00,0x00),
              '°':(0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
              'C':(0x00,0x7c,0xc6,0xc6,0xc0,0xc0,0xc0,0xc6,0xc6,0x7c,0x00,0x00)} # Пример кодировки символов
             
Msg_Speed=4       # Скорость анимации

Msg_ToLeft=0      # Эффекты анимации
Msg_ToRight=1
Msg_ToUp=1
Msg_ToDown=3
Msg_Freeze=4
Msg_PileUp=5
Msg_Curtain=6
Msg_Animation=7

Msg_Flash=8
Msg_Lamp=8

Led_NumSim=0 #общее количество символов во всех строках
Led_StrNow=1 #номер текущей строки
Led_Text=''  #текст, объединяющий все строки

Led_config=[0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00] #  массив настройки анимации для 8-ми сообщений
Led_msg=[0x08,0x00,0x00,0x01,0x08,0x01,0x00,0x00,
         0x08,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
         0x08,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
         0x08,0x01,0x00,0x00,0x08,0x01,0x00,0x00]        #массив распределение символов по строкам (изначально 1 символ в первом сообщении)

Led_map=[] #массив карты памяти дисплея

def led_ajust(StrNum=1,Speed=Msg_Speed,AnimType=Msg_ToLeft,Flash=0,Lamp=0):  #настройка анимации определенного сообщения                 
    global Led_config
    Led_config[StrNum]=(Speed<<4 | Flash) | (AnimType | Lamp)

def led_str(StrNum=1,Lstr='0'): #ввод текста в определенное сообщение
    global Led_msg
    global Led_NumSim
    global Led_Text
    global Led_StrNow
   
    lenstr=len(Lstr)
    if lenstr<1: return False               #текст должен содержать хотя бы 1 символ
    if lenstr>255: return False             #количество символов одной строки не должно превышать 255
    if lenstr+Led_NumSim>512: return False  #общее количество символов не должно превышать 512
    if StrNum>Led_StrNow+1: return False    #строки должны вводиться последовательно: 1,2,3...
    if StrNum>8: return False               #максимальное количество строк =8
    if StrNum==1: Led_Text=''               #сброс текста всех строк при повторном вводе первой строки
    Led_Text+=Lstr
       
    Led_StrNow=StrNum
    Led_NumSim+=lenstr
    Led_msg[4*StrNum-1]=lenstr              #настройка распределения памяти по строкам
    for n in range(StrNum,8):
        Led_msg[4*n+1]=Led_NumSim
    return True

def led_map_gen():  # генерация карты памяти дисплея
    global Led_map
    global Led_Text
    global sym_cod_8x12

    Led_map=[]
    for n in range(11):                #для каждого из 12 байт кодировки символа....
        for sym in Led_Text:
            sym_cod=sym_cod_8x12[sym]
            Led_map.append(sym_cod[n]) #заносим его в память, последовательно проходя все символы всех сообщений.
       
def led_print(NumPort=8): #вывод полученных данных в последовательный порт
    global Led_config
    global Led_msg
    global Led_map

    led_map_gen()
   
    ser=serial.Serial()  # настройка порта
    ser.port=NumPort-1
    ser.baudrate =1200
    ser.stopbits=2
    ser.parity='N'
    ser.bytesize=8
    ser.open()
    ser.write('Hello'.encode('latin1'))
    ser.write(Led_config)
    ser.write(Led_msg)
    ser.write(Led_map)
    ser.close()
   
# основная процедура
led_ajust(AnimType=Msg_Freeze)     #настроим первую строку на статичное изображение
if led_str(1,'25°C'): led_print()  # выведем значение температуры на дисплей

Переданный дамп данных:
Код: Выделить всёРазвернуть
48 65 6c 6c 6f 00 44 30 30 30 30 30 30 30 00 08    Hello.D0000000..
00 00 04 08 04 00 00 08 04 00 00 08 04 00 00 08    ................
04 00 00 08 04 00 00 08 04 00 00 08 04 00 00 00    ................
00 00 00 7c fe 18 7c c6 c0 24 c6 06 c0 24 c6 0c    ...|þ.|ÆÀ$Æ.À$Æ.
fc 18 c0 18 06 00 c0 30 06 00 c0 60 06 00 c6 c6    ü.À...À0..À`..ÆÆ
c6 00 c6 fe 7c 00 7c 00 00 00 00                   Æ.Æþ|.|....

Badge.JPG
Результат
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение =DeaD= » 26 июн 2012, 11:59

Бейджик по цене 2 мобил начального уровня. Круто.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

Re: Электронный бэйджик, протокол передачи данных

Сообщение AndreiSk » 26 июн 2012, 12:14

Экранчик маловат, 4 знакоместа.
Только сокращенные имена написать можно, петя-маша-вася-вова :)
Аватара пользователя
AndreiSk
 
Сообщения: 2618
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 26 июн 2012, 17:09

на то и бегущая строка. хотя там есть еще вариант 12х48. цена меня тоже удивила. такая же китайская вещица стоит максимум 20 баксов.
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение kilopl » 17 фев 2015, 09:29

Прошу прощения, уважаемые, не мог бы кто-нибудь пошагово объяснить затылку в программировании (то есть мне), как закидывать текст на этот чёртов бэйджик, ибо я даже оригинальной софтиной, поставляемой с этим самым бэйджем не могу ничего сделать. А это очень нужно. Если не затруднит.
kilopl
 
Сообщения: 4
Зарегистрирован: 17 фев 2015, 09:12

Re: Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 18 фев 2015, 08:32

А в чем конкретно проблема? СОМ порт хоть появляется при подключении бейджика? Где-то он у меня валяется еще...
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение kilopl » 18 фев 2015, 10:19

да, драйвера-то установились, Port-to-serial видит в диспетчере. Проблема в том, что я не могу понять как и что конкретно делать: воткнул бэйдж (и включенный и выключенный), запустил программку (пробовал и BmpBadge, и MiniLedDisplaу), выбрал порт нужный, пишу в строчке сообщение (имя), жму Send, он отправляет, а с бэйджиком ничего не происходит.
kilopl
 
Сообщения: 4
Зарегистрирован: 17 фев 2015, 09:12

Re: Электронный бэйджик, протокол передачи данных

Сообщение Madf » 18 фев 2015, 13:32

ппц цена)
а я всё сетовал на жадность и лень забугорных производителей :D
Madf
 
Сообщения: 2139
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 19 фев 2015, 08:13

Посмотрю в воскресенье. Сейчас мы с бейджиком за пару тыщ км.
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение kilopl » 24 фев 2015, 05:35

Что, уважаемые, никак не поможете?
kilopl
 
Сообщения: 4
Зарегистрирован: 17 фев 2015, 09:12

Re: Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 24 фев 2015, 18:49

kilopl писал(а): жму Send, он отправляет, а с бэйджиком ничего не происходит.

не могу найти диск с программкой. Скорее всего проблема в настройке скорости передачи порта. должна быть 1200 8N2. Хотя программка сама должна настраивать порт. Я пробовал только под винду ХР. При правильном подключении дисплейчик должен мигнуть в момент передачи данных. А в самой программке заполниться синяя полоска индикатора загрузки.
Последний раз редактировалось Scorpio 24 фев 2015, 23:51, всего редактировалось 1 раз.
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение Scorpio » 24 фев 2015, 23:45

Нашел программку, пстановленную на старый комп с ХР. Короче загрузка в бейджик не работала, пока не установил вручную параметры порта:
port_640x458.jpg
Аватара пользователя
Scorpio
 
Сообщения: 1547
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Электронный бэйджик, протокол передачи данных

Сообщение kilopl » 26 фев 2015, 06:08

Действительно, помогло. Спасибо огромное)))
kilopl
 
Сообщения: 4
Зарегистрирован: 17 фев 2015, 09:12


Вернуться в Готовые модули

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Mail.ru counter