Делитель напряжения и подтягивающий резистор с аналоговым чтением
Attiny имеет 6 контактов, которые вы можете использовать для ввода/вывода.
В то время как 5 из них действительно просты в использовании, контакт 1, PIN-код сброса, очевидно, сбрасывает микроконтроллер, если напряжение ниже 2,5 В.
Перепрограммировав предохранители для использования вывода сброса в качестве вывода ввода-вывода, я больше не могу использовать программатор arduino ISP.
Таким образом, единственный способ использовать его в качестве входа без сброса MC - это оставаться выше 3 В и использовать AnalogRead?
После того, как я, наконец, понял это, я немного поиграл со своим мультиметром (доступен только измерительный инструмент) и поэкспериментировал с резисторами.
смоделируйте эту схему - схема, созданная с помощью CircuitLab
The powersupply(battery) outputs around 5.11v.
not pressed i get 5.11v on the "reset pin".
pressed i get 3.41v on the "reset pin".
not pressed the resistace is 39K Ω.
pressed the resistace is 19K Ω.
Теперь, поскольку я не хочу перепрограммировать предохранители или сжигать Attiny85, мой вопрос:
Могу ли я как-то навредить attiny, используя эту схему analogRead();
?
Показания будут около 680 при нажатии или 1000 при отсутствии нажатия.
Должен ли я использовать другие резисторы, чтобы потреблять меньше тока/посылать большой ток непрерывно? ...если это сработает...
Любые другие предложения?
Примечания.:
Я использую контакты 2(PB3),3(PB4),5(PB0),6(PB1)
в качестве каналов ШИМ (с транзисторами npn); Красный, зеленый, синий, белый.
Используется штифт 7(PB2)
в качестве кнопки. Но мне также нужен потенциометр...
ТАК:
вывод 7(PB2)
становится потенциометром (аналоговое чтение).
и я надеюсь
pin 1(PB5)
становится кнопкой с помощью AnalogRead или чего-то еще.
РЕДАКТИРОВАТЬ
этот сайт объясняет больше о проблеме, хотя мне нужна простая кнопка.
http://www.technoblogy.com/show?LSE
РЕДАКТИРОВАТЬ
Я не тестировал схему выше. Я спрашиваю вас, может ли это сработать, если что-то не так. Боюсь повредить шпильку.
Все, что я знаю, это то, что:
если я поставлю фьюзы, я не смогу перепрограммировать чип
контакт 1 = pb5 = adc0 = аналоговое чтение (A0) = контакт Arduino 5 = СБРОС
Да, вы можете использовать аналого-цифровой преобразователь на контакте 1, даже если внешний сброс на этом контакте все еще включен, пока напряжение на этом контакте не упадет ниже порога сброса.
Вот более простая версия вашей схемы, которая надежно работает...
смоделируйте эту схему - схема, созданная с помощью CircuitLab
...
Когда кнопка SW1 нажата, резисторы R2 и R1 образуют делитель напряжения, который подает около 4,54 вольта на контакт RST.
Вот тестовая программа Arduino, которая зажигает встроенный светодиод при каждом нажатии кнопки...
int led = 1; // Onboard led on trinket
setup() {
pinMode( led, OUTPUT );
}
loop() {
if (analogRead(0)) > 900 ) { // reset pin is near Vcc
digitalWrite( led , 0 ); // turn led off
} else { // reset pin is less than 900/1024 * 5 vcc
digitalWrite( led , 1 ); // turn led on
}
}
Примечания:
Trinket — это, по сути, просто ATTINY85 с разъемом USB и предварительно загруженным загрузчиком, поэтому в него легко добавить код с помощью Arduino IDE. Все сказанное здесь о Trinket относится к голому ATTINY85 и наоборот.
В техническом описании ATTINY85 указано минимальное напряжение на контакте сброса, которое будет интерпретироваться как «1» как 0,9 вольт * (V IH2 ), что составляет 4,5 вольта . Поскольку выходное напряжение делителя напряжения ~4,54 вольта выше этого значения, его следует рассматривать как «1», а не сбрасывать микросхему.
На контакте сброса имеется встроенная подтяжка 30-60 кОм, поэтому в принципе мы могли бы просто использовать, скажем, R2 на 30 кОм и не нуждаться в R1, но я обнаружил, что вы можете получить ложные сбросы из-за шума переключения только с помощью внутреннего подтягивания. .
Я выбрал резисторы на 10 кОм и 1 кОм, потому что они распространены и обеспечивают достаточный ток, надежно работают, но тратят всего около 2 мА при нажатии кнопки. Когда кнопка не нажата, потребляется очень мало тока.
Я выбрал 1000 в качестве порогового значения для AnalogRead, потому что это дает достаточный запас с обеих сторон для неточностей в значениях двух резисторов. Когда кнопка не нажата, контакт сброса должен быть очень близок к Vcc, и, следовательно, AnalogRead() должен быть очень близок к 1023. Когда кнопка нажата, напряжение при сбросе будет снижено на R2, но насколько именно ниже, зависит на точных значениях R1 и R2 (фактическое значение резисторов может сильно отличаться от их рыночной стоимости из-за допуска ) и внутренней подтяжки, поэтому я выбрал более высокое значение, чем просто средняя точка.
Голаж
кокко
Голаж
кокко
Голаж
кокко
кокко
Голаж
Голаж
кокко
кокко
кокко
Крис Стрэттон
Крис Стрэттон
кокко
кокко
донцов