Проблема с опорным напряжением АЦП 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 дня убил чтобы понять но ниАсислил. А о битовых масках вроде и читал но ничего толком не понял, видать мозжечком еще не дорос))) Будем развивать...