Attiny85 простая проблема с аналоговым и цифровым выходом

Я просто зажигаю светодиод через TIP31C, контакт 0 проходит через резистор 560 кОм на входной контакт наконечника. контакт 1 проходит через резистор 750 Ом на входной контакт наконечника ^я не уверен, что эта информация действительно актуальна

Причина, по которой я делаю это, заключается в том, что я могу перевести attiny85 в спящий режим, в то время как контакт 0 установлен в положение HIGH, чтобы светодиод работал с очень низкой яркостью, что-то вроде функции ожидания

void setup() {

}

void loop() {
  digitalWrite(0, HIGH);//работает ТОЛЬКО в первый раз
  delay(500);
  digitalWrite(0, LOW);
  delay(500);

  analogWrite(1, 15);//всегда работает
  delay(500);
  analogWrite(1, 0);
  delay(500);
  /*it's like as soon as i've used an analogWrite, i can no
    longer output with digitalWrite
  */

  //pinMode(0, OUTPUT);//не помогло
  digitalWrite(0, HIGH);//никогда не работает
  delay(500);
  digitalWrite(0, LOW);
  delay(500);
}

, 👍-1

Обсуждение

есть проблема какая-то?, @jsotola

@jsotola да, я добавил комментарии в код, объясняющий это, @Valkor Simpson

Попробуйте сделать pinMode в методе настройки. Вот где это должно быть., @Filip Franik

@FilipFranik Я пробовал, все равно не работает, @Valkor Simpson


1 ответ


1

Здесь есть ряд проблем:

  1. Вы утверждаете, что у вас резистор 560 кОм, это слишком высокое значение. При напряжении 5 В ток будет ограничен до 8,9 мкА.

    • Это слишком мало для питания светодиода, для которого, вероятно, требуется до 20 мА (5 В / 0,02 А = не менее 250 Ом)
    • Это также слишком мало для базы транзистора (я не совсем уверен, правильно ли я понимаю усиление транзистора, но я думаю, что если вы подаете 1 мА на базу TIP31C, его усиление 25 будет допустим до 25 мА между коллектором и эмиттером.) Исходя из этого, 5 В / 0,001 А = 5 кОм.
  2. Вам нужны pinMode(0, OUTPUT); и pinMode(A1, OUTPUT); в настройках. Это будет работать, за исключением того, что вы не заметите эффекта с вашим резистором 560 кОм.

  3. Вам также необходимо проверить контакты atTiny85. AtTiny85 распиновка

Как видите, единственные аналоговые выходы находятся на физических контактах 2, 3 и 7. Вам нужно обращаться к ним (для подключения к контакту 7) как:

pinMode(A1, OUTPUT);
analogWrite(A1, 15);

Ниже показано приблизительное представление о том, как должна выглядеть схема

схема

Ниже приведен (непроверенный) пример кода:

void setup() {
  pinMode(A1, OUTPUT);
}

void loop() {
  analogWrite(A1, 15);
  delay(500);
  analogWrite(A1, 0);
  delay(500);
}
,

Я думаю, вы перепутали «аналоговый выход» (на самом деле Attiny85 не имеет реального аналогового выхода, то есть ЦАП, цифро-аналогового преобразователя. Он может выводить только напряжения ШИМ для имитации аналоговых сигналов) с выводами АЦП (аналогово-цифровой преобразователь). ), который в основном является аналоговым входом., @chrisl