Нужна комплексная помощь в освоении АВРок

Обсуждаем контроллеры компании Atmel.
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

Всем доброго времени суток. В связи с одной задумкой ("детской мечты" :wink: ) сообираю одну вещь. Но не суть.
Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел. И что и как понять не могу. Пытаюсь разобраться путаюсь и все с начало.
Мой софт: Proteus и CVAvr 2.05/
Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него.
И так mega8 на кварце 16МHz
Проблема пока заключается в том что я ни как не могу настроить АЦП чтоб каждый потенциометр имел свое значение переменной (которая потом будет использоваться для длины импульса канала) и двигая потенциометры, каждая переменная меняла свое значения....
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Реклама
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: Нужна комплексная помощь в освоении АВРок

Сообщение igor-x »

видимо самое простое решение вашего вопроса: в бесконечном цикле опрашивать Ацп канал 0 и присваивать значение в переменную 0 , потом опрашивать Ацп канал 1 и присваивать его значение в переменную 1. потом в этот же цик можно добавить опрос кнопок. ну и т.д.
Реклама
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

Логично. Именно такая задумка. Чтоб управлять Входами АЦП нужно выбирать между ADMUX0 и ADMUX1?
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
Vanes
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт июл 08, 2014 14:27:38
Откуда: Славянск-на-Кубани

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Vanes »

вот пример кусок кода для Mega8
/***Настройка АЦП***/
ADCSRA |= (1 << ADEN) //Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 8
ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН
|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PC0
_delay_ms(100);

этот кусок кода получает значения со входа PORTC0 и записывает в переменную "h"
ADMUX = 0b00000000;// вход РС0 <<меняя входа можно последовательно считать все входы АЦП в разные переменные
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
h=ADC;
Изображение Истина где то рядом :-)
Реклама
Эиком - электронные компоненты и радиодетали
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

ADCSRA |= (1 << ADEN) //Включение АЦП (все ножки порта С)
|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 128 (в моем случае (16.000\128=125 КГц)
ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН (ножка AREF)
|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PC0
_delay_ms(100);

Правильно понял? И вся эт о настройка пишется в функции main?
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Реклама
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Pink-Pank »

Включение АЦП (все ножки порта С)
Вот здесь не совсем так. одновременно у Вас может быть подключена только одна нога из. Там входной мультиплексор. А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях.
Настройка может писаться в любой функции. А произведена настройка будет как только Вы эту функцию вызовете.
Делать задержку в 100 мс после настройки также необязательно.
Fucking static initialization order fiasco
Реклама
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

Вот щас не понял, то есть мне придется для каждой ноги делать настройку отдельно?
а так не пойдет?
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
}

можно объденить все в одну функцию
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Pink-Pank »

АЦП у Вас один. а вот входов у него много. Поэтому АЦП настраивается ОДИН раз, а нужный вход выбирается по мере надобности.
Поэтому пойдет, но не совсем так.
ADMUX = 0b00000000
не совсем правильно. не забываем, что в данном регистре присутствуют биты выбора источника опорного напряжения для преобразования. Если у Вас ИОН внешний (REF0 и REF1 равны 0), то можете и так перенастраивать, а вот если нет, то таким образом Вы сбросите настройку ИОНа.
Правильно будет так:

Код: Выделить всё

ADMUX &= 0b00000111 // Сбрасываем предыдущую настройку
ADMUX |= 0b00000nnn // Делаем новую
, где nnn - двоичный номер канала.
Еще советую полистать даташит на досуге - там описаны все регистры и установки номеров каналов. А еще параллельно даташиту скачайте себе Евстифеева "AVR Tiny Mega 2008 г." Только верить на слово Евстифееву не стоит - там обобщенные сведения.
Fucking static initialization order fiasco
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

ИОН внешний AREF и AVCC +5в к стабилизатору 7805. Так что смысла нет, вот взял прогнал в протеусе, и в этой строке
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
программа ушла в бесконечность...
В чем подвох???
Вложения
ypr.rar
(38.64 КБ) 244 скачивания
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение ARV »

Pink-Pank писал(а):А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях.
по-моему, так лучше не делать, да и вряд ли получится по схемотехнике.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Pink-Pank »

программа ушла в бесконечность...
В чем подвох???
Может, недостаточно долго ждали? в коде вроде все норм.
Единственное замечание - нужно сбрасывать флаг окончания измерения после его завершения - контроллер сам этого за Вас не сделает (точнее сделает, если оформите все через прерывание, а так - нет).
Fucking static initialization order fiasco
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Morroc »

edj90 писал(а):Всем доброго времени суток. В связи с одной задумкой ("детской мечты" :wink: ) сообираю одну вещь. Но не суть. Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел.
если у вас цель собрать что то, а не изучить авр - можно было бы начать с ардуины какой нибудь, там свои тараканы, но, по крайней мере, на вопросах "дергания ног", там не спотыкаешься обычно
edj90 писал(а): Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него.
ищите сразу какой нибудь подходящий радиомодуль, не выдумывайте свое "с блэк джеком и шлю..." если раньше вы это не делали - убьете довольно много времени не пойми на что, 2014й год на улице, однако
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
Vanes
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт июл 08, 2014 14:27:38
Откуда: Славянск-на-Кубани

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Vanes »

edj90 я эти куски кода расположил просто в цикле while() один за одним и собираю данные с трех разных датчиков три переменные. Инфу вывожу на ЖКИ
ADMUX = 0b00000000;// вход РС0
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
data1=ADC; запись результата в data1
Изображение Истина где то рядом :-)
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

Pink-Pank писал(а): Может, недостаточно долго ждали? в коде вроде все норм.
Думаю 1 мин хватит, даже для 1МГц, а у меня 16, но думаю в протеусе не выставил частоту проца, поэтому и не проходит деление...
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
Vanes
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт июл 08, 2014 14:27:38
Откуда: Славянск-на-Кубани

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Vanes »

В некоторых версиях протеуса есть странный глюк, не работает АЦП на восьмой Меге. У меня так было на старой версии протеуса, поставил версию 7.10 и все пошло.
Изображение Истина где то рядом :-)
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

Блин, ребят, подскажите как в протеусе выставить частоту МК, все перешарил, понять не могу....
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Pink-Pank »

Дважды щелкаете по контроллеру - там внизу прописываете нужное значение циферками вместо слова default
Fucking static initialization order fiasco
edj90
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 09, 2014 13:53:14
Откуда: Владивосток

Re: Нужна комплексная помощь в освоении АВРок

Сообщение edj90 »

спасибо разобрался, вроде все проходит, но значения data1 и data2 не меняются.....
СпойлерИзображение
Когда дойдет до ума, так и перестану задавать глупые вопросы!!!
Аватара пользователя
Vanes
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вт июл 08, 2014 14:27:38
Откуда: Славянск-на-Кубани

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Vanes »

В ПРОТЕУСЕ у микроконтроллера есть такой вывод AREF его в схеме нужно подключить к питанию или +5 вольт
Изображение Истина где то рядом :-)
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Нужна комплексная помощь в освоении АВРок

Сообщение Pink-Pank »

Напряжение на нем должно быть в пределах от 1 Вольт до Напряжения питания контроллера. Этим выводом задается напряжение относительно которого совершает измерения АЦП и ряда другой аналоговой части МК.
Fucking static initialization order fiasco
Ответить

Вернуться в «AVR»