La domanda può essere applicata a qualsiasi microcontrollore con capacità di I / O, ma attualmente sto lavorando con il popolare ATmega328p. Considera il seguente circuito: un semplice interruttore SPST normalmente aperto con una resistenza di pull-up da 10k e un condensatore ceramico collegato, collegato a qualsiasi porta I / O. Il pin specifico va ovviamente configurato come INPUT nella rispettiva DDRx. Il datasheet descrive, all'interno della sezione DC Characteristics, un pin I / O di corrente di dispersione in ingresso \ $ (I_ {IL} / I_ {IH}) \ $ di 1µA, mentre lontano nell'orizzonte, la corrente CC per pin I / O raggiunge i 40,0 mA. Non è affatto un problema.
DDRD = 0x00; // Intera porta come INPUT
Ora considera che ho dimenticato il fatto che il pin dato deve essere impostato come Input, l'ho impostato come Output e ho impostato la porta HIGH.
DDRD = 0xFF; // Intera porta come OUTPUT
PORTD = 0xFF; // Tutta la porta ALTA
Sebbene il foglio dati non fornisca un'impedenza di uscita può essere stimata in 25 Ω, sulla base dei grafici forniti.
Ora, nel momento in cui viene premuto il pulsante, la corrente si fa strada attraverso il microcontrollore dalla sorgente 5V con una resistenza da 25Ω più una resistenza trascurabile a causa della traccia di rame. Questo teoricamente produce una sovracorrente di 160 mA superiore alla corrente CC per il soffitto del pin I / O. Questo potrebbe friggere la porta e il dispositivo?
Analogamente, se passo alla logica positiva e imposto la porta a BASSA si potrebbe riscontrare lo stesso problema:
DDRD = 0xFF; // Intera porta come OUTPUT
PORTD = 0x00; // Tutta la porta LOW
Considerando che questo tipo di circuito è vivamente incoraggiato, come sembra non portare problemi? Ora, tornando alla domanda originale, non dovrei essere estremamente cauto quando imposto un pin I / O come Output? O almeno collegare un resistore in piccola serie come protezione primitiva?
Nota: non sei un madrelingua inglese, sentiti libero di modificare il post se vedi qualcosa di imbarazzante.