|
|
  |
Atmega8+ЦАП(MCP4921), создание функцию загрузки данных |
|
|
|
Feb 15 2007, 19:39
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Яrik @ Feb 15 2007, 23:30)  Добрый вечер!
Есть проблемка, помогите пожалусйта. Необходимо создать функцию на СИ для загузки данных в последовательний ЦАП. Аппаратний SPI негодится . Нужно за одну раз передавать 16-ти разрядное число (4-ре бита конфигурации, 12 -данные). Возможно кто нибудь уже делал, что-то подобное делал. Поделитесь. А почему не годится аппаратный SPI? Поясните, плиз. ИМХО, в самый раз и годится 1. Пишем старший байт в SPDR. 2. Ждем установки SPIF в SPSR. 3. Пишем младший байт в SPDR. 4. Ждем установки SPIF в SPSR.(опционально)
--------------------
|
|
|
|
|
Feb 15 2007, 19:44
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Цитата(prottoss @ Feb 15 2007, 18:39)  Цитата(Яrik @ Feb 15 2007, 23:30)  Добрый вечер!
Есть проблемка, помогите пожалусйта. Необходимо создать функцию на СИ для загузки данных в последовательний ЦАП. Аппаратний SPI негодится . Нужно за одну раз передавать 16-ти разрядное число (4-ре бита конфигурации, 12 -данные). Возможно кто нибудь уже делал, что-то подобное делал. Поделитесь. А почему не годится аппаратный SPI? Поясните, плиз. ИМХО, в самый раз и годится 1. Пишем старший байт в SPDR. 2. Ждем установки SPIF в SPSR. 3. Пишем младший байт в SPDR. 4. Ждем установки SPIF в SPSR.(опционально) Понятно. А как сделать, чтобы CS не перключился после передачи первой част?
|
|
|
|
|
Feb 15 2007, 19:50
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Яrik @ Feb 15 2007, 23:44)  Понятно. А как сделать, чтобы CS не перключился после передачи первой част? 1. Устанавливаем пин, который выполняет функцию CS в ноль (chip select) 2. Пишем старший байт в SPDR. 3. Ждем установки SPIF в SPSR. 4. Пишем младший байт в SPDR. 5. Ждем установки SPIF в SPSR. 6. Устанавливаем пин, который выполняет функцию CS в еденицу (chip unselect)
--------------------
|
|
|
|
|
Feb 15 2007, 20:03
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(WHALE @ Feb 15 2007, 23:54)  Вы наверно,SS имеете в виду?Дык он c аппаратным SPI никак не связан.В его роли может выступать любой свободный порт и управляйте им на здоровье сами-в вашем случае снимайте его после передачи 2 байта. С аппаратным SPI вывод SS МК на самом деле связан, если он (SS) сконфигурирован как вход Цитата
If SS is configured as an input, it must be held high to ensure Master SPI operation. If
the SS pin is driven low by peripheral circuitry when the SPI is configured as a master
with the SS pin defined as an input, the SPI system interprets this as another master
selecting the SPI as a slave and starting to send data to it. To avoid bus contention, the
SPI system takes the following actions:
1. The MSTR bit in SPCR is cleared and the SPI system becomes a slave. As a
result of the SPI becoming a slave, the MOSI and SCK pins become inputs.
2. The SPIF flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in
SREG is set, the interrupt routine will be executed.
То бишь в качестве выхода для выборки DAC его использовать можно, но как вход для каких то других целей лучше не использовать. Если SS будет сконфигурирован как вход и на этом выводе будет лог.0 SPI интерфейс воспримет это как сигнал выборки от другого Мастера, что приведет к сбросу пина MSTR в регистре SPCR SPI. А в таком режиме посылать в DAC данные уже не возможно
--------------------
|
|
|
|
|
Feb 15 2007, 22:15
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Цитата(prottoss @ Feb 15 2007, 19:03)  Цитата(WHALE @ Feb 15 2007, 23:54)  Вы наверно,SS имеете в виду?Дык он c аппаратным SPI никак не связан.В его роли может выступать любой свободный порт и управляйте им на здоровье сами-в вашем случае снимайте его после передачи 2 байта. С аппаратным SPI вывод SS МК на самом деле связан, если он (SS) сконфигурирован как вход Цитата
If SS is configured as an input, it must be held high to ensure Master SPI operation. If
the SS pin is driven low by peripheral circuitry when the SPI is configured as a master
with the SS pin defined as an input, the SPI system interprets this as another master
selecting the SPI as a slave and starting to send data to it. To avoid bus contention, the
SPI system takes the following actions:
1. The MSTR bit in SPCR is cleared and the SPI system becomes a slave. As a
result of the SPI becoming a slave, the MOSI and SCK pins become inputs.
2. The SPIF flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in
SREG is set, the interrupt routine will be executed.
То бишь в качестве выхода для выборки DAC его использовать можно, но как вход для каких то других целей лучше не использовать. Если SS будет сконфигурирован как вход и на этом выводе будет лог.0 SPI интерфейс воспримет это как сигнал выборки от другого Мастера, что приведет к сбросу пина MSTR в регистре SPCR SPI. А в таком режиме посылать в DAC данные уже не возможно Так значит если SS сконфигурировать как выход он не будет связан с аппаратным SPI (не будет изменять его состояния) и я смогу использовать его по своему усматрению?
Сообщение отредактировал Яrik - Feb 15 2007, 22:16
|
|
|
|
|
Feb 16 2007, 01:52
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Блин  , вроде учел Ваши замечания, но в Proteus ни чего не получаеться на выходе так и остается "0" после виполнения программы. Помогите пожалуйстат!!!!!!!! Привожу пример из даташита на MCP4921, как должно быть:
ЭТО получаеться в VMLAB:
Осиллограмы (сверху вниз): LDAC, CS, SDI, SCK.
Сообщение отредактировал Яrik - Feb 16 2007, 01:54
|
|
|
|
|
Feb 16 2007, 06:55
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652

|
В качестве cs можно использовать любой выход, SS в этом смысле не уникален. При этом у Вас один микроконтроллер может общаться с кучей ЦАП/АЦП/индикаторов и т.д. CS на каждое устройство будет свой, а шинка SCLK/SDATA общая для всех. SS востребован, когда микроконтроллер является Slave устройством. Лично у меня необходимости такого использования пока не возникало.
|
|
|
|
|
Feb 16 2007, 07:07
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652

|
А что имеется в виду, что выход остается в 0? SDI? SCK? ну и пусть они в 0 будут, никому это не мешает. А что значит промежуточный уровень сигнала в середине и конце передачи на осциллограмме сигнала SDI VMLAB? Если бы я такое увидел в железе, то сразу бы решил, что 2 выхода работают друг на друга. А здесь что?
|
|
|
|
|
Feb 16 2007, 13:09
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Цитата(NVade @ Feb 16 2007, 06:07)  А что имеется в виду, что выход остается в 0? SDI? SCK? ну и пусть они в 0 будут, никому это не мешает. А что значит промежуточный уровень сигнала в середине и конце передачи на осциллограмме сигнала SDI VMLAB? Если бы я такое увидел в железе, то сразу бы решил, что 2 выхода работают друг на друга. А здесь что? Да я и сам хотел бы понять что это за промежуточнные уровни.
|
|
|
|
|
Feb 16 2007, 14:52
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Цитата(beer_warrior @ Feb 16 2007, 01:37)  Возможно LDAC слишком рано приходит. Может служебные биты неправильны. Может Протеус глючит. Но работать обязано. Ставьте на железо. Я уже заказал MCP4921, но в токую глушь где живу прийдет где-то через неделю.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|