Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков. |
01.03.2019, 11:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,032
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Мануал по AD5270
"...Serial Clock Input. Data is clocked into the shift register on the falling edge of the serial clock input. Data can be transferred at rates up to 50 MHz. .."
Это значит что в регистре SPI_CR1 должны быть выставлены биты CPOL=0 и CPHA=1.
Также /SYNC через bit banding надо правильно изменять в начале и в конце передачи. Всё понятно описано в мануале.
Последний раз редактировалось dgrishin; 01.03.2019 в 11:29.
|
|
|
Сказали "Спасибо" dgrishin
|
|
|
02.03.2019, 14:11
|
|
Временная регистрация
Регистрация: 16.02.2019
Адрес: Барановичи
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Проблема с потенциометром AD5270
Может быть тупое предположение, но Вы перед опросом 2 мс паузы выдерживаете ?
стр 7 даташита...
На большее - вникать в шит меня не хватило....
|
|
|
|
04.03.2019, 09:07
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от dgrishin
|
Мануал по AD5270
"...Serial Clock Input. Data is clocked into the shift register on the falling edge of the serial clock input. Data can be transferred at rates up to 50 MHz. .."
Это значит что в регистре SPI_CR1 должны быть выставлены биты CPOL=0 и CPHA=1.
Также /SYNC через bit banding надо правильно изменять в начале и в конце передачи. Всё понятно описано в мануале.
|
Код:
|
/* SPI1 init function */
void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
} |
Сообщение от pic121618
|
Может быть тупое предположение, но Вы перед опросом 2 мс паузы выдерживаете ?
стр 7 даташита...
На большее - вникать в шит меня не хватило....
|
Где вы это увидели то??
2мс это время PowerUp.
В любом случае я проверяю через отладчик тут время задержки перед выполнением команд секунды.
|
|
|
|
04.03.2019, 10:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,032
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Теперь вам осталось только показать код генерации сигнала /SYNC. Я сейчас посмотрел - в принципе для /SYNC очень хорошо подходит логика пина NSS.
Для этого его надо настроить как
Hardware NSS management (SSM = 0)
Two configurations are possible depending on the NSS output configuration (SSOE bit
in register SPI_CR2).
– NSS output enabled (SSM = 0, SSOE = 1)
This configuration is used only when the device operates in master mode. The
NSS signal is driven low when the master starts the communication and is kept
low until the SPI is disabled.
|
|
|
|
04.03.2019, 10:32
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от dgrishin
|
Теперь вам осталось только показать код генерации сигнала /SYNC. Я сейчас посмотрел - в принципе для /SYNC очень хорошо подходит логика пина NSS.
Для этого его надо настроить как
Hardware NSS management (SSM = 0)
Two configurations are possible depending on the NSS output configuration (SSOE bit
in register SPI_CR2).
– NSS output enabled (SSM = 0, SSOE = 1)
This configuration is used only when the device operates in master mode. The
NSS signal is driven low when the master starts the communication and is kept
low until the SPI is disabled.
|
Код:
|
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = UR2_CS_Pin | URX_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
Код:
|
uint16_t AD5270_ReadReg(uint8_t command) {
uint16_t data = ((uint16_t) (command & 0x0f) ‹‹ 0x000a);
uint16_t indata = 0;
uint16_t nop = 0;
//HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &data, (uint8_t*) &indata, 2, 0x100);
uint8_t upper_byte = (data ›› 8) & 0xFF;
uint8_t lower_byte = 0;
uint8_t receive = 0;
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &upper_byte, (uint8_t*) &receive, 1, 0x100);
HAL_Delay(2);
indata = receive ‹‹ 8;
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &lower_byte, (uint8_t*) &receive, 1, 0x100);
indata |= receive;
return indata; //& 0x3ff;
} |
Код:
|
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_RESET);
HAL_Delay(timeout);
resp = AD5270_WriteReg(WRITE_CTRL_REG, 0x03);
HAL_Delay(timeout);
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_SET); |
|
|
|
|
04.03.2019, 10:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,032
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
По вашим симптомам все сходится на том, что /sync сигнал не выставляется правильно и как следствие данные из сдвигового регистра не переписываются во внутренный регистр.
По коду все вроде правильно (точнее HALно) Мне регистры удобнее. Вы включили клокинг порта, с котрого идёт /sync ??
Если /sync перевести на NSS пин кода будет в два раза меньше
|
|
|
|
04.03.2019, 14:18
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от dgrishin
|
включили клокинг порта, с котрого идёт /sync ??
|
Тестер показывает что напряжение снимается и выставляется при прохождении команд.
|
|
|
|
04.03.2019, 18:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,032
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
SPI AD5270 работает в 16битном режиме. А вы с ней работаете в 8 битном. Функцию AD5270_WriteReg вы так и не показали.
The AD5270/AD5271 have an internal counter that counts a multiple of 16 bits (a frame) for proper operation. For example, AD5270/AD5271 each works with a 32-bit word but do not work properly with a 31-bit or 33-bit word.
Попробуйте настроить SPI в 16 битном режиме.
|
|
|
|
04.03.2019, 18:50
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,254
Сказал спасибо: 11,168
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
dgrishin, придут живые - будет предмет для экспериментов. Вроде как в конце недели ожидаются. Без них и приборов рассуждать о правильности у ТС не берусь.
Тут только эксперимент прямой покажет. И его код, и из архива, и пара примеров из сети покажут истину ![Прикольно](images/smilies/icon_wink3.gif)
Благо тут потребность в очередной раз нарисовалась - нужна функция запоминания уровня при калибровке. С другими вариантами при включении есть зона неопределенности до установки нужного значения.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
05.03.2019, 09:06
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от dgrishin
|
SPI AD5270 работает в 16битном режиме. А вы с ней работаете в 8 битном. Функцию AD5270_WriteReg вы так и не показали.
The AD5270/AD5271 have an internal counter that counts a multiple of 16 bits (a frame) for proper operation. For example, AD5270/AD5271 each works with a 32-bit word but do not work properly with a 31-bit or 33-bit word.
Попробуйте настроить SPI в 16 битном режиме.
|
А вот эта закоментированная функция ничего не говорит?
Код:
|
//HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &data, (uint8_t*) &indata, 2, 0x100); |
Уже по всякому отдавал и принимал данные. Функция WriteReg аналогична чтению.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:13.
|
|