Перейти к содержанию

Adc Atmega8


Dronya

Рекомендуемые сообщения

МК ATmega8, задействован только один канал.

При непрерывном преобразовании нужно ли разрешать прерывания АЦП?

И ещё такой вопрос. Можно ли в режиме одиночного преобразования запускать АЦП (ADSC=1) один раз в 1 мсек, например в прерываниях таймера ТС0. Сделать 16 измерений, все 16 результатов просуммировать и сумму сдвинуть вправо на 4 разряда. Такими действиями можно убрать колебания 2 мл разрядов АЦП? И ещё: нужно ли потом результат обрабатывать по алгоритму скользящего среднего?

Может туманно написал, так извините

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Как работать с АЦП, с прерываниями или по опросу, зависит от Ваших идей по алгоритму. Могу только сказать одно.

Построение системы РЕАЛЬНОГО ВРЕМЕНИ с программным опросом периферии - это не просто дурной тон, а форменное БЕЗОБРАЗИЕ... Ну кнопки - еще куда ни шло... но АЦП... :(:(:(

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Сделать 16 измерений, все 16 результатов просуммировать и сумму сдвинуть вправо на 4 разряда.

т.е. сумма 16 чисел делиться на 16, результат среднее арифметическое. округлённое ...

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

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

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Позволю себе не согласиться с уважаемым my504.

И вот почему.

Если у человека стоит задача просто мерять и посчитать, то какой смысл мудрить с алгоритмом, когда все просто решается "в лоб"?

Хороший, дурной тон...

Если решение приемлемо для данной конкретной задачи и обеспечивает выполнение функций возлагаемых на устройство - то это уже можно считать хорошим тоном. Частенько мы забываем, что на МК делается устройство которое выполняет вполне определенные операции. И только-то.

Это как если бы на шиномонтаже где, например, мастер с балонником мог бы просто открутить гайки и снять его, тот же мастер начал сначала высчитывать оптимальную траекторию движения до колеса и от него , в какую позу лучше встать чтоб и откручивать было удобно и чтоб проходящие мимо увидели и оценили его новые штаны, сверкающий балонник, и как красиво он откручивает колесо... :rolleyes:

А здесь... если нет других задач, то какая разница чем будет заниматься ядро в перерывах между измерениями?

Есть конечно вариант со спящим режимом " ADC Noise Reduction " при работе АЦП на измерение. Что стоит задачей? Измерение?

Вот пжлста! И не надо извращаться... :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

В свою очередь возражу уважаемому alts .

Если человек задает вопросы подобного уровня, это означает, что он только начинает работать в этой области.

ПОЭТОМУ.

Очень желательно придерживаться определенных принципов проектирования, иначе внешне решенная задача может оказаться ТУПИКОМ. Из которого выход: ВСЕ ПЕРЕДЕЛАТЬ.

Вот Вы говорите:

А здесь... если нет других задач, то какая разница чем будет заниматься ядро в перерывах между измерениями?

А автор отдает себе отчет в том, что при большинстве потоковых преобразований необходимо выдерживать интервал между отсчетами с высокой точностью. Даже система прерываний порой имеет переменную латентность.

Кроме того есть общая эстетика алгоритма...

Но мое мнение в предыдущем посте было, конечно, условно:

Как работать с АЦП, с прерываниями или по опросу, зависит от Ваших идей по алгоритму.

Я не могу знать задач автора и методов, которыми он их решает... Конечно, короткий ответ автору без желания что либо прояснять: НЕ ОБЯЗАТЕЛЬНО.

Просто мой личный опыт, пусть и скромный, на мой взгляд, говорит мне о необходимости В ЛЮБОМ СЛУЧАЕ создавать независимые от остальной программы программные модули. Во первых - меньше коллизий, во вторых - решения получаются тиражируемые в других разработках, в третьих - легко читается алгоритм...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Да в принципе согласен... :rolleyes:

Просто я иногда не понимаю тех кто даже простую линию из пункта А в пункт Б без "подтанцовки" провести не может!

Конечно человек только начинает, и путь его к оптимизации алгоритма еще долого и тернист будет. :rolleyes:

Особенно с прерываниями, а если они еще и асинхронно с другими процессами работают... ;)

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Вот пример для ATmega8535 АЦП 8-бит

.include "c:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"

;=========================================================

.MACRO outi

ldi r16,@1

out @0,r16

.ENDMACRO

.org 0x00

rjmp RESET

.org ADCCaddr

;=========================================================

ADC1:

in r16,ADCH ;в r16 результат преобразования АЦП

reti

;=========================================================

RESET: wdr ;сброс сторожевого таймера

outi WDTCR,0x0A ;Watchdog enable, 64mS

outi SPH,HIGH(RAMEND) ;определение начала стека в ОЗУ

outi SPL,LOW(RAMEND)

outi PORTA,0x00 ;переключение PA на ввод

outi DDRA,0x00

sei ;разрешение прерываний

outi ADMUX,0x27 ;переключаем мультиплексор на PA7

outi ADCSRA,0xEF ;конфигурация АЦП, пуск АЦП

;=========================================================

Loop: wdr ;сброс сторожевого таймера

rjmp Loop

Если непонятны настройки читай datasheet.

Проверено в железе.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Может подключить что-нибудь надо. Может написать свою функцию преобразования шестнадцатеричной строки в инт.
    • Да ну нафиг! Это как "раз поехали на рыбалку, а водку забыли...."
    • Похоже вас угораздило на латералы попасть. Они сами себя стабилизируют и никакой дополнительной стабилизации им не нужно. У меня двухкиловаттные Крафты так на металлических Эксиконах работают даже без "эмиттерных" резисторов. Тупо впараллель.
    • @korsaj Попробовал записать код в разных вариантах предложенных тобой. Первый вариант вообще отказался работать. Заработал второй вариант на приём. Теперь уже хотя бы есть полноценный приём. char i = 0; if (rx_buf[i] == 'M'){ i++; if (rx_buf[i] == '1') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран номер текущего трека LED_1_ON(); LED_2_OFF(); send_UART('M'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == '2') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран количество треков LED_1_OFF(); LED_2_ON(); send_UART('M'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == 'T') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран общее время трека LED_1_ON(); LED_2_ON(); send_UART('M'); send_UART('T'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } else if (rx_buf[i] == 'K') { //unsigned int n = getDecFromHexStr(rx_buf, i+2); //Выводим на экран текущее время трека LED_1_OFF(); LED_2_OFF(); send_UART('M'); send_UART('K'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; } } Но однако есть ещё некоторые вещи которые нужно подкорректировать. Пока я просто разбираю UART поэтому на терминал вывожу так сказать ответ ну и просто видеть потому как индикатора к микре не подключено пока что. Однако такой вариант с ответкой нужен будет мне и для другого проекта где UART лучше всего подойдёт. Это я уже смотрю на будущее. Но тут тоже когда приходит комманда по  UART микроконтроллер отправляет ответ, но он начинает постоянно спамится. Нужно как то сделать чтоб этого не происходило. Я же в свою очередь пробовать сбросить flags = 0;, но это никак не помогло. Может чего подскажешь тут понятно что нужно как то будет обнулить данные чтобы выйти из этого условия программы. Есть вот такая проблемка. И ещё есть одна проблема с строкой  unsigned int n = getDecFromHexStr(rx_buf, i+2); Не спроста я её отключил в коде с помощью комментария. А тут проблема в том что студия не может опзнать этот код. Возможно нужно что подключить из встроенных библиотек самой студии.
    • Зачем закладываться на максимальный ток стабилитрона? Поставьте по два двухкилоомных последовательно или возможно 3-5 килоома что то есть.
    • Здравствуйте. В эту магнитолу захотелось установить модуль блютуз. Вроде бы проблем нет, да? Привод CD выкинут как рудимент,- на нём драйвер сгорел (не хорошие инженеры, на огромной линейке моделей подложили бяку-серво двигатель и на нём платка переходник для распайки на плату обработки, только вот двигатель болтается в пластике посадочном убивая пайку делая плохое самочувствие драйверу-привода-лазера))). Вот. Проблемы начинаются следующие. Тюнер имеет мозги аудиопроцессору по цифре,-отпадает. Разъёма чейнджера нет но есть вся разводка без обвязки,-восстановление мелочи (стаб-рез) и эмуляция подключенного чейнджера не помогает, странно Kasuga Radio Co. Ltd. (это ирония про 1946 год) сэкономила на программном обеспечении . Ага. Подключится на вход УМЗЧ-пошло и глупо. Вопрос. Есть варианты подключить? kenwood_kdc-4590.pdf
    • А здесь всё о том как и чем делать ...
×
×
  • Создать...