Обсуждаем контроллеры компании Atmel.
Ответить

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 09:05:00

COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 09:21:03

когда мы попадем в прерывание по переполнению, выход ШИМ уже поднимется.
обычно в прерывание (любое) мы попадаем через 7-8 тактов после его вызова. это хорошо видно по счетчику таймера, когда таймер без предделителя.

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 11:41:34

а что мешает управлять выходом программно?
ни-че-го

Добавлено 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

slav0n, отлично, от аппаратного перешли к программному, теперь осталось adc_get() переписать на asm и посчитать ровное количество тактов ... одним словом что бы не вылез джиттер.

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 16:22:52

какой джиттер
режим ацп Free Running
adc_get() - макрос чтения ADCW
просто замени на
data = ADCW

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 18:09:54

Половина команд МК выполняется за два такта, прерывание не наступит пока не будет выполнена полностью команда, вот тебе уже джиттер. Но пусть он небольшой, 1/16МГц, но он есть и будет.

Какой Free Running, я хочу два канала ацп читать, а иначе придется ионистр ставить с пилой в 1 мВ/с.

Нет, не пойдет, я лучше в середину нуля буду попадать. +слева - справа, что бы хватало на всякие переходные процессы.
Но за то будет чисто аппаратный ШИМ, а не программный.

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 20:14:52

джиттер 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

slav0n, так все красиво выглядит, на программно, теперь бы все на аппаратном уровне замутить.

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 20:43:43

в железе я уже пробовал нечто подобное (Free Running с инкрементом ADMUX) когда делал сниффер дисплея пирометра:
http://primuss3.com/forum/index.php?topic=934.0

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 20:50:37

При чем тут железо, а если тебя попросить вторую ножку дергать в противофазе?

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 20:52:03

COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ

...и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а что мешает управлять выходом программно?
А какой смысл постоянно дергать ядро если есть аппаратный модуль, который заточен специально под это?
и если разработчики не смогли в таком "гибком" таймере нам это предоставить
Предоставить что? Вы сначала сформулируйте какую задачу пытаетесь решить своими странными методами.

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 21:03:15

задача в названии темы

Добавлено after 6 minutes 58 seconds:
Dimon456 писал(а):а если тебя попросить вторую ножку дергать в противофазе?
лучше иди ищи ионистор

Re: Фильтр АЦП atmega 8 по нижней границе

Чт авг 26, 2021 21:11:18

slav0n писал(а):ищи ионистор
кто его потерял?

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 05:33:21

COKPOWEHEU писал(а):и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а ты сделай как я и все будет норм.
COKPOWEHEU писал(а):А какой смысл постоянно дергать ядро если есть аппаратный модуль
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим. Кстати, режим таймера СТС вполне себе аппаратный
COKPOWEHEU писал(а):Предоставить что?
это придется долго объяснять, примерно как Димону про оверсемплинг

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 08:15:24

slav0n писал(а):это придется долго объяснять
А ты попробуй.
slav0n писал(а):примерно как Димону про оверсемплинг
А что ты мне объяснил?
Ты привел только теорию, "идею", без малейших кусков кода, привожу цитату с того сайта
Идея состоит в том, что ...
это "идея", просто "идея".
В протеусе все элегантно выглядело, а на деле нет.
Все мои тесты, повторяю мои, не твои, были проведены чуть ли не на минимальном щадящим напряжении, без пульсаций, и с твоими расчетами 4^n ни как не сходятся.
Я тебе еще раз говорю, пойдут пульсации уровнем 100мВ и от твоего оверсемплинга ни чего не останется.
Но вот тебе еще картинку
СпойлерИзображение
Весь твой оверсемплинг упирается в количество семплов, чем их больше тем лучше.
К сожалению на AVR это не возможно, я попытался положить 13мкс - мне сказали что - о, точность падает.
На stm32 я могу 6мкс, не напрягаясь, имея на борту уже 12 битны ацп.
А обвешивать фильтрами, спереди и сзади, у вы, не вариант, время обновления резко увеличивается.

И итог всего этого: лучше иметь реальные 12 бит, чем виртуальные 15.

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 09:23:20

ты ж там и батарейку уже приладил, а разрешение 1мВ так и не показал...
шо, не смог?

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 09:39:24

slav0n писал(а):а разрешение 1мВ так и не показал...
камеру забрали, не моя была.
slav0n писал(а):шо, не смог?
Да куда уж мне в 51, пусть помоложе стараются.

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 10:17:04

задача в названии темы

Для того чтобы измерить напряжение в нуле ШИМ ваши извращения не нужны. Самое надежное - остановить ШИМ на некоторое время и измерить. Мало ли какие емкости там есть, которые не успеют отлелаксировать за те миллисекунды, которые длится пауза.
а ты сделай как я и все будет норм.
Еще раз: чтобы применять нестандартные подходы нужна очень нестандартная задача. Пока что вы ее не сформулировали.
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим.
Ну так отложите свой волшебный контроллер, у которого в прерывании используется машина времени (раз тратит отрицательное процессорное время) и возьмите обычный.
это придется долго объяснять, примерно как Димону про оверсемплинг
Ну, НАСТОЛЬКО экзотика в исходной задаче вряд ли нужна. Но зачем ее тогда было упоминать?

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 11:34:57

COKPOWEHEU, ну так пожалуйста, напиши свой код, покажи как это делается правильно.
я ж не против

Re: Фильтр АЦП atmega 8 по нижней границе

Пт авг 27, 2021 12:07:24

Для начала ТЗ в студию. Электрическую схему, решаемую задачу и все прочее. Пока, например, совсем не очевидно что нужно измерять именно в нуле ШИМа, а не просто остановить, дать отрелаксировать и измерить с гораздо большей точностью.
А то напишу код, вы же первый будете орать что все не так, все неправильно, а правильно только как вы в голове нафантазировали.
Ответить