roboforum.ru

Технический форум по робототехнике.

Помогите настроить АЦП в ATMEGA16

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Помогите настроить АЦП в ATMEGA16

Сообщение Vladimir Semenov » 09 дек 2012, 20:19

Доброго времени суток, уважаемые форумчане! Опыт работы с микроконтроллерами у меня весьма мал, начал погружаться в эту тему, т.к. по работе нужно. Дошел до изучения работы с АЦП в ATMEGA 16. Сейчас у меня стоит задача - нужно сделать так, чтобы АЦП с как можно большей частотой в реальном времени оцифровывал входной сигнал и сразу же передавал его на один из портов (а дальше там уже ЦАП). Получается этакий повторитель - выходной сигнал равен входному.
Программы пишу на Си в CodeVisionAVR. Вот текст программы:

// Программа для работы с встроенным АЦП микроконтроллера ATmega16.
// Микроконтроллер оцифровывает входное напряжение и подает его на выход,
// где подразумевается наличие ЦАП - таким образом реализуется повторение
// входного сигнала на выходе.

// Используемые библиотеки:
#include <mega16.h>

// Начало программы
void main(void)
{
// Настраиваем порты:
DDRA = 0b00000000; // Все выводы порта А настраиваем на входы (0 - вход, 1 - выход)
PORTA = 0b11111111; // Подключаем внутренние подтягивающие резисторы к выводам порта A.


DDRC=0b11111111; // Все выводы порта C настраиваем как выходы (0 - вход, 1 - выход)
PORTC=0b00000000; // Обнуляем порт С до начала выполнения программы (на всякий случай)

// Настраиваем встроенный АЦП:
ADCSRA = 0b11100100; // включить АЦП, запустить преобразование, непрерывный режим работы, частота считывания 750kHz (12MHz/16)
ADMUX = 0b01100000; /* источник опорного напряжения - источник питания МК - 5 В, выравнивание слева (используем
только 8 бит регистра ADCH), входной канал ADC0 */
SFIOR = 0b00000000;

//Основная программа
while(1)
{
PORTC=ADCH; //вывести в порт С значение, полученное в результате считывания

}
}

программа не работает (но компилируется нормально)

Вопросы такие: Правильно ли я настроил АЦП? Нужно ли перед настройкой АЦП настраивать порт А как вход ( т.к. ADC0 соответствует входу PA0)? Корректна ли такая настройка АЦП без настройки прерываний и т.д.?

За любую помощь буду очень благодарен! Не судите строго - я только начинающий...
Vladimir Semenov
 
Сообщения: 2
Зарегистрирован: 09 дек 2012, 20:12

Re: Помогите настроить АЦП в ATMEGA16

Сообщение vitalik » 13 дек 2012, 20:36

Откючите подтягивающие резисторы на входе АЦП.
Вот часть моего древнего кода однопроводной клавиатуры:

ADCSRA=0b10000011;//Режим одиночного вимірювання; Fclk\8; 10розрядів
ADMUX =0b01000111;//ИОН=AVCC,вхід АЦП-7
ADCSRA |= 0x40; //початок вимірювання
while (ADCSRA & 0x40); //очікування кінця вимірювання
napr = ADCL; //результат=молодший байт ADCL
napr += ((int)(ADCH & 0x03) << 8 ); //результат+старший байт ADCH
napr=napr*VREF/1024; //переведення значення в мВ

Если вы работаете с PORTC отключите в фьюзах JTAG, точно не помню какие,но некоторые биты не будут работать при включенном JTAG, а он с "завода" включен по умолчанию.
Аватара пользователя
vitalik
 
Сообщения: 7
Зарегистрирован: 27 апр 2009, 22:13
Откуда: г.Монте Карло


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0