Например TDA7294

Форум РадиоКот :: Просмотр темы - Нужна комплексная помощь в освоении АВРок
Форум РадиоКот
https://radiokot.ru/forum/

Нужна комплексная помощь в освоении АВРок
https://radiokot.ru/forum/viewtopic.php?f=57&t=106140
Страница 1 из 3

Автор:  edj90 [ Вт июл 22, 2014 06:58:23 ]
Заголовок сообщения:  Нужна комплексная помощь в освоении АВРок

Всем доброго времени суток. В связи с одной задумкой ("детской мечты" :wink: ) сообираю одну вещь. Но не суть.
Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел. И что и как понять не могу. Пытаюсь разобраться путаюсь и все с начало.
Мой софт: 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 // Сбрасываем предыдущую настройку
ADMUX |= 0b00000nnn // Делаем новую
, где nnn - двоичный номер канала.
Еще советую полистать даташит на досуге - там описаны все регистры и установки номеров каналов. А еще параллельно даташиту скачайте себе Евстифеева "AVR Tiny Mega 2008 г." Только верить на слово Евстифееву не стоит - там обобщенные сведения.

Автор:  edj90 [ Вт июл 22, 2014 08:45:10 ]
Заголовок сообщения:  Re: Нужна комплексная помощь в освоении АВРок

ИОН внешний AREF и AVCC +5в к стабилизатору 7805. Так что смысла нет, вот взял прогнал в протеусе, и в этой строке
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
программа ушла в бесконечность...
В чем подвох???

Вложения:
ypr.rar [38.64 KiB]
Скачиваний: 234

Автор:  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 писал(а):
Всем доброго времени суток. В связи с одной задумкой ("детской мечты" :wink: ) сообираю одну вещь. Но не суть. Короче говоря начал изучать АВРы и столкнулся с кучей не понятных и необъяснимых дел.

если у вас цель собрать что то, а не изучить авр - можно было бы начать с ардуины какой нибудь, там свои тараканы, но, по крайней мере, на вопросах "дергания ног", там не спотыкаешься обычно

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/