Светодиодная бегущая строка (помогите разобраться)

Попросили меня помочь с бегущей строкой, ну такая, как в автобусах ставят, например.
А именно: строка заточена под работу через интернет, а нужно ее «переточить», чтобы она данные барала просто с ПК (короче говоря выкинуть полностью часть с модемом).
Собственно задача вроде как понятная, но со своим уровнем знаний, боюсь, сам не справлюсь (ну это и не страшно, ибо если не справлюсь, просто отдам обратно, но хотелось бы помочь человеку).

Итак, кто поможет в реверс-инжиниринге? :) А может кто с такими работал уже, и у вас есть информация, доки?

Для начала вот как оно выглядит:

Затянуто вышло, зачем-то пытался чипы заснять, потом подумал, что проще будет сфотографировать…

Питание 5 вольт.

Сама бегущая строка состоит из 3-х секций, соединенных последовательно. По 4 светодиодных матрицы 8x8 на каждой секции.
Так же на каждой секции присуствуют следующие элементы:
1) toshiba japan tb62706bng 5e9ka 2шт. — 16BIT SHIFT REGISTER, LATCHES & CONSTANT CURRENT DRIVERS
2) 74hc138d 1шт. — 3-to-8 line decoder/demultiplexer; inverting
3)in74ac244 1шт. — Octal 3-State Noninverting Buffer/Line Driver/Line Receiver
Ну и несколько других деталюшек.

Собственно фото крупные тут:
www.dropbox.com/gallery/26973339/1/ledstr?h=cde8a5

В первую секцию втыкается (в разъем 2x8 пин) блок управления, на нем присутствуют:
1) atmega128L-8au 1шт — так понимаю, она и командует парадом
2) at45db041b-tu 1шт — флеш-память
3) 74act244 1шт — Octal Non-Inverting Buffers/Line Drivers with 3-State Outputs
4) 74hc573d 1шт — Octal D-type transparent latch; 3-state
5) BSI BS62LV256SCP70 1шт — Very Low Power CMOS SRAM, 32K X 8 bit
6) motorola g24 data module model: f6423aac 1шт — модем

Так же на блоке управления имеем разъем для симки и три штыревых разъема:
1) 2x8 — втыкается в бегущую строку
На вид:
два крайних левых контакта — минус питания
следующие два слева — замкнуты между собой, идут к 74act244
затем следующие два по два вообще ни к чему не идут (на просвет не видно, плата на просвет вроде как двуслойная всего)
затем следующие два — снова замкнуты, идут к 74act244
затем 4 контакта — идут к 74act244
два крайних правых — соответственно плюс питания

2) 2x3 — я сразу подумал «ISP», а нифига! На самом деле и правда ISP, а я опять — сам дурак.
Пока что вызвонил:
— +питания
— земля
— 2 и 3 ноги меги
— 11 нога меги SCK
— 20 нога меги RESET

3) 1x4 — я сразу подумал «UART», а тоже мимо!
— земля
— 7, 8, и 9 ноги меги О_о
Теряюсь в догадках, гм, может это разъем для покдлючения кнопок управления?
При включенном питании на двух из них висит 3,3 вольта, а на последней 0,03 вольта.

При беглом осмотре видно, что мега на прямую управляет:
1) модемом
2) BS62LV256SCP70 (кроме адреса)
3) флеш-память
4) 74act244 (74act244 далее подключена к разъему 2x8)
5) 74hc573d (74hc573d далее подключена к порту A (адрес) BS62LV256SCP70)

Варианты решения задачи:
1) Разобраться в системе команд родных мозгов и заставить их данные на строку выводить без коннекта по модему, просто с ком порта ПК
2) Если первый вариант обломается, полностью избавиться от мозгов (желтой платы), вместо них развести свою со своими мозгами
3) Update: написать собственную прошивку и залить ее в мозги, правда жалко тогда будет зря модем на платке простаивать

Перво-наперво, думается, нужно попробовать подключиться по UART. Видимо не выйдет, так как это не УАРТ оказался, а просто на нем же и ISP висит…

Кто что скажет, посоветует?

Update1: Так как разъем 2x3 таки оказался ISP, как я сначала и подумал, подключился к нему и слил прошивку (смотреть в аттаче, внизу). Вот тут бы мне, наверное, пригодились бы знания ассемблера и умения дизассемблировать и т.п., но, грешен — каюсь, я этого всего не знаю и не умею… В связи с этим появился 3 вариант решения (см. выше).
Заодно вот такие фузы: High C9 Low BF Ext FF Lock 3F

Update2: (Вот, появилось времячко, сел помозговать.) Как изначально и планировал — плюнул на родные мозги и стал изучать разъем 2x8 на предмет самостоятельного управления этой фигней.

На самом деле на этом разъемы мы имеем:
> 2 линии — питание (5.2 вольт)
> 6 линий — управление (все подтянуты резюками на 6 или 12 кОм к +, то есть управляем — перетягивая к минусу):
>> 3 линии — управление строками 2^3=8 строк, т.е. при их различной комбинации горит определенная строка
>> 3 линии — управление столбцами (а тут имеем сдвиговый регистр):
>>> 1 линия — данные
>>> 1 линия — клок/такт
>>> 1 линия — enable+latch
Вот и всего делов :)

Алгоритм простой:
1) Отпускаем Enable
2) Выдаем 96 бит данных (первую строку) в линию данных (тактируем через клок)
3) Выдаем нужную комбинацию на линии управления строками, чтобы зажечь первую строку
4) Даем Enable
5) Повторяем пункты 1-4 для остальных 7 строк
6) PROFIT :)

Теперь надо железку разработать. То есть железка-то простая до мозга костей.
Короче, пошел думать над железкой. В наличии есть меги 8 и 16, в идеале было бы сделать на V-USB, чтобы переходник на ком-порт не плодить, но это не так критично на самом деле. Ну и софт писать. :)

Update3: Рано я радовался, уточнил мне тут человечек, что ему нужно не просто с компа работать, а чтобы с компа только выгружать данные, а работать оно автономно потом должно. Елки…
Значит фишка простого решения в лоб уже не прокатит. Значит нужна память и т.п., значит мозги придется таки родные использовать, и разбираться уже с памятью на них, а счастье было так близко…

Update4: Хм, ну пока суд да дело (мне обещали программу выслать, которая формирует данные для строки, и с которой хотели как раз бы работать, жду), подзапилил своего кода немножко: заставил строку работать от своих мозгов (не не в прямом конечно смысле, хотя) с ПК (с программулины на Delphi).
Алгоритм такой:
1) Делфи выводит на картинку текст, далее побайтово картинку читает и отправляет эти байты (12x8=96) по UART
2) МК по прерыванию от таймера постоянно рисует то, что в 1 буфере на экран, а по прерыванию от UART пишет то, что пришло во 2 буфер
3) Как только 2 буфер полностью заполняется, МК меняет буферы местами
4) Делфи сдвигает надпись на картинке, и снова пункт 1
Вот что вышло:

Бежит строка нормально, черные пропуски — это просто так частота камеры с обновлением строк совпала :)

Update5: В итоге пришел к следующему: ATmega328 + SD карта. Кажется поставленная задача выполнена. Автономность и простота: берем SD карту, вставляем в ПК, в программе, которую мне предоставил владелец строки, создаем скрипт и сохраняем на карту (благо в той программе есть такая функция, хотя могли сделать и просто сохранение в файл, но нет же, только на карту памяти, причем с карты при этом все удаляется, накой черт? О_о). Далее запускаем небольшую программку, которая файл скрипта маленько модифицирует (уж больно у оригинального файла структура не оптимальная). Затем карту вставляем в бегущую строку, включаем строку, PROFIT? Кажется да.
Вот:


Update6 (последний): в качестве логического завершения прилагаю фото, как теперь сзади выглядит светодиодная строка:
вид сзади
Вроде даже вполне аккуратненько вышло, плохо правда, что платка с разъемом SD открытая, но мне откровенно говоря лень было придумывать к ней «упаковку»… Да и так всегда видна подпись «создателя» ;)
А вот мозги — внтури (фото не сделал почему-то).
  • 0
  • 18 ноября 2011, 12:55
  • JustACat
  • 1
Файлы в топике: hex.zip

Комментарии (21)

RSS свернуть / развернуть
UARTом мега должна с модемом общаться. В принципе, тут можно выкинуть нах модем и прицепить UART к компу. А на компе написать софт эмулирующий модем.
0
Наверное, но уж больно много там к модему от меги дорожек идет… Так что не факт, что их только уарт связывает… Да и подпаиваться там будет паршивенько — ножки мелкие. Но как вариант да, если с двумя другими (что я предложил) не выйдет.
0
К модему идет весь порт PD (на нем второй уарт кстати, да), PE2-4, PB1-3 (это MOSI|MISO|SCK).
0
Надо повтыкать в доку на модем. Или повтыкать мультиметром в дорожки чтобы разобраться — какой интерфейс активен.
0
если на модем идут 2 уарта то скорее всего он понимает команды управления линией. Вроде такие вещи как раз вторым уартом и реализуются. Так что при очень большом желании, имхо, можно 1 уарт вообще освободить.

Для эксперимента я бы выдрал пока плату управления и покурив каку-никаку схемку светодиодных модулей попробовал бы ими помигать с кокого-нибудь контроллера… Еще хорошо бы посмотреть, зачем разрабы там буфер воткнули. можно ли без него или лучше не стоит…
0
кстати, если аккуратненько зацепиться к ногам уарта компом (через переходник на RS-232) и просниффить общение тем же ComPort-Toolkit или чем подобным можно узнать кучу полезного… если конечно есть прога, которая эту панель загружает данными…
0
5) BSI b662lv256sc-70 s2827v53103 1шт — вот этот зверь вообще непонятно что такое…
Наверное, всё же BS62LV256SCP70 — Very Low Power CMOS SRAM, 32K X 8 bit.
0
  • avatar
  • John
  • 18 ноября 2011, 13:13
Точно, не рассмотрел. Сейчас поправлю.
0
2) 2x3 — я сразу подумал «ISP», а нифига!

Почему? Может быть распиновка не стандартная, но это он. См. начиная со стр. 300 даташита на ATmega.
0
  • avatar
  • John
  • 18 ноября 2011, 13:28
Черт, и правда, пал жертвой подписей… Сейчас и это подправлю :) А жалко, значит по UART к ней, наверное, не подключиться… Блин…
0
… почему не подключить? ISP используется только раз — при заливке hex'a, а дальше эти пины не используются
0
У некоторых Мегах ISP идет не по тем же пинам что и SPI. В меге 64 вместо MOSI, MISO используются выводы те же что и для UART. Смотрите внимательно раздел даташита про внутрисистемное программирование…
0
Да-да, уже глянул, так как John намекнул :) Уже сливаю прошивку, правда не знаю, зачем…
0
… можно залить прошивку в протеус и поиграцца (лог. анализатор, просмотреть память какие ножки задействованы и т.д.)
0
вот только прошивка скорее всего залочена, и ваш дамп вряд ли будет работать…
0
Разьем 2x8pin (очевидно, контакты спарены и разбем эквивалентен 1x8pin):
1-2) GND
3-4) 74act244/pin1
5-6) NC
7-8) 74act244/pin2
9-10) 74act244/pin3
11-12) 74act244/pin4&pin5
13-14) 74act244/pin6&pin7
15-16) Vcc
Итог: к 74act244 идут 7 шт. управляющих линий.

Микросхема [74act244]:
1) Serial-In
2) Clock
3) Latch
4) Enable
5) Serial-Out
Итог: [74act244] имеет 5 управляющих линий, одну из которых {Enable} можно подтянуть к земле.

Микросхема [74hc138d]:
— 3 шт линий Input;
— 8 шт линий Output.

Разьем 2x8pin.
Предполагаю, что [74act244] используется для развязки по напряжению. Имеет 8 входов / 8 выходов и дополнительно Enable1/Enable2. Скорее всего, пины Enable подтянуты к земле и управляющим МК не используются.

Управление светодиодами.
Обе [tb62706bng] имеют по 16 выходов (16+16=32 ножек) и отвечают за управление столбцами матрицы светодиодов 8x32.
Микросхема [74hc138d] управляет строками матрицы светодиодов 8x32.

Взаимосвязь управляющего МК с микросхемами секций.
Для управления [74hc138d] необходимо 3 линии.
Для управления первой [tb62706bng] нобходимо минимум 3 линии: {Serial-In}, {Clock} и {Latch}. Для передачи управляющей команды дальше по цепочке на вторую [tb62706bng] и дальше на следующие секции, необходимо к [tb62706bng] прибавить еще один контакт {Serial-Out}.
Микросхема является прозрачным мостом и её можно не рассматривать как несущую смысловую нагрузку в процессе передачи управляющих сигналов.
В итоге, для управления всей бегущей строкой необходимо 3+4=7 линий.

Протокол управления достаточно простой, напоминает мне управление светодиодной матрицей на базе 74hc595. Так что смело выкидывай плату с управляющим МК и цепляй свою.
+1
  • avatar
  • Rita
  • 19 ноября 2011, 05:17
В качестве алгоритма работы управляющего МК для управения БЕГУЩЕЙ СТРОКОЙ предлагаю следующее:

При включении:
1) обнулить 8{шт светодиодов в строке}*8{шт светодиодов в столбце}*4{шт матриц 8x8 в 1 секции}*3{шт секций в линейке}=768байт переменной {LedLine} во внутренней SRAM (или во внешней SRAM).

Прерывание от UART:
1) по UART-у получить число в диапазоне [0-255];
2) представить полученное число в двоичном формате (получается 1байт или 8бит);
3) сдвинуть значение переменной {LedLine} на 1 байт вправо;
4) записать в первый байт переменной {LedLine} значение байта, полученного по UART.

Прерывание по времени:
1) дрыгать 7 ножками, с целью вывести содержимое переменной {LedLine} на светодиодную линейку в режиме динамической индикации.
0
С таким алгоритмом, будучи освобожденным от всяческих преобразований, МК занимается своей основной задачей — получением очередной порции информации и отображением поступившых данных на светодиодную линейку.
Весь процесс преобразования указанной строки текста в удобоваримую для МК форму возлагается на компьютер, у которого предостаточно ресурсов для такой задачи.
0
Дополнительно можно добавить команды, идентификатором которых будет число выше 256:
1) очистить экран;
2) заморозить изображение (содержимое переменной1 копируется в переменную2, после чего новые данные из UART поступают в переменную2);
3) разморозить изображение (при этом содержимое переменной2 копируется в переменную1 и изображение автоматической МОМЕНТАЛЬНО обновляется в соответствии с НОВЫМ содержимым переменной1 благодаря динамической индикации).
0
Микросхема [74act244] является прозрачным мостом…
0
Ух ничего себе! Сколько информации, главное — полезной! Прям подарок как (как раз вчера был ДР). Пробежался пока что быстро глазами, собственно вот я сам как раз и склонялся к этому варианту: «Так что смело выкидывай плату с управляющим МК и цепляй свою.»
В любом случае огромное спасибо за помощь и изыскания — обязательно их применю (постараюсь применить), как только снова время будет (да, к сожалению это далеко не основное занятие)!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.