Вс июл 22, 2012 22:57:24
Пн июл 23, 2012 11:16:36
Пн июл 23, 2012 14:54:28
koyodza писал(а):Каким логическим анализатором пользовались?
Вы не указали частоту CLK
Вероятно лучше использовать аппаратный модуль SPI контроллера в режиме slave вместо программного декодирования.
Кроме того, желательно убедиться, что первый байт посылки именно 0х87, это установка курсора, желательно также разобраться с сигналом А0 (он наверное выведен отдельным выводом). Иначе можно словить неправильные данные в тех посылках, которые инициализируют индикатор или загружают пользовательские символы
Ср июл 25, 2012 22:59:35
Ср июл 25, 2012 23:59:32
koyodza писал(а):А0 часто имеет другое название RS
Да, дисплей вполне может быть заказным. Символы с кодами 0х10..0х1F и 0х80..0х9F у разных производителей дисплеев выглядят по-разному, посмотрите хотя бы на МЭЛТ
Для такой низкой частоты 2,4кГц действительно реально сделать и полностью программное детектирование, но при наличии аппаратного модуля SPI в контроллере всё же лучше использовать аппаратный
Чт июл 26, 2012 00:10:01
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 и вроде работает как надо.
похоже надо реализовать через прерывания, вот с ними я и немогу разобраться