реклама на сайте
подробности

 
 
> ATMega128+MAX7301?, Не пишется и не настраивается
us5qvh
сообщение Feb 12 2010, 17:55
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 27-06-08
Пользователь №: 38 582



Подключено так: 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В стоят, никаких изменений.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Александр Куличо...
сообщение Feb 13 2010, 03:30
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Цитата
Насколько понял, после передачи каждого байта, в 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 бит безразлично какой информации.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016