Para seguir con el marcador, nos damos cuenta de que si usamos registros de desplazamiento y conversores a 7 segmentos, el circuito nos va a quedar más complejo que si usamos sólo registros de desplazamiento, ya que con la primera opción necesitaríamos 5 circuitos integrados por cada marcador, mientras que con la segunda opción serían sólo 3, lo que reduce bastante las conexiones a realizar. Así que, aunque el programa resulte un poco más complejo, optamos por esta segunda opción.
Montamos entonces un segundo circuito en la placa board, con los tres dígitos de un marcador y tres circuitos 74HC595, siguiendo las indicaciones del enlace que pusimos en la entrada anterior. La forma de funcionar con este sistema es asignar un bit del registro a cada segmento del dígito. Por esto se necesita un registro para cada dígito. Y en el programa, hay que hacer la conversión de cifra a segmentos, como haría el conversor de BCD a 7segmentos.
El esquema del montaje es:
Lo que nos queda como en la imagen:
Para probarlo usamos un programa que cuente progresivamente, que adjuntamos.
/* Shift Register Example for 74HC595 shift register Contador de 3 dígitos con registros de desplazamiento 74HC595 Convierte datos numéricos en segmentos sin conversor electrónico Hardware: * 3x 74HC595 shift register attached to pins 8, 12, and 11 of the Arduino, as detailed below. * 3x dígito de 7 segmentos Created 22 May 2009 Created 23 Mar 2010 by Tom Igoe 27/2/2018 - Conversión a 7 segmentos por Rafael Caballos */ // Definición de conversión a 7 segmentos byte Segment7[10]={B00111111,B00000110,B01011011,B01001111,B01100110,B01101101,B01111101,B00000111,B01111111,B01101111}; //Pin connected to latch pin (ST_CP) of 74HC595 const int latchPin = 8; //Pin connected to clock pin (SH_CP) of 74HC595 const int clockPin = 12; ////Pin connected to Data in (DS) of 74HC595 const int dataPin = 11; void setup() { //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { int ii; for(ii=0;ii<999;ii++) { // write to the shift register registerWrite(ii); delay(200); } } // This method sends bits to the shift register: void registerWrite(int dato) { byte num1,num2,num3; num1=dato % 10; num2=(dato / 10) % 10; num3=dato / 100; // turn off the output so the pins don't light up // while you're shifting bits: digitalWrite(latchPin, LOW); // shift the bits out: shiftOut(dataPin, clockPin, MSBFIRST, Segment7[num3]); shiftOut(dataPin, clockPin, MSBFIRST, Segment7[num2]); shiftOut(dataPin, clockPin, MSBFIRST, Segment7[num1]); // turn on the output so the LEDs can light up: digitalWrite(latchPin, HIGH); }
Y se puede ver su funcionamiento en el vídeo siguiente:
Deja una respuesta