Go Down

Topic: Arduino e display 7 segmenti a 4 elementi (Read 2 times) previous topic - next topic

smartgatto

Ciao a tutti,
dispongo di un paio di questi LTC-2623G, che non sono altro che display a 7 segmenti a 4 elementi (per indicare l'ora, ad esempio), ma non so come potrei collegarlo all'arduino...
ho visto vari progetti per UN elemento a 7 segmenti (anche attraverso sn74ls47n) ma questo a 4 elementi per me è sconosciuto...

avete sottomano qualche link da cui potrei prendere spunto?

grazie!

an_je



Davider

#3
Mar 09, 2012, 02:41 pm Last Edit: Mar 09, 2012, 05:12 pm by Davider Reason: 1
Questi display, generalmente hanno 7 pin (1 per ogni segmento) + 4 pin (1 per ogni cifra), più altri supplementari...

Gli 11 pin che collegano le cifre, li devi comandare con l'arduino sequenzialmente (nel senso che comandi una cifra alla volta: la velocità rende impercettibile lo spegnimento del display)

ecco un codice base, che ho già utilizzato:

Quote
// accendo solo il display 1
  digitalWrite(d1, LOW);
  digitalWrite(d2, HIGH);
  digitalWrite(d3, HIGH);
  digitalWrite(d4, HIGH);
 
 
  switch(pri){
    case 0:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      break;
   
    case 1:
      digitalWrite(a, LOW);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      break;
   
    case 2:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, LOW);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      break;
   
    case 3:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      break;
   
    case 4:
      digitalWrite(a, LOW);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, HIGH);
      break;
   
    case 5:
      digitalWrite(a, HIGH);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, HIGH);
      break;
   
    case 6:
      digitalWrite(a, HIGH);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, HIGH);
      digitalWrite(g, HIGH);
      break;
   
    case 7:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      break;
   
    case 8:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, HIGH);
      digitalWrite(g, HIGH);
      break;
   
    case 9:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, HIGH);
      break;
   
  }
 
  delay(1);
 


questo è un codice che comanda solo una delle 4 cifre con il catodo in comune collegato al pin "d1", scrivendo la variabile pri: Questo codice è per display a Catodo comune (nel caso usi display anodo comune (come LTC-2623G: quindi è il tuo caso), devi invertire gli HIGH con i LOW e viceversa)...
NB: se noti disturbi sulle altre cifre aumenta il "delay", MAX 10ms...

Con questo metodo utilizzi 11 pin dell'Arduino, puoi ridurre i Pin utilizzati in due modi:
_attraverso un convertitore BCD sette segmenti (il TTL 7447 che viene accennato (quando compri un dispositivo logico TTL o CMOS devi dare importanza solo al numero; le lettere identificano cose secondarie es. la marca) è un convertitore BCD sette segmenti per display AC) adatto al tuo display nel caso sia anodo o catodo comune... NB: il codice BCD NON cambia nel caso si comandi un display AC anzichè CC (se 1=0001 con display a catodo comune, sarà 1=0001 anche con quelli a anodo comune invece di 1=1110)... con questo metodo passi da 11 pin (7+4) a 8 pin (4+4);


_attraverso le Porte NAND e NOT tenti di fare la seguente tabella della verità:

tabella per display AC
|   A   |   B   ||   d1  |   d2  |   d3  |   d4  |
|   0   |   0   ||    0   |    0   |    0   |    1   |
|   0   |   1   ||    0   |    0   |    1   |    0   |
|   1   |   0   ||    0   |    1   |    0   |    0   |
|   1   |   1   ||    1   |    0   |    0   |    0   |


tabella per display  CC
|   A   |   B   ||   d1  |   d2  |   d3  |   d4  |
|   0   |   0   ||    1   |    1   |    1   |    0   |
|   0   |   1   ||    1   |    1   |    0   |    1   |
|   1   |   0   ||    1   |    0   |    1   |    1   |
|   1   |   1   ||    0   |    1   |    1   |    1   |


In questo modo da 11 pin (7+4) ne utilizzi solo 9 (7+2)...
Puoi utilizzare questo metodo insieme a quello di prima passando dagli 11 pin (7+4) a 6 pin (4+2)...
scegli quello che ti fa più comodo...

NB: CC=catodo comune, AC=Anodo comune (prima che qualcuno mi chieda se esistano i display a corrente alternata)

NB: dato che devi collegare i 7 segmenti con una loro resistenza in serie, i pin del Catodo (o Anodo) comune vanno collegati direttamente alle uscite a loro corrispondenti...

Edit: Per pura curiosità ho provato a fare la tabella della verità qui sopra con il convertitore BCD / codice display 7segmenti e ci sono riuscito... nel caso si usi un 7447 si devono collegare il pin 6 (2^3) e il pin 7 (2^0) a massa, e utilizzare i pin 12 (b), 10 (d) [o il pin 9 (e)], 11 (c) [o 15 (f)] e 14 (g) per controllare i display; NB: il pin 10 può essere scambiato con il pin 9 e il pin 11 con il pin 15, a seconda di quello che vi fa più comodo...
Il convertitore deve essere adatto al display... Il 7447 va bene per display AC

Freddy65

#4
Mar 09, 2012, 07:14 pm Last Edit: Mar 09, 2012, 07:17 pm by Freddy65 Reason: 1
Ciao, è da un pò di tempo che sto lavorando al progetto di un monitor per batterie Auto/Moto con 3 LED e 3 display a 7 segmenti per visualizzare la tensione, è quasi completo, manca solo il pulsante per accendere il display per un certo tempo solo quando serve per non scaricare la batteria, ti allego lo schema ed il codice ti può essere di esempio.

Ciao.



Arduino 2009

Go Up