Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATMega128+MAX7301?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
us5qvh
Подключено так: SCLK - PB1; DIN - PB2; DOUT - PB3; CS - PG0, т.е. чтобы задействовать аппаратный SPI, а CS дёргать вручную.
Настройка SPI:
Код
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);

Запись делаю так: сначала CS вниз, потом отправляю два байта, потом CS вверх. Насколько понял, после передачи каждого байта, в SPDR должен оставаться байт, выдвигаемый из MAX. Т.е. то, что было туда задвинуто в предыдущем цикле. Но там оказывается мусор, и MAX совершенно не работает. Осциллографом все сигналы видны, проблем не заметно. Пробовал сформировать SCLK и MOSI программно, в этом же цикле читая MISO - ничего не изменилось. Расстояние между микросхемами - сантиметров 10. Скорость минимальная, резисторы с сигналов на +5В стоят, никаких изменений.
Александр Куличок
Цитата
Насколько понял, после передачи каждого байта, в SPDR должен оставаться байт, выдвигаемый из MAX. Т.е. то, что было туда задвинуто в предыдущем цикле.

Поняли неверно. То, что будет оставаться (вернее, появлятся) в SPDR, определяется МАХ'ом. На стр.6 даташита указано:
Цитата
DOUT provides a copy of the bit that was input 15.5 clocks earlier, or upon a query it outputs internal register data

Данные на выходе MAX'a появятся только после второго записанного байта. А в SPDR попадут только после третьего (если держать CS==0). Это используется для каскадирования микросхем. Для работы с одним максом это не нужно. Разве что для тестирования подключения MAX'a
Теперь о записи и чтении.
Предполагаю, что MAX у Вас на плате один. То есть цикл записи состоит из 16 бит(команда + данные), которые обрамлены спадом и фронтом CS.
Процесс записи занимает 1 цикл:
Код
cs=0,  <Command_0>, <Data> cs=1.

Процесс чтения - минимум 2 цикла.
В первом цикле пишем команду чтения + ЛюбойБайт. По фронту CS запрошенные данные читаются в сдвиговый регистр.
В следующем цикле пишем следующую комманду (запись/чтение/nop) и перед (или после) установки CS=1 из SPDR читаем результат выполнения первой команды.
Код
cs=0, <Command_1>,   <Dummy>,       cs=1, пауза,  
cs=0, <Command_0/1>, <Data/Dummy>, cs=1.

Если второй командой была также команда чтения, то ее результат мы получим после завершения третьего цикла и т.д.

Command_0 - команда записи (8 бит)
Command_1 - команда чтения (8 бит)
Command_0/1 - команда записи/чтения/nop (8 бит)
Data - байт данных
Dummy - 8 бит безразлично какой информации.
us5qvh
Именно для проверки выдвинутые данные и улавливал. Что задвинутые данные выдвинутся только при следующем цикле записи знаю. И он в программе не один, подряд идут команды настройки регистра конфигурации и направления выводов. Проблема именно с записью - все выводы так и остаются в висячем состоянии.
us5qvh
Спасибо "Ычану", вопрос решён. Повесил на все сигналы по 75пф, всё заработало как надо. Что бы это значило?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.