Используйте PIN-код RESET на Attiny85 в качестве входа с делителем напряжения

Делитель напряжения и подтягивающий резистор с аналоговым чтением

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. он сбрасывается при низком напряжении, используя обычную настройку потенциометра или обычную настройку кнопки
  2. если я поставлю фьюзы, я не смогу перепрограммировать чип

  3. контакт 1 = pb5 = adc0 = аналоговое чтение (A0) = контакт Arduino 5 = СБРОС

Прошу прощения, но я не совсем понимаю, в чем проблема. После того, как сброс установлен в качестве вывода ввода-вывода, MCU больше не сможет выполнять сброс. Вы можете подать на него менее 2,5 В.
После того, как сброс установлен в качестве вывода ввода-вывода, вы не сможете перепрограммировать его, так как сброс необходим с помощью ISP.
Да. Так ты хочешь его перепрограммировать?
может быть? если нет необходимости в еще одной сложной схеме.
Вам нужно будет сделать схему HVSP (высоковольтное последовательное программирование): instructables.com/id/AVR-Attiny-fusebit-doctor-HVSP На самом деле это не так сложно.
я думаю, это немного сложно для меня, атм... кстати, у меня нет всех этих частей. так что пока я надеюсь обойти этот высоковольтный последовательный программатор. Интернет-провайдер с Arduino работает очень быстро, так как я уже сделал схему/шилд для Arduino.
что-то не так с приведенной выше схемой кнопки?
Вы можете рассматривать контакт сброса как другой контакт ввода/вывода. Это означает, что вы должны включить внутреннее подтягивание, подключив его к кнопке сбоку. И подключите другую сторону кнопки к земле.
Нет ничего страшного, но для чтения при включенной/выключенной кнопке это немного непривычно. Попробуйте выше.
да, я знаю, что это было бы проще... просто у меня пока нет высоковольтного программатора. я знаю о драконе или stk5000... или вашей схеме. Я хочу научиться некоторым из этих электронных трюков... играть с напряжением и током. это то, что я обнаружил сам, тестируя мультиметром. единственный страх, который у меня есть, это то, что я что-то сожгу... так как я не знаю всех электронных расчетов
Сказал, что я надеюсь, что вы можете рассказать мне больше о моей цепи. если он работает... если нет, или если он работает, но потребляет слишком много... или, может быть, понять, вредит ли он как-то другим ближним частям цепи и почему
"немного необычно" объясните пожалуйста.
Это на самом деле очень интересная идея — использовать пин как аналоговый вход в ограниченном диапазоне, не отключая его функцию сброса! Предполагая, что он вообще работает для вас, эксперимент, который следует рассмотреть, будет заключаться в тщательном измерении энергопотребления микросхемы при изменении входного напряжения (задача, которая нетривиальна, поскольку вам нужен амперметр с низким напряжением нагрузки). ). То, что вы ищете, - это чрезмерное потребление, которое может произойти в некоторых топологиях с тотемным полюсом с неопределенным входным уровнем логического уровня.
Если вы можете снизить входное напряжение до желаемого диапазона без увеличения тока источника питания, это может означать, что идея работоспособна. Конечно, если вы снизите напряжение до точки, при которой вы запускаете сброс, то ток, вероятно, резко упадет, а это не те данные, которые вы хотите получить.
Я использую схему @bigjosh некоторое время, и она работает отлично. так что у меня есть еще одна булавка на attiny. Я использую его для 4-канального ШИМ, 1 кнопка 1 горшок.
Использование горшка вместо кнопки также возможно, хотя разрешение будет ниже 500 на Arduino. Вам просто нужно измерить это в первый раз.
Вы можете прочитать напряжение без контакта! См. пример здесь: arduino.stackexchange.com/questions/48739/…

Ответы (1)

Да, вы можете использовать аналого-цифровой преобразователь на контакте 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 (фактическое значение резисторов может сильно отличаться от их рыночной стоимости из-за допуска ) и внутренней подтяжки, поэтому я выбрал более высокое значение, чем просто средняя точка.

я знал, что есть более простой способ!.... спасибо за точный ответ... я проверил его, и он работает отлично! Кстати, я использую резисторы 10k....
Это лучше, чем использование стабилитрона 3v3 вместо R2? С резистором 1 кОм мой вольтметр дает на выводе сброса 3 В.
@ThatAintWorking Я думаю, что стабилитрон подойдет, но это уже конец. Пока на контакте RESET выше 0,9 вольта, чип не сбрасывается и пока вы видите падение напряжения (каким бы оно ни было) на аналоговом входе, то все хорошо.
Вы действительно уверены в этом? Я только что прочитал, что В я ЧАС 2 составляет 0,9 * VCC Вольт, а не 0,9 Вольт
@Unknown123 Вы абсолютно правы! Спасибо за исправление. Я обновил значение R2 и несколько расчетов, чтобы отразить это. Еще раз спасибо!
Прошло почти три года, мне грустно от оригинального плаката, кстати, ваш код все еще 900, а не 1000, у вас есть идея работать с potentio, используя очень маленький запас?