SPI DAC AD5611

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср окт 21, 2015 23:33:35

Сообщение kotbaris1 »

Добрый вечер. Пишу на PIC18F242. Столкнулся с проблемой, через SPI нужно передать значения на ЦАП. Но SSPBUF 8 разрядный регистр и за 1 раз передается 8 битов сразу. В даташите на цап написано, что DATE BITS находятся по середине, правые 4 бита не важны, потом идут 10 битов данных и потом еще какие-то 2 бита... Суть в том, что я хочу, чтобы ЦАП преобразовывал значения пропорционально, 0 = 0В, 255 = 5В... А так какой-то бред получается. Как реализовать подобную штуку?
Изображение
т.е. мне нужно передать сначала 4 любых бита, потом 10 битов данных, а потом 2 бита режима питания. Но когда я передаю первые 4 бита, у меня передается сразу 8 бит! Т.к. это SPI, сразу передается слово. Вот в чем проблема.
Вложения
2.jpg
(49.75 КБ) 610 скачиваний
Реклама
Встал на лапы
Сообщения: 132
Зарегистрирован: Пт окт 19, 2012 05:54:55

Сообщение koms48 »

В данном случае советую начхать на аппаратный SPI, а написать программный, он не шибко сложный. Передавай сколь хошь бит, и похеру все SFR.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25613
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Нет никакой необходимости писать программный SPI.
Во всех устройствах SPI построен по ЧЕТЫРЕХ или ТРЕХ проводной схеме. Причем одна отсутствующая линия в последнем варианте - это данные к мастеру. Остаются данные, клоки и загрузка. Таким образом, совершенно неважно что передается вначале. Имеют значение лишь последние полезные биты. Из чего следует, что вся эта бодяга передается ДВУМЯ байтами последовательно, где первые лишние переданные разряды не имеют никакого значения. Естественно, что фиксация данных CS (LOAD) должна происходить лишь после завершения второго байта... Недостаток тут лишь в том, что скорость передачи данных будет меньше на балластные разряды. Но всяко гораздо больше, чем в программном варианте.
Ежели это не устраивает, то есть альтернатива в новых МК Микрочипа. В них применен усовершенствованный модуль SPI, который позволяет передавать любое число разрядов от 2 до 32.
Естественно, что СНАЧАЛА нужно сформировать слово передачи в буфер и лишь потом слать его в модуль.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

КРАМ писал(а):Нет никакой необходимости писать программный SPI...
+
Всего к отправке 16 бит. Из них первые 4 неважны. Никто не мешает перед отправкой сдвинуть данные для ЦАПа на 4 разряда.
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср окт 21, 2015 23:33:35

Сообщение kotbaris1 »

Всем спасибо. Разобрался.

Позже напишу решение проблемы
Нужно сдвигать через RRCF в право на 4 бита, смотреть перенос, если он есть, устанавливать биты 4,5,6,7 соответственно. И еще не забыть почистить биты 4,5,6,7 того регистра, который сдвигаем, так как там походу циклический перенос.
ЦАП 10 разрядный, мне нужно было только 8 разрядов. Код ниже:

Код: Выделить всё

clrf 0x29
bcf TRISA,SS
rrcf 0x28
BTFSC STATUS,C
bsf 0x29,4
rrcf 0x28
BTFSC STATUS,C
bsf 0x29,5
rrcf 0x28
BTFSC STATUS,C
bsf 0x29,6
rrcf 0x28
BTFSC STATUS,C
bsf 0x29,7
bcf 0x28,7
bcf 0x28,6
bcf 0x28,5
bcf 0x28,4	
movf 0x28,W
MOVWF  SSPBUF  
sdata   
clrwdt
BTFSS  SSPSTAT, BF 
GOTO   sdata
movf 0x29,W
MOVWF  SSPBUF  
sdata1   
clrwdt
BTFSS  SSPSTAT, BF 
GOTO   sdata1
bsf TRISA,SS
Реклама
Ответить

Вернуться в «PIC»