Pytanie można odnieść do dowolnego mikrokontrolera z funkcjami I / O, ale obecnie pracuję z popularnym ATmega328p. Rozważ następujący obwód: Prosty przełącznik SPST normalnie otwarty z rezystorem podwyższającym 10k i dołączonym kondensatorem ceramicznym, podłączony do dowolnego portu we / wy. Konkretny pin powinien być oczywiście skonfigurowany jako INPUT w odpowiednim DDRx. Arkusz danych zawiera opis, w sekcji Charakterystyka DC, styk wejścia / wyjścia prądu upływu \ $ (I_ {IL} / I_ {IH}) \ $ o wartości 1µA, daleko na horyzoncie prąd stały na pin I / O przy 40,0 mA. Żaden problem.
DDRD = 0x00; // Cały port jako INPUT
Teraz zastanów się, że zapomniałem, że dany pin musi być ustawiony jako Input, ustawiłem go jako Output i ustawiłem Port HIGH.
DDRD = 0xFF; // Cały port jako OUTPUT
PORTD = 0xFF; // Cały port WYSOKI
Chociaż arkusz danych nie podaje impedancji wyjściowej , można ją oszacować na 25 Ω, na podstawie podanych wykresów. Teraz w momencie wciśnięcia przycisku prąd przepływa przez mikrokontroler ze źródła 5V z rezystorem 25Ω plus pomijalny opór dzięki miedzianemu śladowi. Teoretycznie powoduje to przetężenie o 160 mA powyżej prądu stałego na sufit we / wy. Czy to mogłoby usmażyć port i urządzenie? Analogicznie, jeśli przełączę się na logikę pozytywną i ustawię port na LOW, można napotkać ten sam problem:
DDRD = 0xFF; // Cały port jako OUTPUT
PORTD = 0x00; // Cały port LOW
Biorąc pod uwagę, że ten typ obwodu jest gorliwie zalecany, jak nie wydaje się, że powoduje on żadnych problemów? Wracając do pierwotnego pytania, czy nie powinienem być bardzo ostrożny podczas ustawiania styku I / O jako Wyjście? Albo przynajmniej podłączyć rezystor małej serii jako prymitywną ochronę?
Uwaga: jeśli nie jesteś native speakerem języka angielskiego, możesz edytować post, jeśli zobaczysz coś niezręcznego.