ЦАПа AD5300 8bit проблемка

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

подключил AD5300 к мега8 по SPI
но забуксовал, а точнее не могу понять почему выдает от 0 до 2,5 Вольта вместо 0-Vdd как прописано в даташите
управа идет 16 бит по SPI
первые два бита пустые, следующие 2 бита режим оу 00-NORMAL OPERATION, далее 8 бит установка преобразования, и последние 4 бита не значащие.
так как на мега8 SPI только по 8бит передает и кроме средних 8 бит все нули сделал так

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

void dac(char c)
{
a=c>>4;//двигаем биты
b=c<<4;
on;
SPI_to_dac(a);//передача по SPI пакета из 16 бит в два захода
SPI_to_dac(b);
off;	
}
Примитив вроде, да ладно, далее передаю последовательно 0, 50, 100, 150, 200, 250, 255
а на выходе цапы такие значения:
1 - 0,01В
50 -0,55В должно быть ~0,9..V
100 -1,12В ~1,9V
150 -2,01В ~2,9V
200 -2,27В ~3,9V
250 -2,48В ~4,9V
255 -2,50В ~5,0V
вот полный текст тестовой проги:
Спойлер

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

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define  DDR_SPI DDRB
#define MOSI 3
#define SCK 5
#define SS 2
#define RES 0
#define on PORTB&=~(1<<SS)
#define off PORTB=(1<<SS)
unsigned char a,b,c,d;

void SPI_MasterInit(void)
{
/* Установка MOSI, SS и SCK на вывод, все остальные на ввод */
DDR_SPI |= (1<<MOSI)|(1<<SCK)|(1<<SS);
/* Разрешение SPI в режиме мастера, установка скорости связи fck/4 */
SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPIE)|(1<<CPOL)|(1<<CPHA);//|(1<<SPR0);
}

void SPI_to_dac(char cData)
{
	
/* Запуск передачи данных */
SPDR = cData;
/* Ожидание завершения передачи данных */
while(!(SPSR & (1<<SPIF)));
}

void dac(char c)
{
a=c>>4;
b=c<<4;
on;
SPI_to_dac(a);
SPI_to_dac(b);
off;	
}



int main(void)
{
SPI_MasterInit();
_delay_ms(900);
dac(1);
_delay_ms(1000);
_delay_ms(1000);
dac(50);
_delay_ms(1000);
_delay_ms(1000);
dac(100);
_delay_ms(1000);
_delay_ms(1000);
dac(150);
_delay_ms(1000);
_delay_ms(1000);
dac(200);
_delay_ms(1000);
_delay_ms(1000);
dac(250);
_delay_ms(1000);
_delay_ms(1000);
dac(255);

    while(1)
    {
// c++;		
// _delay_ms(50);
// dac(c);

    }
}
вот думаю что с цапой не так?
даташит прилагаю к цапе
Вложения
AD5300.pdf
(215.83 КБ) 251 скачивание
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20103
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

С питанием всё в порядке?
Попробуйте программный SPI (подёргать ногами) с учётом Figure 23 ДШ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

спасибо за перенос темы тупанул,
питание первым делом проверял, там все норм.
за ночь пришла мысль что не передается старший бит скорее всего из-за синхронизации по спаду/фронту, сейчас попробую изменить настройки
изменил на по фронту и заработало вроде, хотя по даташиту по спадающему фронту вроде как, мистика...
Ответить

Вернуться в «Периферия»