Limiti di corrente per PIN del ATmega

Ciao a tutti
Sono oggi io che apro una discussione (una delle poche). :* :* :*

Mi hanno fatto notare che oltre la corrent e massina di 200mA come totale della corrente sui Pin Vcc e GND del Atmega328 ci sono anche limiti di corrrente per gruppi di PIN.
http://arduino.cc/playground/Main/ArduinoPinCurrentLimitations
http://arduino-info.wikispaces.com/ArduinoPinCurrent

I limiti della correnete totale per i pin Vc e GND sono definiti in tabella 28.1 Absolute Maximum Ratings a pagina 313 di http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

Per questo la mia prima domanda: Il limite di 200mA é da considrarsi per ogni pin oppure per tutti i pin della stessa funzione (il ATmega328 ha 2 pin di massa percui il limite di corrente é 200mA o 400mA)?

Gli altri limiti sono specificate nelle annotazione a piè di pagina 3 e 4 della tabella 28.2 DC Characteristics.
Ho capito bene che questi limiti per gruppi di PIN valgono per garantire i limiti certificati per VOL e VOH? e che questi limiti nella maggior parte dei casi si possono anche superare?

Grazie della collaborazione. sono curioso delle Vostre risposte.
Ciao Uwe

Secondo me il limite dei 200mA è il limite massimo che l'ATmega può sopportare (ed esso è dato dalla somma di tutte le uscite siano a livello logico H o L + il consumo del micro stesso).
Che poi anche le porte, come gruppi di pin abbiano dei limiti di corrente credevo fosse ovvio, il problema è... qual è il limite della porta come insieme di pin ?
:slight_smile:

I gruppi di pin non corrispondono alle porte.
Ciao Uwe

Per la verità io ho un documento numerato 8271D–AVR–05/11, mi sembra più recente di quello che hai postato che pèurtroppo non riesco a vedere (acrobat mi dà errore di visualizzazione). La tabella in questo doc è la 29.1 e riporta:
Maximum Operating Voltage ............................................ 6.0V
DC Current per I/O Pin ................................................ 40.0mA
DC Current VCC and GND Pins................................. 200.0mA
Personalmente Vi leggo ciò che ho sempre saputo: ogni pin, SINGOLARMENTE, può erogare 40mA, ma il chip non sopporta oltre 200mA in totale.
A mio avviso l'eccezione non è da cercare nella doppia massa, visto che il GND è comune e quei due pin GND sono solo dei punti di estensione della massa comune del chip, bensì nel pin AVcc che, da quanto si legge:

AVCC is the supply voltage pin for the A/D Converter, PC3:0, and ADC7:6. It should be externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC through a low-pass filter. Note that PC6...4 use digital supply voltage, VCC.

alimenterebbe i soli pin PC0÷PC3, quindi ADC0÷ADC3 (mentre ADC6 e 7 riguardano solo le versioni SMD). Allora, forse, alimentando separatamente (quindi col filtro passa-basso) Vcc e AVcc si potrebbe pensare di avere 200mA + 160mA?
Quello che non mi è chiaro è questo: visto che i pin PC0÷3 hanno sia funzione analogica che digitale, l'AVcc ne alimenta solo la sezione analogica o anche quella digitale?
Prova da fare: NON collegare AVcc a 5V e verificare se i pin PC0÷PC3 NON funzionano come analogici e se continuano a funzionare come digitali. Ma in questo caso significherebbe che il limite resta quello di 200mA totali.

Su questa cosa il data sheet è molto chiaro, e ci tengo a sottolineare che la dicitura "Absolute Maximum Ratings" deve essere presa alla lettera, ovvero si tratta di valori massimi in assoluto che non devono assolutamente essere superati, è bene tenersi lontano da questi valori limite nel normale funzionamento del micro.
In dettaglio abbiamo che un singolo GPIO non deve erogare, non importa il verso della corrente, più di 40 mA e la corrente complessiva che scorre nel micro non deve superare i 200 mA, questo valore include sia quella erogata dai GPIO che quella consumata dal micro stesso per il suo funzionamento.
Tutti i pin di alimentazione devono sempre essere collegati a Vdd o Vss come serve, anche se apparentemente sono in corto tra loro in realtà portano il flusso di corrente in diversi punti del chip in modo da distribuire il carico su varie zone.

allora Astrobeed, quello che dice CrossRoads nel playground Arduino Playground - ArduinoPinCurrentLimitations é sbagliato?
Lui dice che la somma della corrente che entrano nel ATmega328 attraverso tutti i PIN GPO piú consumo del Atmega possono arrivare a 400mA. Per il ATmega1280 e 2560 dice addiritura 800mA.
Ciao Uwe

uwefed:
allora Astrobeed, quello che dice CrossRoads nel playground Arduino Playground - HomePage é sbagliato?

Decisamente si.
Se fai scorrere 400 mA in un 328 ti garantisco che lo friggi in poche decine di secondi, chi non ci crede può fare l'esperimento a sue spese :grin:

Il data sheet dice testualmente:

DC Current VCC  and GND Pins................................. 200.0mA

Ovvero la somma totale su tutti i pins, da notare il plurale, Vcc e GND non deve superare 200 mA.

Quindi è come pensavo e come abbiamo in fondo sempre detto a tutti, quelli sono i limiti.
Resta però ancora aperta la questione, che ho sollevato in altre occasioni, e che ho ribadito qui, circa il "lavoro" che compie il pin AVcc. Mi confermate che il pin AVcc alimenta i circuiti analogici dei pin PC0÷3 e che se non viene alimentato tali pin continuano a funzionare come digitali e non come analogici?

O devo mettere un 328P su Breadboard e trovarmela da solo la risposta? :smiley:

Ci vorrebbero i test di testato, ma quando c'è da testare quella testa da test non c'è mai :stuck_out_tongue_closed_eyes: gli proporrò di cambiare il nick in UNTESTED :grin:

Sbaglia, e mi pare che il datasheet sia chiaro, perché nelle note (3) e (4) di pag. 318 del datasheet 8271D-AVR-05/11 si legge chiaramente che le specifiche sono relative a ciò che ogni gruppo di pin, indipendentemente dai valori massimi (Absolute), può reggere.

Detto in altre parole esistono dei limiti massimi per tutto il chip ma esistono anche dei limiti per ogni gruppo di pin. Quindi anche se un pin è in grado di fornire fino ad un max di 40 mA, non puoi comunque prelevare 40 mA da tutti i pin di una unica porta, perché passeresti il massimo di 150 mA. Ma questo limite non si somma a quello di altri gruppi di pin, quindi non puoi fare 150+150 perché 300 è maggiore di 200. Va inteso come un OR logico: if (Corrente > CorrenteMax) OR (Corrente > CorrentePorta). O l'uno o l'altro limite.

Non c'è bisogno di test, se ti ricordi mesi fa io pubblicai un paio di prove in cui vi informavo che un Atmega messo in standalone con i soli pin VCC/GND 7 e 8 senza i pin AVCC/GND 20 e 22 collegati funzionava senza problemi. Però astro intervenne dicendo che anche se non si usava l'ADC era sempre bene collegare i pin 20 e 22 per distribuire più uniformemente l'alimentazione a tutte le periferiche interne del micro.

La risposta è qui:

1.1.7 AVCC
AVCC is the supply voltage pin for the A/D Converter, PC3:0, and ADC7:6.

Ovvero Avcc alimenta l'ADC e fornisce corrente per l'uso digitale dei pin PC3:0 e ADC7:6 (non presenti nella versione pdip28), se non lo colleghi oltre a perdere l'ADC non puoi usare come out digitali i pin interessati, dovrebbero funzionare lo stesso come input digitali, però è da verificare.

Bene, è esattamente quanto dicevo io nel mio post, avevo proprio riportato quella frase, in aggiunta alla risposta data a Uwe.
Ma quanto afferma Leo non chiarisce la cosa, lui dice che funziona, ma cosa?
Ho capito che devo fare un po' di prove, a meno che qualcuno di buona volontà non mi voglia precedere, io non posso prima del 3/5 =(

leo72:
Sbaglia, e mi pare che il datasheet sia chiaro, perché nelle note (3) e (4) di pag. 318 del datasheet 8271D-AVR-05/11 si legge chiaramente che le specifiche sono relative a ciò che ogni gruppo di pin, indipendentemente dai valori massimi (Absolute), può reggere.

Detto in altre parole esistono dei limiti massimi per tutto il chip ma esistono anche dei limiti per ogni gruppo di pin. Quindi anche se un pin è in grado di fornire fino ad un max di 40 mA, non puoi comunque prelevare 40 mA da tutti i pin di una unica porta, perché passeresti il massimo di 150 mA. Ma questo limite non si somma a quello di altri gruppi di pin, quindi non puoi fare 150+150 perché 300 è maggiore di 200. Va inteso come un OR logico: if (Corrente > CorrenteMax) OR (Corrente > CorrentePorta). O l'uno o l'altro limite.

La differenza del limite globale (200mA) é che superandolo daneggi il ATmega; se superi il limite dei gruppi di Pin (nota 3 e 4 della tabella 28.2) rischi un malfunzionamento perché la tensione di uscita H e L non é nei limiti garantiti.

Ciao Uwe

Sono un po sconcertato, cioè se penso che Atmel scriva i datasheet inventandosi un nuovo modo di interpretazione allora la domanda è lecita come pure il dubbio. Io do per scontato che Atmel scriva i datasheet in modo standard e quindi come dice astro il valore di 200mA si riferisce alla corrente massima assoluta a cui è stato sottoposto il chip in fase di test, questo evidentemente (il chip) non si è guastato, tuttavia durante il test nell'insieme avranno notato un comportamento considerato limiti massimo, per cui è raggionevole pensare che il chip può lavorare con quella corrente. Tuttavia è come se io posizionassi i soprammobili in bilico e uscissi di casa e al rientro mi sorprenderei nel trovare tutti i soprammobili per terra.

Invece per quello che scrive bob in merito alla massima corrente prelevabile da una porta io dico che può avere senso, però nel datasheet non ho ricordo di questo dato. A mio modesto parere Bob commette l'errore di attribuire minore importanza al dato Absolute Maximum Rating (AMS), rispetto al dato ricavato sommando la massima corrente di ogni porta, tutto qui. I conti tornano subito attribuendo la massima priorità ad AMS, per cui se uso una sola porta, da questa posso prelevare 150mA e mi rimane ancora un margine di 50mA per arrivare con micro in "bilico". Se se si fa il conto 150/8=18,75 emerge, che impegno ogni pin con una corrente di 18.75mA valore ben al di sotto dei 40mA considerati AMS.

Ciao.

Mi pareva funzionasse regolarmente con input sugli A0..A5. Ma sono passati mesi... :sweat_smile:

uwefed:
La differenza del limite globale (200mA) é che superandolo daneggi il ATmega; se superi il limite dei gruppi di Pin (nota 3 e 4 della tabella 28.2) rischi un malfunzionamento perché la tensione di uscita H e L non é nei limiti garantiti.

Uhm.. Non credo. Io credo che si debba interpretare proprio come un limite massimo per gruppo di pin. Quindi se io prelevo più di 150 mA o se faccio assorbire più di 100 mA ai pin di una porta, danneggio comunque la circuiteria di alimentazione di quella porta.

MauroTec:
Invece per quello che scrive bob in merito alla massima corrente prelevabile da una porta io dico che può avere senso, però nel datasheet non ho ricordo di questo dato.

C'è il riferimento, leggi le note alle pagine che ho citato io:

leo72:
Sbaglia, e mi pare che il datasheet sia chiaro, perché nelle note (3) e (4) di pag. 318 del datasheet 8271D-AVR-05/11 si legge chiaramente che le specifiche sono relative a ciò che ogni gruppo di pin, indipendentemente dai valori massimi (Absolute), può reggere.

leo72:

[quote author=Michele Menniti link=topic=103793.msg778729#msg778729 date=1335822543]
Bene, è esattamente quanto dicevo io nel mio post, avevo proprio riportato quella frase, in aggiunta alla risposta data a Uwe.
Ma quanto afferma Leo non chiarisce la cosa, lui dice che funziona, ma cosa?

Mi pareva funzionasse regolarmente con input sugli A0..A5. Ma sono passati mesi... :sweat_smile:
[/quote]
ok, rifaccio qualche prova specifica.

uwefed:
La differenza del limite globale (200mA) é che superandolo daneggi il ATmega; se superi il limite dei gruppi di Pin (nota 3 e 4 della tabella 28.2) rischi un malfunzionamento perché la tensione di uscita H e L non é nei limiti garantiti.

Uhm.. Non credo. Io credo che si debba interpretare proprio come un limite massimo per gruppo di pin. Quindi se io prelevo più di 150 mA o se faccio assorbire più di 100 mA ai pin di una porta, danneggio comunque la circuiteria di alimentazione di quella porta.

+1 se prelevo 70-80mA da un pin a mio avviso danneggio il circuito del pin, non necessariamente il resto smette di funzionare. (test che NON farò $))

Allora, ho fatto un test molto semplice, prendendo spunto dallo sketch di esempio "AnalogInput". Ho solo sostituito il pin 13 con il 15 (che corrisponde a A1-PC1), e ad esso ho collegato un LED, Invece al pin A0-PC0 ho collegato il centrale di un potenziometro con estremi sull'alimentazione.
Il mega328 è in configurazione stand-alone a 1MHz, con alimentazione sui pin 7(5v), e 8 e 22(GND), il 20 (AVcc) è libero.
Risultato: al ruotare del potenziometro (lettura analogica) varia il tempo di blink del LED (uscita digitale).
Quindi il pin AVcc NON è l'alimentatore esclusivo dei pin PC0-PC3, alias A0-A3, visto che funzionano lo stesso.
Alcuni test aggiuntivi:
Ho scollegato a turno i due GND: non cambia nulla
Ho misurato sul pin AVcc: 4,36V su 5,2V di alimentazione.
Allora ho provato ad alimentare tramite AVcc, scollegando Vcc: continua a funzionare senza problemi
A questo punto ho abilitato al blink anche il pin 13: funzionano entrambi
Non ho approfondito le operazioni di funzionamento con il solo Avcc, ma mi sembra palese che la tensione applicata a Vcc o AVcc comunque alla fine converga in un punto comune. Ho anche fatto la prova scema: i due GND sono in corto tra loro mentre Vcc e AVcc sono "separati" da circa 12kohm.
Penso sia inutile scervellarsi, non c'è logica e non c'è rispondenza rispetto alle aspettative che genera il datasheet.
Secondo me Astro dovrebbe porre il quesito ad ATMEL, come già fece in occasione della questione della signature cancellata.
Penso possa bastare, come detto NON ho intenzione di fare prove spaccamicro con erograzioni di correnti superiori a quanto chiaramente e ampiamente scritto sul data-sheet.

[quote author=Michele Menniti link=topic=103793.msg779309#msg779309 date=1335881713]
Secondo me Astro dovrebbe porre il quesito ad ATMEL, come già fece in occasione della questione della signature cancellata.
Penso possa bastare, come detto NON ho intenzione di fare prove spaccamicro con erograzioni di correnti superiori a quanto chiaramente e ampiamente scritto [/quote]

Non c'è nulla da chiedere, e ve l'ho già spiegato in diverse occasioni, i vari pin di alimentazione sono tutti elettricamente connessi tra loro, ovviamente per eguaglianza di polarità, però sono fisicamente connessi in punti diversi del chip.
Avcc è diverso dagli altri pin di alimentazione, infatti risulta separato come minimo da un diodo, può essere sia collegato direttamente a Vcc, ma la precisione e stabilità del ADC ne risente, oppure tramite un filtro passa basso per eliminare il rumore sull'alimentazione, in questo modo si ha un sensibile miglioramento sulle letture ottenute dal ADC.
Vi ho anche già detto che tutte le linee di alimentazione presenti su un micro, o altra tipologia di IC, devono sempre essere collegate, non vanno mai lasciate libere, ed è pure buona norma mettere un condensatore di disaccoppiamento su ogni coppia alimentazione positiva/negativa.
Tutti i produttori forniscono Application Note generali che spiegano queste cose e forniscono esempi di come realizzare le alimentazioni, va da se che non si mettono a ripetere su ogni data sheet ciò che sono nozioni di base indispensabili a chi progetta hardware.

edit: Dimenticavo, non ha alcun senso fare prove con condizioni di funzionamento fuori da quelle imposte per il normale funzionamento, salvo il caso accertare cosa succede in caso di avarie e/o simulazione di condizioni critiche, perché trovare un malfunzionamento in questo caso è la norma e non serve a nulla stupirsi o urlare al "bug", siete fuori specifiche quindi è normale che le cose non vadano come atteso.

Comincio dalla fine:

  • non ha senso fare prove se l'intento è quello di dimostrare qualcosa di diverso da ciò che viene affermato, ma qui si tenta di provare ciò che viene affermato e cioè se l'AVcc alimenta univocamente i pin PC0-PC3, come sembra apparire dal data-sheet; non le ho certe scritte io le frasi che ho riportato e che mi pare abbia riportato pure tu, o Leo, ora non ricordo. Io oggi NON ho cercato vie di alimentazione e/o uso alternative allo standard, sarei un pazzo, ho cercato risposte ai dubbi che nemmeno tu riesci a dissipare e che personalmente ritengo legittimi; le prove "stravaganti" non le ho fatte per me, ma per dare una qualche indicazione a te e a chi in generale (e sono tanti) ne sa più di me. La seguente affermazione è tua, non mia:

(...citazione data-sheet...)Ovvero Avcc alimenta l'ADC e fornisce corrente per l'uso digitale dei pin PC3:0 e ADC7:6 (non presenti nella versione pdip28), se non lo colleghi oltre a perdere l'ADC non puoi usare come out digitali i pin interessati, dovrebbero funzionare lo stesso come input digitali, però è da verificare.

A me sembra che contrasti con quanto hai scritto nell'ultimo post e sicuramente contrasta con gli esiti delle prove che oggi ho fatto io; poi si può dire che va bene così, tanto sappiamo come far funzionare il micro. Ma se tu avessi sempre ragionato così non sarebbero mai usciti fuori alcuni Topic che fanno parte della storia di questo Forum (e non credo di esagerare). Potrei scodellare una sfilza di domande su questa cosa e oggi ancora nessuno sarebbe in grado di dare una risposta certa, perché quanto affermi sono principi generali, certamente esatti, ma che non spiegano purtroppo nulla riguardo i dubbi che ho sollevato qui e altrove. Ora questo è un Topic per i limiti di corrente, ed io per dare una risposta ad Uwe ho tirato in ballo anche la storia dell'ADC, quindi forse si divaga, per cui la cosa si può chiudere qui, no problem, però non mi dite che sto sbagliando, altrimenti iniziamo un'altra questione come quella di quei cessi di lock bits :grin:

L'errore di fondo è il voler a tutti i costi cercare un problema, il produttore fornisce delle specifiche che garantiscono il funzionamento del componente in un certo modo, se non ci si attiene a queste regole tutto diventa possibile, sia che apparentemente funziona lo stesso sia i risultati assurdi.