Powered By Blogger

viernes, 3 de abril de 2015

Display De 7 Segmentos Cátodo Común Con PIC18F4620

Las siguientes capturas de pantallas muestran el control de un display de 7 segmentos CC mediante el cual al activar el state logic se visualizara los números del 0-9 y enseguida las letra de la A-E y al activar el otro logic state el orden es inverso es decir primero se visualizaran las letra A-E y los números del 0-9 en orden descendente.







Encendido De 8 Led`s Con PIC18F4620

En este programa controlaremos el encendido de 8 led mediante un PIC y para ello primero apagaremos todos los led`s de forma que después de cierto tiempo previamente establecido en mili-segundos durante la compilación de código fuente, encenderemos los 4 primero led`s y los apagaremos al mismo tiempo que encenderemos los 4 últimos led`s todo esto se ejecutara de manera indefinida.






PIC18F4620 Y LCD De 16*2

En este programa utilizaremos un LCD de 16 caracteres por 2 lineas (16*2) para mostrar diferentes textos con diferentes efectos.
En este caso el programa realiza la escritura letra por letra de la palabra HOLA MUNDO en la primera linea y ESTi UAEH en la segunda linea empezando desde el ultimo carácter y posteriormente realiza el corrimiento hacia la derecha de HOLA MUNDO finalizando con el corrimiento a la izquierda de la palabra HOLA MUNDO (1ª linea) ESTi UAEH (2ª linea) en un ciclo infinito.










Hola Mundo Con PIC18F4620 Y Display 16 Segmentos Anodo Comun

Versión 1: "Solo Texto"


A continuación se expone el programa que realiza la escritura de la oración HOLA MUNDO en 5 display de 16 segmentos ac (Anodo Comun), esto se realiza mediante el uso de la Multiplexeacion y la activación de cada uno de los pines del display para llevar el control de que letra deberá desplegarse en cada display.






Versión 2: "Texto Con Corrimiento" 


Finalmente adjunto imágenes de la segunda versión de este mismo programa, en la cual ahora se muestra el texto HOLA MUNDO y se procede a hacer el corrimiento de cada letra en cada uno de los display en un ciclo infinito.









Código:

A petición de un usuario aquí muestro mi código, el programa fue trabajado en Mikro C, esta es el código del programa de la versión 1 "Texto sin corrimiento":
 
int i;
int k=0;
void main() {
adcon1=0b11111111;
trisc=0;
trisd=0;
trisa=1;
trisb=1;
porta=0;
portb=0;
portc=0;
portd=0;


do{
k=0;
k++;


for (i=0; i<60; i++){
k=0;
portb=0b00000010;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00000100;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00010000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}


trisc=0;
trisd=0;
trisa=1;
porta=0b11111111;
portb=0b00000000;
portc=0b00000000;
portd=0b00000000;
delay_ms(1500);


for (i=0; i<60; i++){
portb=0b00000010;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00000100;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00010000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}

trisc=0;
trisd=0;
trisa=1;
porta=0b11111111;
portb=0b00000000;
portc=0b00000000;
portd=0b00000000;


delay_ms(1500);


}
while(k<400);


}


Finalmente esta es la Versión 2 "Texto con corrimiento":

int i;
int k=0;
void main() {
adcon1=0b11111111;
trisc=0;
trisd=0;
trisa=1;
trisb=1;
porta=0;
portb=0;
portc=0;
portd=0;


do{
k=0;
k++;


for (i=0; i<60; i++){
k=0;
portb=0b00000010;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00000100;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00010000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}


for (i=0; i<60; i++){
k=0;
portb=0b00000100;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00001000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00010000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00100000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00001000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00010000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00100000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b01000000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00010000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b01000000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b10000000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00100000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b01000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00000000;
portc=0b11111111;
portd=0b11111111;
delay_ms(2);
}


//HOLA CON CORRIDA



for (i=0; i<60; i++){
portb=0b00000010;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00000100;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00010000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}



for (i=0; i<60; i++){
portb=0b00000100;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00001000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00010000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00100000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b01000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}


for (i=0; i<60; i++){
portb=0b00001000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00010000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00100000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b01000000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b10000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}




for (i=0; i<60; i++){
portb=0b00010000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00100000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b01000000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b10000000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);

}


for (i=0; i<60; i++){
portb=0b00100000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b01000000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b10000000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


}


for (i=0; i<60; i++){
portb=0b01000000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


}


delay_ms(1500);


}
while(k<400);


}

Espero les sea de utilidad...



jueves, 2 de abril de 2015

Control De Motores DC Con PIC y Puente H en Mikro C

Este es un programa sencillo que permite controlar dos motores mediante el uso de un PIC previamente programado en MikroC.

La función que realiza es la siguiente:
1) Giro de ambos motores a derecha
2) Detiene el movimiento de ambos motores
3) Giro de ambos motores a izquierda
4) Giro del primer motor y detiene el segundo
5) Detiene el primer motor y giro del segundo

El entorno de simulación es ISIS de Proteus v8.0, el compilador es MikroC Pro.



A continuación se muestra el esquema de las conexiones:


Finalmente la captura de pantalla de la simulación ejecutándose.

Nota: Dado que la velocidad de giro de los motores es alta, la impresión de pantalla puede parecer idénticas; sin embargo, es conveniente observar los estados de cada elemento para constatar que nuestra simulación es la correcta, y con esto me refiero a los cuadros azules o rojos que aparecen a ejecutar la simulación y que nos sirven de auxiliar para saber que estado tiene cada componente en cada etapa.