Страница 3 из 3

Re: Настройка регистра ADMUX или внутренний ИОН в Flowcode

СообщениеДобавлено: 16 июн 2013, 19:31
bond
Спасибо мим! Буду вникать. :D

Re: Настройка регистра ADMUX или внутренний ИОН в Flowcode

СообщениеДобавлено: 17 июн 2013, 06:37
mim
bond писал(а):Буду вникать. :D
Хотелось бы поверить...

Есть ли возможность минимизировать правки?
Есть ли возможность передать параметр управления в Макрос FC_CAL_Enable_ADC, так, чтобы именно в самом макросе осуществились все настройки?
Включение внутреннего ИОН происходит в регистре ADMUX.
Чтобы настроить (выбрать тип опорного) Матриксы в Макрос FC_CAL_Enable_ADC передают параметр MX_UINT8 Vref, в самом тексте Макроса ReadAsByte он определен как %a_MX_ADC_VREFOP (смотри макрос [Defines] компонента АЦП ФК). Вот сейчас пришло время рассмотреть параметр определенный через знак %.
Когда в свойствах компонента вы выбираете опции опорного напряжения, то через параметр %e значение присваивается константе %a_MX_ADC_VREFOP. Значение может быть равно 0 (VDD) или 1 (VREF+). В самом макросе FC_CAL_Enable_ADC с этим значением выполняют действие Vref = 1 - Vref;.
Если 1-0, то Vref=1, если 1-1, то Vref=0. С какой целью Матриксы это сделали, я не знаю (можно было бы сразу передавать нужное значение).
Что происходит дальше?
Эта строка ADMUX = (Vref << REFS0) | (1 << ADLAR) | Channel; настраивает АЦП.
Подобная запись 1 << ADLAR говорит о том, что в бит определенный под именем ADLAR будет записана единица. Как работать с битами описывалось неоднократно, вот крайний раз
Мы видим, что настройка опорного производится только одним битом, а нам нужно занести два бита. По аналогии - подобная запись Vref << REFS0 говорит, что в бит REFS0 будет записано значение переменной Vref. На первый взгляд не хватает еще одного бита REFS1.... Почему-то многие всегда думают, что в такой записи (Vref << REFS0) переменная Vref – это 1 или 0. Но это не верно, Vref может быть любое число. На самом деле, << это операция сдвига и запись Vref << REFS0 говорит о том, что переменную Vref нужно сдвинуть на…… вот тут и кроется ответ, именно на…, на столько-то бит. Имя бита REFS0 – это условность и в заголовочном файле (iom8.h) . это имя (константа) определено как #define REFS0 6.
Заголовочный файл
Таким образом, запись ADMUX = (Vref << REFS0) выглядит как ADMUX = (Vref << 6) – сдвинуть переменную Vref на 6 бит и поместить в ADMUX. Смотрим в ДАТУ
ADMUX.jpg

и видим что REFS1 и REFS0 это две рядом расположенные единицы, и, если число 3 сдвинуть на 6 бит, то мы достигнем нужного результата ADMUX = (3 << 6) = 11000000.
Теперь о том, как передать это число в макрос FC_CAL_Enable_ADC. Если бы не действие Vref = 1 - Vref; то можно было бы в [Defines] компонента вместо %e вписать число 3, но операция вычитания накладывает свои правила. Число 3 мы можем получить, если вычесть из числа 1 число 254.
Вычитание– это сложение прямого и обратного кода.
При этом в силу вступает свойство разрядной сетки, поскольку числа только положительные, то у числа -254 после преобразования знак минус выйдет за границы сетки. Например, 254=0b11111110, -254 = 1 00000001+1=0b00000010=2
Можно представить это в следующем виде - формула (для понимания) этого действия выглядит так Vref = N – Vref, если Vref >N то Vref = N – Vref +256.
Таким образом, вместо %e нужно вписать число 254 в [Defines] и тем самым решить задачу.
Prim3.rar

опорное напряжение

СообщениеДобавлено: 19 янв 2014, 07:53
Олег
Всем привет!Правильно ли я мыслю?Мега8 внешний источник опорного напряжения 2,56В.Я подключаю +5 к AVCC? а опорное напряжение к AREF.

помогите с АЦП

СообщениеДобавлено: 07 окт 2018, 10:12
1945
Ребят ! уже замучился с измерением напряжения - хотя-бы для начала....
Подскажите что не так и где капать?
Тех.задание нужно измерять по требованию напряжение на аккумуляторе(автомобильном).
Схема обычная делитель верхнее плечо - 10 кОм, нижнее 2 кОм - на входе ацп 2.5 Вольт.
Математика обычная 2.5 Вольт делю на 256 получаю 976 мкв на 1 бит.
после умножаю на коэффициент делителя 6.
Значения плывут во всем диапазоне и не синхронно.
1. Для начала использовал внутренний источник опорного у МК атмега 16 и атмега 8 - равный 2.56 вольт меняя в кастоме строчку #define %a_MX_ADC_VREFOP 254//%e
2. Использовал AREF - тоже самое
3. использовал VDD - тоже самое

Подключение делал всё как по книжке - дроссель между VCC и AVCC между GND и VCC кондёр на 100 нф, AREF на общий через кондёр.
Питание с усб - 4.7 Вольта.

Re: помогите с АЦП

СообщениеДобавлено: 07 окт 2018, 10:18
Андрей
попробуй частоту преобразования поставить /32 или /64

Re: помогите с АЦП

СообщениеДобавлено: 07 окт 2018, 10:19
1945
Андрей да нет в 5 флоукоде - не сохраняется частота сам попробуй там просто тупо FRC у меги 8-ой
На источник и провода что только не делал и ферритовые кольца и к самому источнику на 5 см прикладывал и кондеров навесил

Re: Настройка регистра ADMUX или внутренний ИОН в Flowcode

СообщениеДобавлено: 07 окт 2018, 12:42
Андрей
надо менять файл атмеги, попробуй из архива исправленных моделей, у меня меняется. посмотри вольтметром напряжение непосредственно на ножке ацп, скачет ли на нем показания.