Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

AD5422+stm32 Помоги связать

Непрочитано 23.11.2011, 11:43  
Batisto4ka
Временная регистрация
 
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Batisto4ka на пути к лучшему
Вопрос AD5422+stm32 Помоги связать

Помогите разобраться с ЦАПом AD5422. Пробую установить связь между между stm32 и AD5422.
Распиновка:
PB.8 LATCH
PB.7 SCL
PB.6 MOSI
PB.5 MISO
PB.9 CLEAR
PC.8 FAULT
Код:
Код:
///..
GPIOB-›CRH=0x00000033;
GPIOB-›CRL=0x33400000;
GPIOC-›CRH=0x00000004;
//..
ResetDAC_1();
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	(uint8_t Pin_SCK, uint8_t Pin_MISO, uint8_t Pin_MOSI,GPIO_TypeDef * GPIOx, uint8_t Pin_LATCH, GPIO_TypeDef * GPIOy)
{
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 вне форума  
Сказали "Спасибо" Batisto4ka
warel (28.06.2019)
Непрочитано 23.11.2011, 13:56  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

Сообщение от Batisto4ka Посмотреть сообщение
возвращает 0, то есть последний записанный байт
Полистал дейташит на AD5422: не так просто прочитать данные с выхода SDO, впрочем это обычные заморочки Analog Devices .
После включения питания выход данных у AD5422 выключен, находится в третьем состоянии. Чтобы что-то прочитать, надо сначала задвинуть команду чтения (24 клока), после чего активизируется выход, затем задвинуть команду NOP (ещё 24 клока), при этом на выходе выдвинутся данные, после чего выход снова впадёт в третье состояние.
Вы всё так делаете для чтения AD5422 ?
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
warel (28.06.2019)
Непрочитано 23.11.2011, 14:36  
Batisto4ka
Временная регистрация
 
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Batisto4ka на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

Ну да...после записи в регистр управления его значение читаю так:
Код:
 temp=WriteToAD5422(0x020002);
temp=WriteToAD5422(0x00);
Batisto4ka вне форума  
Сказали "Спасибо" Batisto4ka
warel (28.06.2019)
Непрочитано 23.11.2011, 15:08  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

Сообщение от Batisto4ka Посмотреть сообщение
Ну да...после записи в регистр управления его значение читаю
Действительно, я как-то не заметил
Вот, ещё что накопал из даташита:
Цитата:
t5 5 μs min LATCH high time (after a write to the control register)
т.е. после записи в контрол-регистр надо ждать гигантские 5мкс ...
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
warel (28.06.2019)
Непрочитано 23.11.2011, 15:31  
Batisto4ka
Временная регистрация
 
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Batisto4ka на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

заменила задержку везде на 5мкс...все равно не работает
Batisto4ka вне форума  
Сказали "Спасибо" Batisto4ka
warel (28.06.2019)
Непрочитано 23.11.2011, 19:14  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

Вот ещё пара замечаний:
1. Даннные на выход SDO выталкиваются спадом клоков SCK, а не фронтом.
2. Может, сначала значение GPIOB-›IDR присвоить какой-нибудь локальной переменной и её уже проверять
Код:
uint32_t tmp;
...
tmp= GPIOB-›IDR;
if(tmp & (1‹‹5))
bla-bla-bla;
Не ровён час компилятор оптимизировал эту часть программы и опрашивает порт один только раз, а после в цикле в if() пользует уже сохранённое значение ? Можно посмотреть asm листинг откомпилированной процедуры WriteToAD5422() ?
Yurkin2007 вне форума  
Эти 2 пользователя(ей) сказали Спасибо Yurkin2007 за это сообщение:
Batisto4ka (23.11.2011), warel (28.06.2019)
Непрочитано 23.11.2011, 19:18  
Batisto4ka
Временная регистрация
 
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Batisto4ka на пути к лучшему
По умолчанию Re: AD5422+stm32 Помоги связать

Проблемма решилась, это что-то видать на плате с ЦАПом. Поробовала опросить другой ЦАП он выдает верные значения
Batisto4ka вне форума  
Сказали "Спасибо" Batisto4ka
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связать DSL2640 и DIR300 с DD-WRT по WiFi dosikus Ремонт оргтехники 1 14.02.2011 00:51
Связать 2 МК по USART MAX1978 Микроконтроллеры, АЦП, память и т.д 17 08.08.2007 19:15
Помогите связать MpLab и PICC TimeOut Proteus, KiCAD и другие ECAD 0 25.07.2007 22:01
Помоги найти аналогичную детальку tuladon Информация по радиокомпонентам 1 17.05.2007 09:31
Как связать 3,3В с 5В? WerdnaR Автоматика и аппаратура связи 13 24.08.2006 17:01


Часовой пояс GMT +4, время: 02:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.