ATTINY85 и POT

Мне нужно считать значение потенциометра с ATTINY85. У меня есть большой толстый 10K POT, но для этого варианта использования мне нужно, чтобы он был очень маленьким, поэтому я использовал утилизированный 2,4K, такой, который припаивается непосредственно к печатной плате.

Я использую tinkercad для создания прототипа своего проекта и столкнулся с очень странной проблемой. Каждый раз, когда я считываю данные с вывода POT, я получаю значение 512 (используя отладчик)

Вот скриншот моего прототипа:

Цель состоит в том, чтобы запитать схему и лампу (неважно, что там, считайте это просто нагрузкой) от батареи 9 В, использовать стабилизатор 5 В для питания ATTINY85 и использовать NPN-транзистор для включения лампы/ включить или выключить загрузку.

Для справки: вся установка регулятора и транзистора протестирована и работает отлично.

Вот код, который я написал для этого случая:

void setup()
{
  pinMode(PB0, INPUT);
}

int potValue = 0;

void loop()
{
  potValue = analogRead(PB0);
  delay(100);
}

Не очень красиво, верно? Теперь независимо от того, как использовать POT, и я пробовал 2,4 КБ, 10 КБ и до 100 КБ, значение, считываемое ATTINY, всегда равно 512.

Вы видите что-то неправильное в этой настройке? Может ли это быть ошибкой в tinkercad? (Хотя я бы удивился)

Я мог бы попробовать поделиться этой схемой в tinkercad, если кто-то захочет взглянуть...

РЕДАКТИРОВАТЬ: я только что попробовал с PB2, как было предложено, но значение не всегда равно 58:

, 👍0

Обсуждение

Поскольку вы никогда не отображаете показания из горшка, как вы узнаете, что это такое? Попробуйте распечатать., @Delta_G

[Порт PB0 не является выводом АЦП на ATTiny85] (https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf). Выберите PB2, PB3, PB4 или PB5., @StarCat

Я знаю ценность чтения горшка, потому что в tinkercad есть отладчик, @Georges Legros

сейчас попробую другой пин, @Georges Legros

Я вижу, у вас есть провод, соединяющий землю с одной стороны макетной платы с другой. Разве вам не нужно также соединить шину +5 В между сторонами макетной платы? (в дополнение к использованию аналогового контакта.), @Duncan C

@DuncanC нет, поскольку вход с верхней шины составляет 9 В, и я использую регулятор 5 В для питания нижней шины и ATTINY85. Однако земля общая, @Georges Legros

Обратите внимание, что вам понадобится резистор на базе транзистора NPN., @Edgar Bonet

Почему вы думаете, что вам нужен горшок меньшего значения? Сопротивление горшка почти не влияет на показания Arduino. Это имеет эффект только тогда, когда вы переходите к очень большим (> 1 МОм) значениям. Уменьшая до меньшего числа, все, что вы делаете, это тратите энергию., @Majenko

Когда я говорил, что мне нужен меньший POT, я имел в виду, что физический объект должен быть меньше, чем 10K, который у меня есть, поскольку мне нужно, чтобы конечный результат был как можно меньше, никакого отношения к сопротивлению POT вообще, извините за путаница, @Georges Legros

Здесь это не имеет значения, но нотация PXn — это не то же самое, что номер вывода, который используется функциями Arduino. PB1 будет определен как 1, потому что это второй бит в регистрах для порта B (начните отсчет с 0). Таким образом, на более крупном микроконтроллере PC1 также будет равен 1. Номера контактов разные, а на Attiny85 просто совпадают (из-за низкого номера контакта)., @chrisl

Вы видели комментарий Эдгара Боне? Вам нужен резистор на базе транзистора. Вы _должны_ ограничить ток через базу, чтобы не разрушить транзистор или ATTINY. Если бы мне пришлось переключать нагрузку с помощью ATTINY, я бы использовал полевой МОП-транзистор, потому что они имеют очень высокий входной импеданс (сопротивление) на выводе затвора (базы). Таким образом, контакт ATTINY не будет нагружен. ;-), @Peter Paul Kiefer

Я действительно видел комментарий и фактически использовал резистор в своей реальной схеме. Однако я читал, что резистор в основном используется для управления выходным значением. Так что я как бы не понимаю, как/почему это может разрушить любую часть. К вашему сведению, я использовал резистор 1k, не знаю, достаточно ли этого. Я просмотрел документацию на свой транзистор, но не нашел информации, @Georges Legros

@GeorgesLegros Транзистор похож на диод между базой и эмиттером. Это означает, что ток через него экспоненциально возрастает с напряжением. Он может легко превысить максимальный ток 20 мА (а также абсолютный максимум 40 мА) и, таким образом, разрушить оборудование цифрового вывода этого вывода. Резистор уменьшает этот ток, так что он не перегорает. С макс. 20 мА и 5 В вы можете использовать 5 В / 20 мА = 250 Ом, чтобы быть в безопасности, даже когда транзистор будет закорочен. Увеличивайте значение на свое усмотрение, будьте осторожны с более низкими значениями., @chrisl

Спасибо за объяснение, теперь это более понятно. В моей схеме я переключаю вход 9 В с транзистором, значит ли это, что у меня должно быть минимальное значение 450 Ом для этого резистора? Другими словами, должен ли я основывать этот расчет на ATTINY и, следовательно, на выводе или на токе, который я переключаю?, @Georges Legros


1 ответ


Лучший ответ:

3

Порт PB0 не является Контакт АЦП (аналоговый вход) на ATTiny85.

Доступные контакты ATTiny85 (из таблицы данных Atmel ATtiny 25, 45, 85):

ATtinyx5 pinoutВыберите PB2, PB3, PB4 или PB5, если вам нужен аналоговый вход.

Дополнительная информация: при построении в TinkerCAD использование PB2 в качестве аналогового входа, похоже, не работает правильно и выдает фиксированное значение. Однако использование PB3 работало правильно. Это может быть ошибка в TinkerCAD.

,

Только что попробовал, и я получаю еще одно странное фиксированное значение: 58..., @Georges Legros

Я отредактировал вопрос, чтобы загрузить изображение новой настройки с использованием PB2 и вывод отладчика., @Georges Legros

Ради интереса я построил такую же схему (но упрощенную) в TinkerCAD и, как ни странно, не смог заставить ее работать с PB2, но PB3 работал. Я предполагаю, что это ошибка в TinkerCAD. Я не использовал его раньше до сегодняшнего дня, но я почти уверен, что построил его правильно., @StarCat

Действительно, с PB3 это прекрасно работает! Спасибо! Можете ли вы добавить этот комментарий к своему ответу, чтобы я мог его принять (думаю, это понятнее для будущих ссылок), @Georges Legros

Я добавил комментарий к своему ответу., @StarCat

Я попробовал PB5 на tinkercad, и он просто получает событие «случайных» значений, если я не касаюсь POT. Я отправлю электронное письмо в службу поддержки, чтобы сообщить им об этом. Тем не менее, вы подтверждаете, что он «должен» работать нормально PB2? Я проведу несколько тестов на своей макетной плате, чтобы проверить. Проблема в том, что реальный вариант использования уже использует PB3..., @Georges Legros

PB5, вероятно, предварительно сконфигурирован как контакт RESET, поэтому я не уверен, что разумно использовать его для чего-то другого, кроме этого. Я не слишком знаком с аналоговой частью ATtiny, но я знаю, что (как и в других AVR) есть только один аналого-цифровой преобразователь, к которому 4 аналоговых входа подключены через аналоговый мультиплексор, и это не должно иметь значения. какой входной контакт используется (если он не используется ни для чего другого)., @StarCat

Это изображение может немного сбивать с толку, если вы не знаете, что искать. Посмотрите на контакты, рядом с которыми есть ADC0, ADC1, ADC2, ADC3. Как и «Анало-цифровой преобразователь <номер>»., @Gerben

Только что сделал еще один тест, и похоже, что PB4 также создает проблему, поскольку я получаю ту же случайность, что и с PB5 (RESET). Я открыл билет в службу поддержки Tinkercad, с нетерпением жду ответа, буду держать вас в курсе., @Georges Legros