Например TDA7294

Форум РадиоКот • Просмотр темы - Сниффинг SPI шины дисплея GDM0801(g)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн июл 13, 2020 13:31:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Вс июл 22, 2012 22:57:24 
Родился

Зарегистрирован: Вс сен 12, 2010 18:27:43
Сообщений: 8
Откуда: Беларусь, Могилёв
Рейтинг сообщения: 0
Добрый всем вечер
стал перед следующей задачей.
есть некое устройство, в котором используется знакосинтезирующий (1 ряд и 8 символов(в каждой 5x8 точек)) дисплей GDM 0801 G(именно версии G ) который управляется не по параллельной шине, а по SPI (судя по всему)
ДШ нет. есть только на похожие (версии a,b,c,d) но все они оказались с параллельной шиной.
на этот дисплей выходит различная цифро-текстовая и иногда символьная (стрелочки) информация.
мне же нужно с помощью контроллера (пока что pic12f675) сниффить информацию которая идёт только в последний сегмент дисплея. причём интересуют только цифры от 1 до 9 включительно. буквы и другое не нужны.
далее нужно записать код этой цифры , а потом я её загоняю и сравниваю в case ... of и делаю , что мне нужно..

теперь подробнее о том , что творится на шине дисплея.
ради этого даже пришлось логический анализатор собрать.
судя по всему идут команды по SPI , так как обнаружил тактовый сигнал CLK, сигнал начала передачи CS и сами данные MOSI
также удалось декодировать то , что там творится.
при включении дисплея происходит инициализация 3-мя посылками по 8 бит (почти такаяже как инициализация KS0066 (парочка бит вроде не совпала), но по SPI), после инициализации идут посылки с инфой которую нужно отображать на дисплее.

пример посимвольно, "_" - на дисплее это пробел . нужная нам информация - цифра 2 в последнем сегменте
K _ - -_ _ _ 2
и теперь скрин из анализатора (там и декодирована посылка сразу)
Изображение

т.е. сразу CS=0 потом идёт посылка 0x01 потом опять CS=1 , потом снова CS = 0 и уже идут бесперерывно 72 бита (9 байт) и первый всегда 0x87 , а последующие и есть 1-8 символ дисплея в кодировке ASCII. из этой посылки нужен последний 9-ый байт (64-72 биты)

вопрос- как принять именно этот байт?
с программированием микроконтроллеров мало знаком. из языков турбопаскаль изучал лет 6 назад (и то, отрывками), и два года назад колупался в исходниках cvavr на C
наглядно понимаю , что и как. но подробно с мк , многое непонятно.
алгоритм приёма на словах могу расписать, но вот три дня бьюсь головой, но не могу понять как реализовать на контроллере.
получается как, следим за CS, когда она становится =0 -> начинаем считать каждый CLK=0 , досчитываем до 64 и начинаем считывать MOSI при каждом CLK=0 и задвигать биты в байт при каждом CLK=0
при этом, если в процессе считывания импульсов CLK, CS cтал равен 1 до того как прошло 64 импульса на CLK , счётчик импульсов CLK обнуляем, опускаем флаг приёма и возращаемся заново. (это нужно для того, чтобы исключить приём байтов инициализации, и байта (0x01) который идёт перед каждой пачкой 9 байт с инфой которая будет отображаться на дисплее)
если приняли успешно , подымаем флаг приёма
и далее идёт сравнение оператором case...of (если 0x31 то уровень=1, если 0x32 то уровень=2 и т.д. до 9) , это я уже реализовал в mikropascal и вроде работает как надо.

похоже надо реализовать через прерывания, вот с ними я и немогу разобраться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Пн июл 23, 2012 11:16:36 
Собутыльник Кота
Аватар пользователя

Карма: 40
Рейтинг сообщений: 367
Зарегистрирован: Вс июл 17, 2011 11:51:52
Сообщений: 2623
Рейтинг сообщения: 0
Каким логическим анализатором пользовались?

Вы не указали частоту CLK
Вероятно лучше использовать аппаратный модуль SPI контроллера в режиме slave вместо программного декодирования.
Кроме того, желательно убедиться, что первый байт посылки именно 0х87, это установка курсора, желательно также разобраться с сигналом А0 (он наверное выведен отдельным выводом). Иначе можно словить неправильные данные в тех посылках, которые инициализируют индикатор или загружают пользовательские символы


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Пн июл 23, 2012 14:54:28 
Родился

Зарегистрирован: Вс сен 12, 2010 18:27:43
Сообщений: 8
Откуда: Беларусь, Могилёв
Рейтинг сообщения: 0
koyodza писал(а):
Каким логическим анализатором пользовались?

Вы не указали частоту CLK
Вероятно лучше использовать аппаратный модуль SPI контроллера в режиме slave вместо программного декодирования.
Кроме того, желательно убедиться, что первый байт посылки именно 0х87, это установка курсора, желательно также разобраться с сигналом А0 (он наверное выведен отдельным выводом). Иначе можно словить неправильные данные в тех посылках, которые инициализируют индикатор или загружают пользовательские символы


собрал бесплатный scanalogic на atmega 8 и кварце 20мгц. записал в нём сигнал, а потом подсунул платной проге scanastudio и там подробно проанализировал
тригер ставил на спад по CS т.е. на начало передачи, и как только проц подавал на экран новую порцию данных - срабатывал анализатор.

частота clk, если верить scanastudio = 2,399khz и как я понимаю это не очень быстро , при подробном рассмотрении импульсов, тайминги виляют +\-80-100мкс

A0 где про него можно почитать? и вроде импульсов на других ногах не было. т.к. всего 8 ног, из них две земли, 1 питание, 1 напряжение регулировки подсветки. и остаются 4 на spi -> CS CLK MOSI MISO
на miso всегда молчание было, поэтому на скрине обрезал её.

что ещё, глянул опять ДШ от подобного диспа но с параллельной шиной данных http://www.xmocular.com/Upload/Character/GDM0801AFLYBS-19062998640.pdf
там таблица есть кодов, в ней этот 0x12 является пустой клеткой , а не ячейкой пользовательских символов CGRAM, может это был резерв на дисплеи которые идут под заказ? (судя по всему этот , что мы счас анализируем и есть заказной, ибо SPI шину в серийных диспах я не нашёл)
Изображение

и вот символ с кодом 0x12 на дисплее. обведено красным
Изображение
кстати, в данный момент на экране X _ - _ _ _ _ 1


также даю файл, который можно глянуть в проге-анализаторе Scanastudio (качать там http://www.ikalogic.com/ikalogic-products/scanastudio/)
Вложение:
Комментарий к файлу: посылка K _ - -_ _ _ 2
K2 SPI.zip [1.28 KiB]
Скачиваний: 469


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Ср июл 25, 2012 22:59:35 
Собутыльник Кота
Аватар пользователя

Карма: 40
Рейтинг сообщений: 367
Зарегистрирован: Вс июл 17, 2011 11:51:52
Сообщений: 2623
Рейтинг сообщения: 0
А0 часто имеет другое название RS
Да, дисплей вполне может быть заказным. Символы с кодами 0х10..0х1F и 0х80..0х9F у разных производителей дисплеев выглядят по-разному, посмотрите хотя бы на МЭЛТ
Для такой низкой частоты 2,4кГц действительно реально сделать и полностью программное детектирование, но при наличии аппаратного модуля SPI в контроллере всё же лучше использовать аппаратный


Вернуться наверх
 
Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, поможет уменьшить количество рутинных операций при проектировании.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Ср июл 25, 2012 23:59:32 
Родился

Зарегистрирован: Вс сен 12, 2010 18:27:43
Сообщений: 8
Откуда: Беларусь, Могилёв
Рейтинг сообщения: 0
koyodza писал(а):
А0 часто имеет другое название RS
Да, дисплей вполне может быть заказным. Символы с кодами 0х10..0х1F и 0х80..0х9F у разных производителей дисплеев выглядят по-разному, посмотрите хотя бы на МЭЛТ
Для такой низкой частоты 2,4кГц действительно реально сделать и полностью программное детектирование, но при наличии аппаратного модуля SPI в контроллере всё же лучше использовать аппаратный

ок, я пока остановился на 12f675(629) (ибо программа не сложная - нужно в зависимости от принятого числа (от 1 до 9) выдавать бипы между которыми идёт пауза. чем больше число - тем меньше пауза. если сталкивались с звуковым оповещением в дозиметрах (сильнее фон - чаще пищит), то это по сути тоже самое.)

в 12f675 нет аппаратного spi. как программно реализовать приём последнего байта?
откопал на казусе тему, в которой отдалённо затрагивается и моя проблема http://kazus.ru/forums/showthread.php?t=91448
там правда прерывать выполнение основного цикла нельзя было, в моей задаче это делать можно

может есть готовые решения подобной задачи для других МК?


Вернуться наверх
 
Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: Сниффинг SPI шины дисплея GDM0801(g)
СообщениеДобавлено: Чт июл 26, 2012 00:10:01 
Собутыльник Кота
Аватар пользователя

Карма: 40
Рейтинг сообщений: 367
Зарегистрирован: Вс июл 17, 2011 11:51:52
Сообщений: 2623
Рейтинг сообщения: 0
a-droo писал(а):
как программно реализовать приём последнего байта?
может есть готовые решения подобной задачи для других МК?

Если у Вас МК больше ничем другим не занят, то это очень просто. Основную суть Вы сами описывали выше
a-droo писал(а):
следим за CS, когда она становится =0 -> начинаем считать каждый CLK=0 , досчитываем до 64 и начинаем считывать MOSI при каждом CLK=0 и задвигать биты в байт при каждом CLK=0
при этом, если в процессе считывания импульсов CLK, CS cтал равен 1 до того как прошло 64 импульса на CLK , счётчик импульсов CLK обнуляем, опускаем флаг приёма и возращаемся заново. (это нужно для того, чтобы исключить приём байтов инициализации, и байта (0x01) который идёт перед каждой пачкой 9 байт с инфой которая будет отображаться на дисплее)
если приняли успешно , подымаем флаг приёма
и далее идёт сравнение оператором case...of (если 0x31 то уровень=1, если 0x32 то уровень=2 и т.д. до 9) , это я уже реализовал в mikropascal и вроде работает как надо.

похоже надо реализовать через прерывания, вот с ними я и немогу разобраться

Для такой низкой скорости и возможности монопольного использования процессора можно всё это делать без использования прерываний


Вернуться наверх
 


Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y