АЦП на прерываниях Atmega8

Раздел начинающих пользователей
Правила форума
В песочнице можно спрашивать когда незнаешь где спросить.
В песочнице нелзя посылать в гугл
В песочнице можно задавать любой вопрос, но на него могут и неответить.
Песочница для тех, кто начинает свои вопросы с защиты чайников от пинков.
В песочницу будут перетаскиваться вопросы неполучившие ответа.
Песочница - попытка навести порядок.
На песочницу большие надежды.

АЦП на прерываниях Atmega8

Сообщение Yushik (Андрей) » 09 янв 2021, 21:13

Здравствуйте уважаемые коллеги всех с прошедшими праздниками, делаю небольшой проект на Atmega8. Настроил АЦП на прерываниях файл FCD взял отсюда viewtopic.php?f=15&t=2387&hilit=pav13&start=20 Из документации даташит всем известно что сам АЦП почти у всех МК avr один чтобы читать несколько каналов нужно переключать входы МК в нужное время, в регистре ADMUX. Когда я считываю один канал АЦП в прерывании проблем не возникало, даже в железе. А вот с двумя проблема второй канал считывается не коректно, хотя вроде как сделано правильно но скорее всего что-то я всё таки упустил, в архиве ниже есть файлы ФК и протеуса там всё подробно расписано в комментариях.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Yushik
Имя: Андрей
(Симферополь)
Супер разработчик
Супер разработчик
Информация о пользователе

Re: АЦП на прерываниях Atmega8

Сообщение andrewproffi (Андрей) » 10 янв 2021, 03:52

Здравствуйте. А что и откуда тут должно считываться? Если мгновенно отдается команда на смену канала ацп. Во первых нужна пауза для заряда схемы выборки хранения после смены канала, во-вторых собственно должно пройти время для самого измерения АЦП, здесь ничего этого для канала 1 нету.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе

Re: АЦП на прерываниях Atmega8

Сообщение Yushik (Андрей) » 10 янв 2021, 08:38

Здравствуй тёска e меня при данных настройках получается сделать 95 измерений за 1 полупериод сети, я хотел 1 измерение выделить для канала ADC1. Где я упустил догадался, ночью приснилось если я в обработчике прерывания АЦП переключаю канал то этого не достаточно поскольку программа уже ушла по вектору прерывания АЦП в этот макрос. А в регистрах данных АЦП естественно будут лежать данные от измерения предыдущего канала. Я попробовал переключить регистр ADMUX в обработчике прерывания INT_0 в момент перехода сети через 0, но и этого было недостаточно, потом я изменил условие в обработчике прерывания ADC, типа я выделяю 2 измерения из 95 на измерение канала ADC1. Этого уже хватило переменная ADC_TURN стала принимать коректные значения, может и оставлю так но скорее всего перенесу измерение этого канала где-то в конце измерения полупериода сети. Поскольку симистор у меня будет открываться в начале полупериода, а с зади полупериода он большую часть времени будет закрыт и там особо нечего будет мерять. Надо сделать исследование и создать файл ФК как в прерываниях мерять несколько каналов, поскольку если ставить несколько кубиков инициализации прерывания АЦП то из этого ничего не выйдет. Будет работать то прерывание которое инициализировано последним, это я на всякий случай чтоб нас новички потом не задолбали.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Yushik
Имя: Андрей
(Симферополь)
Супер разработчик
Супер разработчик
Информация о пользователе
Вернуться наверх

Re: АЦП на прерываниях Atmega8

Сообщение andrewproffi (Андрей) » 10 янв 2021, 08:53

принцип в программе правильный, просто слились два канала в один. должно быть так: сработало прерывание по первому каналу, заходим в прерывание, видим что условная переменная а=0, делаем вывод что это прерывание первого канала и считываем его, далее запускаем измерение второго канала и присваиваем а=1, выходим из прерывания. При следующем прерывании видим что а=1 значит это второй канал, считываем его, запускаем измерение первого канала и а=0, выходим.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

Re: АЦП на прерываниях Atmega8

Сообщение mim (mim) » 10 янв 2021, 08:57

I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: АЦП на прерываниях Atmega8

Сообщение Yushik (Андрей) » 11 янв 2021, 08:22

Доброе утро всем МИМ спасибо за тему я её читал когда-то, но освежить мозги не помешало конечно. Вывод: с прерываниями АЦП работать можно, а где-то и нужно поскольку когда работаешь с АЦП в цикле программа будет ждать пока не закончится преобразование. Например штатный макрос АЦП флоукода забирает от 500-800 мкс. я считаю это расточительством. Но с прерываниями нужно быть осторожным они коварны особенно если их 2 и более. Снизу я привёл пример чтения из 6 каналов в общем основные положения ничем не отличаются от примера МИМ с этой viewtopic.php?f=19&t=1779&hilit=стабили%2A&start=40 страницы, единственное я оптимизировал обработчик прерывания и он выполняется на 100-200 ns быстрее. Сам обработчик выполняется примерно за 2 мкс. преобразование длиться около 100 мкс в обоих примерах, есть недостаток данные из всех каналов АЦП будут сдвинуты в сторону старшей переменной эта особенность также хорошо описана в теме постом выше. Недостатком я это не считаю свои переменные можно потом поставить в цикле куда нужно. Можно конечно позаморачиваться по феньшую, сделать операции сдвига байтов в массиве.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Yushik
Имя: Андрей
(Симферополь)
Супер разработчик
Супер разработчик
Информация о пользователе
Вернуться наверх


Вернуться в ПЕСОЧНИЦА

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

Пользователь просматривает форум: MailRu [Bot]