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

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

Вт янв 25, 2022 22:41:09

Опорным является питание контроллера. У контроллера есть калибровочная константа, которая содержит измеренное Vref при известном напряжении питания. Эта константа позволяет вычислить реальное напряжение питания из измеренного Vref. Далее это вычисленное значение используют как точное значение опорного АЦП.

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

Вт янв 25, 2022 22:45:26

Благодарю за ответ

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

Ср янв 26, 2022 10:51:48

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


Вы прозрели или нет?

Если нет, объясняю как пользоваться спойлером.

Заходите на страницу 105.
Находите мое сообщение.
Под таблицей есть 2 кнопки с надписью "Показать".
Подводите курсор мышки под первую и нажимаете левую кнопку мыши и Вы прозреваете. Перед Вами раскрываются две функции - одна инициализации другая считывания канала ADC.
Вторая кнопка с надписью "Показать" работает аналогично.
Надеюсь подробно описывать не надо.

Прежде чем писать об ясновидиние разобрались бы как пишутся и читаются сообщения на сайте.

Но опять-же - советы посмотреть работу термодатчика совместно с Vrefint, вы проигнорили.


Канал Vref нужен был для проверки стабильности напряжения питания.
И причем тут канал термодатчика? Давайте сдуру подключим еще десяток каналов. Что это даст?
Все каналы заведены на один мультиплексор.
Чувствуются глубокие знания и логика.

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

Ср янв 26, 2022 15:51:56

Вы не ясновидящей, а вообще не видящей.
Под spoiler находилась функция init_adc. Вы не видите, что это инициализация ADC.
Да, похоже тяжёлый случай и медицина здесь бессильна.... :dont_know:

Я не умею угадывать что там у вас внутри всех этих:
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);

Если Вы ждёте ясновидящего, умеющего узреть содержимое всех этих ваших функций, и что они пишут в регистры конфигурации АЦП - продолжайте в том же духе. Не буду более мешать. А я не ясновидящий.

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

Ну да конечно - работали с STM8L здесь похоже только Вы. Только странно почему даже его простейший DMA с АЦП запустить не смогли. Такой-то гуру и не смог... :)))

Добавлено after 6 minutes 45 seconds:
Вы прозрели или нет?
Если нет, объясняю как пользоваться спойлером.
С этого момента можете пользоваться спойлером или чем угодно самостоятельно, в гордом одиночестве.
Потому как похоже Вы здесь единственный гуру. И никто и в подмётки не годится Вам. Правда почему-то не умеющий запустить простейшего АЦП и DMA на простейшем МК. :)))
Продолжайте в том же духе.
А у нас наши проекты на STM8L и так прекрасно работают.

Добавлено after 3 minutes 22 seconds:
И причем тут канал термодатчика? Давайте сдуру подключим еще десяток каналов. Что это даст?
Все каналы заведены на один мультиплексор.
Чувствуются глубокие знания и логика.
Не понятно зачем тогда вы вообще сюда пришли, если все вокруг вас тут дураки и все советы вы игнорируете. Зачем тогда спрашиваете совета у дураков? Копайтесь в своём ... сами.

Адьё!

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

Ср янв 26, 2022 16:06:46

Можно попробовать частоту тактирования АЦП увеличить, вплоть до 16МГц и посмотреть разницу.
Еще можно максимально укоротить провода от батарейки, или вместо батарейки, подать разделенное питание на входа АЦП, делитель сделать прямо возле МК и тоже поглядеть разницу.

Еще один момент п.14.3.4 RM. Может я его неправильно понял, но понял это так, что если время между соседними конвертациями больше tIDLE, то АЦП следует переводить в power-off. А tIDLE, согласно DS колеблется от 1сек до до 2мс.

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

Ср янв 26, 2022 17:47:56

Я не умею угадывать что там у вас внутри всех этих:
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);

Если Вы ждёте ясновидящего, умеющего узреть содержимое всех этих ваших функций, и что они пишут в регистры конфигурации АЦП - продолжайте в том же духе. Не буду более мешать. А я не ясновидящий.


Если Вы имеете опыт программирования STM8L то должны были знать что эти функции из STM8L15x-16x-05x-AL31-L_StdPeriph_Lib от STMicroelectronics, а если не знаете, то нечего давать советы. Скачайте и посмотрите, что внутри. Там установка регистров.

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

А спрашиваю я не у Вас а у специалистов имеющий опыт работы с STM8L, и прежде чем писать ответ на вопрос нужно внимательно читать, что хотят узнать и если не понимаете о чем идет речь лучше помолчать.

Да я имею большой опыт в электронике (лет 50) и в программировании (начинал с синклера), а написал сюда чтобы получить совет от специалиста, стоит ли связываться с ADC STM8L или искать другие варианты.

А не читать глупости о человека который не знает стандартные функции.

Добавлено after 18 minutes 58 seconds:
Можно попробовать частоту тактирования АЦП увеличить, вплоть до 16МГц и посмотреть разницу.
Еще можно максимально укоротить провода от батарейки,


Я уже укоротил, стало получше. Но я решил вариант внешнего ADC и DAC будет лучше.

Еще один момент п.14.3.4 RM. Может я его неправильно понял, но понял это так, что если время между соседними конвертациями больше tIDLE, то АЦП следует переводить в power-off. А tIDLE, согласно DS колеблется от 1сек до до 2мс.


Насчет 2мс не читал. В основном пишут в районе секунды.

У меня цикл одной передачи несколько мс. Так, что это не тот случай.

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

Ср янв 26, 2022 18:00:28

kvn234 писал(а):Насчет 2мс не читал. В основном пишут в районе секунды.
Надо на DS ориентироваться, это значение сильно плавает от температуры камня.

Добавлено after 1 minute 19 seconds:
kvn234 писал(а):Я уже укоротил, стало получше.
Может все-таки проблема в схеме тоды?

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

Ср янв 26, 2022 19:21:17

kvn234 писал(а):Насчет 2мс не читал. В основном пишут в районе секунды.
Надо на DS ориентироваться, это значение сильно плавает от температуры камня.

Добавлено after 1 minute 19 seconds:
kvn234 писал(а):Я уже укоротил, стало получше.
Может все-таки проблема в схеме тоды?

Схемы как таковой нет. STM8L в панельки и подключен к ST_Link и через модуль ft232 к USB.

Просто хотел протестировать ADC.

Вопросы снимаю. Меня ADC STM8L не устраивает.

Для я уменьшения пульсаций и повышения стабильности измерений буду делать выносной модуль с ADC и DAC со связью по I2C.

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

Ср фев 09, 2022 19:31:46

Одно время тоже ковырялся с АЦП на STM8L151C8
максимум что мне удалось добиться:

здесь SYSCLK=2MHz, используется одиночное преобразование, которое выполняется в WAIT режиме. Из периферии включено только АЦП, РТС, парочка UART'ов.
Питалово от МК. Думаю, что если бы сделал нормальное питание аналоговой части, то результат был бы лучше
блок инициалтзации АЦП, если возникнут вопросы:
Код:
 79     //===== ADC Setup =============
 80     adc_value=0;
 81     ADC1_CR1=0x08;                     //  12-bit resolution. enable interrupt
 82     ADC1_CR2=0x87;                  // set PRESC = CLK/2, SMTP = 7 (384 Cycles)
 83     ADC1_CR3=0;                     // reset all flags
 84     ADC1_CR1 |= 0x01;               // set ADON, enable ADC
 85     ADC1_SQR1=0x80;                 // Disable DMA
 86     ADC1_SQR2=0;
 87     ADC1_SQR3=0;
 88     ADC1_SQR4=(1<<2);               // Select  Channel =2
 89     ADC1_TRIGR4=(1<<2);             // Diasable Schmitt Trigger for Channel =2

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

Чт фев 10, 2022 09:30:47

здесь SYSCLK=2MHz, используется одиночное преобразование. Из периферии включено только АЦП, РТС, парочка UART'ов.
Питалово от МК. Думаю, что если бы сделал нормальное питание аналоговой части, то результат был бы лучше

Из периферии включено только АЦП и UART.
У меня цикл одной передачи несколько мс.
Код:
while (1)
{
buf_dma_adc [0] = GetChannel(ADC_Channel_0);
buf_dma_adc [0] = GetChannel(ADC_Channel_0);
buf_dma_adc [1] = GetChannel(ADC_Channel_1);
buf_dma_adc [2] = GetChannel(ADC_Channel_2);
buf_dma_adc [3] = GetChannel(ADC_Channel_4);
buf_dma_adc [4] = GetChannel(ADC_Channel_Vrefint);

out_usart();
}

Пробовал одиночное преобразование и в цикле через DMA.
Считывал 4 канала и ADC_Channel_Vrefint для контроля стабильности питания.
Как видно скачки ADCRef незначительные (что говорит о стабильности питания).
Четыре входа ADC0, ADC1, ADC2 и ADC4 соединены и подключены к батарейки.
При этом наблюдаю скачки и разные показания по каналам(см. таблица на 105 стр.).

Меня это не устраивает, буду использовать INA226, да и ресурсов у STM8 маловато.

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

Чт фев 10, 2022 11:37:42

kvn234, в одном китайском "вольтметре" на STM8 я обнаружил интересное подключение: в качестве опоры они измеряли падение напряжения на диоде. Соответственно, на эту опору и корректировали измерения. У STM32 удобней: там внутренняя опора есть.

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

Чт фев 10, 2022 12:44:22

да и ресурсов у STM8 маловато.

это не баг, это фича. L серия предназначена для устройств с автономным питанием, поэтому периферия там урезана по максимуму. сравните с MSP430 там вообще все очень по спартански. зато чипы работают от батарейки годами.

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

Чт фев 10, 2022 13:00:23

А вот интересно: насколько больше STM32L жрет, чем STM8L? А то, может, ну их нафиг, эти восьмибитки?

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

Чт фев 10, 2022 13:47:53

А вот интересно: насколько больше STM32L жрет, чем STM8L?

я не думаю, что большая разница будет. у меня stm8l151 в active-halt режиме потреблял 2.3 мкА. по даташиту на STM32L151x6/8, потребление в Standby режиме с РТС - 1.1 мкА. Даже в два раза меньше ;)

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

Чт фев 10, 2022 15:01:42

Соответственно, на эту опору и корректировали измерения.


Корректировка измерений это следующий этап.
Сейчас меня больше не устраивает нестабильность измерений и разница между каналами.

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

Чт фев 10, 2022 15:33:44

kvn234, а напряжение питания при этом стабильно? Температура чипа невысокая?

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

Чт фев 10, 2022 15:48:38

MSP430 там вообще все очень по спартански. зато чипы работают от батарейки годами.
да. и есть версии с минимальным напряжение 0.9 В

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

Чт фев 10, 2022 16:37:30

kvn234, а напряжение питания при этом стабильно? Температура чипа невысокая?

Температура комнатная.
Для измерения опорного напряжения ADC, оно же напряжения питания в каждом цикли вместе с измерением 4х внешних каналов измерялся канал ADC_Channel_Vrefint.
В дальнейшем предполагалось рассчитать напряжение питания(опорное) для данного цикла и входное напряжение по каждому каналу.
Я уже писал о стабильности измерений по каналу ADC_Channel_Vrefint (см. стр.105 колонка ADCRef), это говорит о стабильности питания.
Измерения и передача по USART циклическая, несколько десятков раз в секунду (точно не скажу, схему разобрал).

Я для передачи USART использовал кольцевой буфер и прерывание. Т.е. передача шла одновременно с измерениями по внешним каналам. Возможно это повлияло на нестабильность показаний.

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

Пт фев 11, 2022 12:38:00

я не думаю, что большая разница будет. у меня stm8l151 в active-halt режиме потреблял 2.3 мкА. по даташиту на STM32L151x6/8, потребление в Standby режиме с РТС - 1.1 мкА. Даже в два раза меньше ;)

У меня вся схема (STM8L151 + nRF24L01+) в том же режиме сна = 0.9...1.0 мкА. Она же в "low power run"/"low power wait" на минимальной частоте = ~5мкА.
При Uпит = ~2.4V.

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

Пт фев 11, 2022 18:55:38

У меня вся схема (STM8L151 + nRF24L01+) в том же режиме сна = 0.9...1.0 мкА. Она же в "low power run"/"low power wait" на минимальной частоте = ~5мкА.
При Uпит = ~2.4V.

у меня вольтаж 3.3 Вольт. 2.3 мкА это средняя цифра за 60 сек. там еще один раз МК просыпался, снимал данные с АЦП, передавал на UART и снова засыпал. Как то так:
Изображение Изображение

В low power wait с тактированием от LSE 38 кГц вышло 3мкА. low power run - 4.7мкА.
Ответить