Страница 1 из 1

Mega64 SPI режим Slave

Добавлено: Пн июн 15, 2009 19:40:52
ipkin
Привет всем.
решаю такую задачу.
имеется устройство с жки индикатором (сегментным) индикатор управляется контроллером LC75874 (даташит во вложении).
требуется снять данные приходящие на этот микроконтроллер.
Пакет данных состоит из 44 байт (т.е разбит на четыре 11-байтных подпакета).
вот таким образом:
A2 xx xx xx xx xx xx xx xx xx 00
A2 xx xx xx xx xx xx xx xx xx 01
A2 xx xx xx xx xx xx xx xx xx 02
A2 xx xx xx xx xx xx xx xx xx 03
где A2 это начало подпакетов а 00 01 02 03 это концы
написал прожку вроде всё работает но почемуто медленно(фузы стоят такие SUT0 и CKOPT)
в моём случае правильность пакета индицируется звуковым сигналом (бипчиком) так вот он пикает примерно раз в 2 секунды.
неужели 44 байта читаются и проверяются так долго
похоже косяк гдето в программе.
посмотрите пожалуйста не могу понять из-за этого весь проект встал
файл LC75874-2.rar переименовать в LC75874.r00
да вот ещё что
пробовал выводить прочитанный пакет на com порт компьютера в терминал всё ок но только всё равно эта задержка присутствует

Добавлено: Пн июн 15, 2009 21:38:41
BCluster
честно гря нифига не понятно в вашем коде. Куча goto - это очень большое зло. Не надо так делать ) При возможности перепишите)

А может контроллер выдает пакет с такой задержкой?

Добавлено: Пн июн 15, 2009 21:45:07
ipkin
нет контроллер не даёт такую задержку.
это выносной дисплей от автомагнитолы
когда я кручу ручку громкости то каждый шаг валкодера изменяет показания на индикаторе.
т.е они могут меняться и один раз в сек и быстрее в зависимости с какой скоростью я вращаю ручку.
т.е задержка где то в проге но вот где понять не могу

Добавлено: Вт июн 16, 2009 09:10:47
asteroid7
При передаче пакета нужно обязательно управлять ногой CE.
Удивлён, что без СЕ это как то работает :)


блин... опечатался... имел ввиду не CE, а SS

Добавлено: Вт июн 16, 2009 21:02:58
ipkin
asteroid7 писал(а):При передаче пакета нужно обязательно управлять ногой CE.
Удивлён, что без СЕ это как то работает :)
данные идущие на LC75874 нужно принимать мегой
выв SS постоянно на земле(спи активирован)
а вот начало пакета я привязал от управления CE
но щас переписал прошку с использованием прерывания(внешнего)и всё заработало как надо

Добавлено: Пн июн 22, 2009 14:11:36
BCluster
while (!(SPSR & 0x80)); - у вас тут ; в конце, зочем?

Добавлено: Пн июн 22, 2009 20:05:49
ipkin
BCluster писал(а):while (!(SPSR & 0x80)); - у вас тут ; в конце, зочем?
Вы про это:
data[0]=a;
for (i=1; i<44; i++) //читаем оставшиеся 43 байта
{
while (!(SPSR & 0x80));
data=SPDR; //и пишем их в буфер
}

Добавлено: Вт июн 23, 2009 07:33:41
asteroid7
Только сейчас заметил ошибку в моём посте выше. Не СЕ, а SS ногой на меге нужно управлять для связи по SPI, иначе о синхронизации данных можно забыть.

Добавлено: Вт июн 23, 2009 08:10:30
ipkin
asteroid7 писал(а):Только сейчас заметил ошибку в моём посте выше. Не СЕ, а SS ногой на меге нужно управлять для связи по SPI, иначе о синхронизации данных можно забыть.
в моём случае SPI должен быть влючен постоянно т.к при низком CE передаётся адрес а при высоком данные

Добавлено: Пт июн 26, 2009 15:21:28
BCluster
да я про это, но я уже понял что вы имели ввиду )