"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

четверг, 11 марта 2021 г.

Настройка АЦП

Для работы с аналоговыми сигналами на вход требуется настроить АЦП

Настройка АЦП сводится к следующим действиям:
1. Необходимо настроить регистр ADMUX (Регистр настройки мультиплексора АЦП).

2. Настройки регистра ADCSRA (Регистр статуса и контроля А)

3. При необходимости, настройке DCSRB (Регистр статуса и контроля B)

3. Чтение результата преобразования

А теперь приступим к самому интересному:

И начинаем запуск преобразования. В регистре ADCSRA, битом ADSC необходимо запустить преобразование и выполнять его,

пока не будет выставлен бит о свидетельствующий о том, что преобразование завершено (бит ADIF).

Данной строчкой (ADCSRA & (1 << ADIF) == 0 происходит проверка и одновременное сбрасывание флага об окончании преобразования.

Далее считываем полученное значение, как видно использовать АЦП не так уж и сложно!


unsigned int data;

int main()
Serial.begin(9600);
DDRC = 0x00; // назначает выводы с 14 по 19 входными
PORTC = 0x00; 

ADCSRA |= (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0);

ADMUX |= (0 << REFS1)|(1 << REFS0)|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); 


L0:;
ADCSRA |= (1 << ADSC);  // Начинаем преобразование
L1:; 
if((ADCSRA & (1 << ADIF)) == 0) goto L1;  
// пока не будет выставлен флаг об окончании преобразования
data = (ADCL|ADCH << 8); // Считываем полученное значение
Serial.println(data);
goto L9; 
}