Аналог AtTiny читает всегда 1023
Я пытаюсь воспроизвести проект светодиодного светлячка с низким энергопотреблением. Итак, я пытаюсь выполнить аналоговое считывание со светодиода, чтобы обнаружить свет. Чтобы немного упростить, я использую разные контакты и разные светодиоды для IN и OUT. Код:
#define PIN1 don't use this pin! /*this is RESET*/
#define PIN2 3
#define PIN3 4
#define PIN4 don't use this pin! /*this is GND*/
#define PIN5 0
#define PIN6 1
#define PIN7 2
#define PIN8 don't use this pin! /*this is VCC*/
#define ANL1 PIN7
#define ANL2 PIN3
#define ANL3 PIN2
// функция настройки запускается один раз, когда вы нажимаете кнопку сброса или включаете плату
void setup() {
digitalWrite(PIN3, LOW);
pinMode(PIN3, INPUT);
}
#define BLINK true
// функция цикла выполняется снова и снова, вечно
void loop() {
const int value = analogRead(PIN3);
if(value>=1023) {
pinMode(PIN2, OUTPUT);
digitalWrite(PIN2, HIGH);
delay(500);
digitalWrite(PIN2, LOW);
delay(3);
}
else {
delay(1);
}
}
Это установка. Я использую резистор гораздо меньшего размера, но при аналоговом чтении все равно получаю 1023, о чем свидетельствует постоянно горящий выходной светодиод:
Что случилось?
@Tomáš Zato - Reinstate Monica, 👍0
1 ответ
В этой статье при использовании светодиода в качестве детектора света используются следующие шаги:
- Зажгите светодиод, сделав анод положительным (логическая единица), а отрицательный катод (логический ноль) – это полностью разряжает светодиод как конденсатор.
- Зарядите конденсатор, сделав анод отрицательным, а катод. положительный, так как это небольшой конденсатор, это займет совсем немного времени. другими словами, как можно короче.
- Переведите диод в режим измерения, сделав анод минус (он уже есть) и катод подключен к аналогу ввод.
- Выполните измерение аналогового напряжения, это справочная информация. уровень, который будет использоваться позже.
- Подождите, пока интегрируется фотонный ток – чем дольше, тем больше чувствителен, но слишком долго и имеет другие эффекты, кроме фототока доминировать.
- Снова измерьте напряжение и вычтите его из опорного значения. вы взяли до времени интеграции. Эта фигура - твой свет читаю.
Глядя на код в приведенном выше вопросе, непонятно, где вы переключаетесь с прямого смещения, чтобы отменить смещение. Кроме того, не похоже, что были взяты две выборки и обнаружена разница между двумя выборками.
- Как контролировать мощность attiny13a через прерывание смены контакта?
- Управление светодиодом и кнопкой с помощью одного контакта
- проблема с ценностью конверсии
- Какие выводы представлены этими константами из библиотеки ABR?
- При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
Спасибо за объяснение. Но меня больше беспокоил тот факт, что аналоговое чтение не возвращает ноль или близкое к нему значение, когда оно закорочено на землю через резистор., @Tomáš Zato - Reinstate Monica
Поскольку вы не используете «значение», скажем, для измерения массива, вам не следует использовать «константу». Это может быть корнем вашей проблемы. Кроме того, АЦП не так уж точны. Если вы не снимаете несколько показаний и не усредняете их, то обычно вы получаете только несколько значимых битов за пределы диапазона АЦП., @st2000