Corrispondenza pinout
In rete si trovano moltissimi arrangiamenti che mostrano le funzioni dei singoli pin attraverso sigle che assumono un senso quando apriamo il datasheet del ATmega328p. Anche io allora mi sono improvvisato grafico con inkscape per realizzare il mio personale arrangiamento dove tutti i pin in verde hanno comportamento digitale, mentre in giallo/dorato sono evidenziati i pin che possono aquisire valori analogici e convertirli in digitale. Ad esempio, PC0÷PC5 sono pin digitali, gli stessi pin ADC0÷ADC5 fanno capo al convertitore ADC presente dentro la MCU.
Alcuni pin non compaiono poiché sono usati ad esempio per il reset, per il quarzo (o risonatore cermico). SCK/MOSI/MISO e SS fanno capo al device SPI (Serial Peripheral Interface) e sono tutti evidenziati in blu. Sulla sinistra in alto abbiamo tutti i pin di alimentazione: 2 pin per 5.0V, 2 pin per GND. La tensione ausiliaria da 3.3V (~50mA). Il pin VIN vi permette di prelevare la tensione di alimentazione che proviene dal connettore DC-VIN dove collegherete un alimentatore la cui tensione sia nel range 7÷12V.
Terminiamo con i pin evidenziati in celeste (SDA(A4)/SCL(A5)) che fanno capo al device 2-wire (i2c compatibile) usati spesso per comunicare con sensori di vario tipo e controllare display LCD. Particolarità di questo device è la possibilità di collegare più dispositivi (sensori ecc) agli stessi due fili. SCL è una funzione alternativa del bit5 di porta C (PC5), mentre SDA è una funzione alternativa del bit4 della stessa porta C (PC4). Detto in altri termini se uso 2-wire non posso acquisire dati analogici da ADC4 e ADC5, né tanto meno usarli come pin digitali.
Nota sui colori - L'uso di cavetti colorati riduce il rischio di fare danni, per cui consiglio di usare i seguenti cavetti colorati:
Tutte queste sigle per ogni pin, indicano le funzioni principali e quelle alternative, ad esempio, PCINT sono pin che possono sollevare un interrupt (se abilitati) PINCHANGED quando il loro stato cambia. Il numero a seguire PCINT indica la priorità, occhio che PCINT0 ha priorità su PCINT1 e su tutti gli altri fino a 22. In breve la priorità maggiore inizia da zero e la minore è PCINT22.
Stessa considerazione per i due pin PD2, PD3 i quali rispettivamente possono sollevare una IRQ (Interrupt Request) rispettivamente INT0, INT1. A differenza di PCINT, INT0 e INT1 sono configurabili per sollevare una IRQ, su fronte di salita o su quello di discesa o entrambe.
Le porte
Le porte sono siglate con prefisso P (Port), una lettere (A÷Z) e un numero che indica il bit (o peso) assunto all'interno della porta. Per una MCU ad 8 bit una porta completa è composta da 8 pin.
L'unica porta (fisicamente disponibile) completa è la porta D (PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0). Può stupire che l'elenco inizi da PD7 per finire con PD0, ma secondo la numerazione binaria se accendo il bit PD7, in decimale ho 128, se accendo anche PD0, in decimale ho 129.
Pertanto si dice, che il bit più a destra (PD0) è il bit meno significativo (LSb), quello più a sinistra è il più significativo (MSb). LSb sta per Least Significant bit, mentre MSb sta per Most Significant bit.
Nella pratica PD0 e PD1 sono impegnati con funzione TX e RX, sia per trasferire il firmware, sia per comunicare con il PC via serial monitor, pertanto considerare PD una porta completa usabile è possibile solo rinunciando alla comunicazione seriale e optando per la scrittura del firmware tramite ICSP. Per tale motivo è bene non collegare nulla ai pin PD0 e PD1, diversamente potrebbe non essere possibile il trasferimento del firmware.
Pin Impegnati
PC6 è usato per potere resettare la MCU. Non si consiglia usarlo per altre funzioni. Il pin deve stare HIGH con pull-up, un fronte di discesa resetta la MCU.
PD0, PD1 sono impegnati per il trasferimento del firmware e per comunicare con il serial monitor. Non si consiglia l'uso per altre funzioni.
PB6, PB7 sono impiegati per collegare un quarzo o risonatore. In standalone scegliendo come sorgente di clock l'oscillatore RC interno questi due pin sono liberi di essere usati.
Conclusione
Per terminare facciamo la conta dei pin digitali disponibili che sono 18 in totale, 6 (4 se usiamo 2-wire interface) di questi possono acquisire informazioni analogiche. In totale 6 uscite possono generare segnali PWM, sfruttando i 3 timer hardware interni alla MCU.
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale