Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more ➡
Download
Standard view
Full view
of .
Add note
Save to My Library
Sync to mobile
Look up keyword
Like this
40Activity
×
0 of .
Results for:
No results containing your search query
P. 1
Tutorial III - Contador Decimal usando pulsadores y displays de 7 segmentos-

Tutorial III - Contador Decimal usando pulsadores y displays de 7 segmentos-

Ratings:

1.0

(1)
|Views: 8,015|Likes:
Published by giraa2
Tutorial III - Contador Decimal usando pulsadores y displays de 7 segmentos-
Tutorial III - Contador Decimal usando pulsadores y displays de 7 segmentos-

More info:

Published by: giraa2 on Feb 01, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See More
See less

06/23/2013

pdf

text

original

 
TUTORIAL IIIOBJETIVOS
Crear códigos en C de mayor complejidad.
Atender interrupciones por cambio de estado en Puerto B y por cambio de estado enel pin RB0/INT.
Realizar el Tercer Proyecto: Contador Decimal usando pulsadores y displays 7segmentos.
Aprender a utilizar del sistema multiplexado de displays 7 segmentos e identificar lasventajas de este sistema respecto de uno no multiplexado.
Repasar y reafirmar los conceptos vistos hasta el momento.
Aplicar lógica inversa en el código y en las conexiones.
PROYECTO 3:
Contador Decimal usando pulsadores y displays de 7 segmentos.Este proyecto es básicamente el mismo que el proyecto 2, pero haciendo uso de unamejor visualización para el contador interno, que una vez mas se va a modificar con unpar de pulsadores, uno conectado al pin RB0 y el otro al RB7. El valor de la variableserá visualizado esta vez en sistema numérico decimal y no en binarioPara esto se utilizaran un par de displays 7 segmentos de ánodo común como losmostrados en los diagramas de conexiones. Cada display tiene usualmente 10 pinespara su conexión.Siete de ellos controlan la visualización como tal del dígito, cada uno controlando unsegmento del numero 8. Vienen identificados por convención con letras de la “a” a la g”Su activación selectiva es la que genera los dígitos del 0 al 9. Otro pin activa odesactiva el punto decimal y los otros 2, ambos, trabajan como ánodo común.Dependiendo también del modelo existen displays de cátodo común que son parecidosa los que acá se van a usar con una diferencia fundamental: el modo de conexión yalimentación.Los pines de ánodo común se conectan a V+ y cada segmento se activa enviando 0Vpor cada pin correspondiente. En caso de que sea display de cátodo común, los pinesde cátodo común se conectan a GRND (Tierra) y cada segmento se activa enviandoV+. Por eso en este tutorial se dice que la activación se efectúa con lógica inversa: paraactivar los display envío 0V por los pines del microcontrolador y no 5 V como hastaahora se había hecho.Para generar los dígitos como tal, se configuran los pines del puerto del PIC al que esteconectado el display para que envíe 0V solo a los pines que se me generan el dígito,por ejemplo para el cero, y suponiendo que los pines a, b, c...g vayan al RC0, RC1,RC2... RC6 respectivamente, desde el código en C se puede configurar TRISC=0 como
 
salida, y PORTC=0b11000000; (el “g” que controla la raya horizontal interna del 8 se lehan enviado 5 V para indicar que lo quiero desactivado)Lo que hacemos con los display es conectarlos al microcontrolador usando sistemamultiplexado. Multiplexar evita un uso innecesario de pines en el microcontrolador.Como se mencionó cada display tiene 7 pines que deben ir conectados almicrocontrolador. Supongamos que vamos a visualizar valores entre 0 y 100000, por ejemplo para una aplicación de conteo de personas que ingresan a un concierto a unpartido de fútbol. Para mostrar el máximo número posible se necesitarían al menos 6displays de 7 segmentos, cada uno con 7 pines que deben conectar almicrocontrolador, 42 pines en total. El PIC16F877A se queda corto ya que solo tiene 40pines, de los cuales no todos sirven como salidas de señales digitales. Peor aun habríaque implementar un microcontrolador para cada display o algo así.Una de las mejores soluciones a este problema es multiplexar los displays. Para ello seconectan todos a un mismo microcontrolador, de modo que todos los pines “a” de losdisplays vayan a una línea común que conecte a un pin del micro y así con todos lospines de los displays de la “a” a la “g”.Lo que hacemos entonces es controlar la alimentación de los displays de modo quepodamos ver uno a la vez. Para este control conectamos cada ánodo común al colector de un transistor 2n3906, cuyo emisor va a V+ (5v) y base a otro pin del micro. Por medio de estos últimos pines mencionados activamos la visualización de los display.Entonces lo que hacemos por programa es un refrescamiento continuo de los displaysmostrando a intervalos muy cortos únicamente el valor que va en uno de los displays,mostrando cada vez uno el valor que va en uno distinto. Si este refrescamiento se hacelo suficientemente rápido el ojo no percibe los dígitos como intermitentes sino como uncontinuo.Supongamos que con una frecuencia de refrescamiento de 30 Hz es suficiente (30 Hzindica que hay 30 ciclos de refrescamiento por segundo)El periodo de refrescamiento (el inverso de la frecuencia) es 1/30 = 33 ms aprox.Como vamos a usar dos display cada uno va a mostrar su valor por (33ms)/2 = 16 ms.En el código en C indicamos por medio de delay ese valor ó uno menor.Haciendo un ultimo comentario veamos que el ejemplo de los 6 displays multiplexadotomaría únicamente 13 pines del PIC (7 de segmentos + 6 de control dealimentación=13) en cuyo caso el PIC16F877A si podría con la aplicación.Para el proyecto en MPLAB y PICC hacemos exactamente los mismos pasos paracrear un proyecto en C visto en los dos primeros proyectos copiamos el siguientecódigo, compilamos y lo probamos según el diagrama de conexiones en la protoboardpara verificar que lo hemos hecho bien:
 
#include<pic.h>#include<stdlib.h>#include "delay.h"#include "delay.c"unsigned char contador=57, FLAG=0;// FLAG es una variable bandera cuya activación implica actualización de los valores…// …de los displayvoidinterrupt inter(void) {// Inicio de Atención a InterrupcionesIf (RBIF==1)//Pregunto por Interrupción por los pines RB4-RB7  {if (contador==99)//En caso que llegue a 99 que es máximo valor visualizable…  contador=0;// …se reinicia el conteo en 0 el valor mínimo (ciclo)  elsecontador++;//No hay problema para que sume RBIF=0;//Pongo la bandera respectiva en 0 para indicar que ya Sumé }else // Como no hubo interrupción por cambio de estado en…  // …Puerto B es porque la hubo por el pin RB0{If (contador==0)//En caso que llegue a 0 que es mínimo valor visualizable… contador=99;// …se reinicia el conteo desde 99, el valor máximo elsecontador--;//No hay problemas para que reste INTF=0;//Pongo la bandera respectiva en 0 para indicar que ya Resté  }FLAG=1;//Activo la bandera de actualización de los displays  }//Fin de Atención a interrupciones voidver(unsigned char x)//Códigos de activación de los dígitos de los display…  // …de 7 segmentos{if (x==0) PORTC=0b11000000;//Código del 0  if (x==1) PORTC=0b11111001;//Codigo del 1  if (x==2) PORTC=0b10100100;//Codigo del 2  if (x==3) PORTC=0b10110000;//Codigo del 3 

Activity (40)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Alain Nicolás liked this
Luis Luis liked this
Sickma Kaoba liked this
Pipe Caicedo liked this
Arturo Perez liked this
Emiliano Lopez liked this
Pedro Durán liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->