Uno de los dispositivos interesantes para la realización de prácticas, tanto de programación como de electrónica digital es sin duda alguna el display 7 segmentos. No son más que 8 diodos leds, con sus catados o ánodos unidos y dispuestos físicamente de tal forma que se puede crear con ellos algunas letras y números. Pero el gran problema de los puertos de las placas como la EduShield Canarias, es que solo tienen 2 pines digitales y un puerto I2C (aparte de la alimentación). En consecuencia he diseñado una placa que gracias a un expansor de puertos PCF8574, nos permitirá enviar los datos que queremos que aparezca en los displays y con los dos pines digitales podremos controlar el encendido o apagado de cada uno de los displays gracias a unos transistores PNP en configuración emisor común. Al funcionar, el PCF8574, como salidas en drenador abierto, nos surge el problema de la falta de corriente cuando insertamos un «1» lógico, por lo que se ha paliado realizando un pull-up sobre los catados de los segmentos de los display. En este caso el display es doble y se comparten los pines de los cátodos de ambos, por lo que para representar números en los dos dígitos es necesario multiplexar en tiempo. Para una representación a 50 Hz es necesario un tiempo de 20 ms, por lo que el encendido de cada display multiplexado no debe ser superior a 10 ms.
En el diseño se han puesto pines de 2,55mm tanto para las señales de control (para poder utilizarlo con cualquier placa microcontrolada, como un Arduino UNO R3), como para las señales de salida, con lo que se puede usar con otros dispositivos (diodos leds externos, etc…). En caso de no poder fabricar esta placa puedes comprar una genérica y montar en protoboard el display. En cambio, si tienes posibilidad de fabricarla te dejo el archivo GERBER aquí.
Aquí tienes enlaces a placas genéricas en Amazon o en Aliexpress.
Para facilitar el uso de la placa he creado una librería que contiene ejemplos de usos a distintos niveles. El objeto creado para el control de la placa contiene los siguientes métodos:
· byteWrite (short valor) -> Escribe un byte sobre los displays.
· clearDisplayNumber(int display) -> Pone a cero las variables internas del display 1 y del display 2.
· displaysOFF() -> Apaga ambos displays.
· setSegmentDigit1 (int segmento, bool valor) -> añade a la variable del display 1 el valor del segmento indicado.
· setSegmentDigit2 (int segmento, bool valor) -> añade a la variable del display 2 el valor del segmento indicado.
· selectDigitDisplay (int display) -> activa el display indicado y apaga el otro.
· writeBCD (short valor) -> Escribe sobre los displays el valor indicado codificado a 7 segmentos desde BCD.
· writeDigit (short valor) -> Escribe un byte sobre los displays.
Puedes acceder a la librería en https://github.com/rsuagued/EduShield2Display7Seg. y ver un ejemplo de funcionamiento aquí:
