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

 
 
 
Reply to this topicStart new topic
> Atmega8+ЦАП(MCP4921), создание функцию загрузки данных
Яrik
сообщение Feb 15 2007, 19:30
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Добрый вечер!

Есть проблемка, помогите пожалусйта.
Необходимо создать функцию на СИ для загузки данных в последовательний ЦАП. Аппаратний SPI негодится . Нужно за одну раз передавать 16-ти разрядное число (4-ре бита конфигурации, 12 -данные).
Возможно кто нибудь уже делал, что-то подобное делал. Поделитесь.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 15 2007, 19:39
Сообщение #2


Гуру
******

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



Цитата(Яrik @ Feb 15 2007, 23:30) *
Добрый вечер!

Есть проблемка, помогите пожалусйта.
Необходимо создать функцию на СИ для загузки данных в последовательний ЦАП. Аппаратний SPI негодится . Нужно за одну раз передавать 16-ти разрядное число (4-ре бита конфигурации, 12 -данные).
Возможно кто нибудь уже делал, что-то подобное делал. Поделитесь.
А почему не годится аппаратный SPI? Поясните, плиз. ИМХО, в самый раз и годится smile.gif

1. Пишем старший байт в SPDR.

2. Ждем установки SPIF в SPSR.

3. Пишем младший байт в SPDR.

4. Ждем установки SPIF в SPSR.(опционально)


--------------------
Go to the top of the page
 
+Quote Post
Яrik
сообщение Feb 15 2007, 19:44
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Цитата(prottoss @ Feb 15 2007, 18:39) *
Цитата(Яrik @ Feb 15 2007, 23:30) *
Добрый вечер!

Есть проблемка, помогите пожалусйта.
Необходимо создать функцию на СИ для загузки данных в последовательний ЦАП. Аппаратний SPI негодится . Нужно за одну раз передавать 16-ти разрядное число (4-ре бита конфигурации, 12 -данные).
Возможно кто нибудь уже делал, что-то подобное делал. Поделитесь.
А почему не годится аппаратный SPI? Поясните, плиз. ИМХО, в самый раз и годится smile.gif

1. Пишем старший байт в SPDR.

2. Ждем установки SPIF в SPSR.

3. Пишем младший байт в SPDR.

4. Ждем установки SPIF в SPSR.(опционально)


Понятно. А как сделать, чтобы CS не перключился после передачи первой част?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 15 2007, 19:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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)


--------------------
Go to the top of the page
 
+Quote Post
WHALE
сообщение Feb 15 2007, 19:54
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Вы наверно,SS имеете в виду?Дык он c аппаратным SPI никак не связан.В его роли может выступать любой свободный порт и управляйте им на здоровье сами-в вашем случае снимайте его после передачи 2 байта.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 15 2007, 20:03
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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 данные уже не возможно


--------------------
Go to the top of the page
 
+Quote Post
Яrik
сообщение Feb 15 2007, 22:15
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 15 2007, 22:18
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Яrik @ Feb 15 2007, 23:15) *
Так значит если SS сконфигурировать как выход он не будет связан с аппаратным SPI (не будет изменять его состояния) и я смогу использовать его по своему усматрению?


В мастере - да.
Go to the top of the page
 
+Quote Post
Яrik
сообщение Feb 16 2007, 01:52
Сообщение #9


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Блин sad.gif , вроде учел Ваши замечания, но в Proteus ни чего не получаеться на выходе так и остается "0" после виполнения программы. smile3046.gif
Помогите пожалуйстат!!!!!!!!
Привожу пример из даташита на MCP4921, как должно быть:
Прикрепленное изображение

ЭТО получаеться в VMLAB:
Прикрепленное изображение

Осиллограмы (сверху вниз): LDAC, CS, SDI, SCK.

Сообщение отредактировал Яrik - Feb 16 2007, 01:54
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 16 2007, 02:37
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Возможно LDAC слишком рано приходит. Может служебные биты неправильны. Может Протеус глючит. Но работать обязано. Ставьте на железо.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
NVade
сообщение Feb 16 2007, 06:55
Сообщение #11


Участник
*

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



В качестве cs можно использовать любой выход, SS в этом смысле не уникален. При этом у Вас один микроконтроллер может общаться с кучей ЦАП/АЦП/индикаторов и т.д. CS на каждое устройство будет свой, а шинка SCLK/SDATA общая для всех.
SS востребован, когда микроконтроллер является Slave устройством. Лично у меня необходимости такого использования пока не возникало.
Go to the top of the page
 
+Quote Post
NVade
сообщение Feb 16 2007, 07:07
Сообщение #12


Участник
*

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



А что имеется в виду, что выход остается в 0? SDI? SCK? ну и пусть они в 0 будут, никому это не мешает.
А что значит промежуточный уровень сигнала в середине и конце передачи на осциллограмме сигнала SDI VMLAB? Если бы я такое увидел в железе, то сразу бы решил, что 2 выхода работают друг на друга. А здесь что?
Go to the top of the page
 
+Quote Post
Яrik
сообщение Feb 16 2007, 13:09
Сообщение #13


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



Цитата(NVade @ Feb 16 2007, 06:07) *
А что имеется в виду, что выход остается в 0? SDI? SCK? ну и пусть они в 0 будут, никому это не мешает.
А что значит промежуточный уровень сигнала в середине и конце передачи на осциллограмме сигнала SDI VMLAB? Если бы я такое увидел в железе, то сразу бы решил, что 2 выхода работают друг на друга. А здесь что?

Да я и сам хотел бы понять что это за промежуточнные уровни.
Go to the top of the page
 
+Quote Post
Яrik
сообщение Feb 16 2007, 14:52
Сообщение #14


Частый гость
**

Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216



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

Я уже заказал MCP4921, но в токую глушь где живу прийдет где-то через неделю.
Go to the top of the page
 
+Quote Post

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

 


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


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