Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков. |
11.03.2019, 13:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,978
Сказал спасибо: 3,005
Сказали Спасибо 3,182 раз(а) в 2,160 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от j-Roger
|
включите конденсатор 100-200 пФ междку линией CLK и землей. Авось заработает
|
Сразу минус.
Сообщение от dgrishin
|
В мануале есть рекомендованая производителем схема включения AD5270 гирляндой (DAISY-CHAIN).
|
А вот с какого там хера pull-up резистор упомянут?
У ТС'а учтено, что
Сообщение от AD5270
|
Pin 7, SDO. Serial Data Output.
This pin can be used to clock data from the shift register in daisy-chain mode or in readback mode. This open-drain output requires an external pull-up resistor even if it is not use.
|
И что
Сообщение от AD5270
|
SDO PIN AND DAISY-CHAIN OPERATION.
.....
To place the pin in high impedance and minimize the power dissipation when the pin is used, the 0x8001 data word followed by Command 0 should be sent to the part.
.....
Table 16.
.....
|
нихера не "should". А " must", если на шине есть ещё кто-то, типа пострадавшей ни за что памяти.
ТС, чем строгать ЛА из хлама, - лучше-бы технический пиджин осваивал и разбирался с RTFM.
__________________
Экзорцист 40-го уровня.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
11.03.2019, 13:52
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от mike-y-k
|
worldmasters, ещё раз повторяю - напишите код для перевода нужных линий в 0, 1, Z. Запустите код в отладчике пошагово. Смотрите тестером уровни на линии при отсутствии, одном, двух,… клиентах. По результатам можно двигаться дальше.
|
Код:
|
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = UR2_CS_Pin | URX_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/**SPI1 GPIO Configuration
PA5 ------› SPI1_SCK
PA6 ------› SPI1_MISO
PA7 ------› SPI1_MOSI */
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
Для такой конфигурации вот такие результаты:
Код:
|
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
// SDI -1 , CLK -1, SDO -0, CS1,2 = 1
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
// SDI =0, CLK=0, SDO=0, CS1,2 = 0 |
Уровни стабильно держатся. Это то что вы хотели?
Сообщение от ForcePoint
|
нихера не "should". А "must", если на шине есть ещё кто-то, типа пострадавшей ни за что памяти.
|
Ну как ему передать если он не слышит то. Передавал я уже это и толку то?
Последний раз редактировалось worldmasters; 11.03.2019 в 13:55.
|
|
|
|
11.03.2019, 14:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,978
Сказал спасибо: 3,005
Сказали Спасибо 3,182 раз(а) в 2,160 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от worldmasters
|
Вот плата кому интересно топология.
|
В виде картинок, пожалуйста. DIPtrace (?) не у всех установлен.
Сообщение от worldmasters
|
Ну как ему передать если он не слышит то. Передавал я уже это и толку то?
|
Я тоже не понимаю, как мы уже полтора месяца топчемся в первой теме - " Подтяжка SPI MISO".
Схема-то - не изменилась? По которой мы видим, что надо обязательно поставить подтяжку на SO и добиться его освобождения потенциометрами, т.к. все SO запараллелены (как это и положено).
__________________
Экзорцист 40-го уровня.
|
|
|
|
11.03.2019, 14:52
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от ForcePoint
|
которой мы видим, что надо обязательно поставить подтяжку на SO и добиться его освобождения потенциометрами, т.к. все SO запараллелены (как это и положено).
|
SDO подтянута внутренним PULLUP.
Сделал программный спи вот код:
Код:
|
uint16_t dt = 0x1c03;
uint16_t mask = 0x8000;
uint16_t in2 = 0x00;
char pin = 0;
// читаем первй датчик
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_RESET);
for (int c = 0; c ‹ 16; c++) {
uint f = (dt & mask);
mask = mask››1;
if (f)
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_RESET);
pin = HAL_GPIO_ReadPin(GPIOA, IN);
in2 = (in2 ‹‹ 1) | pin;
}
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_SET);
СЧИТАЛО НО SDO хранит последний бит даже после выставления CS. При данной команде 1 висит.
// сбрасываем параметры
dt = 0x1c03;
mask = 0x8000;
in2 = 0x00;
// Читаем второй датчик
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
for (int c = 0; c ‹ 16; c++) {
uint f = (dt & mask);
mask = mask ›› 1;
if (f)
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_RESET);
// но когда происходит обновление то SDO опять падает в ноль
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_RESET);
pin = HAL_GPIO_ReadPin(GPIOA, IN);
in2 = (in2 ‹‹ 1) | pin;
}
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET); |
Вот конфигурация портов:
Код:
|
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = UR2_CS_Pin | URX_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/**SPI1 GPIO Configuration
PA5 ------› SPI1_SCK
PA6 ------› SPI1_MISO
PA7 ------› SPI1_MOSI */
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
И работает. пошагово оба датчика нормально работают.
Тепер ьвопрос как наладить аппаратное взаимодействие?
Последний раз редактировалось worldmasters; 11.03.2019 в 15:21.
|
|
|
|
11.03.2019, 15:19
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,254
Сказал спасибо: 11,168
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
worldmasters, а величина уровней?
0=…V
1=…V
Z=…V
И вопрос с отключением внутреннего pull-up и подключением внешнего пока в воздухе повис. Не параллельно, а именно внешний.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 11.03.2019 в 15:22.
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
11.03.2019, 15:41
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от mike-y-k
|
worldmasters, а величина уровней?
0=…V
1=…V
Z=…V
И вопрос с отключением внутреннего pull-up и подключением внешнего пока в воздухе повис. Не параллельно, а именно внешний.
|
0=0V
1=3,27V
Z=0V
Про внешнюю подтяжку вы имеете в виду? так писал же что вешал до 3,9 и аппаратной связи нету.
программно вот все работает. Но медленно до ужаса.
Сейчай внешнюю 3,9к посадил на SDO симтомы не изменились. Не работает.
CLK - 3,9к к +3.3 - считывает всегда 0x1ff
CLK - 3,9к к GND - симптомы такие же как и всегда. Не работает.
SDI - 3.9к к +3,3 не работает
SDI - 3.9к к GND не работает
Это же издевательство какое то ...
В программном спи практически во всех случаях подтяжек работает стабильно.
Последний раз редактировалось worldmasters; 11.03.2019 в 16:27.
|
|
|
|
11.03.2019, 16:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.02.2013
Сообщений: 1,032
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
А ведь не просто так люди изобрели осциллограф.
Может уже пора его задействовать в отладке ??
|
|
|
|
11.03.2019, 16:53
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Сообщение от dgrishin
|
А ведь не просто так люди изобрели осциллограф.
Может уже пора его задействовать в отладке ??
|
Да если бы он у меня был ... ((( Самостоятельно я не осилю его покупку.
В программном СПИ все работает в следующей комплектации:
SDI -› 3.9k (GND)
CLK -› 3.9k (+3.3)
SDO -› 3.9k (+3.3)
CS -› internal pullup
Код:
|
/*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);
/**SPI1 GPIO Configuration
PA5 ------› SPI1_SCK
PA6 ------› SPI1_MISO
PA7 ------› SPI1_MOSI */
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
Код обмена:
Код:
|
uint16_t dt = 0x1c03;
uint16_t mask = 0x8000;
uint16_t in2 = 0x00;
char pin = 0;
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_RESET);
for (int c = 0; c ‹ 16; c++) {
uint f = (dt & mask);
mask = mask››1;
if (f)
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_RESET);
pin = HAL_GPIO_ReadPin(GPIOA, IN);
in2 = (in2 ‹‹ 1) | pin;
}
HAL_GPIO_WritePin(URX_CS_GPIO_Port, URX_CS_Pin, GPIO_PIN_SET);
dt = 0x1c02;
mask = 0x8000;
in2 = 0x00;
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
for (int c = 0; c ‹ 16; c++) {
uint f = (dt & mask);
mask = mask ›› 1;
if (f)
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOA, OUT, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, CLK, GPIO_PIN_RESET);
pin = HAL_GPIO_ReadPin(GPIOA, IN);
in2 = (in2 ‹‹ 1) | pin;
}
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET); |
Все стабильно как и должно быть.
Переношу все теже настрйоки пинов в аппаратный спи и нихрена не работает.
Сменил подтяжки на 1,5к. Теперь второй заработал а первый молчит. Аааааааааааааа....
Последний раз редактировалось worldmasters; 11.03.2019 в 17:32.
|
|
|
|
13.03.2019, 14:29
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Ох... боюсь сглазить но походу заработало. С аппаратным спи.
настройки спи:
Код:
|
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
Внешние подтяжки:
CLK, SDO - 3.9k +3.3
SDI - 3.9k GND
Основной цикл проверки:
Код:
|
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = AD5270_WriteReg(WRITE_CTRL_REG, 0x03);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
for (uint16_t i = 0; i ‹ 1024; i += 8) {
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = AD5270_WriteReg(WRITE_RDAC, i);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
HAL_Delay(timeout); !!! если не делать задержку в 1 - 3мс то регистр почему то сбрасывается в ноль
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = AD5270_ReadReg(READ_RDAC);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
HAL_Delay(timeout);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = AD5270_ReadReg(NO_OP_cmd);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
HAL_Delay(timeout);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = ExchangeSPI(HI_Z_Cmd); !!!!! ДОЛЖНО БЫТЬ ОБЯЗАТЕЛЬНО ВСЕГДА ЗАКАНЧИВАТЬСЯ ЭТИМ
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
HAL_Delay(timeout);
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_RESET);
resp = AD5270_ReadReg(NO_OP_cmd);!!!!! ПОСЛЕ ЭТОЙ КОМАНДЫ НАХОДИМСЯ В HiZ
HAL_GPIO_WritePin(UR2_CS_GPIO_Port, UR2_CS_Pin, GPIO_PIN_SET);
} |
Фух. Наверное все таки с HiZ и была ключевая проблема. Без нее захватывал шину первый чип с которым запись в регистр RDAC. Особождается после того как попытаться записать значение в CTRL_REG для всех кто сидит на шине в НЕ HiZ состоянии.
Как только помещаю в HiZ то стабильно получается считывать в любое время и в любом порядке. Главное не забыть вернуть.
По поводу подтяжек наверное и с другими режимами также будет работать.
Всем спасибо. )))
Но вопрос остается открытым как это все с памятью увязать?? Взял другой модуль с припаянной памятью и опять тишина на линии.
Последний раз редактировалось worldmasters; 13.03.2019 в 15:35.
|
|
|
|
14.03.2019, 10:58
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Проблема с потенциометром AD5270
Задача полностью решена.
Подтяжки исключил вообще.
Оставил только для SDO 3,9к к +3,3
При включении прибора сразу передаю команду 0х8001 на спи линию для потенциометров. Переводим их в высокоомное состояние.
Затем переключая режимы спи CPOL CPHA для каждого из приборов осуществляется работа либо с потенциометрами либо с памятью. Удалось добиться скорости работы спи 4,5 mhz.
Выше потенциометры перестают считываться. Возможно надо подтяжку ниже ставить но мне этой скорости вполне хватит и для памяти тоже.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо worldmasters за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:08.
|
|