Easyelectronics.ru

Электроника для всех
Текущее время: 23 апр 2019, 23:20

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Цифровой потенциометр AD8400
СообщениеДобавлено: 30 сен 2010, 02:01 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 02:07
Сообщения: 391
Откуда: Воронеж
Почитал даташит и немного непонял как ему скармливать данные там идёт
B9 B8 | B7 B6 B5 B4 B3 B2 B1 B0
A1 A0 | D7 D6 D5 D4 D3 D2 D1 D0

эт получается просто
SCK=0
Выдать(0x00)
Выдать(данные)
SCK=1

правильно думаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой потенциометр AD8400
СообщениеДобавлено: 30 сен 2010, 10:34 
Супермодератор
Аватара пользователя

Зарегистрирован: 27 янв 2010, 00:28
Сообщения: 1337
Откуда: сами знаете
Ему 10 бит слать надо. Старшие два бита эта адрес резистора (в одном корпусе может быть не один потенциометр). ну а остальные восемь это данные. Так что я бы организовал программный SPI и по нему бы отсылал ровно десять бит. Но это мое предположение.

_________________
http://avrdevices.ru/ мои девайсы
http://easystm32.ru/ Сайт про STM32


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой потенциометр AD8400
СообщениеДобавлено: 30 сен 2010, 10:52 
Старожил
Аватара пользователя

Зарегистрирован: 05 сен 2010, 07:23
Сообщения: 572
Откуда: Томск
Согласно справочному листку http://www.analog.com/static/imported-f ... 2_8403.pdf
на си можно оформить так
Код:
void AD8400_Write(UInt8 Address, UInt8 Data)
{
   UInt16 tmp;
   UInt8 i;
   //
   tmp = (Address << 8) | Data;
   //
   Pin_High(CS);
   //
   for (i = 0; i < 10; i++)
   {
      Pin_Low(CLK);
      //
      if ((tmp & 0x0200) == 0) Pin_Low(SDI);
       else Pin_High(SDI);
      //
      Pin_High(CLK);
      //
      tmp = tmp << 1;
   }
   //
   Pin_Low(CLK);
   Pin_Low(CS);
}

ну это так на вскидку...

_________________
ZiBlog.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой потенциометр AD8400
СообщениеДобавлено: 21 ноя 2017, 01:07 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 03 авг 2011, 00:09
Сообщения: 66
Откуда: Ярославль
немного не верно. перепутан CS
Код:
void ad8400_write(uint8_t Address, uint8_t Data)
{
  uint16_t tmp;
  uint8_t i;
  //
  tmp = (Address << 8) | Data;
  //
  Pin_Low(CS);
  //
  for (i = 0; i < 10; i++)
  {
    Pin_Low(CLK);
    //
    if ((tmp & 0x0200) == 0) Pin_Low(SDI);
    else Pin_High(SDI);
    //
    Pin_High(CLK);
    //
    tmp = tmp << 1;
  }
  //
  Pin_High(SDI);
  Pin_High(CS);
}


Вложения:
timing.jpg
timing.jpg [ 67.69 Кб | Просмотров: 1235 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой потенциометр AD8400
СообщениеДобавлено: 22 ноя 2017, 00:19 
Старожил

Зарегистрирован: 07 фев 2011, 21:00
Сообщения: 487
Откуда: Ханты-Мансийск
работал с этими потенциометрами (AD8402). первый раз spi генерировал на ПЛИС, поэтому отправлял строго 10 бит.
Второй раз управлял от МК STM32F030. SPI 16 бит прекрасно переваривают, старшие биты отбрасываются, остальные применяются
мой код:
Код:
void init_spi(void)
{   
    //инициализация SPI, кроме портов GPIO
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
   
    SPI1->CR2 = 0;
    SPI1->CR1 = 0;
   
    SPI1->CR2 = SPI_CR2_FRXTH | SPI_CR2_SSOE | SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2 | SPI_CR2_DS_3;  // 16 бит
    SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_SPE;
}

отправка в R0:
CSN_L();
SPI1_readWrite(uart1.reg[1] & 0xff);   // адрес = 0; 8 бит данных
CSN_H();

отправка в R1:
CSN_L();
SPI1_readWrite(256 + (uart1.reg[2] & 0xff) );   // адрес = 1; 8 бит данных
CSN_H();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой потенциометр AD8400
СообщениеДобавлено: 24 ноя 2017, 10:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 фев 2012, 13:44
Сообщения: 90
http://reason89.ru/2014/03/spi-ad8400.html


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB