Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AD5422+stm32 помогите связать
Форум разработчиков электроники ELECTRONIX.ru > Силовая Электроника - Power Electronics > Силовая Преобразовательная Техника
batisto4ka
Помогите разобраться с ЦАПом 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.
Помогите найти ошибкуи решить задачу
Matic
Цитата(batisto4ka @ Nov 23 2011, 12:16) *
Помогите найти ошибкуи решить задачу


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

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

И, кажется, топик не для этого раздела
Burner
Верно. Можна сюда напр. написать. http://electronix.ru/forum/index.php?showforum=190
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.