Vous êtes sur la page 1sur 49

INTRODUCCION

El presente texto tiene como objetivo ser una herramienta de ayuda en el aprendizaje de la programacin de microcontroladores PIC en el entorno del lenguaje C, para que el estudiante se encuentre capacitado para poder resolver todo tipo de proyectos de manera sencilla y prctica usando lenguajes de alto nivel.

Brindaremos una secuencia de temas que se ha visto conveniente para una aprendizaje rpido y sencillo, con ejercicios y ejemplos que sern desarrollados en clase y una gua de practica como algunos ejercicios que el estudiante deber resolver para mejorar su aprendizaje y afianzar sus conocimientos adquiridos, as como la entrega de ejemplos por parte del docente para poder desarrollar diferentes trabajos.

1. QUE ES UN MICROCONTROLADOR?

Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios para controlar el funcionamiento de una tarea determinada, como el control de una lavadora, un teclado de ordenar, un sistema de alarma, un robot. Para esto, el microcontrolador debe disponer de una memoria donde se almacena el programa que gobierne el funcionamiento del mismo que, una vez programado y configurado, solo sirve para realizar la tarea asignada. La utilizacin de un microcontrolador en un circuito reduce notablemente el tamao y nmero de componentes y, en consecuencia, disminuye el nmero de averas y el volumen y el peso de los equipos, entre otras ventajas. El microcontrolador es uno de los inventos ms notables del siglo XX. En el mercado hay gran cantidad de ellos, con multitud de posibilidades y caractersticas. Cada tipo de microcontrolador sirve para una serie de casos y es el diseador del sistema quien debe decidir cul es el microcontrolador ms idneo para cada uso. En los ltimos aos han tenido un gran auge los microcontroladores PIC fabricados por Microchip Technology Inc. Los PIC (Peripheral Interface Controller) son una familia de microcontroladores que ha tenido gran aceptacin y desarrollo en los ltimos aos gracias a que sus buenas caractersticas, bajo precio, reducido consumo, pequeo tamao, gran calidad, fiabilidad y abundancia de informacin, lo convierten en muy fcil, como y rpido de utilizar.

1.1 DIFERENCIA ENTRE MICROPROCESADOR Y MICROCONTROLADOR El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (UCP), tambin llamado procesador, de un computador. La UCP

est formada por la Unidad de Control, que interpreta las instrucciones, y el Camino de Datos, que las ejecuta. Las patitas del microprocesador sacan al exterior las lneas de sus buses de direcciones, datos y control, para permitir conectarle con la Memoria y los Mdulos E/S y configurar un computador implementado por varios circuitos integrados. Se dice que un microprocesador es un sistema abierto porque su configuracin es variable de acuerdo con la aplicacin a la que se destine. Un microprocesador es un sistema abierto, con el que puede construirse un computador las caractersticas que se desee, acoplndole mdulos necesarios.

Un microcontrolador es un sistema cerrado que contiene un computador completo y de prestaciones limitadas que no se pueden modificar.

1.2 ARQUITECTURA INTERNA Un microcontrolador posee todos los componentes de un computador, pero con unas caractersticas fijas que no pueden alterarse. Las partes principales de un microcontrolador son: 1.2.1 Procesador 1.2.2 Memoria no voltil para contener el programa. 1.2.3 Memoria de lectura y escritura para guardar datos 1.2.4 Lineas de E/S para los controles perifricos: a) Comunicacin en serie b) Comunicacin en paralelo c) Diversas puertas de comunicacin 1.2.5 Recursos auxiliares: a) Circuito de reloj, encargado de generar los impulsos que sincronizan el funcionamiento de todo el sistema. b) Temporizadores, orientados a controlar tiempo. c) Perro guardin (<<Watchdog>>), destinado a provocar una reinicializacion cuando el programa queda bloqueado.

d) Conversores AD y DA, para poder recibir y enviar seales analgicas. e) Comparadores analgicos, para verificar el valor de una entrada analgica. f) Proteccion ante fallos de la alimentacin g) Estado de reposo o de bajo consumo, en el que el sistema queda <<congelado>> y el consumo de energa se reduce al minimo. 1.3 FAMILIA DE LOS MICROCONTROLADORES Uno de los labores ms importantes del ingeniero en el diseo es la eleccin del microcontrolador que mejor satisfaga las necesidades del proyecto con el mnimo presupuesto.

1.3.1 Gama baja o bsica: PIC 16C5X con instrucciones de 12 bits Se trata de una serie de PIC de recursos limitados, pero con una de las mejores relaciones coste/prestaciones. Sus versiones estn encapsuladas con 18 y 28

patitas y pueden alimentarse a partir de una tensin de 2.5 V, lo que les hace ideales en las aplicaciones que funcionan con pilas. 1.3.2 Gama media: PIC 16FXXXX con isntrucciones de 14 bits Es la gama mas variada y completa de los PIC. Abarca modelos desde 18 a 68 patitas, cubriendo varias opciones que integran abudantes perifricos. Dentro de ellos se encuentra el famoso <<16f628a>>, disponen de interrupciones y una Pila de 8 niveles que permite el anidamiento de subrutinas. 1.3.3 Gama mejorada: PIC 18FXXX con instrucciones de 16 bits Microchip presento la gama mejorada de los microcontroladores PIC con la finalidad de soportar las aplicaciones avanzadas en las areas de automocin, comunicaciones, ofimtica y control industrial. Sus modelos destacaron por su alta velocidad (40 Mhz) y su gran rendimiento. 1.3.4 Los enanos de 8 patitas <<PIC AXES>>: PIC 12FXXX Que ha acaparado la atencin del mercado. Su caracterstica principal es su reducido tamao, al disponer un encapsulado de 8 patitas. Se alimentan con un voltaje de corriente continua comprendido entre 2,5 V y 5,5 V y consumen menos de 2mA cuando trabajan a 5V y 4Mhz.

2. PIC 16F628A

El microcontrolador PIC16F628A de microchip pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes caractersticas generales que lo distinguen de otras familias: Arquitectura Harvard Tecnologa RISC Tecnologa CMOS

Estas caractersticas se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa, por lo tanto en la velocidad de ejecucin.

Los microcontroladores que produce Microchip cubren un amplio rango de dispositivos cuyas caractersticas pueden variar como sigue: Empaquetado (desde 8 a 68 patitas) Tecnologa de la memoria incluida (EEPROM,ROM,FLASH) Voltaje de operacin (desde 2.5 V hasta 6V) Frecuencia de operacin (hasta 20Mhz)

2.1 EMPAQUETADOS Aunque cada empaquetado tiene variantes, especialmente en lo relativo a las dimensiones del espesor del paquete, en general pueden encontrar paquetes tipo PDIP (plastic dual in line package), PLCC (plastic leaded chip carrier) y QFP (quad flat package)

2.2 NOMENCLATURA En la siguiente tabla se especifican los rangos de voltaje estndar y extendido manejados por los dispositivos.

Rango de voltaje Estndar extendido

EPROM C LC 4.5 a 6V 2.5 A 6V

ROM CR LCR 4.5 A 6V 2.5 A 6V

FLASH F LF 4.5 A 6V 2 A 6V

2.3 OSCILADOR Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador. El usuario puede seleccionar alguno de estos 8 modos programando 3 bits de configuracin del dispositivo denominados: FOSC2, FOSC1 Y FOSC0. En algunos de estos modos el usuario puede indicar que se genere o no una salida del oscilador (CLKOUT) a travs de una patita de Entrada/Salida. Los modos de operacin se muestran en la siguiente lista: LP XT HS RC EXTRC EXTRC INTRC INTRC Baja frecuencia (bajo consumo de potencia) Cristal (media frecuencia) Alta velocidad Cristal Resistencia/capacitor externos Resistencia/capacitor externos Resistencia/capacitor externos con CLCKOUT Resistencia/capacitor internos para 4Mhz Resistencia/capacitor internos para 4Mhz con CLKOUT

Los 3 modos LP, XT Y HS usan un cristal, la diferencia sin embargo es la ganancia de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y la potencia consumida.

2.4 DIAGRAMA DE BLOQUES DEL PIC 16F628A En la siguiente figura se muestra una manera de bloques de organizacin interna del PIC 16F628a. Se muestra tambin junto a este diagrama, su diagrama de patitas, para tener una visin conjunta del interior y exterior del Chip.

3. LENGUAJES DE PROGRAMACION PARA MICROCONTROLADORES PIC 3.1 MAQUINA Lenguaje de maquina es el sistema de cdigos directamente interpretable por un circuito micro programable, como el microprocesador de una computadora o el microcontrolador de una autmata. El lenguaje est compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la mquina. 1111100110011 W W +68 3.2 ASSEMBLER El lenguaje maquina es difcil de utilizar por el hombre ya que se aleja de su forma natural de expresarse, por esto se utiliza el lenguaje assembler, que es la forma de expresar las instrucciones de una forma ms natural al hombre y que sin embargo es muy cercana al microcontrolador por que cada uno de sus instrucciones se corresponde con otra en cdigo maquina que el microcontrolador es capaz de entender. Instruccin: Si el dato del tmr1 es 15 ejecutar tarea uno, si no lo es ejecutar tarea 2 Movlw .15 Xorwf. Tmr1,w Btfss status,z Goto tarea2; F Goto tarea1; V

3.3 LENGUAJES DE ALTO NIVEL

3.3.1 LENGUAJE C
COMPILADORES a) CCS COMPILER b) C18 MICROCHIP c) PIC HIGH TECH d) MIKRO C

3.3.2 LENGUAJE BASIC


COMPILADORES a) PIC BASIC b) PIC BASIC PRO c) MIKRO BASIC

3.3.3 PASCAL
COMPILADORES a) MIKRO PASCAL 4. COMPILADOR CCS

El compilador C

de CCS

ha sido desarrollado especficamente para PIC MCU,

obtenido la mxima optimizacin del compilador con estos dispositivos. Dispone de una amplia librera de funciones predefinidas, comandos pre procesados y ejemplos. etc. Un compilador convierte el lenguaje de alto nivel a instrucciones en cdigo maquina; un cross-compiler es un compilador que funciona en un procesador (normalmente PC) diferente al procesador objeto. El compilador CCS es un crosscompiler. Los programas son editados y compilados a instrucciones maquina en el Adems, suministra los controladores (drivers) para diversos dispositivos como el LCD, convertidores AD, relojes en tiempo real, EEPROM serie,

entorno de trabajo del PC, el cdigo maquina puede ser cargado del PC al sistema PIC mediante ICD2, y puede ser depurado desde el entorno de trabajo del PC. 4.1 ESTRUCTURA DEL PROGRAMA Para escribir en un programa en C con el CCS C se debe tener en cuenta una serie de elementos bsicos de su estructura. DIRECTIVAS DE PROCESADO, controlan la conversin del programa o cdigo maquina por parte del compilador. PROGRAMAS O FUNCIONES, conjunto de instrucciones. Puede haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la instruccin <<main();>>. INSTRUCCIONES, indican como se debe conectar el PIC en todo momento. COMENTARIOS, permiten describir lo que significa cada lnea del programa.

5. VARIABLES Y DATOS 5.1 TIPO DE DATOS CCS acepta los siguientes tipos de variables TIPO INT1 SHORT INT INT8 INT16 LONG FLOAT CHAR VOID SIGNED INT8 SIGNED INT16 32 BIT 8 BIT 8 BIT 16 BIT 0 A 255 -128 a 127 -32768 a 32767 COMA FLOTANTE CARCTER SIN VALOR ENTERO SIGNO ENTERO CON SIGNO LARGO CON 16 BIT 0 A 65,535 ENTERO DE 16 BIT 8 BIT 0 A 255 ENTERO TAMAO 1 BIT RANGO 0A1 DESCRIPCION ENTERO DE 1 BIT

5.2 LAS CONSTANTES 123 01234 0x123 0b010010 x \012 \xA6 Decimal Octal (0) Hexadecimal (0x) Binario (0b) Carcter Carcter octal Carcter hexadecimal

5.3 DECLARACION DE VARIABLES Las variables se utilizan para nombrar posiciones de memoria RAM; se debe declarar obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de dato que se manejar. Se definen de la siguiente forma: TIPO

NOMBRE = [=VALOR INICIAL];

int dato1 = 0; int dato1; Las variables definidas pueden ser de tipo LOCAL o GLOBAL. Las varialbes locales se utilizan solo en la funcin donde se encuentran declaradas mientras que las variables globales se pueden usar en todo las funciones del programa. Antes deben declararse antes de toda funcin y fuera de ellas. int i = 240; //variable global void main (void) { Int x = 9;// variable local } 5.4 OPERADORES 5.4.1 DE ASIGNACION += -= *= /= %= <<= >>= &= |= ^= Asignacion de suma (x=x+y) Asignacion de resta (x=x-y) Asignacion de multiplicacion (x=x*y) Asignacion de division (x=x/y) Asignacion de resto de la division (x=x%y) Asignacion desplazamiento a la izquierda (x=x<<y) Asignacion desplazamiento a la derecha (x=x>>y) Asignacion AND en bits (x=x&y) Asignacion OR en bits (x=x|y) Asignacion XOR en bits (x=x^y)

5.4.2 ARITMETICOS + * / % ++ -SUMA RESTA MULTIPLICACION DIVISION RESTO DE LA DIVISION INCREMENTO DECREMENTO

a = 3; b = 5*a++; //b=5 y a = 4

5.4.3 DE RELACION < > <= >= == = Menor que Mayor que Menor igual que Mayor igual que Igual que Diferente que

5.4.4 LOGICOS && || NOT AND OR

5.4.5 DE BITS ~ & Complemento a 1 AND

^ | << >>

OR EXCLUSIVA OR Desplazamiento a izquierda Desplazamiento a derecha

6. ESTRUCTURAS DE CONTROL

6.1 ESTRUCUTURA CONTROL IF Con la ayuda de la estructura de control IF se pueden tomar decisiones.

If(expresin){ Sentencia_1; }

Ejemplo:
if(input(PIN_A0)==1) { output_low(PIN_B0); } 6.2 ESTRUCTURA DE CONTROL IF- ELSE Con la ayuda de la estructura de control IF- ELSE se pueden tomar 2 acciones diferentes tomando en cuenta la condicin inicial.

If (expresin) { Sentencia1; } Else { Sentencia2; }

6.3 ESTRUCTURA DE CONTROL SWITCH Switch es un caso particular de decisin multiple, evalua la expresin y en orden la constante adecuada realiza las sentencias asociadas. Switch (expresin) { Case constante 1: Sentencias; Break; Case constante 2: Sentencias; Break; [default:

Sentecias;] }

6.4 ESTRUCTURA DE CONTROL WHILE WHILE se utilize para repetir sentencias, la expresin se evalua y la sentencia se ejecuta mientras la expresin es verdadera, cuando es falsa se sale del WHILE. While(expresin) { Sentencias; }

6.5 ESTRUCTURA DE CONTROL DO-WHILE Do while se diferencia del WHILE y del FOR en la condicin de finalizacin, la cual se evalua el final del bucle, por lo que las sentencias se ejecutan Do { Sentencias; } While(expresin);

6.6 ESTRUCTURA DE CONTROL FOR Se usa para repetir sentencias, en las expresiones FOR la inicializacin es una variable a la cual se le asigna un valor inicial con el que se controla el bucle.

for (inicializacin; condicin de finalizacin; incremento) { Sentencias; }

* COMENTARIOS
Los comentarios en el programa facilitan la compresin de las distintas expresiones tanto para el programador como para quien tiene que interpretar dicho programa. No afectan a la complicacin por lo que pueden ser tan extensos como el programador quiera. Se pueden colocar en cualquier parte del programa y con dos formatos. Utilizando // al colocar estos signos se comienza el comentario y finaliza en el final de la lnea. //esto es un comentario. Utilizando /* y */ se debe utilizar al inicio y al final del comentario, pero no puede repetirse dentro del mismo comentario. /* Esto es un comentario*/

7. DIRECTIVAS DEL COMPILADOR 7.1 #Include Agrega archivos de inclusin, libreras o archivos de cabecera.

#include<archivo>

Ejemplos #include<16f628a.h> #include<cceaviet_lcd.c>

7.2 #Fuses Asigna valores a la palabra de configuracin, lo cual permite programar un pic, no todos los PIC tiene las mismas fuses. #fuses config1, config2 . Ejemplos #fuses HS, NOLVP, NOWDT, NOMCLR

7.3 #Use Se utiliza para configurar algunas funciones especiales como la configuracin del clock.

#use delay(clock=fosc)
Ejemplos #use delay (clock = 4M);

7.4 #Byte Define a un registro como variable

#byte nombre = direccin RAM


Ejemplos #byte timer0 = 1 Guardado en direccin 1 7.5 #ASM y #ENDASM Permiten utilizar cdigo ensamblador en el programa C, se utilizan al inicio y al final del bloque ensamblador. Ejemplo

#asm Bsf status,rp0 Movlw 0x8 Movwf portb Bcf status,rp0 #endasm

8. FUNCIONES DE ENTRADA Y SALIDA (E/S)

El compilador ofrece funciones predefinidas para trabajar con los puertos. Estas funciones son:

8.1 SET_TRIS_X Set_tris_x asigna un valor a los registros trisx, el cual se indicar que pines estn distribuidos como entrada o salida.

Set_tris_x(valor) X= a,b,c,d,e
Ejemplo Configurar el puerto B del pin 3 a 0 (RB 3-0) entrada y el del pin 4 a 7 como salida. Set_tris_b(0b00001111); Set_tris_b(15); 8.2 ENTRADA

8.2.1 INPUT()
La function INPUT lee el valor de un solo pin

=input(pin);
Ejemplo Int x; Set_tris_a(255); X=input(pin_a3);//se asigna la variable x para la entrada del pin del puerto a3

8.2.2 INPUT_X
La funcin INPUT_X lee el valor de todo el registro del puerto x.

=input_x();

Ejemplo Int m; Set_tris_b(255); m= input_b(); Se asigna la variable m para registrar la informacion del todo el Puerto b, que fue asignado como entrada.

8.2.3 INPUT_STATE()
Lee el valor del pin sin cambiar el sentido del terminal.

=input_state(pin);
8.3 SALIDA

8.3.1 OUTPUT_LOW
Escribe el valor de 0 en el pin asignado

=output_low(pin);
Ejemplo Set_tris_b(0); Output_low(pin_b4); Lo que indica que por el Puerto 4 saldra el valor de 0.

8.3.2 OUTPUT_HIGH
Escribe el valor de 1 en el pin asignado

=output_high(pin);

Ejemplo Set_tris_b(0) Output_high(pin_b3); Lo que indica que por el puerto 4 saldra el valor de 1.

8.3.3 OUPUT_TOGGLE
Esta funcin complementa la salida del valor del pin.

=output_toggle(pin);

8.3.4 OUTPUT_X Escribe un valor en el registros de portx.

=output_x(valor);
Ejemplo Set_tris_b(0); Output_b(255); Aplicando este ejemplo por el Puerto sacaremos el dato 255, que en binario es 11111111.

8.4 #USES

8.4.1 #USE STANDARD_IO(X)


Con esta directiva las funciones de entrada y salida configuran como entrada (o salida); antes de leer lo escriben como salida en pin o en puerto.

=#use standard_io(x)
EJEMPLO #INCLUDE<16F877a.h> #FUSES hs,nolvp,nowdt #USE DELAY(CLOCK = 20M) #USE standard_io(a)

8.4.2 #USE FAST_IO(X)


Con esta directiva las funciones de entrada solo leen el valor del pin o el puerto y las funciones de salida, solo intentan escribir sobre el bit con el pin del puerto.

#use fast_io(x)
EJEMPLO #INCLUDE<16F877a.h> #FUSES hs,nolvp,nowdt #USE DELAY(CLOCK = 20M) #USE fast_io(a) #USE fast_io(b)

9. FUNCIONES DE RETARDO

9.1 DELAY_MS La function delay_ms genera retardos en milisegundos

Delay_ms(t) Donde 0<t<63535

9.2 DELAY_US La funcin delay_us genera retardos en microsegundos

Delay_us(t) Donde 0<t<63535

9.3 DELAY_CYCLE La funcin delay_cycle genera retardos a manera de ciclo su aplicacin es cuando se trabaja con punteros.

Delay_cycle(t)

10. FUNCIONES

Una funcin es un conjunto de instrucciones que realiza una tarea determinada para entregar un valor, tomando en cuenta valores de entrada. 10.1 Funcin principal

Void main (void) { Algoritmo principal }

Ejemplo Void main (void) { Int a=3,b=15,c,d; C= a+b; D=a-b; } 10.2 Funcion

Function(); //invocada en funcion main Tipo nombre_funcion (tipo nombre;tipo_nombre2) { Instruccin }


OBS. VOID VACIO Ejemplo Int promedio (int x, int y) { Int temp; Temp=(x+y)/2; Return(temp); }

11. LED Y APLICACIONES CON LEDS Un led es un diodo semiconductor que emite luz. Se usan como indicadores de muchos dispositivos, y cada vez con mucho ms frecuencia, en iluminacin, los primeros leds emitan luz roja de baja intensidad, pero con los dispositivos actuales emiten luz en el espectro infrarrojo, visible y ultravioleta.

APLICACIN 1 Encender un led por 1 segundo y apagarlo por 1 segundo Antes de comenzar a trabajar con los proyectos y teniendo en cuenta el entorno de trabajo del ccs, pues tengamos estas recomendaciones pendientes para el trabajo. Indicar que microcontrolador usaremos. Indicar la frecuencia de trabajo. Indicar si la frecuencia se har con fuente externa o interna. Y por ultimo indicar e identificar los pines que se utilizaran

Para esta aplicacin las cosas que tendremos en cuenta sern, tener un diagrama de flujo para el trabajo que haremos, y escribir las directivas correspondientes comenzemos. Utilizaremos el pin B0, con una frecuencia de 4MHZ y con reloj interno de nuestro pic 16F628A.

//PRENDER UN LED POR 1 SEGUNDO Y LUEGO APAGARLO POR 1 SEGUNDO #INCLUDE<16F628A.h> #FUSES intrc,NOLVP,NOWDT,NOMCLR #USE DELAY(CLOCK = 4M)

void main (void) { while(true) { output_high(PIN_B0); delay_ms(1000); output_low(PIN_B0); delay_ms(1000); } } Como se observa primero se utilizo la funcin

#include<>

donde

especificamos el microcontrolador que estamos aplicando, seguido de la funcin #fuses que nos indica las condiciones de configuracin como el reloj interno y otros. Se utilizo la funcin #use_delay(4M) con el fin de tener una frecuencia de trabajo de 4Mhz, y una funcin principal void main(void) donde dentro de esta funcin se aplico un bucle cerrado e infinito con la estructura while. Y el trabajo para poder prender y apagar el led se usaron las directivas de salida output_high y output_low sobre el pin RB0. Con lo que resulta una

buena aplicacin para comenzar en el mundo de la programacin de microcontroladores PIC. Ahora te reto a poder realizar estos 2 ejercicios.

Se tiene 2 leds, conectados en los pines rb0 y rb1, cuando se prende el primer led, el otro esta apagado y viceversa, aplicando un retaro de 3 segundos.

Nota: para esta aplicacin peudes usar las salidas output_high y output_low, adems del delay_ms(3000).
Con todo el puerto b, generar la serie de luces del 0 al 255, con un retardo de 1 segundo.

Nota: recordar que el valor de 0 en binario es 00000000 y el de 255 es de 11111111, lo puedes trabajar con una funcin FOR y la funcin output_b().

Generar la siguiente serie: 128, 64, 32, 16, 8, 4, 2, 1 Aplicando el puerto b con un retardo de 1 segundo, y cuando llegue a 1 que vuelva a comenzar de 128.

Nota: cambia los valores decimales a binarios para que te puedan ayudar a reconocer el orden de la salida de los leds.

12. APLICACIONES CON INTERRUPTORES Y BOTONES Los botones e interruptores nos ayudan a tener una acceso de que se puede activar con ellos, y no solo pueden ser estos se pueden tomar como entrada todo tipo de sensores ultrasonidos, de luz, etc, el fin principal es que nos den una seal 0 o 1 a la entrada del PIC, para poder aplicar lo trabajado.

Aplicacin 1 Encendiendo un led con un interruptor #INCLUDE<16F628a.h> #FUSES intrc,nolvp,nowdt #USE DELAY(CLOCK = 4M) #USE fast_io(a) #USE fast_io(b)

void main(void) { port_b_pullups(true); set_tris_a(255); set_tris_b(0); output_b(0); while(true) { if(input(PIN_A0)==1) { output_low(PIN_B0); } else { output_high(PIN_B0); } } } Como se observa la entrada donde se ubica el interruptor es el puerto a1, y la salida es el puerto b0, donde se observa que hay un bucle cerrado while, adems de la condicin if-else que siempre pregunta por el estado de A1, con el fin de activar o no la salida B0. Aplicacin 2 Secuencia de luces con botn activador #INCLUDE<16F877a.h> #FUSES hs,nolvp,nowdt #USE DELAY(CLOCK = 20M)

#USE fast_io(a) #USE fast_io(b) void main(void) { port_b_pullups(true); set_tris_a(255); set_tris_b(0); output_b(0); int i = 0; while(true) { bucle:if (input(PIN_A0)==0) { delay_ms(30); if(input(PIN_A0)==0) goto bucle; if(i<=255) { i++; output_b(i); } else {

output_b(0); } } } }

Como se observa en este caso cada vez que se presione el botn ubicado en el pin a0, se activara el contador que indicara la nueva secuencia de leds que esta dada de 0 a 255, con la condicin final de que cuando llegue a 255 y se vuelva a presionar el led, se volver a 0 la cuenta.

Qu pasara si en vez de un botn en este ejemplo se usa un interruptor.

Generar esta secuencia de leds 1,2,4,8,16,32,64,128 con la condicin que cambien siempre que se presione el botn del puerto a0.

13. APLICACIONES CON DISPLAYS DE 7 SEGMENTOS

Los displays son muy utilizados para visualizar datos. Por lo que su aplicacin es importante en el campo de las mediciones, sus aplicaciones son varias, en balanzas, calculadoras bsicas, etc, el display de 7 segmentos es un arreglo de leds con los cuales se puede al trabajarse en conjunto se visualiza el dato que se quiere.

*ARREGLOS La aplicacin de arreglos es importante en el trabajo con displays de 7 segmentos y de matrices de leds.

Tipo [const] nombre [n] = {datos} Const constante n cantidades


Ejemplo Int const hola [4]; Hola[0]; Hola[1]; Hola[2]; Hola[3]; En total 4 elementos de ese arreglo de elementos. A continuacin con los ejemplos quitaremos dudas de esta aplicacin.

Aplicacin 1 Contador de 0 9 con un display de 7 segmentos

#INCLUDE<16F628a.h> #FUSES mclr,intrc,nolvp,nowdt #USE DELAY(CLOCK = 4M) #USE FAST_IO(A) #USE FAST_IO(B) void main (void) { set_tris_b(0); set_tris_a(0); int i; int const conteo[10]={63,6,91,79,102,109,125,7,127,111}; output_high(pin_a0); output_b(0); do { for(i=0;i<=9;i++) { output_b(conteo[i]); delay_ms(1000);

} } while(true); }

DIAGRAMA PARA CONTADOR DE 7 SEGMENTOS CON INTEGRADOS TTL 7447

Aplicacion 2 Contador de 0 a 99 con 2 display de 7 segmentos en simultaneo #INCLUDE<16F628a.h> #FUSES intrc,nolvp,nowdt,mclr #USE DELAY(CLOCK = 4M)

#USE FAST_IO(A) #USE FAST_IO(B)

void main(void) { port_b_pullups(true); int uni,dec,i; int const conteo[10]={63,6,91,79,102,109,125,7,127,111}; set_tris_a(0); set_tris_b(0);

while(true) { for(dec=0;dec<=9;dec++) { for(uni=0;uni<=9;uni++) { for(i=1;i<=40;i++) { output_a(1); output_b(conteo[uni]); delay_ms(5);

output_a(2); output_b(conteo[dec]); delay_ms(5); } } } } }

CIRCUITO PARA CONTADOR DE 0 A 99 CON DISPLAY DE 7 SEGMENTOS

14. APLICACIONES CON MATRIZ DE LED 7 X 5 Estos displays son bastante utilizados hoy en dia para mostrar todo tipo de mensajes de una manera mas expresiva, se utiliza en la mayora de negocios, bancos, tiendas hasta en autobuses donde trabajando con estos matrices de leds

se pueden tener varias aplicaciones, existen de varios tipos esta de 7x5 es una bsica donde se explicara el fundamento para poder trabajar con estas matrices.

Aplicacin 1 Generar un hombrecito en movimiento con la matriz de 7 segmentos

#include <16f877a.h> #fuses xt,nolvp,nowdt

#use delay(clock = 4M)

void main(void) { int i,j; set_tris_b(0); set_tris_c(0); output_b(0); output_c(0);

int const columna[5]={1,2,4,8,16};//puede ser tambien{1,2,4,8,16} int const dibujo1[5]={111,88,7,88,111};// int const dibujo2[5]={95,88,7,88,95}; int const dibujo3[5]={63,88,7,88,63};

while(true) { for(j=1;j<=10;j++) { for(i=0;i<=4;i++) { output_b(columna[i]);

output_c(dibujo1[i]); delay_ms(4); } } for(j=1;j<=10;j++) { for(i=0;i<=4;i++) { output_b(columna[i]); output_c(dibujo2[i]); delay_ms(4); } } for(j=1;j<=10;j++) { for(i=0;i<=4;i++) { output_b(columna[i]); output_c(dibujo3[i]); delay_ms(4); } }

for(j=1;j<=10;j++) { for(i=0;i<=4;i++) { output_b(columna[i]); output_c(dibujo2[i]); delay_ms(4); } } } }

Diagrama de armado para la matriz de leds de 7 x 5

15. LCD Los mdulos LCD son utilizados, para mostrar mensajes que indican al operario el estado de la maquina, o dar instrucciones, mostrar valores y datos, etc. El LCD permite una comunicacin entre maquina y persona este puede mostrar cualquier formato ascii, segn el modelo que se tenga, el modelo mas usado es el LCD de 16 x 2 hitachi.

15.1

CONFIGURACION

#define use_portx_lcd_true #include <lcd.c> . librera principal *obs. Para el entrenador del centro cultural se utilizara la librera #include<cceavet_lcd.c>
15.2 FUNCIONES LCD_INIT(); Esta funcin inicializa el LCD. LCD_PUTC();

Esta funcin permite ingresar un dato

Lcd_putc(n);//el valor de n Lcd_putc(hola)//ingresa la cadena hola


\f; Borra la pantalla \n; Pasa a al siguiente lnea \b; retrocede 1 espacio. Printf; es la funcin de impresin para datos en cadena.

Printf(lcd_putc,\fhola); Long x = 9741; Printf(lcd_putc,x_values%l,x)

APLICACIN 1 mostrar por el LCD la letra a, y despues de un tiempo mostrar la frase hola muchachos #INCLUDE <16f628a.h> #FUSES intrc,nolvp,mclr,nowdt #USE delay(clock = 4M) #DEFINE use_portb_lcd_true #INCLUDE <lcd.c>

// rs ------ RB1 // rw ------ RB2 // e ------ RB0

// d4 ------ rb4

// d5 ------ rb5 // d6 ------ rb6 // d7 ------ rb7

void main (void) { int i = 10; lcd_init(); lcd_putc(i); delay_ms(1000); lcd_putc("a"); delay_ms(1000); lcd_putc("\fhola"); delay_ms(1000); lcd_putc("\fhola\nmuchachos"); }

16. TECLADO MATRICIAL Los teclados matriciales son bastante tiles para ingresar datos, un ejemplo de ellos es el teclado del computador, el teclado de una alarma nos permite armar y desarmar un sistema de seguridad de una caja fuerte o una cerradura elctrica, para introducirnos en el manejo de un teclado, se har un proyecto para poder observar su modo de trabajo brindando ideas varios proyectos.

16.1

CONFIGURACION

Para la configuracin del teclado se tiene que invocar la siguiente librera.

#include<teclado.c>
16.2 FUNCIONES

La funcin para usar el teclado es solo esta de aca:

=teclado();
La cual espera que la tecla sea presionada y la enva como dato ascii.

APLICACIN 1 presionar un tecla y mostrar el valor por el LCD #include <16f877a.h> #fuses xt,nolvp,nowdt #use delay (clock = 4M) #define use_portd_lcd_true #include <lcd.c> #include <teclado.c> void main(void) { int x,i=0; lcd_init(); while(true) { x = teclado(); write_eeprom(i,x);//grabando en la eeprom lcd_putc(x); i++; } }

DIAGRAMA DE TECLADO MATRICIAL CON LCD

Vous aimerez peut-être aussi