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

AVR версия программы

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

Сообщение bond (bond) » 16 июн 2013, 19:31

Спасибо мим! Буду вникать. :D
Ник: bond
Имя: bond
Заинтересованный
Заинтересованный
Информация о пользователе

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

Сообщение mim (mim) » 17 июн 2013, 06:37

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
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

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

Сообщение Don7272 (Олег) » 19 янв 2014, 07:53

Всем привет!Правильно ли я мыслю?Мега8 внешний источник опорного напряжения 2,56В.Я подключаю +5 к AVCC? а опорное напряжение к AREF.
Ник: Don7272
Имя: Олег
(Владивосток)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

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

Сообщение 1945 (1945) » 07 окт 2018, 10:12

Ребят ! уже замучился с измерением напряжения - хотя-бы для начала....
Подскажите что не так и где капать?
Тех.задание нужно измерять по требованию напряжение на аккумуляторе(автомобильном).
Схема обычная делитель верхнее плечо - 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 Вольта.
У вас нет доступа для просмотра вложений в этом сообщении.
Ник: 1945
Имя: 1945
(Тольятти)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

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

Сообщение andrewproffi (Андрей) » 07 окт 2018, 10:18

попробуй частоту преобразования поставить /32 или /64
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

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

Сообщение 1945 (1945) » 07 окт 2018, 10:19

Андрей да нет в 5 флоукоде - не сохраняется частота сам попробуй там просто тупо FRC у меги 8-ой
На источник и провода что только не делал и ферритовые кольца и к самому источнику на 5 см прикладывал и кондеров навесил
Ник: 1945
Имя: 1945
(Тольятти)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

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

Сообщение andrewproffi (Андрей) » 07 окт 2018, 12:42

надо менять файл атмеги, попробуй из архива исправленных моделей, у меня меняется. посмотри вольтметром напряжение непосредственно на ножке ацп, скачет ли на нем показания.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

Пред.

Вернуться в Flowcode AVR

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей