Всем доброго времени суток. В связи с одной задумкой ("детской мечты" ) сообираю одну вещь. Но не суть. Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел. И что и как понять не могу. Пытаюсь разобраться путаюсь и все с начало. Мой софт: Proteus и CVAvr 2.05/ Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него. И так mega8 на кварце 16МHz Проблема пока заключается в том что я ни как не могу настроить АЦП чтоб каждый потенциометр имел свое значение переменной (которая потом будет использоваться для длины импульса канала) и двигая потенциометры, каждая переменная меняла свое значения....
_________________ Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
видимо самое простое решение вашего вопроса: в бесконечном цикле опрашивать Ацп канал 0 и присваивать значение в переменную 0 , потом опрашивать Ацп канал 1 и присваивать его значение в переменную 1. потом в этот же цик можно добавить опрос кнопок. ну и т.д.
этот кусок кода получает значения со входа PORTC0 и записывает в переменную "h" ADMUX = 0b00000000;// вход РС0 <<меняя входа можно последовательно считать все входы АЦП в разные переменные ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования h=ADC;
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Вот здесь не совсем так. одновременно у Вас может быть подключена только одна нога из. Там входной мультиплексор. А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях. Настройка может писаться в любой функции. А произведена настройка будет как только Вы эту функцию вызовете. Делать задержку в 100 мс после настройки также необязательно.
_________________ Fucking static initialization order fiasco
Вот щас не понял, то есть мне придется для каждой ноги делать настройку отдельно? а так не пойдет? ADCSRA |= (1 << ADEN) //Включение АЦП (все ножки порта С) |(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 128 (в моем случае (16.000\128=125 КГц) ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН (ножка AREF)
void opros1 (void) { ADMUX = 0b00000000;// вход РС0 ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования data1=ADC; запись результата в data1 } void opros2 (void) { ADMUX = 0b00000001;// вход РС1 ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования data2=ADC; запись результата в data2 }
можно объденить все в одну функцию
_________________ Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
АЦП у Вас один. а вот входов у него много. Поэтому АЦП настраивается ОДИН раз, а нужный вход выбирается по мере надобности. Поэтому пойдет, но не совсем так.
Цитата:
ADMUX = 0b00000000
не совсем правильно. не забываем, что в данном регистре присутствуют биты выбора источника опорного напряжения для преобразования. Если у Вас ИОН внешний (REF0 и REF1 равны 0), то можете и так перенастраивать, а вот если нет, то таким образом Вы сбросите настройку ИОНа. Правильно будет так:
, где nnn - двоичный номер канала. Еще советую полистать даташит на досуге - там описаны все регистры и установки номеров каналов. А еще параллельно даташиту скачайте себе Евстифеева "AVR Tiny Mega 2008 г." Только верить на слово Евстифееву не стоит - там обобщенные сведения.
_________________ Fucking static initialization order fiasco
ИОН внешний AREF и AVCC +5в к стабилизатору 7805. Так что смысла нет, вот взял прогнал в протеусе, и в этой строке while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования программа ушла в бесконечность... В чем подвох???
А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях.
по-моему, так лучше не делать, да и вряд ли получится по схемотехнике.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Может, недостаточно долго ждали? в коде вроде все норм. Единственное замечание - нужно сбрасывать флаг окончания измерения после его завершения - контроллер сам этого за Вас не сделает (точнее сделает, если оформите все через прерывание, а так - нет).
_________________ Fucking static initialization order fiasco
Всем доброго времени суток. В связи с одной задумкой ("детской мечты" ) сообираю одну вещь. Но не суть. Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел.
если у вас цель собрать что то, а не изучить авр - можно было бы начать с ардуины какой нибудь, там свои тараканы, но, по крайней мере, на вопросах "дергания ног", там не спотыкаешься обычно
edj90 писал(а):
Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него.
ищите сразу какой нибудь подходящий радиомодуль, не выдумывайте свое "с блэк джеком и шлю..." если раньше вы это не делали - убьете довольно много времени не пойми на что, 2014й год на улице, однако
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
В некоторых версиях протеуса есть странный глюк, не работает АЦП на восьмой Меге. У меня так было на старой версии протеуса, поставил версию 7.10 и все пошло.
Напряжение на нем должно быть в пределах от 1 Вольт до Напряжения питания контроллера. Этим выводом задается напряжение относительно которого совершает измерения АЦП и ряда другой аналоговой части МК.
_________________ Fucking static initialization order fiasco
Сейчас этот форум просматривают: shaaimars и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения