выше писал... откуда частота 2 мгц для ADC...
[uquote="roman.com",url="/forum/viewtopic.php?p=4242524#p4242524"]// настройки ADC
// тут мы устанавливаем режим работы ADC
void Setup_ADC() {
ADMUX = 0x61; // set ADC to read pin A5, ADLAR to 1 (left adjust)
cbi(ADCSRA, ADPS2); // set prescaler to 8 / ADC clock = 2MHz
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
}
или можно записать так (что одно и то же):
ADMUX = 0b01100001;
//ADMUX
//1... .... REFS1 - опорное напряжение - 0
//.1.. .... REFS0 - опорное напряжение - 1 - AVCC
//..1. .... ADLAR - Выравнивание результата
//...1 .... -
//.... 1... MUX3 - номер канала
//.... .1.. MUX2 - номер канала
//.... ..1. MUX1 - номер канала
//.... ...1 MUX0 - номер канала - ADC0...ADC7 (0000=ADC0)
//.1.. .... REFS0 - опорное напряжение - 1 - AVCC
// т.е. мы все измерения ADC проводим относительно напряжения питания Ардуино = 5 V.
//..1. .... ADLAR - Выравнивание результата
//ADLAR=1
// Выравнивание результата в левую сторону < (8-бит):
// ADCH // 1111 1111 - читать вторым (или первым, тогда последии 2 бит теряем)
// ADCL // 0000 0011 - читать первым
Это не совсем нормально))
я использую режим по умолчанию...
//ADLAR=0
// Выравнивание результата в правую сторону > (10-бит):
// ADCH // 0000 0011 - читать вторым
// ADCL // 1111 1111 - читать первым
Хотя ADLAR не принципиально... работать будет и так и так)) но я лучше буду использовать стандартные настройки ADLAR=0))
// MUX3...MUX0 - номер канала:
// 0000 - ADC0
// 0001 - ADC1
// .................
// 0111 - ADC7
Ардуина использует канал ADC номер 1. Что соответствует пину номер 24...
мега8.jpg
мега328.jpg
далее устанавливаем частоту преобразования ADC для Ардуины...
пишем регистр ADCSRA...
//ADCSRA
//1... .... ADEN - 1- вкл ADC. (0-ADC не потребляет мощности)
//.1.. .... ADSC - 1- Старт. При завершении преобразования сбрасывается аппаратно.
//..1. .... ADFR - 1- режим Непрерывного Преобразования.
//...1 .... ADIF - 1- флаг завершения преобразования
-сброс программно.
-для прерывания очищается аппаратно.
//.... 1... ADIE - 1- Разрешение прерывания
//.... .1.. ADPS2 - предделитель
//.... ..1. ADPS1 - предделитель
//.... ...1 ADPS0 - предделитель
для Ардуино написано так :
cbi(ADCSRA, ADPS2); // set prescaler to 8 / ADC clock = 2MHz
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
по человечески это будет так:
cbi(ADCSRA, ADPS2); // cbi - сбросить бит в регистре ADCSRA
sbi(ADCSRA, ADPS1); // sbi - установить бит в регистре ADCSRA
sbi(ADCSRA, ADPS0); // sbi - установить бит в регистре ADCSRA
или можно записать так (что одно и то же):
ADCSRA = 0b00000011;
предделитель ADC:
ADPS2 -ADPS1 -ADPS0
----------
// 000: 1 МГц/2=500.000 Hz
// 001: 1 МГц/2=500.000 Hz
// 010: 1 МГц/4=250.000 Hz
// 011: 1 МГц/8=125.000 Hz
// 100: 1 МГц/16=62.500 Hz
// 101: 1 МГц/32=31.250 Hz
// 110: 1 МГц/64=15.625 Hz
// 111: 1 МГц/128=7.812,5 Hz
----------
предделитель ADC = 8
тактовая частота Ардуино 16 мгц.
значит... частота преобразования ADC в Ардуино = 16 мгц / 8 = 2 мгц.[/uquote]
если бы писал бы всё по человечески... то не было бы вопросов... откуда частота преобразования ADC в Ардуино = 16 мгц / 8 = 2 мгц.