Форум РадиоКот https://radiokot.ru/forum/ |
|
Нужна комплексная помощь в освоении АВРок https://radiokot.ru/forum/viewtopic.php?f=57&t=106140 |
Страница 1 из 3 |
Автор: | edj90 [ Вт июл 22, 2014 06:58:23 ] |
Заголовок сообщения: | Нужна комплексная помощь в освоении АВРок |
Всем доброго времени суток. В связи с одной задумкой ("детской мечты" ![]() Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел. И что и как понять не могу. Пытаюсь разобраться путаюсь и все с начало. Мой софт: Proteus и CVAvr 2.05/ Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него. И так mega8 на кварце 16МHz Проблема пока заключается в том что я ни как не могу настроить АЦП чтоб каждый потенциометр имел свое значение переменной (которая потом будет использоваться для длины импульса канала) и двигая потенциометры, каждая переменная меняла свое значения.... |
Автор: | igor-x [ Вт июл 22, 2014 07:09:08 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
видимо самое простое решение вашего вопроса: в бесконечном цикле опрашивать Ацп канал 0 и присваивать значение в переменную 0 , потом опрашивать Ацп канал 1 и присваивать его значение в переменную 1. потом в этот же цик можно добавить опрос кнопок. ну и т.д. |
Автор: | edj90 [ Вт июл 22, 2014 07:14:27 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Логично. Именно такая задумка. Чтоб управлять Входами АЦП нужно выбирать между ADMUX0 и ADMUX1? |
Автор: | Vanes [ Вт июл 22, 2014 07:22:40 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
вот пример кусок кода для 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 [ Вт июл 22, 2014 07:36:35 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
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 [ Вт июл 22, 2014 07:40:02 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Цитата: Включение АЦП (все ножки порта С) Вот здесь не совсем так. одновременно у Вас может быть подключена только одна нога из. Там входной мультиплексор. А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях. Настройка может писаться в любой функции. А произведена настройка будет как только Вы эту функцию вызовете. Делать задержку в 100 мс после настройки также необязательно. |
Автор: | edj90 [ Вт июл 22, 2014 07:56:20 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Вот щас не понял, то есть мне придется для каждой ноги делать настройку отдельно? а так не пойдет? 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 [ Вт июл 22, 2014 08:10:55 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
АЦП у Вас один. а вот входов у него много. Поэтому АЦП настраивается ОДИН раз, а нужный вход выбирается по мере надобности. Поэтому пойдет, но не совсем так. Цитата: ADMUX = 0b00000000 не совсем правильно. не забываем, что в данном регистре присутствуют биты выбора источника опорного напряжения для преобразования. Если у Вас ИОН внешний (REF0 и REF1 равны 0), то можете и так перенастраивать, а вот если нет, то таким образом Вы сбросите настройку ИОНа.Правильно будет так: Код: ADMUX &= 0b00000111 // Сбрасываем предыдущую настройку , где nnn - двоичный номер канала.ADMUX |= 0b00000nnn // Делаем новую Еще советую полистать даташит на досуге - там описаны все регистры и установки номеров каналов. А еще параллельно даташиту скачайте себе Евстифеева "AVR Tiny Mega 2008 г." Только верить на слово Евстифееву не стоит - там обобщенные сведения. |
Автор: | edj90 [ Вт июл 22, 2014 08:45:10 ] | ||
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок | ||
ИОН внешний AREF и AVCC +5в к стабилизатору 7805. Так что смысла нет, вот взял прогнал в протеусе, и в этой строке while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования программа ушла в бесконечность... В чем подвох???
|
Автор: | ARV [ Вт июл 22, 2014 09:08:53 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Pink-Pank писал(а): А выбор ноги как раз и задается битами (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3). Остальные ноги, пока опрашиваете данную, могут быть задействованы программно в других целях. по-моему, так лучше не делать, да и вряд ли получится по схемотехнике.
|
Автор: | Pink-Pank [ Вт июл 22, 2014 10:03:52 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Цитата: программа ушла в бесконечность... В чем подвох??? Может, недостаточно долго ждали? в коде вроде все норм. Единственное замечание - нужно сбрасывать флаг окончания измерения после его завершения - контроллер сам этого за Вас не сделает (точнее сделает, если оформите все через прерывание, а так - нет). |
Автор: | Morroc [ Вт июл 22, 2014 10:17:16 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
edj90 писал(а): Всем доброго времени суток. В связи с одной задумкой ("детской мечты" ![]() если у вас цель собрать что то, а не изучить авр - можно было бы начать с ардуины какой нибудь, там свои тараканы, но, по крайней мере, на вопросах "дергания ног", там не спотыкаешься обычно edj90 писал(а): Собрать пытаюсь радиоуправление. (2 пропорциональных и 8 дискретных команд) Но пока не до него. ищите сразу какой нибудь подходящий радиомодуль, не выдумывайте свое "с блэк джеком и шлю..." если раньше вы это не делали - убьете довольно много времени не пойми на что, 2014й год на улице, однако |
Автор: | Vanes [ Вт июл 22, 2014 14:04:46 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
edj90 я эти куски кода расположил просто в цикле while() один за одним и собираю данные с трех разных датчиков три переменные. Инфу вывожу на ЖКИ Цитата: ADMUX = 0b00000000;// вход РС0
ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования data1=ADC; запись результата в data1 |
Автор: | edj90 [ Ср июл 23, 2014 05:49:42 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Pink-Pank писал(а): Может, недостаточно долго ждали? в коде вроде все норм. Думаю 1 мин хватит, даже для 1МГц, а у меня 16, но думаю в протеусе не выставил частоту проца, поэтому и не проходит деление... |
Автор: | Vanes [ Ср июл 23, 2014 06:46:01 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
В некоторых версиях протеуса есть странный глюк, не работает АЦП на восьмой Меге. У меня так было на старой версии протеуса, поставил версию 7.10 и все пошло. |
Автор: | edj90 [ Пт июл 25, 2014 08:10:45 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Блин, ребят, подскажите как в протеусе выставить частоту МК, все перешарил, понять не могу.... |
Автор: | Pink-Pank [ Пт июл 25, 2014 08:38:09 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Дважды щелкаете по контроллеру - там внизу прописываете нужное значение циферками вместо слова default |
Автор: | edj90 [ Ср июл 30, 2014 01:38:39 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
спасибо разобрался, вроде все проходит, но значения data1 и data2 не меняются..... Спойлер![]() |
Автор: | Vanes [ Ср июл 30, 2014 07:12:56 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
В ПРОТЕУСЕ у микроконтроллера есть такой вывод AREF его в схеме нужно подключить к питанию или +5 вольт |
Автор: | Pink-Pank [ Ср июл 30, 2014 09:45:40 ] |
Заголовок сообщения: | Re: Нужна комплексная помощь в освоении АВРок |
Напряжение на нем должно быть в пределах от 1 Вольт до Напряжения питания контроллера. Этим выводом задается напряжение относительно которого совершает измерения АЦП и ряда другой аналоговой части МК. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |