Страница 5 из 7
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 09:05:00
slav0n
COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 09:21:03
Starichok51
когда мы попадем в прерывание по переполнению, выход ШИМ уже поднимется.
обычно в прерывание (любое) мы попадаем через 7-8 тактов после его вызова. это хорошо видно по счетчику таймера, когда таймер без предделителя.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 11:41:34
slav0n
а что мешает управлять выходом программно?
ни-че-го
Добавлено after 2 hours 18 minutes 47 seconds:
и если разработчики не смогли в таком "гибком" таймере нам это предоставить, то сделаем сами:
Код: Выделить всё
u16 period, pulsewidth;
u8 flg;
ISR(TIMER1_OVF_vect)
{
if(flg){
PWM_pin_clr();//сброс выхода
ICR1 = period - pulsewidth;
flg=0;
}else{
adc_get();//читаем АЦП
PWM_pin_set();//установка выхода
ICR1 = pulsewidth;
flg=1;
}
}
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 14:49:19
Dimon456
slav0n, отлично, от аппаратного перешли к программному, теперь осталось adc_get() переписать на asm и посчитать ровное количество тактов ... одним словом что бы не вылез джиттер.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 16:22:52
slav0n
какой джиттер
режим ацп Free Running
adc_get() - макрос чтения ADCW
просто замени на
data = ADCW
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 18:09:54
Dimon456
Половина команд МК выполняется за два такта, прерывание не наступит пока не будет выполнена полностью команда, вот тебе уже джиттер. Но пусть он небольшой, 1/16МГц, но он есть и будет.
Какой Free Running, я хочу два канала ацп читать, а иначе придется ионистр ставить с пилой в 1 мВ/с.
Нет, не пойдет, я лучше в середину нуля буду попадать. +слева - справа, что бы хватало на всякие переходные процессы.
Но за то будет чисто аппаратный ШИМ, а не программный.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 20:14:52
slav0n
джиттер 1/16МГц, какая прэлэсть...
Добавлено after 1 hour 18 minutes 16 seconds:
Dimon456 писал(а):Какой Free Running, я хочу два канала ацп читать
тю, читай два:
Код: Выделить всё
u16 period, pulsewidth, V, A;
u8 flg;
ISR(TIMER1_OVF_vect)
{
if(flg){
A = ADCW;//читаем АЦП ch 1
ADMUX = (1<<REFS1)|(1<<REFS0)| (0<<MUX0);//set ch 0
PWMpin_clr();//сброс выхода
ICR1 = period - pulsewidth;
flg=0;
}else{
V = ADCW;//читаем АЦП ch 0
ADMUX = (1<<REFS1)|(1<<REFS0)| (1<<MUX0);//set ch 1
PWMpin_set();//установка выхода
ICR1 = pulsewidth;
flg=1;
}
}
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 20:37:40
Dimon456
slav0n, так все красиво выглядит, на программно, теперь бы все на аппаратном уровне замутить.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 20:43:43
slav0n
в железе я уже пробовал нечто подобное (Free Running с инкрементом ADMUX) когда делал сниффер дисплея пирометра:
http://primuss3.com/forum/index.php?topic=934.0
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 20:50:37
Dimon456
При чем тут железо, а если тебя попросить вторую ножку дергать в противофазе?
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 20:52:03
COKPOWEHEU
[uquote="slav0n",url="/forum/viewtopic.php?p=4081626#p4081626"]
COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ[/uquote]
...и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а что мешает управлять выходом программно?
А какой смысл постоянно дергать ядро если есть аппаратный модуль, который заточен специально под это?
и если разработчики не смогли в таком "гибком" таймере нам это предоставить
Предоставить что? Вы сначала сформулируйте какую задачу пытаетесь решить своими странными методами.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 21:03:15
slav0n
задача в названии темы
Добавлено after 6 minutes 58 seconds:
Dimon456 писал(а):а если тебя попросить вторую ножку дергать в противофазе?
лучше иди ищи ионистор
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Чт авг 26, 2021 21:11:18
Dimon456
slav0n писал(а):ищи ионистор
кто его потерял?
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 05:33:21
slav0n
COKPOWEHEU писал(а):и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а ты сделай как я и все будет норм.
COKPOWEHEU писал(а):А какой смысл постоянно дергать ядро если есть аппаратный модуль
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим. Кстати, режим таймера СТС вполне себе аппаратный
COKPOWEHEU писал(а):Предоставить что?
это придется долго объяснять, примерно как Димону про оверсемплинг
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 08:15:24
Dimon456
slav0n писал(а):это придется долго объяснять
А ты попробуй.
slav0n писал(а):примерно как Димону про оверсемплинг
А что ты мне объяснил?
Ты привел только теорию, "идею", без малейших кусков кода, привожу цитату с того сайта
Идея состоит в том, что ...
это "идея", просто "идея".
В протеусе все элегантно выглядело, а на деле нет.
Все мои тесты, повторяю мои, не твои, были проведены чуть ли не на минимальном щадящим напряжении, без пульсаций, и с твоими расчетами 4^n ни как не сходятся.
Я тебе еще раз говорю, пойдут пульсации уровнем 100мВ и от твоего оверсемплинга ни чего не останется.
Но вот тебе еще картинку
Спойлер

Весь твой оверсемплинг упирается в количество семплов, чем их больше тем лучше.
К сожалению на AVR это не возможно, я попытался положить 13мкс - мне сказали что - о, точность падает.
На stm32 я могу 6мкс, не напрягаясь, имея на борту уже 12 битны ацп.
А обвешивать фильтрами, спереди и сзади, у вы, не вариант, время обновления резко увеличивается.
И итог всего этого: лучше иметь реальные 12 бит, чем виртуальные 15.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 09:23:20
slav0n
ты ж там и батарейку уже приладил, а разрешение 1мВ так и не показал...
шо, не смог?
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 09:39:24
Dimon456
slav0n писал(а):а разрешение 1мВ так и не показал...
камеру забрали, не моя была.
slav0n писал(а):шо, не смог?
Да куда уж мне в 51, пусть помоложе стараются.
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 10:17:04
COKPOWEHEU
[uquote="slav0n",url="/forum/viewtopic.php?p=4081980#p4081980"]задача в названии темы[/uquote]
Для того чтобы измерить напряжение в нуле ШИМ ваши извращения не нужны. Самое надежное - остановить ШИМ на некоторое время и измерить. Мало ли какие емкости там есть, которые не успеют отлелаксировать за те миллисекунды, которые длится пауза.
а ты сделай как я и все будет норм.
Еще раз: чтобы применять нестандартные подходы нужна очень нестандартная задача. Пока что вы ее не сформулировали.
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим.
Ну так отложите свой волшебный контроллер, у которого в прерывании используется машина времени (раз тратит отрицательное процессорное время) и возьмите обычный.
это придется долго объяснять, примерно как Димону про оверсемплинг
Ну, НАСТОЛЬКО экзотика в исходной задаче вряд ли нужна. Но зачем ее тогда было упоминать?
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 11:34:57
slav0n
COKPOWEHEU, ну так пожалуйста, напиши свой код, покажи как это делается правильно.
я ж не против
Re: Фильтр АЦП atmega 8 по нижней границе
Добавлено: Пт авг 27, 2021 12:07:24
COKPOWEHEU
Для начала ТЗ в студию. Электрическую схему, решаемую задачу и все прочее. Пока, например, совсем не очевидно что нужно измерять именно в нуле ШИМа, а не просто остановить, дать отрелаксировать и измерить с гораздо большей точностью.
А то напишу код, вы же первый будете орать что все не так, все неправильно, а правильно только как вы в голове нафантазировали.