Attiny85, высокое выходное сопротивление, тусклые светодиоды

Я разработал то, что, по моему мнению, должно было быть очень простым значком, используя Attiny85 SU. Схема ниже: Tiny со светодиодами каждый вывод gpio

Проблема в том, что крошечный не пропускает ток должным образом. Для тестирования я переключился на 20 PU на макетной плате и нагрузочные резисторы на 100 Ом. При напряжении питания 3 В это должно давать примерно 30 мА на контакт, что значительно ниже номинальных 40 мА на контакт и всего 200 мА. Однако при подключенных нагрузках только контакт 6 потребляет значительный ток и, по-видимому, имеет более высокое сопротивление, чем должно быть (1,6 В на резисторе для 16 мА). Другие контакты имеют очень высокий импеданс, он падает до ~ 7 мВ (70 микроампер) при подключении нагрузки. При отключенных нагрузочных резисторах они работают нормально (digitalWrite HIGH = напряжение питания - падение напряжения в переходе).

Я использую pinMode [это была проблема] (OUTPUT, N) [/это была проблема, должно быть (N, OUTPUT)] для настройки контакта N и цифровой записи для включения/выключения. Я имел возможность управлять транзисторами до того, как использовал точно такую же установку, хотя, по общему признанию, они имеют гораздо меньшие требования по току.

Кто-нибудь знает, что здесь происходит?

EDIT: оказалось, что я случайно поменял местами порядок OUTPUT и N в команде режима вывода. Не уверен, почему у компилятора не было проблем с этим, но теперь я, по крайней мере, получаю полезные результаты.

Я оставлю это из любопытства/и т. д., потому что я все еще получаю более высокое сопротивление на выходе, чем я ожидал. С нагрузочным резистором 100 Ом я получаю только около 16 мА (ожидайте ближе к 25). Напряжение питания от CR2032 составляет ~2,48 В под нагрузкой.

На основе графика в файле техническое описание (рисунок 22-19, стр. 182), при температуре окружающей среды 25 °C (в настоящее время 20 °C) я должен ожидать, что падение напряжения на выходе VCC будет где-то на нижнем уровне между 400 и 600 мВ при подаче 15 мА, но мои показания при 16 мА выше представляют собой падение напряжения почти на 900 мВ на Tiny. Кроме того, светодиоды падают на 2 В при токе 10 мА, что соответствует падению напряжения примерно на 300 мВ, согласно графику, но у меня падение составляет почти 500 мВ. Я не уверен, что это что-то в моей настройке, или кривые характеристик в таблице данных просто не точны для производственных моделей.

, 👍1

Обсуждение

Обратите внимание, что выходные контакты на большинстве плат Arduino на базе AVR должны подавать/принимать максимум 20 мА, с АБСОЛЮТНЫМ максимумом 40 мА. 40 мА уровень тока, при котором вы, вероятно, сожжете выход. Для нормального использования вы должны придерживаться ограничения 20 мА на контакт (а также следить за общим ограничением тока 200 мА, как вы упомянули)., @Duncan C


2 ответа


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

3

Решением основной проблемы было то, что я использовал pinMode(режим, число), где фактический синтаксис - это pinMode(номер, режим). Предположительно режимы можно выбирать по номеру и компилятору, хотя я хотел установить неопределенный вывод для номера режима.

TL;DR правильный синтаксис: pinMode(4, OUTPUT) для установки PB4 (контакт 3) на выход.

Проблема более высокого, чем ожидалось, выходного импеданса остается, хотя выходы теперь вполне пригодны для использования. Как подробно описано в редактировании, я все еще испытываю падение напряжения на микроконтроллере почти в 2 раза выше, чем я ожидал из графика в таблице данных для данного тока.

,

Спасибо, что нашли время, чтобы опубликовать ответ после обнаружения причины вашей проблемы. Не так много людей делают это. (проголосовали), @Duncan C


3

Вы уже нашли свою проблему. Я отвечаю только для того, чтобы предоставить некоторые понимание того, почему вы испытываете симптомы, которые у вас были.

pinMode() принимает два целочисленных аргумента (точнее, два uint8_t). Имена INPUT, OUTPUT и INPUT_PULLUP — это просто макросы для 0, 1 и 2 соответственно. Вот почему компилятор принимает ваш код с аргументы поменялись местами.

На микроконтроллерах AVR установка выходного регистра контакта в HIGH на контакте, настроенном как вход, приводит к включению внутренняя подтяжка. Таким образом

digitalWrite(pin, HIGH);

имеет тот же эффект, что и

pinMode(pin, INPUT_PULLUP);

на входной контакт. Когда вы сделаете это, вывод будет источником (а не погружением) очень небольшой ток. Сопротивление подтягиванию обычно порядка 30 кОм, и поэтому вы получаете такой маленький ток.

,

Хорошо, это имеет смысл. Мне было интересно, почему это вообще сработало. Хорошо аргументировано, почему изменение параметров на противоположное привело к выходу с высоким импедансом. (проголосовали), @Duncan C

Потрясающее объяснение, оно также объясняет, почему PB1 (контакт 6) функционировал нормально, так как он получил бы pinMode (1, 1) с помощью макроса., @user86728