Страница 1 из 1

SPI DAC AD5611

Добавлено: Пн мар 20, 2017 00:20:09
kotbaris1
Добрый вечер. Пишу на PIC18F242. Столкнулся с проблемой, через SPI нужно передать значения на ЦАП. Но SSPBUF 8 разрядный регистр и за 1 раз передается 8 битов сразу. В даташите на цап написано, что DATE BITS находятся по середине, правые 4 бита не важны, потом идут 10 битов данных и потом еще какие-то 2 бита... Суть в том, что я хочу, чтобы ЦАП преобразовывал значения пропорционально, 0 = 0В, 255 = 5В... А так какой-то бред получается. Как реализовать подобную штуку?
Изображение
т.е. мне нужно передать сначала 4 любых бита, потом 10 битов данных, а потом 2 бита режима питания. Но когда я передаю первые 4 бита, у меня передается сразу 8 бит! Т.к. это SPI, сразу передается слово. Вот в чем проблема.

Re: SPI DAC AD5611

Добавлено: Пн мар 20, 2017 03:17:39
koms48
В данном случае советую начхать на аппаратный SPI, а написать программный, он не шибко сложный. Передавай сколь хошь бит, и похеру все SFR.

Re: SPI DAC AD5611

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

Re: SPI DAC AD5611

Добавлено: Пн мар 20, 2017 10:20:53
pyzhman
КРАМ писал(а):Нет никакой необходимости писать программный SPI...
+
Всего к отправке 16 бит. Из них первые 4 неважны. Никто не мешает перед отправкой сдвинуть данные для ЦАПа на 4 разряда.

Re: SPI DAC AD5611

Добавлено: Сб мар 25, 2017 13:11:17
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