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

 
 
> 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
Ответов (1 - 3)
Александр Куличо...
сообщение 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
us5qvh
сообщение Feb 13 2010, 07:57
Сообщение #3





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



Именно для проверки выдвинутые данные и улавливал. Что задвинутые данные выдвинутся только при следующем цикле записи знаю. И он в программе не один, подряд идут команды настройки регистра конфигурации и направления выводов. Проблема именно с записью - все выводы так и остаются в висячем состоянии.
Go to the top of the page
 
+Quote Post
us5qvh
сообщение Feb 13 2010, 19:56
Сообщение #4





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



Спасибо "Ычану", вопрос решён. Повесил на все сигналы по 75пф, всё заработало как надо. Что бы это значило?
Go to the top of the page
 
+Quote Post

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

 


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


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