# HD44780

L'HD44780 è un ASIC prodotto da Hitachi, in grado di controllare display LCD capaci di visualizzare solo caratteri. Vengono commercializzati display completi di controllore di varie dimensioni a partire da 8x1, costituito da una riga di 8 caratteri, fino a dimensioni più grandi tra cui 8x2, 16x2, 20x2, 16x4, 20x4, ecc.
Per la sua diffusione l'HD44780 è considerato ormai uno standard de facto per il controllo di display LCD. Esso infatti viene usato soprattutto in ambito embedded per realizzare display di apparecchi elettrici e hobbystico a causa della larga versatilità e facilità di interfacciamento.
Nonostante spesso si faccia riferimento a display LCD, un controller compatibile con l'HD44780 può essere montato anche in display OLED o VFD.

## Disposizione pin

| Numero del pin | Funzione del pin |
| 1 | Vss (Massa) |
| 2 | Vcc (Genericamente 5V) |
| 3 | Vee (Controllo contrasto, da 2V a -3V secondo i tipi) |
| 4 | R/S (0 per selezionare l'invio di un comando, 1 per i dati) |
| 5 | R/W (0 per selezionare la scrittura di dati o comandi, 1 per la lettura dei dati o dello stato) |
| 6 | E (inizia il ciclo di scrittura o lettura, secondo R/S e R/W) |
| 7 | D0 (Bus dati) |
| 8 | D1 (Bus dati) |
| 9 | D2 (Bus dati) |
| 10 | D3 (Bus dati) |
| 11 | D4 (Bus dati) |
| 12 | D5 (Bus dati) |
| 13 | D6 (Bus dati) |
| 14 | D7 (Bus dati) |
| 15 | A (Vcc retroilluminazione, se presente) |
| 16 | K (Vss retroilluminazione, se presente) |
Notare che questa è la disposizione standard, ma la posizione dei pin, come anche altri valori, possono cambiare di modello in modello. I livelli logici 0 ed 1 utilizzati sono TTL compatibili.

## Modalità di trasferimento

L'HD44780 supporta il trasferimento parallelo sia di 8 bit (quindi l'intero comando), che di 4 bit (nibble).
Esempio: se è stata selezionata la modalità di trasferimento ad otto bit, il comando 10000001 verrà inviato per intero, quindi DB7 sarà pari a 1, DB6 uguale a 0, DB0 uguale a 1 e così via.
Se è selezionata la modalità di trasferimento a 4 bit, saranno utilizzati solo i pin da DB7 a DB4, verranno quindi effettuati due trasferimenti, prima verranno inviati i primi quattro bit del dato (1000), poi gli ultimi (0001).

## Comandi supportati

Tutti i comandi inviati al 44780 devono essere trasferiti con il pin R\S a zero.
I comandi possono essere di vario tipo:
* Inizializzazione: sono comandi genericamente eseguiti una sola volta, che indicano la modalità di visualizzazione, il verso di scorrimento del cursore, determinano se il cursore dovrà lampeggiare, la modalità di trasferimento (4/8 bit), la dimensione dei caratteri ecc.
* Posizionamento: indicano al controller dove scrivere il prossimo carattere, genericamente vengono usati per cambiare riga del display.
* Definizione di nuovi caratteri: l'HD44780 prevede la possibilità di definire fino a 8 caratteri personalizzati.
Per ulteriori informazioni sui comandi è consigliata la lettura del datasheet del display a cui si è interessati.

## Scrittura di un carattere

Per la scrittura di un carattere è necessario:
* Accertarsi che il cursore si trovi nel punto in cui si desidera stampare il carattere;
* impostare a 1 il pin R\S; a 0 il pin R\W;
* inviare il codice ASCII del carattere
* impostare a 1 il pin E per minimo 450 nanosecondi e riportarlo a 0