здесь SYSCLK=2MHz, используется одиночное преобразование, которое выполняется в WAIT режиме. Из периферии включено только АЦП, РТС, парочка UART'ов.
Питалово от МК. Думаю, что если бы сделал нормальное питание аналоговой части, то результат был бы лучше
блок инициалтзации АЦП, если возникнут вопросы:
[uquote="JackSmith",url="/forum/viewtopic.php?p=4177733#p4177733"]здесь SYSCLK=2MHz, используется одиночное преобразование. Из периферии включено только АЦП, РТС, парочка UART'ов.
Питалово от МК. Думаю, что если бы сделал нормальное питание аналоговой части, то результат был бы лучше[/uquote]
Из периферии включено только АЦП и UART.
У меня цикл одной передачи несколько мс.
Пробовал одиночное преобразование и в цикле через DMA.
Считывал 4 канала и ADC_Channel_Vrefint для контроля стабильности питания.
Как видно скачки ADCRef незначительные (что говорит о стабильности питания).
Четыре входа ADC0, ADC1, ADC2 и ADC4 соединены и подключены к батарейки.
При этом наблюдаю скачки и разные показания по каналам(см. таблица на 105 стр.).
Меня это не устраивает, буду использовать INA226, да и ресурсов у STM8 маловато.
kvn234, в одном китайском "вольтметре" на STM8 я обнаружил интересное подключение: в качестве опоры они измеряли падение напряжения на диоде. Соответственно, на эту опору и корректировали измерения. У STM32 удобней: там внутренняя опора есть.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="kvn234",url="/forum/viewtopic.php?p=4178101#p4178101"]да и ресурсов у STM8 маловато.[/uquote]
это не баг, это фича. L серия предназначена для устройств с автономным питанием, поэтому периферия там урезана по максимуму. сравните с MSP430 там вообще все очень по спартански. зато чипы работают от батарейки годами.
А вот интересно: насколько больше STM32L жрет, чем STM8L? А то, может, ну их нафиг, эти восьмибитки?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4178230#p4178230"]А вот интересно: насколько больше STM32L жрет, чем STM8L?[/uquote]
я не думаю, что большая разница будет. у меня stm8l151 в active-halt режиме потреблял 2.3 мкА. по даташиту на STM32L151x6/8, потребление в Standby режиме с РТС - 1.1 мкА. Даже в два раза меньше
kvn234, а напряжение питания при этом стабильно? Температура чипа невысокая?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4178319#p4178319"]kvn234, а напряжение питания при этом стабильно? Температура чипа невысокая?[/uquote]
Температура комнатная.
Для измерения опорного напряжения ADC, оно же напряжения питания в каждом цикли вместе с измерением 4х внешних каналов измерялся канал ADC_Channel_Vrefint.
В дальнейшем предполагалось рассчитать напряжение питания(опорное) для данного цикла и входное напряжение по каждому каналу.
Я уже писал о стабильности измерений по каналу ADC_Channel_Vrefint (см. стр.105 колонка ADCRef), это говорит о стабильности питания.
Измерения и передача по USART циклическая, несколько десятков раз в секунду (точно не скажу, схему разобрал).
Я для передачи USART использовал кольцевой буфер и прерывание. Т.е. передача шла одновременно с измерениями по внешним каналам. Возможно это повлияло на нестабильность показаний. Спойлер
[uquote="JackSmith",url="/forum/viewtopic.php?p=4178263#p4178263"]я не думаю, что большая разница будет. у меня stm8l151 в active-halt режиме потреблял 2.3 мкА. по даташиту на STM32L151x6/8, потребление в Standby режиме с РТС - 1.1 мкА. Даже в два раза меньше [/uquote]
У меня вся схема (STM8L151 + nRF24L01+) в том же режиме сна = 0.9...1.0 мкА. Она же в "low power run"/"low power wait" на минимальной частоте = ~5мкА.
При Uпит = ~2.4V.
[uquote="jcxz",url="/forum/viewtopic.php?p=4178823#p4178823"]У меня вся схема (STM8L151 + nRF24L01+) в том же режиме сна = 0.9...1.0 мкА. Она же в "low power run"/"low power wait" на минимальной частоте = ~5мкА.
При Uпит = ~2.4V.[/uquote]
у меня вольтаж 3.3 Вольт. 2.3 мкА это средняя цифра за 60 сек. там еще один раз МК просыпался, снимал данные с АЦП, передавал на UART и снова засыпал. Как то так:
В low power wait с тактированием от LSE 38 кГц вышло 3мкА. low power run - 4.7мкА.
Добрый день. Решил помигать светодиодиком на STM8. В Platformio установил соответствующий пакет, и выбрал пример native-blink (пока пробую без библиотек). В коде примера смотрю на настройку пина, и вижу следующее (привожу лишь необходимые на мой взгляд куски:
То есть, для настройки пина на выход пуш-пулл с быстрыми фронтами, надо выставить соответвующий бит (5 по счету) в 3-х регистрах. И это делается этой хитрой конструкцией. Почему она для меня хитрая ? Потому что в AVR и PIC я привык выставлять биты конструкцией вида DDRB |= 1<<5;
Ну и сбрасывать соответственно похожим образом: DDRB &= ~(1<<5);
Залез в хидер, нашёл там union, внутри которого структура с битовыми полями.
Спойлер
[uquote="Martian",url="/forum/viewtopic.php?p=4274000#p4274000"]...к биту можно обратиться как LED_PORT.DDR.DDR0 = 0[/uquote]
Вот, такое обращение с использованием битовых полей для меня логично и понятно)) Ранее с обьединениями дела не имел, лишь вскользь читал в Кернигане и Ричи.
То есть, для сброса бита при обращении к структуре объединения как к целому байту мне необходимо писать LED_PORT.DDR.byte &= ~(LED_PIN); ?
И правильно ли я понял, что установку битов лучше производить конструкцией типа LED_PORT.DDR.byte |= LED_PIN, иначе если делать как в примере, то все остальные биты регистра будут сбрасываться ?
[uquote="Martian",url="/forum/viewtopic.php?p=4274031#p4274031"]... да, но только со сдвигом единички, то есть, (1 <<LED_PIN).[/uquote]
Ну, учитывая, что в хидере пины представлены битовыми масками, а не порядковыми номерами битов, то наверное все таки без единичек))
Да, тут всё правильно ответили - через CR1 и CR2 задаются режимы работ, в ODR пишется собственно байт на выход порта. Но не стОит останавливаться на этом, есть ещё и альтернативные функции... лучше не программно дёргать, а к таймеру подключить. У меня, например, в управляшке для бесколлекторного мотора TIM2 работает генератором сигнала (TIM2_OC2Init(TIM2_OCMODE_TOGGLE, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH); - переключает выход с программируемой частотой), а первый таймер - частотомер - захватывает фронты с датчика и измеряет скорость вращения.
Здравствуйте! Подскажите как в STM8S103 заставить работать АЦП2. В нете везде примеры только с АЦП1. Мне же нужно реализовать два независимых канала измерения. Однин на АЦП1 как "Сторож" напряжения. Второй на АЦП2 измерение температуры. Перерыл кучу инфы, так и не получилось заставить измерять по АЦП2. Брал за основу исходник с АЦП1 - измерения происходят нормально. Перенастраиваю исходник на АЦП2 - и не работает. Компилятор SDCC.
/* Right-align data */
//ADC1_CR2 |= (1 << ADC1_CR2_ALIGN); // включить выравнивание по правому краю
ADC2_CR2 |= (1 << ADC2_CR2_ALIGN); // включить выравнивание по правому краю
//ADC2_CSR |= (1 << ADC2_CSR_EOCIE); // включить формирование прерываний
/* Wake ADC from power down */
// ADC1_CR1 |= (1 << ADC1_CR1_ADON); //включить питание на АЦП1, второй повтор начнет преобразование
ADC2_CR1 |= (1 << ADC2_CR1_ADON); //включить питание на АЦП2, второй повтор начнет преобразование