[uquote="olegue",url="/forum/viewtopic.php?p=4246306#p4246306"]я бы его проверил,но так как он мне не совсем понятен[/uquote]
тут даже мне не понятен... а ардуине и подавно))
начиная на ещё стадии инициализации ADC...
void Setup_ADC() {
// ADC initialization
DIDR0=(0<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADMUX= (1<<MUX0) | ADC_VREF_TYPE;
ADCSRA=(0<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); // 500kHz
sampleRate = 19600; bytesPerSec = 19600;
//ADCSRA=(0<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); // 250kHz
//sampleRate = 9800; bytesPerSec = 9800;
//ADCSRA=(0<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // 125kHz
//sampleRate = 4900; bytesPerSec = 4900;
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
}
во первых есть стандартные настройки sampleRate = 8000,11025,16000,22050,44100
нафига делать не стандартные... не ясно)) наверное чтобы невозможно было послушать на обычном плеере))
во вторых зачем вот это
ADCSRA=(0<<ADEN) | (1<<ADSC) | (1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
почему не записать просто
ADCSRA=0x6D;
в третьих... нафига писать регистры которые и так сброшены в 0
DIDR0=(0<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
в четвёртых... этот код будет работать только на ардуине c AVR типа ATmega328
а если я захочу этот код запустить на ардуине c AVR типа ATmega8 то нифига работать не будет)) потому что в ардуине c AVR типа ATmega8 нет регистров DIDR0 и ADCSRB... ))
в пятых... это для AVR типа ATmega328
ADCSRA=(0<<ADEN) | (1<<ADSC) |
(1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
а для ATmega8 надо писать так
ADCSRA=(0<<ADEN) | (1<<ADSC) |
(1<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
а почему тогда прост оне записать так
ADCSRA=0x6D;
и для AVR типа ATmega328 и для AVR типа ATmega8
в шестых...
давайте проверим это в простом компиляторе AVR...
ADCSRA=(0<<ADEN) | (1<<ADSC) |
(1<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
компилятор ответил - ОШИБКА !
мой компилятор не знает что такое ADEN, ADSC, ADFR, ADIF, ADIE, ADPS2, ADPS1, ADPS0... и т.д.))
а теперь давайте запишем по нормальному))
ADCSRA=0x6D;
компилятор ответил - OK
вывод:
надо писать так
ADCSRA=0x6D;
или так
ADCSRA=0b01101101;
тогда будет всё работать хорошо)) и любая ардуина (на ATmega328 и на ATmega8) и любой компилятор ))
оно и понятно... эта простая логическая операция записи значения 0x6D в регистр ADCSRA понятна всем))
в седьмых...
в восьмых...

блин... мы ещё даже не начали разбирать код... а у нас уже куча ошибок повыскакивало...
что же будет дальше... страшно представить))
