реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AD5422+stm32 помогите связать, AD5422+stm32 помогите связать
batisto4ka
сообщение Nov 23 2011, 09:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Помогите разобраться с ЦАПом AD5422. Пробую установить связь между между stm32 и AD5422.
Распиновка:
PB.8 LATCH
PB.7 SCL
PB.6 MOSI
PB.5 MISO
PB.9 CLEAR
PC.8 FAULT
Код:
Код:
Код
:crying:
///..
GPIOB->CRH=0x00000033;
GPIOB->CRL=0x33400000;
GPIOC->CRH=0x00000004;
//..
ResetDAC();
temp=WriteToAD5422(0x551005);//uint32_t temp
temp=WriteToAD5422(0x020002);
temp=WriteToAD5422(0x00);

//...
uint32_t WriteToAD5422(uint32_t val)
{
uint8_t c;
GPIOB->BRR=1<<8;  //clr latch
for(c = 0; c < 24; c++)
    {
        
        GPIOB->BRR=1<<7;//SCK_CLEAR()//;

        if(val & 0x00800000)
        GPIOB->BSRR=1<<6;//MOSI_SET()//;
        else
        GPIOB->BRR=1<<6;////MOSI_CLEAR()//;

        Delay();
        GPIOB->BSRR=1<<7;//GPIO_BSRR_BS10;//1<<10;// SCK_SET()//;
        Delay();
        val <<= 1;
        if(GPIOB->IDR & (1<<5))
        val |= 0x01;
        Delay();
     }
GPIOB->BRR=1<<7;  //clr sck
Delay();
GPIOB->BSRR=1<<8;     //set latch
Delay();
return val;

}

void    ResetDAC    ()
{
uint32_t    temp=0;
GPIOB->BRR=1<<7;
GPIOB->BSRR=1<<8;
GPIOB->BRR=1<<9;

temp=WriteToAD5422(0x560001);//запись в регитср сброса (адрес 0х56)
}


В итоге temp=WriteToAD5422(0x551005); возвращает 0х05000000;
temp=WriteToAD5422(0x020002); возвращает 0х02000000;temp=WriteToAD5422(0x00) возвращает 0,
то есть последний записанный байт.

Если настроить функцию uint32_t WriteToAD5422(uint32_t val) на отправку по 8 бит, то темп возвращает постояннг 0. Это впринципе и понятно, т.к.по идее (согласно даташиту) LATCH устанавливается после отправки 24 бит.
Возможности связат по аппаратному SPI нет. Используется МК stm32f103vet. Функция задержки запускает таймер 2 на 85 нс.
настройки таймера Prescaller=0, ARR=3.
Помогите найти ошибкуи решить задачу

Сообщение отредактировал batisto4ka - Nov 23 2011, 09:17
Go to the top of the page
 
+Quote Post
Matic
сообщение Nov 23 2011, 10:03
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 30-06-10
Пользователь №: 58 210



Цитата(batisto4ka @ Nov 23 2011, 12:16) *
Помогите найти ошибкуи решить задачу


Страно что вообще чтото возвращается.
Для того чтобы чтото получить от SDO, надо передать больше 24 битов, т.е. при передачи 25 бита на SDO сдвигается первый отправленый и т.д.
Т.е. чтобы получить в всю посылку через SDO надо ее повторить дважды.

И еще там вроде надо сначала перевести AD5422 в Daisy-Chain

И, кажется, топик не для этого раздела

Сообщение отредактировал Matic - Nov 23 2011, 10:04
Go to the top of the page
 
+Quote Post
Burner
сообщение Nov 24 2011, 04:44
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 068
Регистрация: 14-01-08
Из: Винница
Пользователь №: 34 083



Верно. Можна сюда напр. написать. http://electronix.ru/forum/index.php?showforum=190
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 13:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016