Также убрать временные задержки при прерывании. Плохая практика ето (если не ошибочная).
Только изменение переменную/флаг - коротко и быстро. Даже печат на lcd быть вне прерывании.
(думаю, добавили это временно, для некоторых тестов, напр: "проходит ли там программа там или нет?").
Спасибо от Constantin007
Ромм, eсли фоторезисторы затемнены их сопротивление большое и когда переключаете входы АЦП нужно делать небольшую паузу перед запуском преобразования, иначе входная емкость не успеет зарядиться полностью и результат будет непредсказуемым. Поэтому у вас работает правильно только с одним входом АЦП, если конечно нет других ошибок.
Там по 10k pull-down, поэтому уже импеданс источника удовлетворяет требованиям. К тому же входная емкость заряжается не по факту переключения канала ADC (в ADMUX), а только после старта преобразования (на диаграмме - там, где выборка-хранение).
Спасибо от Ромм
Конечно! Это же "маркер" случилось ли прерывание.
У меня же только на одном входе фоторезистор.
На втором контроль напряжения кроны, на втором кнопки.
Добавлено через 25 минут(ы):
Чудо не случилось. Заменил все на 0b...
Без результата...
while (1)
{
//lcd_clear();
//lcd_puts("Privet!");
//delay_ms(1000);
//lcd_clear();
//delay_ms(1000);
//lcd_clear();
ADMUX=0b01000101; // выбор ADC5 фоторезистор
ADCSRA=0b11001101; // старт преобразования
A=adc_data*0.048; // вычисление значения измеренного напряжения
B=floor(A);
//lcd_gotoxy(1,1);
sprintf(temp,"%u", B);
lcd_puts(temp);
//A=0;
//B=0;
//adc_data=0;
delay_ms(1000);
ADMUX=0b01000100; // ADC4 клавиатура
ADCSRA=0b11001101; // старт преобразования
A=adc_data*0.0048; // клавиатура
// B=floor(A);
lcd_gotoxy(1,1);
sprintf(temp,"%5f", A);
//delay_ms(5000);
//lcd_clear();
//sprintf(temp,"%05f", B);
lcd_puts(temp);
// A=0;
//adc_data=0;
delay_ms(1000);
}
Последний раз редактировалось Ромм; 13.03.2021 в 04:45.
Уже. Это я на схеме забыл дорисовать...
Ромм, Ваш вариант конфигурации - опорное напряжение подаётся на вход AREF извне.....
Чтобы использовать внутренний опорник на 2,56v, поставьте биты REFS1 и REFS0 в единицу. Кондер на AREF оставьте.
И чтобы было проще бит ADLAR в ADMUX в единицу, сверхточность тут не нужна.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)