Добрый всем вечер
стал перед следующей задачей.
есть некое устройство, в котором используется знакосинтезирующий (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 и вроде работает как надо.
похоже надо реализовать через прерывания, вот с ними я и немогу разобраться