jenya7 0 Posted May 2, 2019 · Report post Есть потенциометр подключенный к ADC входу контролера. И есть кнопки UP\DOWN. Народ хочет чтоб я потенциометром регулировал уровень освещения а кнопками делал мягкую подстройку. И тут мне не понятно как поженить кнопки с потенциометром. Я постоянно считываю ADC и полученное значение пропорционально PWM который я выдаю наружу на драйвер светодиодов. 3.3V = 100% PWM 0V = 5% PWM if (globalSysTimer > g_AnalogPeriod) { dimmer_ana_value = ADC_Read(0, PTB0_ADC0_SE8A, 4); LIGHT_14seg(dimmer_ana_value); LIGHT_7seg(dimmer_ana_value); g_AnalogPeriod = globalSysTimer + 200; } Теперь я кнопками начинаю изменять полученное значение с ADC, и что запретить ADC апдейтировать это значение? switch(key) { case UP_ARROW: dimmer_ana_value += dim_param.step; if (dimmer_ana_value > MAX_DIM_VAL) dimmer_ana_value = MAX_DIM_VAL; break; case DOWN_ARROW: dimmer_ana_value -= dim_param.step; if (dimmer_ana_value < MIN_DIM_VAL) dimmer_ana_value = MIN_DIM_VAL; break; } А если я начал крутить потенциометр – какое значение принять - то какое я накрутил или то что нахлопал кнопками? Quote Ответить с цитированием Share this post Link to post Share on other sites
ViKo 0 Posted May 2, 2019 · Report post Добавляйте к значению с АЦП число, нащелканное кнопками. Как только с АЦП придет новое значение, отличающееся от прежнего на некий заданный порог (чтобы нестабильность значений с АЦП игнорировать), обнуляйте число с кнопок. Два руля - это беда. А хотите - просто складывайте число с АЦП и число с кнопок. С ограничением результата снизу и сверху. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 2, 2019 (edited) · Report post 1 hour ago, ViKo said: Добавляйте к значению с АЦП число, нащелканное кнопками. Как только с АЦП придет новое значение, отличающееся от прежнего на некий заданный порог (чтобы нестабильность значений с АЦП игнорировать), обнуляйте число с кнопок. Два руля - это беда. А хотите - просто складывайте число с АЦП и число с кнопок. С ограничением результата снизу и сверху. тогда не получается идея с мягкой подстройкой. идея такая. потенциометр регулирует общий уровень на всех панелях. например на какой то панели хотят увеличить или уменьшить освещение - тогда подстраивают кнопками на этой панели. Edited May 2, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
ViKo 0 Posted May 2, 2019 · Report post 2 минуты назад, jenya7 сказал: тогда не получается идея с мягкой подстройкой. Если хотите, чтобы вес числа с кнопок был меньше, сдвиньте число с АЦП влево на N разрядов, насколько хотите смягчить число с кнопок. Quote Ответить с цитированием Share this post Link to post Share on other sites
Stanislav_S 0 Posted May 3, 2019 · Report post Либо как вариант сделайте так: - разбиваем сигнал с потенциометра на диапазоны, допустим десять - каждому значению диапазона фиксированный PWM - к этому значению прибавляете/отнимаете значение от кнопок - далее по вкусу Quote Ответить с цитированием Share this post Link to post Share on other sites
Plain 0 Posted May 4, 2019 · Report post В 02.05.2019 в 17:21, jenya7 сказал: потенциометр регулирует общий уровень на всех панелях ... на какой то панели ... подстраивают кнопками Из сказанного логично требуется комбинация сброса, единственно возможное из которых — одновременное нажатие. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 5, 2019 · Report post мне выдали такую формулу Vseg = Cutoff * Press * Bdim + Press * Bpress * (1-Cutoff); Bdim = Min*Vdim + Max; Bpress - value of Vdim on first press. Где Vseg - вычисленное значение по которому устанавливается PWM. Cutoff = 0,1 - отрезает влияние кнопок. Press - значение с кнопок. Vdim - значение на ADC. Min, Max - минимальное и максимальное значение. Сказали что проверили в матлаб и формула разрулит все. сижу кручу - не работает формула, не вижу в ней логики. Quote Ответить с цитированием Share this post Link to post Share on other sites
ViKo 0 Posted May 5, 2019 · Report post Лучше бы они выдали алгоритм на словах, чего им надо. Quote Ответить с цитированием Share this post Link to post Share on other sites
Plain 0 Posted May 5, 2019 · Report post 22 минуты назад, jenya7 сказал: проверили в матлаб Ну вот, нашлись виновные, которые попутали потенциометр с энкодером, с которым таких проблем никогда бы не возникло. Quote Ответить с цитированием Share this post Link to post Share on other sites
AlexandrY 0 Posted May 5, 2019 · Report post 3 hours ago, jenya7 said: сижу кручу - не работает формула, не вижу в ней логики. Надо не на формулы глядеть, а брать Simulink и делать. Если б народ знал современные методы разработки то форум наверно опустел бы. Вот ваша модель: Делается за 15 мин после чего конвертируется в C или С++ Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 5, 2019 (edited) · Report post 1 hour ago, AlexandrY said: Надо не на формулы глядеть, а брать Simulink и делать. Если б народ знал современные методы разработки то форум наверно опустел бы. Вот ваша модель: Делается за 15 мин после чего конвертируется в C или С++ так сгенерируйте код пожалуйста :) у меня Simulink нет. и потом надо знать какие компоненты ставить на форму. я бы вряд ли додумался. Edited May 5, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
Plain 0 Posted May 5, 2019 · Report post 11 минут назад, AlexandrY сказал: Вот ваша модель Это не его модель — читайте ТЗ внимательнее, кнопок должно быть малость поболее, в этом и затык. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 5, 2019 · Report post 1 hour ago, Plain said: Это не его модель — читайте ТЗ внимательнее, кнопок должно быть малость поболее, в этом и затык. откуда поболее - две кнопки - +\- Quote Ответить с цитированием Share this post Link to post Share on other sites
Plain 0 Posted May 5, 2019 · Report post В 02.05.2019 в 17:21, jenya7 сказал: потенциометр регулирует общий уровень на всех панелях. например на какой то панели хотят увеличить или уменьшить освещение - тогда подстраивают кнопками на этой панели Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 5, 2019 · Report post 1 hour ago, Plain said: Скажем есть 4 панели - вход потенциометра ОБЩИЙ для всех панелей. А кнопки ОТДЕЛЬНЫЕ для каждой панели. панели не знают о других панелях. 4 панели - 4 микроконтролера. Quote Ответить с цитированием Share this post Link to post Share on other sites