Например TDA7294

Форум РадиоКот • Просмотр темы - Фильтр АЦП atmega 8 по нижней границе
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:13:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 140 ]     ... , , , , 7
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 09:49:16 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
COKPOWEHEU писал(а):
В смысле "где"?
slav0n писал(а):
а где же аппаратный ШИМ? где разгрузка ядра?..

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 09:57:48 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
COKPOWEHEU, конечно протеус далек от оригинала, и у меня нет двухлучевого осциллографа, что бы проверить на реальном чипе.
Но судя по протеусу, мега168, у вас дело обстоит так:
в прерывание он попадает либо при начале 1, либо при начале 0, далее запускается преобразование АЦП.
Следовательно ваш алгоритм ни чем не отличается от моего предложенного ранее.

slav0n, при режиме АЦП Free Running, насколько я понимаю, преобразование идет постоянно.
Теперь вопрос: у мк действительно 16 битный регистр ADCW есть? Или это два 8 битных регистра? и что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт?
Ни возникнет конфликта зипись-чтение и искажение результата?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 10:10:20 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
не вникал, но такой макрос есть в хедере iom8.h
Код:
/* ADC */
#define ADCW   _SFR_IO16(0x04)
#ifndef __ASSEMBLER__
#define ADC   _SFR_IO16(0x04)
#endif
#define ADCL   _SFR_IO8(0x04)
#define ADCH   _SFR_IO8(0x05)

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 12:29:13 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18093
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Dimon456 писал(а):
Теперь вопрос: у мк действительно 16 битный регистр ADCW есть? Или это два 8 битных регистра? и что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт?
Ни возникнет конфликта зипись-чтение и искажение результата?
там 2 8-битных регистра (видно в даташите) - старший и младший.
сколько тратится на запись, хрен знает, но прерывание возникнет, когда будет готов результат.
чтение - 2 такта. младшего регистра и старшего.
конфликта не возникнет. результат обновится только после окончания преобразования (я так думаю).

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 16:43:44 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
в прерывание он попадает либо при начале 1, либо при начале 0

Не в начале, а в конце, константа ADC_TIME_TIMER как раз отвечает за то, на сколько тактов старт АЦП возникнет раньше импульса ШИМ.
slav0n, повторяю: аппаратный ШИМ на канале А. С первого раза непонятно было?
Цитата:
Следовательно ваш алгоритм ни чем не отличается от моего предложенного ранее.
Поправьте ссылку, а то сейчас она ведет на заготовку кода с cvavr'ным мусором.
Цитата:
что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт?
Ни возникнет конфликта зипись-чтение и искажение результата?
Очередное преобразование начинается после чтения ADCH. То есть если нам нужна вся 10-битная точность, читаем сначала ADCL, потом ADCH (в Си можно читать сразу 16-битный ADC, он сам разберется). Если достаточно 8-битной, читаем только ADCH.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 18:24:02 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
COKPOWEHEU писал(а):
Не в начале, а в конце, константа ADC_TIME_TIMER как раз отвечает за то, на сколько тактов старт АЦП возникнет раньше импульса ШИМ.
Это на каком мк?
За что отвечает следующая команда?
Код:
#define ADCSRA_START (1<<ADEN | 1<<ADSC | 1<<ADFR | 0b110 << ADPS0) //F_CPU/64
ADCSRA = ADCSRA_START;

И ссылка правильно ведет, единственный генератор начального кода, только код малость неправильный.
COKPOWEHEU писал(а):
Очередное преобразование начинается после чтения ADCH
Это на каком мк?


Последний раз редактировалось Dimon456 Вс авг 29, 2021 21:01:25, всего редактировалось 1 раз.

Вернуться наверх
 
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 19:41:28 
Очередное преобразование начинается после чтения ADCH. То есть если нам нужна вся 10-битная точность, читаем сначала ADCL, потом ADCH (в Си можно читать сразу 16-битный ADC, он сам разберется). Если достаточно 8-битной, читаем только ADCH.

Вы ошибаетесь. Запуск преобразования не связан с чтением/не чтением значений регистров данных АЦП. Если АЦП настроен в режиме непрерывного преобразования, то новое цикл преобразования начинается сразу же после записи результата в регистры данных АЦП. Точнее новый запуск произойдёт не ранее чем через один такт после окончания текущего преобразования. Что касается чтения регистров данных АЦП, тут Вы правы. Действительно регистры данных АЦП необходимо читать в определённой последовательности – вначале младший (ADCL), затем старший (ADCН). Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян. Таким образом запуск очередного преобразования не связано с чтением регистров данных АЦП.


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 19:54:02 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Это на каком мк?
За что отвечает следующая команда?

На каком МК работает вычитание? Да на любом.
Следующая команда (запись в ADCSRA бита ADCS и прочих) отвечает за запуск очередного преобразования.
Цитата:
И ссылка правильно ведет, единственный генератор начального кода, только код малость неправильный.
Но вы-то писали про алгоритм измерения, а не про нечитаемые продукты cvavr'а.
Цитата:
Вы ошибаетесь. Запуск преобразования не связан с чтением/не чтением значений регистров данных АЦП.
Да. Сейчас перечитал:
Цитата:
When ADCL is read, the ADC Data Register is not updated until ADCH is read
То есть при чтении ADCL регистровая пара блокируется до момента чтения ADCH.
Кстати, у некоторых контроллеров можно настроить запуск АЦП по сравнению таймера аппаратно (ADTS=0b101). Так что если решать исходную задачу (только напряжение по паузам) можно сделать без прерываний таймеров.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вс авг 29, 2021 22:22:34 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 3
Ааааа, будете изобретать, вот код
Спойлер
Код:
// ADC Clock frequency: 125,000 kHz
//ADC Auto Trigger Source: Free Running
ISR(ADC_vect)
{
static uint8_t count = 1;
   
    if(count==3){
      adc_data[0] = ADCW;
      ADMUX = (0<<REFS1)|(1<<REFS0)| (0<<MUX0);//set ch 0
        PWM_pin_clr();//сброс выхода
      }
    if(count==9) {
      adc_data[1] = ADCW;
      ADMUX = (0<<REFS1)|(1<<REFS0)| (1<<MUX0);//set ch 1
        PWM_pin_set();//установка выхода
      }
   
   if(count++>9) count=1;

}
Примерно 1 кГц 40%


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн авг 30, 2021 06:48:40 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
с последовательностью чтения регистров результата там все должно быть ОК.
внимательно смотрим сишные макросы:
Цитата:
#define ADCW _SFR_IO16(0x04)
#define ADCH _SFR_IO8(0x05)

да и код мой уже замусолили и так и эдак...
но для реального использования в нем все-таки кой чего не хватает... чего?

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн авг 30, 2021 20:25:38 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
slav0n писал(а):
но для реального использования в нем все-таки кой чего не хватает... чего?
Теста в реальном устройстве.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 08:20:10 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
но прежде:
Код:
u32 V_sum, A_sum;
u16 period, pulsewidth;
u8 A_round, V_round;

ISR(TIMER1_OVF_vect)
{
    if(ADMUX & (1<<MUX0)){
        A_sum += ADCW;//get ch 1
        ADMUX = (1<<REFS1)|(1<<REFS0)| (0<<MUX0);//set ch 0 
        PWMpin_clr();//сброс выхода
        ICR1 = period - pulsewidth;
        A_round++;
    }else{
        V_sum += ADCW;//get ch 0
        ADMUX = (1<<REFS1)|(1<<REFS0)| (1<<MUX0);//set ch 1
        PWMpin_set();//установка выхода
        ICR1 = pulsewidth;
        V_round++;
    }
}

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 09:38:36 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
slav0n писал(а):
но прежде:
ну чего ты докопался до этого таймера?
Выше, двумя тремя сообщениями, я тебе дал код,
ISR(ADC_vect) срабатывает когда преобразование завершено, именно там где тебе надо, до следующей записи в ADCW регистр у тебе примерно 100 +- мкс. Идеальная синхронизация. Лучше не сделаешь.
Лучше бы код помог оптимизировать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 09:47:03 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
я показал не синхронизацию (которая при достаточно длинном периоде шим и нафиг здесь не нужна), а способ фильтрации помех средним арифметическим.
тебе как раз для реального устройства

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 09:56:49 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
slav0n писал(а):
я показал не синхронизацию
За чем? Если есть возможность синхронизировать, за чем отказываться.
slav0n писал(а):
а способ фильтрации помех средним арифметическим.
Код:
A_sum += ADCW;
A_round++;
а где дальше? Может не полностью код написал?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 10:02:37 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
Dimon456 писал(а):
а где дальше?
ну же, прояви фантазию, ты же можешь.
тут даже твоя любимая СС легко внедряется

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 10:10:38 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Мне не когда сейчас проявлять фантазию, я на уборке, примерно займет месяца 2.
Так что сам проявляй фантазию.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт авг 31, 2021 10:12:17 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
а у меня наоборот времени хоть отбавляй, перелом голени

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт сен 07, 2021 19:31:45 
Это не хвост, это антенна
Аватар пользователя

Карма: -16
Рейтинг сообщений: -136
Зарегистрирован: Чт фев 19, 2015 12:41:04
Сообщений: 1406
Рейтинг сообщения: 0
Запускать АЦП между импульсами ШИМ?

Цифровая фильтрация область малоизученная и, стандартный фильтр зачастую малопригоден. Например, если известно заранее когда будет помеха, логичнее всего не пускать ее в фильтр даже очень высокого порядка а, элементарно бланкировать. Такой способ наиболее выигрышный и, самоочевиден. Избавиться от такой сильной помехи медианой 3 порядка ха-ха-ха.

_________________
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Чт ноя 11, 2021 13:38:38 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -30
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 218
Рейтинг сообщения: 0
да... а на самом деле вона как:
http://primuss3.com/forum/index.php?top ... 0#msg15490

Ну где вы вдели такое что приложили, у вас там по всей видимости конденсатор работает на разряд в вашей осциллограмме, поэтому и спад идет. Вот осциллограмма снятая с куска провода ЗУ заряд идет частотой 1кГц, заполнение 40% , режим самописец в ослике. Все правильно сказал kote52, именно так и происходить.
Изображение


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 140 ]     ... , , , , 7

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y