COKPOWEHEU, конечно протеус далек от оригинала, и у меня нет двухлучевого осциллографа, что бы проверить на реальном чипе. Но судя по протеусу, мега168, у вас дело обстоит так: в прерывание он попадает либо при начале 1, либо при начале 0, далее запускается преобразование АЦП. Следовательно ваш алгоритм ни чем не отличается от моего предложенного ранее.
slav0n, при режиме АЦП Free Running, насколько я понимаю, преобразование идет постоянно. Теперь вопрос: у мк действительно 16 битный регистр ADCW есть? Или это два 8 битных регистра? и что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт? Ни возникнет конфликта зипись-чтение и искажение результата?
Теперь вопрос: у мк действительно 16 битный регистр ADCW есть? Или это два 8 битных регистра? и что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт? Ни возникнет конфликта зипись-чтение и искажение результата?
там 2 8-битных регистра (видно в даташите) - старший и младший. сколько тратится на запись, хрен знает, но прерывание возникнет, когда будет готов результат. чтение - 2 такта. младшего регистра и старшего. конфликта не возникнет. результат обновится только после окончания преобразования (я так думаю).
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
в прерывание он попадает либо при начале 1, либо при начале 0
Не в начале, а в конце, константа ADC_TIME_TIMER как раз отвечает за то, на сколько тактов старт АЦП возникнет раньше импульса ШИМ. slav0n, повторяю: аппаратный ШИМ на канале А. С первого раза непонятно было?
Цитата:
Следовательно ваш алгоритм ни чем не отличается от моего предложенного ранее.
Поправьте ссылку, а то сейчас она ведет на заготовку кода с cvavr'ным мусором.
Цитата:
что бы записать АЦП в них потребуется более чем 1 такт? а вам считать из него белее чем 1 такт? Ни возникнет конфликта зипись-чтение и искажение результата?
Очередное преобразование начинается после чтения ADCH. То есть если нам нужна вся 10-битная точность, читаем сначала ADCL, потом ADCH (в Си можно читать сразу 16-битный ADC, он сам разберется). Если достаточно 8-битной, читаем только ADCH.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Очередное преобразование начинается после чтения ADCH. То есть если нам нужна вся 10-битная точность, читаем сначала ADCL, потом ADCH (в Си можно читать сразу 16-битный ADC, он сам разберется). Если достаточно 8-битной, читаем только ADCH.
Вы ошибаетесь. Запуск преобразования не связан с чтением/не чтением значений регистров данных АЦП. Если АЦП настроен в режиме непрерывного преобразования, то новое цикл преобразования начинается сразу же после записи результата в регистры данных АЦП. Точнее новый запуск произойдёт не ранее чем через один такт после окончания текущего преобразования. Что касается чтения регистров данных АЦП, тут Вы правы. Действительно регистры данных АЦП необходимо читать в определённой последовательности – вначале младший (ADCL), затем старший (ADCН). Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян. Таким образом запуск очередного преобразования не связано с чтением регистров данных АЦП.
Это на каком мк? За что отвечает следующая команда?
На каком МК работает вычитание? Да на любом. Следующая команда (запись в ADCSRA бита ADCS и прочих) отвечает за запуск очередного преобразования.
Цитата:
И ссылка правильно ведет, единственный генератор начального кода, только код малость неправильный.
Но вы-то писали про алгоритм измерения, а не про нечитаемые продукты cvavr'а.
Цитата:
Вы ошибаетесь. Запуск преобразования не связан с чтением/не чтением значений регистров данных АЦП.
Да. Сейчас перечитал:
Цитата:
When ADCL is read, the ADC Data Register is not updated until ADCH is read
То есть при чтении ADCL регистровая пара блокируется до момента чтения ADCH. Кстати, у некоторых контроллеров можно настроить запуск АЦП по сравнению таймера аппаратно (ADTS=0b101). Так что если решать исходную задачу (только напряжение по паузам) можно сделать без прерываний таймеров.
ну чего ты докопался до этого таймера? Выше, двумя тремя сообщениями, я тебе дал код, ISR(ADC_vect) срабатывает когда преобразование завершено, именно там где тебе надо, до следующей записи в ADCW регистр у тебе примерно 100 +- мкс. Идеальная синхронизация. Лучше не сделаешь. Лучше бы код помог оптимизировать.
я показал не синхронизацию (которая при достаточно длинном периоде шим и нафиг здесь не нужна), а способ фильтрации помех средним арифметическим. тебе как раз для реального устройства
Цифровая фильтрация область малоизученная и, стандартный фильтр зачастую малопригоден. Например, если известно заранее когда будет помеха, логичнее всего не пускать ее в фильтр даже очень высокого порядка а, элементарно бланкировать. Такой способ наиболее выигрышный и, самоочевиден. Избавиться от такой сильной помехи медианой 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)
Ну где вы вдели такое что приложили, у вас там по всей видимости конденсатор работает на разряд в вашей осциллограмме, поэтому и спад идет. Вот осциллограмма снятая с куска провода ЗУ заряд идет частотой 1кГц, заполнение 40% , режим самописец в ослике. Все правильно сказал kote52, именно так и происходить.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения