Pre-Order Kelboy 2.1 Kit

Tienes 3 kits a elegir, aprovecha antes de agotar stock, las primeras unidades tienen envío rápido.

Controlar 4 dígitos de 7 segmentos de la manera más simple

En este tutorial os enseñaremos a cómo controlar una pantalla de 4 dígitos y 7 segmentos de la manera más simple con un Arduino y un 74HC595

Advance
3


Controlar un Display de 4 dígitos

Estos displays de segmentos se hicieron populares en los 80 y 90, sobretodo para indicar la hora, en formato de 4 dígitos.

Son una herramienta para aprender a manejar ciertos elementos que nos podemos encontrar en cualquier kit de aprendizaje.

También se venden soldados en placas con controladoras ya hechas.

El funcionamiento se puede resumir en que el responsable de que todo funcione es el microcontrolador (Arduino), que ordena al 74HC595 (shift registers), que bits debe encender en el display.

Este display está organizado en el siguiente esquemático:

Image

En el caso que se va a explicar, se tiene que utilizar como referencia el común en cátodo.

Hemos optado por una solución en la que queremos usar el menor número de 74HC595 posibles. Los controladores comerciales venden placas de un coste más elevado porque utilizan 4 de ellos como se puede ver en el siguiente esquema:

Image

Eso hace controlar individualmente cada uno de los segmentos por separado, pero incrementar el precio de la solución por 4. Nosotros buscamos una solución más inteligente.

Por lo que ha de tenerse en cuenta a la hora de seguir el esquemático.

Image

Plasmándolo sobre una placa de prototipados:

Image


Con un poco de trabajo podemos implementar el siguiente código:

const int clockPin = 7;    //74HC595 Pin 11
const int latchPin = 8;    //74HC595 Pin 12
const int dataPin = 12;    //74HC595 Pin 14
const int digitPins[4] = {5,4,3,2}; //Arduino Segment pin controller
const int number[10] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 103}; //binary numbers in decimal

void setup(){               
  //Init
  for(int i=0;i<4;i++){
    pinMode(digitPins[i],OUTPUT);
    digitalWrite(digitPins[i], HIGH);
  }
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
}



void loop() {
  for(int i=0;i<4;i++)
  {
    //select the digit by enabling the common cathode (sink)
    for(int x=0;x<4;x++)
    {
      digitalWrite(digitPins[x], HIGH);
    }

    // write 'digits'
    for (int j=0;j<10;j++){
      digitalWrite(digitPins[i], LOW);
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, number[j]);
      digitalWrite(latchPin, HIGH);
      delay(100);
    }
    
  }
}

Si hemos respetado bien el esquema podremos observar en la pantalla el siguiente resultado:

Image