Товарищи, может быть кто нибудь сталкивался с подобной проблемой...
Процессор: PIC18F4520
Задача: передача от 1-го до 4-х байт подчиненному устройству (АЦП) по SPI-шине с
использованием аппаратного SPI. Частота шины - 12,5кГц (источник clock-ов для SPI модуля Timer2/2).
Конфигурация модуля: CKP (Clock polarity) = 1, CKE (Clock Select) = 0. Низкая частота шины
обусловлена необходимостью обеспечить повышенную помехоустойчивость, для чего все SPI-линии
фильтруются однокаскадным RC-фильтрами (ограничение фронта до 10мкс). Частота процессора - 8МГц (1
машинный цикл = 0,5мкс)
Проблема: Передача с 1-го по 7-й бит происходит безукорозненно. А вот с передачей 8-го бита не всё
так однозначно. Фронт 8-го клока, теоретически должен появлятся в середине импульса данных (тоже
8-го

) ), однако после того, как фронт 8-го клока был выдан на линию, через время Т=0,5мкс (один
цикл процессора), линия данных переводиться (!) в состояние лог. "1" - независимо от того, какой бит
мы передавали последним (1 или 0). Поскольку время "жизни" импульса данных, после фронта клока
составляет всего 0.5мкс, а сам фронт клока (и данных тоже) составляет 10мкс - то и получается, что
последний бит не может грамотно защёлкнуться в подчинённом устройстве. ВОПРОС: КАК ПРИ ИСПОЛЬЗОВАНИИ
АППАРТНОГО SPI, ОБЕСПЕЧИТЬ ДЛИТЕЛЬНОСТЬ 8-ГО ИМПУЛЬСА ДАННЫХ, РАВНУЮ ДЛИТЕЛЬНОСТИ ПЕРИОДА ТАКТОВОГО
СИГНАЛА (в моём случае 1/12,5кГц = 80мкс). Поскольку в настоящее время, длительность 8-бита данных,
составляет всего 0,5*(период тактового сигнала)+1 машинный цикл = 0,5*80мкс+0,5мкс=40,5мкс