подключил AD5300 к мега8 по SPI
но забуксовал, а точнее не могу понять почему выдает от 0 до 2,5 Вольта вместо 0-Vdd как прописано в даташите
управа идет 16 бит по SPI
первые два бита пустые, следующие 2 бита режим оу 00-NORMAL OPERATION, далее 8 бит установка преобразования, и последние 4 бита не значащие.
так как на мега8 SPI только по 8бит передает и кроме средних 8 бит все нули сделал так
Примитив вроде, да ладно, далее передаю последовательно 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
вот полный текст тестовой проги:
вот думаю что с цапой не так?
даташит прилагаю к цапе
но забуксовал, а точнее не могу понять почему выдает от 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;
}а на выходе цапы такие значения:
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 скачивание
