Доброго времени суток, уважаемые форумчане! Опыт работы с микроконтроллерами у меня весьма мал, начал погружаться в эту тему, т.к. по работе нужно. Дошел до изучения работы с АЦП в 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)? Корректна ли такая настройка АЦП без настройки прерываний и т.д.?
За любую помощь буду очень благодарен! Не судите строго - я только начинающий...