miércoles, 15 de enero de 2014
MATERIAL:
1- PIC 16f887.
2- Display cátodo común.
1- Cristal de 8Mhz.
2- Capacitores cerámicos de 22pf.
3- Resistores de 10k.
16- Resistores de 220.
3- Pushbutton.
1- Borne (kulca).
1- Portaintegrados de 40 pines.
El programa del PIC lo realice en lenguaje C en el compilador CCS C, la simulación en proteus y el PCB en PCBWizard. El circuito se debe alimentar con una fuente de 5v.
CÓDIGO:
#include <16f887.h>
#fuses hs,wdt
#use delay(clock=800000)
#byte trisb=0x86
#byte trisc=0x87
#byte trisd=0x88
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
byte display[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
byte display_2[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
int8 a;
int8 b;
void main(){
trisd=0x00;
trisc=0xff;
trisb=0x00;
inicio:
portd=display[0];
portb=display_2[0];
while(true){
if (bit_test(portc,1)==1){
delay_us(100);
a++;
p1:
if(bit_test(portc,1)==1){
portd=display[a];
goto p1;
}
}
if(a==10){
a=0;
b++;
portb=display_2[b];
}
if((b==10)||(bit_test(portc,2)==1)){
a=0;
b=0;
goto inicio;
}
}
}
#fuses hs,wdt
#use delay(clock=800000)
#byte trisb=0x86
#byte trisc=0x87
#byte trisd=0x88
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
byte display[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
byte display_2[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
int8 a;
int8 b;
void main(){
trisd=0x00;
trisc=0xff;
trisb=0x00;
inicio:
portd=display[0];
portb=display_2[0];
while(true){
if (bit_test(portc,1)==1){
delay_us(100);
a++;
p1:
if(bit_test(portc,1)==1){
portd=display[a];
goto p1;
}
}
if(a==10){
a=0;
b++;
portb=display_2[b];
}
if((b==10)||(bit_test(portc,2)==1)){
a=0;
b=0;
goto inicio;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int8 a= dato de 8 bits.
int8 b= dato de 8 bits.
int8 b= dato de 8 bits.
a++= incremento del dato a.
b++= incremento del dato b.
Cada vez que se aprieta el pushbutton se incrementa el dato a cuando el dato llega a 10 (es decir a 9 en el primer display) se incrementa el dato b y se borra el dato a (es decir el numero 10 en los diplays), así hasta que el dato b llega a 10 (es decir a 99 en los displays) entonces se borran los datos para comenzar de nuevo el conteo.
Para saber el funcionamiento del if, while y los tris checar los siguientes tutoriales:
http://microcontroladores-ing-elec-rh.blogspot.mx/2013/10/programando-pics-en-lenguaje-c-en-ccs.html
http://microcontroladores-ing-elec-rh.blogspot.mx/2013/11/programando-pics-en-lenguaje-c-en-ccs.html
SIMULACIÓN:
PCB:
Hoja para imprimir.
Vista real del circuito.
DESCARGAR SIMULACIÓN, PCB Y PROGRAMA EN C:
REFERENCIAS;
- Compilador C CSS y simulador proteus para microcontroladores PIC, Eduardo García Breijo
Etiquetas:
practicas simuladas,
proyectos
Suscribirse a:
Enviar comentarios (Atom)
6 comentarios:
muchisimas gracias por esta aportacion tan buena!!!
Hola, antes que nada muchas gracias por tus aportes, quisiera hacerte una consulta, acabo de armar este circuito y en esencia me funciona bien ya que realiza la cuenta correctamente, pero al pasar unos cuantos segundos los display regresan a cero y la cuenta también, es decir si dejo presionado el botón realiza la cuenta hasta 99, pero si suelto el botón regresa a cero al pasar unos 3 segundos. mi pregunta es si tendrás alguna idea de donde pueda estar mi error, las conexiones son las mismas que en tu diagrama de Proteus.
Bueno agradezco tu atención y espero haberme explicado bien.
hola muy buen tutorial! una duda, estoy grabando el pic con un pic kit 3 al momento de implementar, realiza la cuenta en las decenas perfectaente pero en las unidades muestra segmentos que encienden y apagan pero sin mostrar numeros (al enviar 9 pulsos la decena incrementa), por lo que pienso que es un problema con este grabador, ojala me puedas ayudar. :c de ante manos muchas gracias!
NO ME QUEDA TU CIRCUITO PODRAS DARME EL CIRCUITO CON LOS VALORES DE CADA ELEMENTO POR FAVOR!!!
Hola, porque sera que el contador se va a cero y las decenas nos marcan bien? Gracias!!!
QUE BUENO FELICIDADES
Publicar un comentario