Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Программирование STM8

Вс янв 23, 2022 18:36:43

kvn234, 1. Требуется калибровка из-за наличия ошибки смещения.
2. Нестабильность частоты тактового генератора
3. Слишком высокая частота семплирования
4. Недостаточная пауза для стабилизации перед началом конвертации
Пока хватит?


1. Причем тут ошибка смещения. Проблема в том , что показания скачут, а не имеют ошибку смещения.
2. Поменял контроллер - проблема осталась. Да и USART работает без сбоев (принимаю на комп).
3. Частота RC генератора 16МГц. Затем стоит делитель на 8. Итого 2МГц.
4. Посмотрите мое сообщение. Я привел функции инициализации и чтения по ним видно что частоты минимальные, а задержки максимальные. Я так же в цикл вносил задержки, но положительного эффекта не получил.

Re: Программирование STM8

Пн янв 24, 2022 09:38:40

kvn234, 1. Требуется калибровка из-за наличия ошибки смещения.


Если Вы не путаете с STM32, хотелось бы посмотреть на функцию калибровки.

Re: Программирование STM8

Пн янв 24, 2022 21:25:43

kvn234, Я же явно с самого начала озвучил, какой документ почитать. В нем калибровка так же описана. И есть ссылки на исходники.

Re: Программирование STM8

Пн янв 24, 2022 22:16:46

2. Поменял контроллер - проблема осталась. Да и USART работает без сбоев (принимаю на комп).
Попробуйте почитать температурный сенсор. Если с него показания получаются стабильные (как и с Vref), то возможно что-то не так с питанием или разводкой внешних каналов.

Re: Программирование STM8

Вт янв 25, 2022 10:00:34

2. Поменял контроллер - проблема осталась. Да и USART работает без сбоев (принимаю на комп).
Попробуйте почитать температурный сенсор. Если с него показания получаются стабильные (как и с Vref), то возможно что-то не так с питанием

Но если показания Vref стабильные, разве это не говорит о стабильности питания?

Добавлено after 8 minutes 38 seconds:
kvn234, Я же явно с самого начала озвучил, какой документ почитать. В нем калибровка так же описана. И есть ссылки на исходники.

Вы теоретик или у Вас есть исходники функций? В интернете много информации но не всегда знаешь где искать нужную. Прочитал данную тему 90% общих рассуждений и сообщений "кто круче".

Re: Программирование STM8

Вт янв 25, 2022 10:23:29

kvn234, я, по Вашему, что-ли должен открывать AN3137 и исходники, на которые он ссылается, и копировать избранное оттуда на этот форум, только потому, что Вам самому лениво?
Пока Вы не поймете, что здесь никто Вам ничего не должен, пользы от общения на этом форуме не получите. Лично я считаю бессмысленным обсуждать ADC в STM8L с человеком, категорически отказывающимся прочитать документ производителя именно об ошибках преобразования ADC в STM8L и о способах их минимизации. Причем ссылки на все исходники этот документ содержит.

Re: Программирование STM8

Вт янв 25, 2022 10:59:17

kvn234, я, по Вашему, что-ли должен открывать AN3137 и исходники, на которые он ссылается, и копировать избранное оттуда на этот форум, только потому, что Вам самому лениво?

Можно дать ссылку на конкретную страницу.
kvn234,Пока Вы не поймете, что здесь никто Вам ничего не должен, пользы от общения на этом форуме не получите.

Если бы Вы прочитали мое сообщение, а не торопились показать свою крутизну, Вы бы поняли, что вопрос был не о точности измерений, а об их нестабильности. И я привел исходники не очень большие.
kvn234 Лично я считаю бессмысленным обсуждать ADC в STM8L с человеком, категорически отказывающимся прочитать документ производителя именно об ошибках преобразования ADC в STM8L и о способах их минимизации.


С чего Вы взяли, что я не читал данный документ?

Я Вас не просил отвечать. Я хочу получить ответы от человека который сталкивался с данной проблемой и нашел решение.
А такие теоретики засрали весь форум.
Последний раз редактировалось kvn234 Вт янв 25, 2022 11:28:46, всего редактировалось 1 раз.

Re: Программирование STM8

Вт янв 25, 2022 11:25:15

kvn234, Вас в гугле забанили?
https://www.google.com/search?client=fi ... d&q=AN3137
Не открывается?

Re: Программирование STM8

Вт янв 25, 2022 11:32:51

kvn234, Вас в гугле забанили?
https://www.google.com/search?client=fi ... d&q=AN3137
Не открывается?


Кроме ссылке на AN3137, ни какой конкретике.
Посмотрите мои исходники (если Вы разбираетесь в программировании STM8), что там не так.

Re: Программирование STM8

Вт янв 25, 2022 12:54:29

Но если показания Vref стабильные, разве это не говорит о стабильности питания?
Нет не говорит. У вас один канал - стабилен, другие - нет. Т.е. - возможно проблема с коммутацией каналов в последовательности преобразований разных каналов.
Я предлагаю проверить случай с несколькими каналами, только внутренними (чтобы дополнительно отсечь проблемы с ногами).
Так же можно изменить порядок последовательности каналов; проверить стабильность при чтении только одного канала и т.д.

Добавлено after 5 minutes 33 seconds:
В интернете много информации но не всегда знаешь где искать нужную. Прочитал данную тему 90% общих рассуждений и сообщений "кто круче".
Не надо копаться в той куче. Для программирования STM8L151 достаточно 2-х документов: "datasheet STM8L151" и "reference manual RM0031". Ну иногда ещё может errata.

Re: Программирование STM8

Вт янв 25, 2022 13:44:02

Но если показания Vref стабильные, разве это не говорит о стабильности питания?
Нет не говорит. У вас один канал - стабилен, другие - нет. Т.е. - возможно проблема с коммутацией каналов в последовательности преобразований разных каналов.


reference manual RM0031 читал.
Как я понимаю.
У ADC нет отдельного питания и питание подается с ножки питания микроконтроллера(МК).
В МК имеется ИОН к которому можно подключить внутренний канал ADC_IN VREFINT (Vref).
При изготовлении МК в VREFINT_Factory_CONV byte ((uint8_t *)0x4910) записывается значение ADC при подключении ИОН при подачи питания на МК 3000мв +- допуск.
Соответственно измеряя Vref и зная VREFINT_Factory_CONV мы можем вычислить напряжение питания и если измерения Vref стабильны то можно сделать вывод о стабильности питания.

А в чем могут быть проблемы с MUX. Что внутренний, что внешние каналы заведены на один MUX. И я не случайно указал, что 4 внешних канал подключены к батарейке. Это чтобы не было разговора о необходимости подключения к источнику с малым выходным сопротивлением.

Re: Программирование STM8

Вт янв 25, 2022 14:47:51

kvn234, Да скачайте, наконец, исходники. предоставляемые производителем. Вот если с ними ситуацию не удастся исправить - тогда уже спрашивайте здесь.

Re: Программирование STM8

Вт янв 25, 2022 15:26:15

kvn234, Да скачайте, наконец, исходники. предоставляемые производителем. Вот если с ними ситуацию не удастся исправить - тогда уже спрашивайте здесь.


Скачал, что дальше? Что касается моего вопроса о не стабильности измерений?
Там столько наворочено, какое отношение к моему вопросу имеет LCD?
Если Вы разбираетесь в вопросах программирования STM8 укажите какой кусок исходника мне посмотреть.

Может Вы, чтобы заболтать вопрос, посоветуйте мне скачать и проанализировать исходники Windows или еще чего ни будь.

Я уже писал, какие у Вас замечания к моим функциям?

Re: Программирование STM8

Вт янв 25, 2022 15:46:57

Я уже писал, какие у Вас замечания к моим функциям?
Функции написаны красиво - спору нет. Только толку от них столько же, что от исходников винды, на которые вы ссылаетесь.

Re: Программирование STM8

Вт янв 25, 2022 16:36:20

Я уже писал, какие у Вас замечания к моим функциям?
Функции написаны красиво - спору нет. Только толку от них столько же, что от исходников винды, на которые вы ссылаетесь.

В чем красота? Насколько я разобрался в регистрах ADC это необходимые функции для инициализации и одиночного чтения.
Я их привел не для того чтобы кто то восхищался красотой, а привел критические замечания или предложения.
Возможно я что то упустил и показания скачут. Вначале хотелось получить более или менее стабильные показания, ну а затем применить обработку среднее, медианное ...
Мне бы хотелось получить ответ от человека практически применившего 12 разрядное ADC STM8L151, насколько стабильны показания и имеет ли смысл использовать данный ADC, а не упражняться в словоблудии и кто круче.

Прорабатываю вариант использования STM8L151 с 12разрядными ADC и DAC в универсальном зарядном устройстве.
Имеются два ЗУ одно с INA226 ATMega32 второе с ADS1115 ATMega 328 NANO и внешнее DAC.
Хочу попробовать упростить и сделать на STM8L151 с 12разрядными ADC и DAC или аналогичном STM32.

ЗЫ Зарядка универсальная. В памяти может хранить до 32 алгоритма и при необходимости загружать любые алгоритмы зарядки. Ведется запись зарядки напряжение, ток, температура в течении недели.
Процесс зарядки можно контролировать по WiFi (время, напряжение, токи, температура (в виде графиков и значений), емкость , положение коммутаций). Ну и т.д

Re: Программирование STM8

Вт янв 25, 2022 18:48:38

Я их привел не для того чтобы кто то восхищался красотой, а привел критические замечания или предложения.
Какие "практические замечания" вы ожидаете услышать, не приведя код инициализации? Здесь нет ясновидящих, кто угадает что там внутри ваших красивых функций.

Мне бы хотелось получить ответ от человека практически применившего 12 разрядное ADC STM8L151, насколько стабильны показания и имеет ли смысл использовать данный ADC, а не упражняться в словоблудии и кто круче.
Словоблудием занимаетесь здесь вы, написав кучу сообщений, но так и не приведя инициализации АЦП.
С STM8L151 не вы первый занимаетесь. У меня проект на нём уже больше года вполне себе нормально работает. Правда там используются только 2 канала АЦП: Vrefint и термодатчик. Проблем не замечал - показания стабильны. Более того - показания термодатчика отличаются всего на пару десятых градуса от другого термометра, находящегося в этом же помещении.
Но опять-же - советы посмотреть работу термодатчика совместно с Vrefint, вы проигнорили. И кто после этого словоблудит?

Re: Программирование STM8

Вт янв 25, 2022 20:21:20

Я их привел не для того чтобы кто то восхищался красотой, а привел критические замечания или предложения.
Какие "практические замечания" вы ожидаете услышать, не приведя код инициализации? Здесь нет ясновидящих, кто угадает что там внутри ваших красивых функций.


Вы не ясновидящей, а вообще не видящей.

Под spoiler находилась функция init_adc. Вы не видите, что это инициализация ADC.

void init_adc(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

ADC_DeInit(ADC1);

Vrefint = *Factory_VREFINT;
Vrefint += 0x600;

ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit,ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);

/* Disable the specified ADC DMA request */
ADC1->SQR[0] |= ADC_SQR1_DMAOFF;

ADC1->CR1 |= ADC_CR1_ADON;
}

Если Вы работали с ADC STM8L Вы должны были это понять или нужно было комментировать каждую строчку.

Re: Программирование STM8

Вт янв 25, 2022 21:02:04

kvn234, комментировать не нужно, а, для примера, указать включен ли триггер Шмитта на используемом входе или явно его выключить в коде стоило бы.

Re: Программирование STM8

Вт янв 25, 2022 21:34:42

kvn234, комментировать не нужно, а, для примера, указать включен ли триггер Шмитта на используемом входе или явно его выключить в коде стоило бы.


Триггер Шмитта выключался в функции чтения. Но сейчас я выключение триггера Шмитта перенес в инициализацию.

Но это как я и предполагал не повлияло на стабильность измерений.

void init_adc(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

ADC_DeInit(ADC1);

Vrefint = *Factory_VREFINT;
Vrefint += 0x600;

ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit,ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);

/* Disable the specified ADC DMA request */
ADC1->SQR[0] |= ADC_SQR1_DMAOFF;

ADC_SchmittTriggerConfig(ADC1, ADC_Channel_0, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_1, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_2, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_4, DISABLE);

ADC_VrefintCmd(ENABLE);

ADC1->CR1 |= ADC_CR1_ADON;
}


uint16_t GetChannel(ADC_Channel_TypeDef Channel)
{
uint32_t res;

ADC_ChannelCmd(ADC1, Channel, ENABLE);

ADC1->CR1 |= ADC_CR1_START;

while (!(ADC1->SR & ADC_FLAG_EOC));

res = ADC_GetConversionValue(ADC1);

ADC_ChannelCmd(ADC1, Channel, DISABLE);

return (uint16_t)res;
}

Когда мы наконец разобрались где находились функции, не могли ли Вы высказать конкретные замечания по функциям.
Что нужно учесть в инициализации ADC или чтении?

Re: Программирование STM8

Вт янв 25, 2022 22:33:53

Я дико извиняюсь: а когда ацп измеряет Vref, что служит опорным? Я как бы предполагаю, что измерение опорного относительно самого себя всегда будет идеальным по определению... Или нет?
Ответить