Blue Flower

Guida alla realizzazione di un semplice shield (TIL311_Shield1 base) per fare alcuni esperimenti con Arduino Uno Rev. 3

 

Nel nostro articolo realizzaremo un semplice Timer digitale a 2 cifre ( da 1 a 99 secondi) con conteggio alla rovescia utilizzando due display tipo TIL 311.

 

I TIL 311 usano una matrice di punti per visualizzare i numeri da 0 a F (in esadecimale) fornendo in ingresso 4 bit. Con 0000 visualizza lo zero, con 0001=1, con 1001=9, con 1010=A con 1111=F (vedi data sheet allegato).

Il nostro progetto ha tre pulsanti (P1, P2 e P3).

Con P1 si impostano le decine (ad ogni pressione di P1 il display delle decine si incrementa di uno)

Con P2 si impostano le unità (idem come sopra)

Con P3 si fa partire il conto alla rovescia. A termine conteggio i due display lampeggiano sullo zero. Premendo nuovamente P3 (per almeno 1 secondo) i due display si spengono (reset) e si può impostare un nuovo numero con P1 e P2.

Lo shield si presta anche ad altri usi. Ad esempio aggiungendo un LM35 su può realizzare un semplice termometro digitale o, semplicemente modificando il software, si può utilizzare come cronometro (conta in avanti in questo caso) utilizzando P1 e P2 come start/stop e P3 come reset.

Con delle semplici aggiunte (un trimmer o un potenziometro sull'ingresso analogico) si potrebbe ad esempio cambiare la luminosità dei display usando l'ingresso BL del TIL311 pilotato in PWM da Arduino, o ancora aggiungere un Buzzer per farlo suonare a fine conteggio, ed altro ancora.

Ecco lo schema elettrico dello shield

 

 Elenco Materiale

1 basetta millefori 6x6 cm (passo 2,54 mm)

3 Pulsanti per c.s. NA (P1, P2, P3)

2 TIL 311 (Display a matrice di punti)

2 zoccoli DIL da 14 pin per TIL311

1 Striscia contatti a pettine passo 2,54mm (1/10 pollice) per connessione Vs Arduino con almeno 30 contatti (io ho utilizzato una striscia simile a questa qua sotto. Ho dovuto pero spingere verso il basso con una pinza la parte sporgente per avere più lunghezza da sfruttare sotto)

1 Filo da 0,5 mm per collegamenti (piste lato rame)

1 Saldatore e stagno

e poi...tanta pazienza.

 

Inserire i componentii nella posizione indicata dallo schema seguente (ogni incrocio dei quadratini rappresenta una piazzola del c.s.). Prima zoccoli e pulsanti (puntare con un po' di stagno).

Il disegno in scala doppia dei collegamenti (visto dal lato componenti come se fosse trasparente).

 A fine cablaggio è buona norma controllare con un tester che non ci siano corticircuiti e che tutti i collegamenti siano a posto.

 

Ed ecco in fine il codice per testare il tutto.

 

//Autore: Vincenzo Maida - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
//Data: 24/03/2015 - Torino (Italy)
//Contasecondi a 2 cifre (1-99 sec) con due display TIL311 e tre pulsanti di comando (P1,P2,P3)
//P1=Imposta decine (incrementa di uno ad ogni pressione); P2=Imposta Unità; P3=Avvia conteggio alla rovescia
//A fine conteggio il display lampeggia. P3 premuto per più di un secondo resetta (spegne i display!!)

int p1=4; //pin pulsante P1 (set) Decine
int p2=10; //pin pulsante P2 (set) Unità
int p3=13; //pin pulsante P3 (Start)
//Display TIL311 (DP1 e DP2)
int BL1=5; //Input Blank (8) di DP1 Decine su uscita  PWM di Arduino. 0=Acceso; 1=Spento (attivo basso)
int pin1[] = {1,0,3,6};//Pin TIL311 Decina (Display 1 a sinistra). Segmenti A (3), B(2), C(13), D(12) del TIL 311 

int BL2=11; //Input Blank (8) di DP2 Unità su uscita  PWM di Arduino. 0=Acceso; 1=Spento (attivo basso)
int pin2[] = {8,7,9,12};//Pin TIL311 Unità (Display 2 a destra). Segmenti A(3), B(2), C(13), D(12) del TIL 311 
int TIL[][16]={
              {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1},
              {0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1},
              {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1},
              {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}
            };
//Variabili per gestione display
int d=0; //Contatore decine
int u=0; //Contatore unità
int i=0;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  //Inizializza segmenti TIL311 di DP1 (Decine)
  for(i=0;i<4;i++){
  pinMode(pin1[i], OUTPUT);
  } 
  pinMode(BL1,OUTPUT);
  digitalWrite(BL1,LOW); //Accende il display decine
  
  //Inizializza segmenti TIL311 di DP2 (Unità)
  for(i=0;i<4;i++){
  pinMode(pin2[i], OUTPUT);
  } 
  pinMode(BL2,OUTPUT);
  digitalWrite(BL2,LOW); //Accende il display unità
 
 
 //Inizializza pulsanti con resistenza di pullup interna 
  pinMode(p1,INPUT_PULLUP);
  pinMode(p2,INPUT_PULLUP);
  pinMode(p3,INPUT_PULLUP);
}

// the loop routine runs over and over again forever:
void loop() {
  //Set display decine
  if(digitalRead(p1)==LOW){
    delay(500);
    digitalWrite(BL2,LOW); //Accende il display unità
    digitalWrite(BL1,LOW); //Accende il display decine
    d++;
    if(d>9) d=0;   
  }
  
   //Set display unità
  if(digitalRead(p2)==LOW){
    delay(500);
    digitalWrite(BL2,LOW); //Accende il display unità
    u++;
    if(u>9) u=0;   
  }
  //Aggiorna cife display
  //Display decine
  for(i=0;i<4;i++){
   digitalWrite(pin1[i],TIL[i][d]);
  }
  //Display unità
  for(i=0;i<4;i++){
   digitalWrite(pin2[i],TIL[i][u]);
  }
  //Gestione P3 (start/Reset)
  if(digitalRead(p3)==LOW){
    while(u>0 || d>0){
      while(u>0){
        delay(1000);
        u--;
        for(i=0;i<4;i++){
         digitalWrite(pin2[i],TIL[i][u]);
        }
      }
      if(d>0){
        delay(1000);
        d--;
        u=9;
        //Aggiorna display
        //Display unità
        for(i=0;i<4;i++){
          digitalWrite(pin2[i],TIL[i][u]);
        }
        //Display decine
        for(i=0;i<4;i++){
         digitalWrite(pin1[i],TIL[i][d]);
        }
      }
    }//Fine conteggio alla rovescia
    //Gestione reset
    while(digitalRead(p3)!=LOW){
      //I display lampeggiano finche non premo reset (P3)
     digitalWrite(BL1,LOW);// Accendo display decine
     digitalWrite(BL2,LOW);// Accendo display unita
     delay(500);
     digitalWrite(BL1,HIGH);// Spegne display decine
     digitalWrite(BL2,HIGH);// Spegne display unita
     delay(500);
     
    }
    
  }//Fine gestione P3 (start/reset)
  
}

Ecco a titolo indicativo alcune immagini del TIL311 (i collegamenti non si riferiscono a questo articolo!)


Nel mio caso i BL sono stato portato su Arduino mentre lo strobe è stato collegato a massa (immaginate di scambiare la situazione dei piedini 5 e 8 dello schema sopra)

Qui potete trovare il data sheet del TIL311