Académique Documents
Professionnel Documents
Culture Documents
Por
Supongamos
Unidad
ejemplo:
que
quiero
de
visualizar
mil
el
numero 1234
Centena
Decena
Unidad
numero
4.
Entonces
resumiendo,
Reduccin
las
de
ventajas
componentes
Economizamos
Menor
son
las
en
nuestro
utilizacin
siguientes:
la
placa.
proyecto.
de
pines.
Complicacin
de
software.
Debemos estar prendiendo y apagando nuestros display cada 5ms, que pasara
si necesito ejecutar una accin que demore mas de ese tiempo y que no se pueda
interrumpir?,
por ejemplo ejecutar la lectura de un sensor de temperatura que suele demorar
mas de ese tiempo, veramos un numero incorrecto en los displays.
int estadobtn1 = 0;
int estadobtn2 = 0;
int digit1 = 0;
int digit2 = 0;
int digit3 = 0;
int digit4 = 0;
int count = 0;
int val;
int val2;
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(BTN1, INPUT);
pinMode(BTN2, INPUT);
digitalWrite(BTN1, HIGH); // activa RPA
digitalWrite(BTN2, HIGH); // activa RPA
pinMode(CC1, OUTPUT);
pinMode(CC2, OUTPUT);
pinMode(CC3, OUTPUT);
pinMode(CC4, OUTPUT);
count = 0;
}
void loop() {
val = digitalRead(BTN1); // lee el valor de entrada y almacnlo en
val
if (val != estadobtn1) // el estado de botn ha cambiado!
{
if (val == LOW) // compruebe si el botn es presionado
{
count++;
count %= 10000;
}
}
estadobtn1=val;
}
// display number
digit1=count / 1000;
digit2=(count - (digit1 * 1000)) / 100;
digit3=(count - (digit1*1000) - (digit2*100)) / 10;
digit4=count % 10;
lightDigit1(numbers[digit1]);
delay(2);
lightDigit2(numbers[digit2]);
delay(2);
lightDigit3(numbers[digit3]);
delay(2);
lightDigit4(numbers[digit4]);
delay(2);
}
digitalWrite(CC4, HIGH);
lightSegments(number);
}
digitalWrite(CC1, HIGH);
digitalWrite(CC2, HIGH);
digitalWrite(CC3, HIGH);
digitalWrite(CC4, LOW);
lightSegments(number);
}
Multiplexado de 8 displays de 7
segmentos con solo 8 pines
La tcnica de multiplexar varios displays de 7 segmentos se basa en el defecto que tenemos los
humanos en los ojos (persistencia de la retina) en donde nos da la sensacin de ver una imagen
cuando esta ya ha desaparecido.
Si tenemos un oscilador que nos controla el encendido y el apagado de un led, creando una
intermitencia, en el momento que esta sea lo suficientemente rpida ya no apreciaremos que el
led llega a apagarse, sino que nos dar la sensacin que esta permanentemente encendido.
Prcticamente a frecuencias superiores a 30hz ya no apreciamos el parpadeo.
En muchos dispositivos se emplea el multiplexado para ahorrar el nmero de pines.
El esquema de la figura representa la forma ms tpica para multiplexar 2 displays a travs de un
microcontrolador.
Por ejemplo si queremos representar en los displays el numero 12, primero mandamos a los
nodos la tensin para encender los dos segmentos que forman el numero 1 y a continuacin
polarizamos el ctodo mediante el transistor T1, con lo cual solo se iluminara ese display,
transcurrido un tiempo dejamos de polarizar la base de T1 para que dicho display se apague, y
procedemos a mandar la informacin para encender los cinco segmentos que forman el numero
2 y solo entonces polarizamos el transistor T2 para que se encienda ese display.
Al realizar esta operacin a una frecuencia superior a 30 hz no apreciaremos que el 1 y el 2
estn continuamente parpadeando y alternndose uno y otro.
Con este sistema necesitaremos 7 pines del microcontrolador para controlar los nodos de los
displays, mas un pin mas por cada digito que queramos poner. As en el caso de utilizar 8
displays necesitaremos 15 pines para controlarlos.
Primeramente observar detenidamente el esquema de cmo controlar 8 displays con tan solo 8
pines. Pinchar en la imagen para ampliar.
Como veis a parte del ahorro de pines, tampoco necesitamos transistores ni resistencias
limitadoras, ya que el propio microcontrolador PIC limita la corriente a 25 mA.
Para usar este sistema de multiplexado tenemos que encender los 56 segmentos que forman los
8 displays individualmente, pondremos a 0 el ctodo del display a representar, a 1 un nico
segmento, y el resto de pines hay que ponerlos en estado de alta impedancia (configurados
como entradas).
Por supuesto la ventaja del ahorro de pines se vera contrarestada por la disminucin en
luminosidad de los segmentos. Para el caso concreto del control de 8 dgitos, cada segmento lo
he mantenido encendido durante 400 microsegundos, y tarda 23 milisegundos en completar un
ciclo completo. La eleccin de los 400 microsegundos los he elegido para evitar que se aprecie la
intermitencia de los segmentos, ya que si aumento el tiempo a 500 microsegundos ya se aprecia
una leve intermitencia.
En la rutina que os pongo a disposicin, dedico 400 microsegundos a cada segmento,
independientemente que este se muestre apagado o encendido. Fcilmente se puede modificar
la rutina para eliminar el tiempo en donde los segmentos permanecen apagados, con lo cual
ganaramos en luminosidad, pero tendremos el inconveniente de que la luminosidad variara
dependiendo de los nmeros a representar, asi el 11111111 se vera con mucha luz, mientras
que el 88888888 se vera menos iluminado.
La modificacin consistir en sustituir en las lneas donde aparezca: goto FinSeg-- (FinSeg2a)
por goto Seg-- (Seg2b).
Podeis descargar el Archivo de PROTEUS, el codigo HEX y el codigo fuente ASM.
Es muy posible que la simulacion con proteus no funcione correctamente, ya que puede que el
ordenador se ralentice.
En el ejemplo que descargueis muestro en los 8 displays los numeros "12345678".