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

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ
ohmycode!
primuss3.com
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 19097
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

когда мы попадем в прерывание по переполнению, выход ШИМ уже поднимется.
обычно в прерывание (любое) мы попадаем через 7-8 тактов после его вызова. это хорошо видно по счетчику таймера, когда таймер без предделителя.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение 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;
    }
} 
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n, отлично, от аппаратного перешли к программному, теперь осталось adc_get() переписать на asm и посчитать ровное количество тактов ... одним словом что бы не вылез джиттер.
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

какой джиттер
режим ацп Free Running
adc_get() - макрос чтения ADCW
просто замени на
data = ADCW
ohmycode!
primuss3.com
Контактная информация:
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

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

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

Нет, не пойдет, я лучше в середину нуля буду попадать. +слева - справа, что бы хватало на всякие переходные процессы.
Но за то будет чисто аппаратный ШИМ, а не программный.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение 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;
    }
} 
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n, так все красиво выглядит, на программно, теперь бы все на аппаратном уровне замутить.
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

в железе я уже пробовал нечто подобное (Free Running с инкрементом ADMUX) когда делал сниффер дисплея пирометра:
http://primuss3.com/forum/index.php?topic=934.0
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

При чем тут железо, а если тебя попросить вторую ножку дергать в противофазе?
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="slav0n",url="/forum/viewtopic.php?p=4081626#p4081626"]
COKPOWEHEU писал(а):А как иначе?
а иначе все делается в прерывании по переполнению - сначала читаем АЦП, затем поднимаем выход ШИМ[/uquote]
...и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а что мешает управлять выходом программно?
А какой смысл постоянно дергать ядро если есть аппаратный модуль, который заточен специально под это?
и если разработчики не смогли в таком "гибком" таймере нам это предоставить
Предоставить что? Вы сначала сформулируйте какую задачу пытаетесь решить своими странными методами.
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

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

Добавлено after 6 minutes 58 seconds:
Dimon456 писал(а):а если тебя попросить вторую ножку дергать в противофазе?
лучше иди ищи ионистор
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n писал(а):ищи ионистор
кто его потерял?
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

COKPOWEHEU писал(а):и получаем либо перепад уровней во время измерения (если сделано по-человечески), либо ерунду вместо ШИМа (если он программный).
а ты сделай как я и все будет норм.
COKPOWEHEU писал(а):А какой смысл постоянно дергать ядро если есть аппаратный модуль
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим. Кстати, режим таймера СТС вполне себе аппаратный
COKPOWEHEU писал(а):Предоставить что?
это придется долго объяснять, примерно как Димону про оверсемплинг
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

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

И итог всего этого: лучше иметь реальные 12 бит, чем виртуальные 15.
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

ты ж там и батарейку уже приладил, а разрешение 1мВ так и не показал...
шо, не смог?
ohmycode!
primuss3.com
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

slav0n писал(а):а разрешение 1мВ так и не показал...
камеру забрали, не моя была.
slav0n писал(а):шо, не смог?
Да куда уж мне в 51, пусть помоложе стараются.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="slav0n",url="/forum/viewtopic.php?p=4081980#p4081980"]задача в названии темы[/uquote]
Для того чтобы измерить напряжение в нуле ШИМ ваши извращения не нужны. Самое надежное - остановить ШИМ на некоторое время и измерить. Мало ли какие емкости там есть, которые не успеют отлелаксировать за те миллисекунды, которые длится пауза.
а ты сделай как я и все будет норм.
Еще раз: чтобы применять нестандартные подходы нужна очень нестандартная задача. Пока что вы ее не сформулировали.
это бред. У меня ядро даже в большем расслабоне чем если бы ты сделал такой фунционал на аппаратной шим.
Ну так отложите свой волшебный контроллер, у которого в прерывании используется машина времени (раз тратит отрицательное процессорное время) и возьмите обычный.
это придется долго объяснять, примерно как Димону про оверсемплинг
Ну, НАСТОЛЬКО экзотика в исходной задаче вряд ли нужна. Но зачем ее тогда было упоминать?
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков

Сообщение slav0n »

COKPOWEHEU, ну так пожалуйста, напиши свой код, покажи как это делается правильно.
я ж не против
ohmycode!
primuss3.com
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

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

Вернуться в «AVR»