Проблема с опорным напряжением АЦП ATTINY45
- Войдите на сайт для отправки комментариев
Доброго времени суток, начал разбираться с работой АЦП сабжевого МК и столкнулся с такой неприятностью - код вроде и работает но судя по поведению, как будто слишком низкое опорное напряжение. В регистре прописал использование в качестве опорного напряжение питания МК, но код работает только в диапазоне входных напряжений от 0 до 0,25в, что явно не правильно. При попытке выбрать другой источник ОН - в протеусе вылетает ошибка связанная с температурным датчиком ( PC=0x005A. [AVR AD CONVERTER] Temperature Sensor is not supported. [U1]). Откуда? Я не использую температурный сенсор вообще.
Вот собственно сам код:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
int ocr=0;
//--------------------------------------------------
void setup()
{
DDRB = 0b00000001; //конфигурирование пина для выхода генератора
PORTB = 0b00001000; //и 1 вход с подтяжкой к + для кнопки 0
asm("cli");
ADCSRA |= (1<<ADEN) //Разрешение использования АЦП
|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //Делитель 128 = 64 кГц
ADMUX |= (REFS1 << 0)|(REFS0 << 0)|(ADLAR << 0)|(REFS2 << 0) //опорное напряжение->напряжение питания
|(MUX3 << 0)|(MUX2 << 0)|(MUX1 << 1)|(MUX0 << 0); //вход ADC2
asm("sei");
}
//---------------------------------------------------------
unsigned int ADC_convert (void)
{
ADCSRA |= (1<<ADSC); //Начинаем преобразование
while((ADCSRA & (1<<ADSC))); //проверим закончилось ли аналого-цифровое преобразование
return (unsigned int) ADC;
}
//-----------------------------------------------------------
int main()
{
setup();
while(1){
ocr = ADC_convert ();
}
return 0;
}
Прошу помощи и разъяснения - что я делаю не так или не делаю вообще?
Заранее благодарен за помощь и науку.
PS: Рад бы приложить проект для Протеуса, но не знаю как.
https://www.youtube.com/watch?v=qdks9RV2uzk
Ещё как используешь. Чему по твоему равно выражение, которые ты в ADMUX пихаешь? Ты его напечатай в сериал и сам посмотри.
А не так ты записываешь формирование битовых масок типа
Так как-то типа наоборот надо. Если не умеешь, лучше используй макрос bit. Не будет таких проблем.
Благодарю за науку!!!! Все заработало как нужно! И видос в тему. 2 дня убил чтобы понять но ниАсислил. А о битовых масках вроде и читал но ничего толком не понял, видать мозжечком еще не дорос))) Будем развивать...