Arduino e i suoi display. Parte prima

Con questa serie di articoli vorrei illustrare le varie possibilità di visualizzazione disponibili per le schede Arduino e compatibili. Cominciamo da una cosa un po’ particolare e forse meno diffusa. L’utilizzo di un display LCD a sette segmenti. Quattro cifre compresi i punti decimali. I classici display che possiamo trovare sui tester, sugli orologi e su mille altre applicazioni. Tali display hanno diversi punti di forza. Consumano pochissimo, cosa questa che li rende ideali per applicazioni alimentate a batteria. Si trovano in tante forme e dimensioni a prezzi accessibili, in particolare se ordinati in grandi quantità. Hanno un grado di visibilità alla luce del sole, specialmente la versione riflessiva, imbattibile. Dove display molto più blasonati e costosi falliscono miseramente sotto un raggio di sole, questi si esaltano…

Il lavoro che vedremo in seguito si basa su una libreria scritta da Marcus Mason, con le necessarie modifiche, che potete trovare su github.

Per la mia realizzazione sono necessari:

  • scheda Arduino nano o similari
  • circuito integrato MM5453
  • display LCD 7 segmenti DE-158
  • scheda breadbord, fili collegamento, una resistenza 47 Kohm, un condensatore 10 nF.

Il progetto prevede di utilizzare solo due pin di Arduino per la comunicazione, lasciando il compito del pilotaggio dei segmenti ad un circuito integrato specializzato. Ne esistono moltissimi ovviamente, di marche, contenitori e numero di segmenti diversi. La libreria che ho scelto ad esempio gestisce i modelli:

M5450 (LED, 34 segmenti)
M5451 (LED, 35 segmenti)
MM5452 (LCD, 32 segmenti)
MM5453 (LCD, 33 segmenti)
AY0438 (LCD, 32 segmenti)

Per motivi di reperibilità e praticità di montaggio ho scelto l’ MM5453 nella versione DIL 40 pin che è possibile inserire in una breadboard. Può pilotare fino a 33 segmenti singolarmente.

Per l’LCD invece la scelta è ricaduta sul modello DE-158 riflessivo, molto ampio 9 cm x 3.5 cm, con quattro grosse cifre (2.5 cm) più i punti decimali e i due punti tipici degli orologi. 32 segmenti in totale.

Lo schema elettrico, pur se un po’ laborioso è abbastanza semplice. I vari segmenti del display sono tutti collegati alle uscite del CI MM5453. La prima uscita va al segmento A del prima cifra, la seconda al segmento B e così via..

I segmenti di ogni cifra sono identificati con una lettera da A a F con lo schema seguente:

7pins2

Completano lo schema i collegamenti del positivo e negativo di alimentazione, derivati da Arduino nano collegato con USB, e il collegamento ai pins digitali 3 e 4 di Arduino per l’interfaccia seriale con i pins clock e data del MM5453. La resistenza da 47 kohm e il condensatore da 10 nF servono per realizzare la frequenza di aggiornamento del display.

Schema elettrico:

lcd

Questo lo schema di montaggio su breadboard:

LCD7SEG

Per poter utilizzare questo display con la libreria in questione è necessaria una piccola modifica. Cercate il file SevenSegment.cpp che dovrebbe trovarsi (dopo aver installato la libreria) nella cartella Documenti/arduino/libraries/arduino-seven-segment-master. Cercate all interno del file la riga che riporta il commento //Write data segments . Aggiungete alla variabile segmentCount +2. Così:


// Write data segments
	if (_device.segmentsOrderInc){

		// Output data in ascending order modificata con +2 per tenere conto dei primi due segmenti non utilizzati
		for (uint8_t i = 0; i < segmentCount+2; i++){ digitalWrite(_pinData, _data[i] ? HIGH : LOW); pulseClock(); } } else{ // Output data in descending order for (int8_t i = segmentCount - 1; i >= 0; i--){
			digitalWrite(_pinData, _data[i] ? HIGH : LOW);
			pulseClock();
		}
	}

Questo un codice di esempio:



#include <SevenSegment.h>
#include <Wire.h>

#define CLOCK 3  // Arduino pin digitale 3
#define DATA 4	 // Arduino pin digitale 4

SevenSegment screen(CLOCK, DATA);

uint16_t counter = 0;

void setup(){
  
	// Imposta display driver MM5453 e tipo di display 
        // (4 cifre con punti decimali e due punti)
  
	screen.begin("MM5453","8.8|8.8");

}

void loop(){

	// Accende e spegne tutti i segmenti per 5 volte
	for (int i=0; i<5; i ++){

		// tutto on
		screen.on();
		delay(500);

		// tutto off
		screen.clear();
		delay(500);
	}

	// Conta fino a 9999
	for (int i = 0; i < 10000; i++){
		screen.printNumber(i);
		delay(20);
	}
  
	// Mostra tutti i caratteri possibili
	screen.setAlignment(LEFT);
	char c[2];
	for (int i = 32; i<= 127; i++){
		c[0] = i;
		c[1] = 0;
		screen.print(c);
		delay(200);
	}
 
}

 

2 thoughts on “Arduino e i suoi display. Parte prima

  1. Justo lo que estaba buscando, lo unico que los componentes(libreria) como el mm5453 no lo tiene el programa Fritzing, por el resto genial, voy a probar el montaje para ver que tal funciona.

    Un saludo,
    Luis.

    1. Grazie Luis. Purtroppo per Fritzing non posso aiutarti.
      Se monti tutto correttamente funziona.
      L’ho montato e testato personalmente.
      Le foto che seguono sono di un prototipo di bussola elettronica GPS stagna galleggiante per nautica,
      realizzata proprio con quello schema.

      Saluti

      nodi

      gradi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *