Если не используются прорывания - либо ставить задержку (что не очень красиво) либо цикл, из которого выходите только когда флаг прерывания появился.
Этот флаг, кстати, нужно будет сбрасывать программно.
Если точность не сильно важна, можно результат АЦП прижать влево, читать только ADCH и тупо умножить на 4 равносильно <<2просто КОТ писал(а): А теперь вопрос -- вместо регистр писать ADCL или ADCH. Или как их сложить. Что-то мой моск перестал думать.
Легче - не значит лучше. Измените частоту процессора или предделитель АЦП - и опять задержку пересчитывать.просто КОТ писал(а):.... А про флагши -- через дэлей легче. Вот только на сколько мс ставить?!
Код: Выделить всё
while (!(ADCSRA & 0x10));
ADCSRA|=0x10;
Код: Выделить всё
ADCSRA=(1<<ADEN)|(1<<ADSC)|(0b011<<ADPS0); //Запускаем конвертор, предделитель частоты 1:8
While(ADCSRA & (1<<ADSC)); // ждем окончания конвертации
ADCC=(unsigned int)ADCH<<8 | ADCL;
Код: Выделить всё
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;Вышлите, пожалуйста, комментарий к строчкеsiamds писал(а):вышлю комментарий к каждой строчке программы
Не так. Считайте, что ADCW это некое волшебное слово, которое обозначает результат преобразования АЦП, и его значение можно присвоить переменной типа int.просто КОТ писал(а):Так?!
Никак. Либо 1,2 МГц, Либо 9,6 МГц.просто КОТ писал(а):как ФУЗами выстаить в АТтини13, чтоб внутренний гена работал на 4МГц?!
Дык мне спешить некуда. . . Только у мя несколко изменилось устройство, которое я делаю. Я хотел сделат дозик с ПП датчиком, а теперь переработал ЭТО в "Чаёметр". Термометр ля чая с ПП датчиком. Я вот подумываю это в статейку оформить. Вдруг кого заинтересует.Аlex писал(а):просто КОТ, Небольшой Вам совет.
За место лишних зацикливаний МК ( типа - delay_ms(2000);) , сделайте множество выборок АЦП и усредняйте результат. Сделайте самую минимальную частоту тактирования АЦП и обрабатывайте каждое преобразование в прерывании (надеюсь, АВРы так могут). А за место DelayMs заюзайте таймер и считайте его тики.
В итоге - все задержки и преобразования АЦП будут фоновыми задачами, а основной цикл и процессорное время освободиться до максимума.
Прошу меня извинить. Это была ненавязчивая подъёбка. Вы объявили свою функцию как void. Следовательно, она ничего возвращать не должна. А у неё в конце тот самый return (возврат)...siamds писал(а):// return (возврат), для чтения нового слова ADCW
Зависит от многих факторов. Я уже точно не помню. Давно это было. Если максимальное значение, которое можно получить 1023, то результат болтается где-то на 20 - 30 единиц. Есть ещё специальный режим работы АЦП - "Noise Canceler". Там несколько лучше, но тоже... да...просто КОТ писал(а):Насколько сильно?! На какую точность я могу рассчитывать?!