Уважаемые форумчане, всех с праздниками! Пытаюсь использовать АЦП AVR в режиме периодического автозапуска от таймера. Код пытается работать, опрос АЦП осуществляется, но почему-то ровно 2 раза, а не до бесконечности, как планировалось. После этого код висит в вечном цикле (проверял, тестовый код в вечном цикле корректно выполняется), а прерывание АЦП не вызывается более 2 раз.
Тестирую на ATmega16, тактовая частота 4МГц, на входе потенциометр, результат наблюдаю в программе-читалке COM-порта. По задумке должно возникать событие Compare Match B таймера 1 с частотой 2Гц (проверял, возникает c нужной частотой), которое автотриггерит АЦП, запуская прерывание АЦП по окончанию преобразования (запускается, но ровно 2 раза, если жать на Reset, то снова 2 раза и дальше тишина до Reset), в прерывании АЦП результат отправляю по UART (результат корректный, по UART доходит) Использую Microchip Studio 7.0, оптимизация отключена.
Помогите, товарищи! Сломал всю голову, скурил весь даташит, ничего не понимаю! Возможно, глаз замылился, но не настолько же! Четвертые сутки бьюсь с простеньким, вроде бы, кодом (
первый запуск АЦП происходит потому, что ты при инициализации АЦП сразу задал ADSC - старт преобразования. второй запуск, видимо, происходит по заданному триггеру. убери (1 << ADSC), должен остаться один запуск. но почему нет повторов "до бесконечности" я сказать не могу.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Если убрать (1 << ADSC) при инициализации, то запуск только один, я пробовал. Что тоже странно, ибо, как я понимаю даташит, опрос АЦП стартует только после выставления start conversion (если не брать во внимание энергосберегающие режимы). Попа какая-то, простите за физиологию.. Уже в errata полез от горя, но не нашел там поддержки(
Добавлено after 4 minutes 31 second: Пробовал выставлять ADSC <- 1 в main(), после разрешения глобальных прерываний, давал длинные задержки перед этим (даташит говорит, что модули АЦП могут инициализироваться 1 * CLKadc + какое-то там время), результат идентичен
Добавлено after 8 minutes 5 seconds: Можно, конечно, в прерывании таймера руками выставлять ADSC - режим однократного опроса, так работает, но какого x***, если есть заявленный автотриггер? Понять бы, кто тупой, я, или микрочип?! Начинаю сомневаться .. в микрочипе
после задания (1 << ADSC) АЦП стартует сразу же, не ожидая запуска по триггеру. у тебя же старт должен происходить по триггеру, без установки этого бита. в даташите на АТмега16 я не нашел, чтобы бит ADATE сам сбрасывался. но по поведению похоже, что бит сбрасывается и запуск по триггеру происходит однократно. но ты можешь попробовать в прерывании от АЦП заново установить этот бит ADATE, и посмотреть, будет ли автостарт повторяться.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
после задания (1 << ADSC) АЦП стартует сразу же, не ожидая запуска по триггеру. у тебя же старт должен происходить по триггеру, без установки этого бита. в даташите на АТмега16 я не нашел, чтобы бит ADATE сам сбрасывался. но по поведению похоже, что бит сбрасывается и запуск по триггеру происходит однократно. но ты можешь попробовать в прерывании от АЦП заново установить этот бит ADATE, и посмотреть, будет ли автостарт повторяться.
И тоже верно, я неправильно прочитал даташит, понял так, что на самое первое преобразование надо ставить ADSC, но нет
Добавлено after 2 minutes 10 seconds: Спасибо всем огромное ! Да, Старик, прочитал, независимо от автотриггера можно ставить ADSC и будет лишь внеочередной опрос, все так! При автотриггере, действительно, устанавливать ADSC не требуется Братцы, вы - мозг!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения