Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

SPI DAC AD5611

Пн мар 20, 2017 00:20:09

Добрый вечер. Пишу на 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 KiB) Скачиваний: 596

Re: SPI DAC AD5611

Пн мар 20, 2017 03:17:39

В данном случае советую начхать на аппаратный 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

КРАМ писал(а):Нет никакой необходимости писать программный SPI...

+
Всего к отправке 16 бит. Из них первые 4 неважны. Никто не мешает перед отправкой сдвинуть данные для ЦАПа на 4 разряда.

Re: SPI DAC AD5611

Сб мар 25, 2017 13:11:17

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

Позже напишу решение проблемы
Нужно сдвигать через 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
Ответить