PIC Con PIC Ide Simulator Basic

67
PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 1 PROGRAMACION DE PIC CON PIC IDE SIMULATOR INTRODUCCION Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno dispone de un sensor que mide constantemente su temperatura interna y, cuando traspasa los límites prefijados, genera las señales adecuadas que accionan los efectores que intentan llevar el valor de la temperatura dentro del rango estipulado. Aunque el concepto de controlador ha permanecido invariable a través del tiempo, su implementación física ha variado frecuentemente. Hace tres décadas, los controladores se construían exclusivamente con componentes de lógica discreta, posteriormente se emplearon los microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en un chip, el cual recibe el nombre de microcontrolador. Realmente consiste en un sencillo pero completo computador contenido en el corazón (chip) de un circuito integrado. Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. Un microcontrolador dispone normalmente de los siguientes componentes: · Procesador o UCP (Unidad Central de Proceso). · Memoria RAM para Contener los datos. · Memoria para el programa tipo ROM/PROM/EPROM. · Líneas de E/S para comunicarse con el exterior. · Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo, CAD: conversores Analógico/Digital, CDA: conversores Digital/Analógico, etc.). · Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema. El microcontrolador es en definitiva un circuito integrado que incluye todos los componentes de un computador. Debido a su reducido tamaño es posible montar el controlador en el propio dispositivo al que gobierna. En este caso el controlador recibe el nombre de controlador empotrado (embedded controller). Al microcontrolador se le conectan periféricos, como entradas (pulsadores, sensores, teclados, etc) y salidas (led, relés, lcd, display, etc). Las entradas y salidas pueden dividirse en dos tipos, las discretas cuyo valor es 1 o 0 (esta o no esta), y las análogas (tiene varios valores en un rango establecido).. Recuerde que los microcontroladores no manejan potencia, para ello deben realizarse cicuitos de potencia según las cargas, voltajes y corrientes manejadas.

description

todo el credito al autor de este documento...yo solo resubi el archivo para la comunidad...

Transcript of PIC Con PIC Ide Simulator Basic

Page 1: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 1

PROGRAMACION DE PIC CON PIC IDE SIMULATOR

INTRODUCCION

Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno dispone de un sensor que mide constantemente su temperatura interna y, cuando traspasa los límites prefijados, genera las señales adecuadas que accionan los efectores que intentan llevar el valor de la temperatura dentro del rango estipulado. Aunque el concepto de controlador ha permanecido invariable a través del tiempo, su implementación física ha variado frecuentemente. Hace tres décadas, los controladores se construían exclusivamente con componentes de lógica discreta, posteriormente se emplearon los microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en un chip, el cual recibe el nombre de microcontrolador. Realmente consiste en un sencillo pero completo computador contenido en el corazón (chip) de un circuito integrado. Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. Un microcontrolador dispone normalmente de los siguientes componentes: · Procesador o UCP (Unidad Central de Proceso). · Memoria RAM para Contener los datos. · Memoria para el programa tipo ROM/PROM/EPROM. · Líneas de E/S para comunicarse con el exterior. · Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo, CAD: conversores Analógico/Digital, CDA: conversores Digital/Analógico, etc.). · Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema. El microcontrolador es en definitiva un circuito integrado que incluye todos los componentes de un computador. Debido a su reducido tamaño es posible montar el controlador en el propio dispositivo al que gobierna. En este caso el controlador recibe el nombre de controlador empotrado (embedded controller). Al microcontrolador se le conectan periféricos, como entradas (pulsadores, sensores, teclados, etc) y salidas (led, relés, lcd, display, etc). Las entradas y salidas pueden dividirse en dos tipos, las discretas cuyo valor es 1 o 0 (esta o no esta), y las análogas (tiene varios valores en un rango establecido).. Recuerde que los microcontroladores no manejan potencia, para ello deben realizarse cicuitos de potencia según las cargas, voltajes y corrientes manejadas.

Page 2: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 2

Internamente se conectan las entradas y salidas con un programa realizado por el usuario. Existen varios lenguajes de programación, entre ellos tenemos: - Assembler - Basic - C - Pascal - Diagramas de flujo - Ladder De cada uno de estos lenguajes, existen varios fabricantes de software que permiten mediante un IDE propia generar el programa. Existen varios fabricantes de microcontroladores, entre ellos tenemos: - Intel - Atmel - Motorola - Microchip Los más conocidos de Microchip son los de la serie PIC, debido a su fácil programación, bajo costo, grandes prestaciones, se acomodan a su aplicación.

Los microcontroladores PIC también se dividen en otros: - Gama Enana PIC12C(F)XXX - Gama media PIC16FXXX - Gama alta PIC18FXXX Existen PIC para aplicaciones avanzadas, como Ethernet, Can Bus y otras. En un principio vamos a trabajar con el PIC16F873A que tiene las siguientes características:

Page 3: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 3

DESCRIPCION DE PINES DEL PIC16F873A

MCLR* es el reset del PIC, se debe dar un pulso de 0 y luego dejar en uno, este genera un reset interno en el microcontrolador, el cual borra todos los registros e inicia el programa interno. RA0 a RA5, es el puerto RA, se compone internamente de 8 bits, 0 a 7, pero físicamente solo están disponibles los primeros 6, si este puerto se configura como digital, los 6 bits se pueden utilizar como entradas o como salidas. En este puerto también están las 5 entradas análogas, para ello se debn habilitar por software (programa). Vss, es el 0 (tierra) de la alimentación. OSC1, OSC2, en estos dos pines se conecta un cristal, con valores entre 1 a 20 Mhz, este sincroniza la ejecución de las instrucciones internas. RC0 a RC7, es el puerto RC, se puede utilizar como entradas o salidas digitales, o programar algunas funciones especiales (PWM, transmisión y recepción serial, I2C). Vdd, es la alimentación del PIC, no debe superar los 5.5 voltios, ni menos de 4.5 voltios. RB0 a RB7, es el puerto RB, se puede utilizar como entradas o salidas digitales, o programar algunas funciones especiales, una delas características mas importantes es que los 8 bits tienen resitencias pull-up internas.

Page 4: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 4

PROGRAMACION DE UN PIC Recordemos que el PIC tiene internamente una memoria de programa de 4096 posiciones (4096 bytes), en cada posición se guarda un código de programación (en hexadecimal), la tarea del programador es realizar dicho programa. Para realizar un programa para un microcontrolador, se podrían seguir los siguientes pasos: 1) Escribir el programa fuente: este se escribe según el lenguaje de programación seleccionado, aunque se puede utilizar un Ide, también se puede escribir en cualquier editar de texto. 2) Tome el programa fuente y compílelo, esto nos permite verificar que la sintaxis del programa este escrita de acuerdo al lenguaje. Si se presentan errores se deben corregir en el programa fuente. 3) Después de compilar se debe ensamblar el programa, se toma el programa sin errores y se crea uno con extensión .hex, el cual contiene los códigos de programación para ubicar en las posiciones de memoria de la memoria de programa del PIC. Muchos programas realizan compilación y ensamble de forma automática. 4) Simular el programa, ya sea utilizando el simulador propio del fabricante o un simulador electrónico que permita emular pic (proteus). 5) Después de simular y estar seguro del correcto funcionamiento, se debe quemar el PIC (programar físicamente), para ello se utiliza un hardware adecuado y un programa que en vie el archivo .hex a través de dicho hardware a el PIC (win800).

Page 5: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 5

CREACION DE UN PROGRAMA Vamos a mostrar la forma en que se crea un programa para un microcontrolador utilizando lenguaje basic y el software PIC IDE Simulator, de este ultimo se puede descargar una versión de prueba de la pagina http://www.oshonsoft.com. 1) Activamos el programa PIC IDE Simulator

2) Teniendo ya abierto el programa seleccionamos el PIC 16F873A

3) Luego seleccionamos la frecuencia de nuestro cristal, en este caso de 4.000.000 hez (4 Mhz)

4) Abrimos el IDE (Basic Compiler) para escribir nuestro programa en lenguaje basic.

5) Estando en el Ide, escribimos un programa,

Page 6: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 6

6) Grabamos nuestro programa fuente, le damos un nombre, este queda con la extensión .bas, que es la de Basic; en nuestro caso se llama Ej001.bas

7) Luego compilamos, ensamblamos y cargamos, lo de cargar es en el simulador propio del PIc Ide Simulator.

8) Si se presenta algún error se corrige, y de nuevo se repite el paso anterior; al no tener errores se puede cerrar el Ide, o se deja abierto para seguir el programa. El programa escrito toma una entrada S1 en el pin RA0 y una salida H0 en el pin RB0, si se pulsa S1 prende H0, si se suelta S1 se apaga H0. En la pantalla principal del software activamos una vista del microcontrolador.

9) Luego cambiamos la velocidad de simulación (Rate) a la máxima (6)

10) Ahora iniciamos la simulación

11) Verificamos en el simulador de microcontrolador la ejecución del programa

Page 7: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 7

12) Detenemos la simulación

Lo siguientes es simular (si se quiere ¡!) con un programa de simulación electrónica (puede ser el proteus), luego enviar el Ej001.hex al la memoria de programa del PIc, esto ultimo lo mostraremos mas adelante.

Page 8: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 8

LENGUAJE BASIC El lenguaje de programación Basic nos permite escribir programas para microcontroladores de una manera muy fácil y rápida; es de rápido aprendizaje y disponible de varias librerías de programación, que nos permite dedicarnos a la lógica del programa y no caer el algoritmos grandes y complejos. Recordemos que un microcontrolador, entre ellos el PIC, es un dispositivo al cual se le conectan entradas y salidas, mediante un programa guardado en su memoria se entrelazan y dan resultado a sistemas lógicos de tipo combinacional y/o secuencial. TOMA DE DECISIONES Una de las cosas mas importantes que se debe aprender en cualquier lenguaje de programación es la de tomar decisiones; estas nos permiten tomar las entradas aplicar conceptos de condiciones y dar resultados en las salidas. Existen 3 tipos de forma de decisiones: 1) Forma simple: cuando una condición se cumple nos genera una y solo una acción; la sintaxis es, if <condición> then <acción> Por ejemplo, se tienen dos pulsadores S1 y S2 y un led H0, se desea que al pulsar S1 se quede prendida H0, si se pulsa S2 se quede apagada H0. if S1 = 1 then H0 = 1 if S2 = 1 then H0 = 0 Siendo S1 = 1 la condición y H0 = 1 la acción. Siendo S2 = 1 la condición y H0 = 0 la acción, Podemos escribir las condiciones de forma mas completa, if S1 = 1 and S2 = 0 then H0 = 1 if S2 = 1 and S1 = 0 then H0 = 0 La condición es S1 = 1 and S2 = 0 y la acción es H0 = 1 La condición es S2 = 1 and S1 = 0 y la acción es H0 = 0 Las condiciones se evalúan con verdaderas o falsas, si la condición es de forma matemática y no lógica, se evalúa como verdadera si el resultado es mayor a 0 y falsa si el resultado es menor o igual a 0. Ejemplo, A=1 B=2 C=0 if A+B then C= A+B if A-B then C= A-B La condición A+B es verdadera, ya que 1 + 2 es igual a 3, que es mayor que 0, por lo que se realice la acción C = A+B, C = 1 + 2, C = 3 La condición A-B es falsa, ya que 1 – 2 es -1, que es menor que 0, por lo que la acción C = A-B no se realiza.

Page 9: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 9

Si una condición se cumple (es verdadera) y debido a ello se requieren varias acciones, esta forma no se puede emplear; es un error, If S1=1 then H0 =1 H1 =1, es un error If S2=1 then H0=1 and H1=1, es un error. En las condiciones no se pueden usar paréntesis, ni mezclar AND (y) u OR (o), If A and B or C then A=0, es un error If (A+B) then C=9, es un error If (A>2) and 2 then A=1, es un error 2) Forma compleja: si la condición se cumple se realizan varias acciones, la sintaxis es la siguiente, if <condición> then <accion1> <accion2> <accionn> endif Por ejemplo se tienen dos pulsadores S1 y S2 y dos lámparas H0 y H1, se desea que al pulsar S1 o S2 se prendan las dos lámparas, y si no se pulsa S1 y S2 se apagan las dos lámparas, If S1=1 or S2=1 then H0=1 H1=1 Endif If S1=0 and S2=0 then H0=0 H1=1 Endif Siempre si inicia con If y se termina con Endif, nunca se debe escribir después de el Then, If S1=1 then H0=1 es un error H1=0 Endif 3) Forma compuesta: cuando la condición es verdadera se realizan acciones y se la condición es falsa se realizan otras acciones, la sintaxis es, if <condición> then <accion1> <accionn> Else <accion1> <accionm> endif

Page 10: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 10

Por ejemplo, se tiene un pulsador S1 y una lámpara H0, se requiere que al pulsar S1 se prenda la lámpara y si se suelta S1 se apaga H0, If S1=1 then H0=1 Else H0=0 Endif

Estudie cuidadosamente estas tres formas de tomar decisiones a partir de condiciones, este seguro de entender antes de continuar, Ejercicios propuestos, en los siguientes ejercicios escribir las decisiones. 1) Se tienen 3 pulsadores S1, S2 y S3, una lámpara H0, se desea que al pulsar solo dos se prenda H0, y si no se pulsa ninguno se apague H0. 2) Se tienen 2 lámparas H0 y H1, dos pulsadores S1 y S2, se desea que al pulsar S1 se prendan las dos lámparas y se apaguen si se pulsa S2. 3) Se tienen 4 pulsadores h0 a H3, una lámpara H0, se desea que al pulsar H0 y H1 o H2 y H3 se prenda H0 en otro caso se apague. 4) Se tiene A=1, B=10,C=4, si A+B>3 de cargar en C 25, si A>C or B<C entonces cargue en A 34 y en B 12. 5) Se tienen 4 pulsadores S1 a S4, y tres lámparas H1 a H3, se desea que H1 solo prenda cuando se pulsen al menos dos, H1 solo prende cuando se pulsen solo 3, H3 solo prende si H1 y H2 están prendidas.

Page 11: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 11

VARIABLES Las variables son nombres que se le da a posiciones de memoria, y se utilizan para guardar y leer datos. Las variables en los microcontroladores están o utilizan la memoria de datos, que puede ser una RAM o una EEPROM. En Basic (Pic ide simulator) se pueden crear las siguientes variables (tipos) Bit: guardan un 1 o un 0 (verdadero o falso) Byte: guardan un número de 0 a 255 Word: guardan un número de 0 a 65535 Para crear una variable se usa la siguiente sintaxis, Dim <nombre> As <tipo> Por ejemplo Dim v1 as Bit Dim v2 as Byte Dim v3 as Word El nombre de las variables no debe contener espacios, no utilizar nombre de instrucciones, nunca cargue un dato a una variable que no lo pueda contener. Por ejemplo, crear una variable x1 y cargar en ella el valor 4, crear una variable x2 y cargar en ella 25000 Dim x1 as Byte Dim x2 as Word x1=4 x2=2500 x1=-3 es un error x2= 100000 es un error x1= 500 es un error x2=Hola es un error x2=-1234 es un error Ejemplo, se tiene una variable K con valores de 0 a 100, dos bits H0 y H1, H0 solo prende si K es menor a 25 y H1 solo prende solo si K es mayor a 80. Dim K as Byte Dim H0 as Bit Dim H1 as Bit If K<25 then

H0=1 Else H0=0 Endif If K>80 then

H1=1 Else H1=0

Page 12: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 12

Endif No confunda una variable tipo Bit con una entrada física (por un pin) del microcontrolador!! Ejemplo: se tiene una variable V1 con valores de 0 a 2000, dos bits S1 y S2, dos bits H1 y H2, se desea que H1 solo prenda cuando este S1 y V1 se mayor o igual a 1200, H2 solo prende si esta H1 y V1 es menor o igual a 850. Dim S1 as Bit Dim S2 as Bit Dim H1 as Bit Dim H2 as Bit Dim V1 as Word If S1=1 and V1>=1200 then H1=1 Else H1=0 Endif If H1=1 and V1<=850 then H2=1 Else H2=0 Endif

Page 13: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 13

ESCRIBIR PROGRAMAS PARA PIC Con las bases del lenguaje Basic vista anteriormente, podemos ya plantear programas para microcontroladores PIC. Para escribir un programa en el Ide del PIC Simulator IDE seguimos los siguientes pasos: 1) Si no va a usar ninguna entrada análoga inicie con la instrucción AllDigital, esta configura los bits del puerto RA como entradas o salidas digitales. 2) Luego declare todas las variables que necesite 3) Crear los símbolos usados en el programa, los simbolos son nombres que se ledan a los pines, puertos o registros del microcontrolador. Por ejemplo si quiero llamar al pin RA0 como S1 escribo Symbol S1 = RA0 Por ejemplo si quiero llamar a todo el puerto RB como display, escribo Symbol Display = RB 4) Configuro entradas y salidas, debo decirle al PIC cuales pines (de los puertos) van a ser entradas y salidas, para ello se utiliza la palabra TRIS, se pueden configurar los bits de forma independiente o todo el puerto. Por ejemplo, se desea configurar RA0 como entrada y RA2 como salida, TrisA.0 = 1 TrisA.2 = 0 Para configurar como salida se igual a 0 y como entrada se iguala a 1 Se desea configurar los primeros 4 bits (RB0 a RB3) del uerto RB como entradas y los últimos 4 (RB4 a RB7) como salidas, TrisB = %00001111 así se escribe en binario Trisb = 0fh así se escribe en hexadecimal Trisb = 0x0f asi también se escribe en hexadecimal TrisB = 15 así se escribe en decimal También se hubiera configurado bit por bit. 5) Configurar registros propios del PIC si se requiere, como temporizados, contadores, pwm, comunicaciones, interrupciones, etc. 6) Se inicializan variables y estados de inicio para puertos 7) Se escribe una etiqueta que marcara el inicio del programa lógico, las etiquetas son nombres que se escriben en la margen izquierda y terminan en dos puntos, no deben contener espacios, ni utilizar nombres reservados, Por ejemplo Inicio: Siga: Main:

Page 14: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 14

8) Escriba el cuerpo del programa usando lenguaje Basic 9) Al final el programa debe retornar a la etiqueta inicial, esto se realiza usando la instrucción Goto <etiqueta> el control del programa salta a la etiqueta indicada. Por ejemplo Inicio: ………………. ………………. Goto Inicio 10) Siempre termine con la directiva END Ejemplos de Programas 1) Tenemos el siguiente esquema electrónico (realizado en proteus)

Se desea que al pulsar S1 se prenda H0 y al soltar S1 se apague H0 Como no usamos análogas iniciamos con AllDigital No vamos a usar variables, no declaramos variables Creamos los símbolos para S1 y H0 Symbol S1 = RA0 Symbol H0 = RB0 Configuramos RA0 como entrada y RB0 como salida TrisA.0 = 1 TrisB.0 = 0 Iniciamos apagando a H0 H0 = 0 Escribimos la etiqueta inicial Inicio: Escribimos el programa de control If S1 = 1 then H0 = 1 Else H0 = 0 Endif Retornamos la etiqueta inicial, ara que el programa sea cíclico

Page 15: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 15

Goto Inicio Terminamos con la directiva End El programa completo será,

2) Tenemos el siguiente esquema electrónico

Se desea que al pulsar S1 se prenda H0 y se apague H1, y si se pulsa S2 se prende H1 y se paga H0 El programa es el siguiente

Page 16: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 16

3) Se tiene el siguiente esquema

Se desea que al pulsar S1 se prendan todas las lámparas H, y al soltar S1 se apaguen El programa seria

4) Se tiene el siguiente esquema

Page 17: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 17

Se desea que con un pulso (0 a 1) el motor M1 se prenda, con otro pulso (1 a 0) el motor M1se apague, y se repita el ciclo de forma indefinida. El programa podría ser!!

La instrucción Toggle m1 invierte el estado de un bit, en caso de estar en 1 lo pone en 0 y en caso de estar en 0 lo pone en 1. Al probar el programa podemos ver que mientras se este pulsado S1 (en uno) el motor se prende y se apaga, ya que no estamos detectando un cambio de 1 a 0 (flanco de subida), si no, que estamos trabajando por nivel, por lo anterior el programa no cumple con lo requerido. Debemos tener una variable que nos recuerde que el pulsador paso de 0 a 1 y solo nos permita realizar una acción una sola vez cuando esto suceda, y que al solatar S1 90 a 1) se habilite de nuevo la detección de 0 a 1 (flanco de subida). Sirve cualquier tipo de variable, pero se recomienda por uso de memoria una tipo bit. Vamos a crear una variable llamada Rs1 (el nombre no importa) para cumplir con los requerimientos.

Al iniciar Rs1 es igual a 0, si se pulsa S1 y siendo Rs1=0 se ejecuta la acción de invertir el estado del motor M1, a demás, se carga 1 en Rs1; al volver el control del programa al inicio estando Rs1 en 1 y sigue S1 pulsado (en 1) ya no se cumplen las condiciones y no se invierte el motor M1, solo al soltar S1 (0) se borra Rs1 ( a 0) y permite repetir la acción de invertir al pulsar de nuevo S1. Estudie muy bien este método de detectar flancos de subido en bits, es muy utilizado en programación; también se puede implementar para detectar flancos de bajada (0 a 1).

Page 18: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 18

PAUSAS CON PIC BASIC El PIC Basic tiene incorporadas ya unas funciones para realizar pausas, Waitms K Permite realizar pausas con base de tiempo en milisegundos, por ejemplo: Waitms 200, realiza una pausa 200 milisegundos Waitms 5000, realiza una puasa de 5000 milisegundos, osea, 1 segundo. Waitus K Permite realizar pausas con base de tiempo en microsegundos, por ejemplo: Waitus 500, realiza una pausa de 500 microsegundos Waitus 1000, realiza una pausa de 1000 microsegundos, o sea, 1 milisegundo. Tenga en cuenta que el valor máximo de K es 65535. La base de tiempo se calcula teniendo como referencia el cristal utilizado en el circuito, por lo que se debe tener cuidado en que el valor de este sea el configurado en el PIC Simulator. Se debe tener mucho cuidado con el uso de estas pausas, ya que detienen el ciclo del PIC, no se recomiendan en multiprocesos. O sea, si por ejemplo, se programa una pausa de 20 segundos, el PIC se bloqueara hasta no terminar con este tiempo. Ejemplos: 1) Se tiene conectado al pin RB0 un led llamado Lámpara, y se desea que esta flashe con una frecuencia de 1 hz (1 segundo). El código es el siguiente:

Page 19: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 19

La instrucción TOGGLE invierte el estado de un bit (o sea, lo complementa). 2) Se tiene un pulsador S0 a RC0, y un pulsador S1 no a RC4, en RB3 un led L0, se desea que al pulsar S0 se haga una pausa de 2 seg y se prenda L0, y si se pulsa S1 se haga una pausa de 2.5 seg y se apague L0.

3) Tenemos dos pulsadores S0 y S1, dos led L0 y L1, se desea que al pulsar S0 L0 prenda y al pulsar S1 L0 apague, y que el led L1 siempre prenda y apague cada 2 segundos.

Page 20: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 20

Si utilizamos directamente una pausa de WaitMs 2000 se anularía cada 2 segundos la lectura de los pulsadores S0 y S1, ,o mejor es realizar un programa que se ejecute cada 200 microsegundos y contamos hasta 10000 para asi obtener los dos segundos.

4) A un PIC16F873A conectar un display de 7 segmentos (cátodo común) y mostrar de forma automática los números del 0 al 9 con intervalo de 0.5 segundos

Realizamos el cuadro de valores a enviar al puerto RB para mostrar los números de 0 al 9

Page 21: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 21

Ahora escribimos el código

5) Al ejemplo anterior, anexar un pulsador S1 en RA0, cada que pulso se incrementa el valor en el display

Page 22: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 22

Otra forma de enviar los códigos al display es guardándolos en un vector (array) de 10 elementos; estos se crean como las variables y su sintaxis es, Dim <nombre>(n) as <tipo> n es el numero de elementos a contener Ejemplo, Dim datos(3) as byte se crea un vector llamado datos, el cual contiene 3 elementos, estos son datos(0), datos(1) y datos(2), cada uno puede contener un byte, al crear el vector este inicia sus elementos con valor igual a 0.

Ejercicios propuestos 1) Conecte a un PIC16f873A dos pulsadores S1 y S2, un display de 7 segmentos (cátodo común), con S1 se incrementa de 0 a 9 (de 9 pasa a 0) y con S2 decrementa de 9 a 0 (de 0 pasa a 9), el conteo debe mostrase en el display.

Page 23: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 23

2) En el ejercicio anterior use un display de 7 segmentos de ánodo común 3) Conecte a un PIC16f873A tres pulsadores S1, S2 y S3, un display de 7 segmentos (cátodo común), al pulsar S1 se muestra por 2 segundos la “A”, si se pulsa S2 se muestra por 1.5 segundos la “B”, si se pulsa S3 se muestra la “C” por 1 segundo, mientras no se pulse se debe apagar el display. 4) Conectar a un PIC16f873a un display de cátodo común al RB y otro mismo display a RC, mostrar conteo de 0 a 99 (de 99 pasa a 0) cada 250 milisegundos. 5) Al mismo montaje anterior anexar un pulsador S0, se inicia conteo incremental de 0 a 99, si en cualquier momento se pulsa S0 el contador decrementa de 99 a 0. 6) Conecte a un PIC 16F873A un pulsador S0 y un pulsador S1, un led H0, el programa inicia con el led apagado, al sostener pulsado S0 el led incrementa flasheo con intervalo de 10 milisegundos, y al sostener pulsado S1 el led decrementa flasheo con inérvalo de 10 milisegundos. 7) Conecte a RA0 un generador de frecuencia (0 a 1Khz), dos led H0 y H1 a RB0 y RB1, si la frecuencia de entrada esta entre 245 y 255 hz prende H0, si la frecuencia esta entre 495 y 505 hz prende H1 y si frecuencia superior a 800 hz prende las dos lámparas.

Page 24: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 24

SUBRUTINAS CON PIC BASIC Una subrutina es un bloque de programa por fuera del programa principal (después del END), el cual puede ser llamado las veces que se requiera y este retornara el control a la instrucción siguiente donde se invoco. Las subrutinas deben iniciar siempre por una etiqueta y para retornar se usa la instrucción RETURN. Un llamado a una subrutina se realiza con GOSUB <etiqueta> Por ejemplo, se desea una subrutina calcule la suma de dos números

Ejemplos 1) Se tiene el siguiente circuito

Se desea que al pulsar S0 se incremente el display de 0 a 15, y al pulsar S1 se decrementa el display de 15 a 0. Los nuevos códigos serian,

Page 25: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 25

Otra forma (la mas adecuada) de cargar los códigos del display es usando la función LOOKUP, estúdiela cuidadosamente de la ayuda, y lo vamos a utilizar en este ejemplo,

2) Se va realizar un programa que detecte alarma de varias casas, el esquema es el siguiente,

Se muestran solo 3 casas, pero se puede implementar hasta 15 (con DIP de 4, si es de 5 hasta 31, etc), la idea es que al pulsar en una casa se prende el led correspondiente (AL1, AL2 o AL3) y suene la sirena, los led deben prender y apagar cada 0.5 segundos, si se pulsa reconocer se apagan los led y la sirena.

AllDigital Dim k As Word Dim fbit As Bit Dim v1 As Byte Symbol casa = RA Symbol al1 = RB0 Symbol al2 = RB1 Symbol al3 = RB2 Symbol reconoce = RB3

Page 26: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 26

Symbol sirena = RB4 TRISA = %00001111 TRISB = %00001000 RB = 0 fbit = 1 inicio: Gosub flasheo If casa = 1 Then v1.1 = 1 If casa = 2 Then v1.2 = 1 If casa = 3 Then v1.3 = 1 If v1.1 = 1 And fbit = 1 Then al1 = 1 Else al1 = 0 Endif If v1.2 = 1 And fbit = 1 Then al2 = 1 Else al2 = 0 Endif If v1.3 = 1 And fbit = 1 Then al3 = 1 Else al3 = 0 Endif If casa > 0 Then sirena = 1 If reconoce = 1 Then v1 = 0 sirena = 0 Endif 'WaitMs 1 Goto inicio End flasheo: k = k + 1 If k = 1000 Then Toggle fbit k = 0 Endif Return

La variable V1 (tipo byte) posee 8 bits, Basic nos permite tomar de una variable tipo byte sus bits de forma independiente para prenderlos y/o apagarlos, V1.0=1 prende el bit 0 de la variable v1 V1.3=0 apaga el bit 3 de la variable v1 V1.6=1 prende el bit 6 de la variable v1 Ejercicio propuesto: Tome el esquema anterior y cambie los led por un display de 7 segmentos, muestre el número de la casa que genere alarma, también flasheando.

Page 27: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 27

GRABAR EL PIC Recordemos que el PIC tiene la memoria de programa, en ella se debe grabar el programa a ejecutar. Cuando usted escribe el código de programación esta creando el PROGRAMA FUENTE, el cual contiene las instrucciones según el lenguaje usado, en nuestro caso Basic, este programa fuente se debe COMPILAR, lo cual verifica que la sintaxis corresponda al lenguaje y no se tengan errores, luego de no tener ningún error y haber pasado la compilación se ENSAMBLA el programa, este proceso genera los códigos de maquina que la CPU del microcontrolador ejecutara. Generalmente la compilar y ensamblar se ralizan en un mismo paso, lógico que no se ensambla si se presentan errores. El programa fuente genera un archivo con extensión .bas Al compilar y ensamblar se genera un archivo con el nombre del archivo fuente pero con extensión .hex Para grabar un PIC se requiere un circuito programador de PIC, existen muchas clases, por puerto paralelo, por puerto serial, por USB.

Luego de tener el programador, debemos utilizar un programa que tome el archivo ensamblado (el .hex) y lo envíe al PIc usando dicho programador; también existen muchos programas para tal fin, entre los mas conocidos están el ICprog y el WinPic800, este ultimo lo vamos a utilizar y lo puede bajar de forma gratuita de www.winpic800.com.

Page 28: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 28

Vamos a realizar un ejemplo de programación de un PIC 16F873A; tenemos el siguiente esquema, Al pulsar S1 se activa el rele R1 por 5 minutos, al cabo de los cuales se apaga de forma automática, el led H1 es de señalización mientras se realiza la temporización, en cualquier momento se puede pulsar S2 y se apaga el relé interrumpiendo la temporización.

Para realizar un temporizado de 5 minutos tenemos que, 5 minutos = 300 segundos = 300000 milisegundos, o sea, una variable que cuenta hasta 50000 a intervalos de 1 milisegundo y otra que cuente hasta 6 la anterior variable, o sea, 50000 x 6 = 300000 milisegundos = 300 segundos = 5 minutos. AllDigital Dim k1 As Word Dim k2 As Byte Symbol s1 = RA0 Symbol s2 = RA1 Symbol h1 = RB0 Symbol rele = RB1 TRISA = %00000011 TRISB = %00000000 borrar: rele = 0 h1 = 0 k1 = 0 k2 = 0 inicio: If s1 = 1 And s2 = 0 And rele = 0 Then rele = 1 h1 = 1 k1 = 0 k2 = 0 Endif If rele = 1 Then k1 = k1 + 1 If k1 = 50000 Then k2 = k2 + 1 k1 = 0 endif If k2 = 6 Or s2 = 1 Then Goto borrar If rele = 1 Then WaitMs 1 Goto inicio End

Page 29: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 29

Llamar el programa Rele.bas Ahora abrimos el programa Winpic800

1) Seleccionamos Configuración -> Hardware, para seleccionar el tipo de programador a usar.

Page 30: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 30

2) Seleccionamos los PIC 16F

3) Luego buscamos el PIC 16F873A (o el que use)

4) Ubicamos el PIC en el programador, nunca lo inserte con el programador conectado y nunca lo retire con el programador conectado. 5) Luego realizamos un reconocimiento del PIC

6) Ahora cargamos el archivo Rele.hex

Page 31: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 31

7) Configuramos los fusibles, si el cristal es menor a 10 MHz seleccionamos XT, si es mayor seleccionamos HS

8) Damos la orden de programar,

El programador primero borra el PIC

Page 32: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 32

Luego lo programa y verifica

Ya tenemos el PIC programado, desconecte el programador del PC y retire el microcontrolador. Móntelo en el circuito armado y pruebe su programa!!

Page 33: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 33

USO DEL FOR…NEXT Cuando se desea realizar un proceso repetitivo n veces, se puede usar el algoritmo FOR…NEXT, la sintaxis es la siguiente, FOR <variable> = <inicio> TO <fin> STEP <paso> <acciones> ………….. NEXT <variable> La variable toma valores desde inicio hasta fin con incrementos dado por el paso. Se repite el ciclo mientras el valor de la variable sea menor o igual al fin. Ejemplo: Dim v1 as Byte Dim v2 as Byte For v1 = 1 to 100 Step 1 v2 = v1 Next v1 Al terminar el programa el valor de v1 es 101 y el valor de v2 es 100. Dim v1 as Byte Dim v2 as Byte For v1 = 0 to 50 Step 2 v2 = v1 * 2 Next v1 Al terminar el programa se tiene v1 = 52 y v2 = 100 Ejemplo: se tiene un PIC16F873A, al cual se le conectan 8 led en puerto RB, se desea que los led prendan de uno en uno cada 0.5 segundos, desde el bit 0 al 7, y se repita el ciclo de forma indefinida.

AllDigital Dim v1 As Byte TRISB = 0 RB = 0 inicio:

Page 34: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 34

For v1 = 0 To 7 Step 1 RB = LookUp(1, 2, 4, 8, 16, 32, 64, 128), v1 WaitMs 500

Next v1 Goto inicio End Ejemplo: Se tiene el mismo circuito anterior, se desea que los led roten de 0 a 7 y de 7 a 0 de manera ciclica.

AllDigital Dim v1 As Byte TRISB = 0 RB = 0 inicio: For v1 = 0 To 7 Step 1 RB = LookUp(1, 2, 4, 8, 16, 32, 64, 128), v1 WaitMs 500 Next v1 For v1 = 7 To 0 Step -1 RB = LookUp(1, 2, 4, 8, 16, 32, 64, 128), v1 WaitMs 500 Next v1 Goto inicio End

Otra forma

AllDigital Dim v1 As Byte TRISB = 0 RB = 0 inicio: For v1 = 0 To 15 Step 1 RB = LookUp(1, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 2, 1), v1 WaitMs 500 Next v1 Goto inicio End

Ejemplo: en el mismo circuito anterior se anexan dos pulsadores S0 y S1, con S1 se rota de 0 a 7 y con S1 se rota de 7 a 0

Page 35: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 35

AllDigital Dim v1 As Byte Dim vi As Byte Dim vf As Byte Symbol s0 = RA0 Symbol s1 = RA1 TRISA = 3 TRISB = 0 RB = 0 vi = 0 vf = 0 inicio: For v1 = vi To vf Step 1 RB = LookUp(1, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 2, 1), v1 WaitMs 500 If s0 = 1 Then vi = 0 vf = 7 Endif If s1 = 1 Then vi = 7 vf = 15 Endif Next v1 Goto inicio End

Ejemplo: con el mismo circuito anterior, cuando se pulse S0 se genera una secuencia, al pulsar S1 se genera otra.

AllDigital Dim v1 As Byte Dim v2 As Bit Symbol s0 = RA0 Symbol s1 = RA1 TRISA = 3 TRISB = 0 RB = 0 v2 = 0 inicio: If v2 = 0 Then For v1 = 0 To 7 Step 1 RB = LookUp(01h, 03h, 07h, 0fh, 1fh, 3fh, 7fh, ffh), v1 Gosub prueba Next v1 Else For v1 = 0 To 8 Step 1 RB = LookUp(00h, 81h, c3h, e7h, ffh, e7h, c3h, 81h), v1 Gosub prueba Next v1 Endif Goto inicio End prueba: WaitMs 250 If s0 = 1 Then v2 = 0 If s1 = 1 Then v2 = 1 Return

Page 36: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 36

ROTAR BITS Se pueden rotar los bits de un byte usando funciones propias de Basic, estas pueden rotar hacia la derecha o hacia la izquierda definiendo el número de bits a rotar, la sintaxis es, <byte1> = SHIFTLEFT ( byte2, n) rotar a la izquierda <byte1> = SHIFTRIGHT ( byte2, n) rotar a la derecha Donde byte1 es donde queda el valor después de rotar y byte2 es el byte a rotar, n es cuantos bits se van a rotar, ojo byte2 no se altera Ejemplo:

AllDigital Dim v1 As Byte Dim v2 As Byte v1 = %01100001 v2 = ShiftRight(v1, 1) End

Los valores finales son v1 = %01100001, v2 = %00110000 Ejemplo:

AllDigital Dim v1 As Byte Dim v2 As Byte v1 = %01100001 v2 = ShiftLeft(v1, 3) End

Los valores finales son v1 = %01100001, v2 = %00001000 Ejemplo: Se tiene el siguiente circuito

Se desea que al pulsar S0 se rote el puerto RB a la izquierda y señalizar con RC0 y si se pulsa S1 se rota a la derecha y señalizar con RC1.

AllDigital Symbol s0 = RA0 Symbol s1 = RA1 TRISA = 3 TRISB = 0

Page 37: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 37

TRISC = 0 RB = 0 RC = 0 inicio: If RC0 = 1 Then RB = ShiftLeft(RB, 1) WaitMs 200 If RB = 0 Then RB = 1 WaitMs 200 Endif Endif If RC1 = 1 Then RB = ShiftRight(RB, 1) WaitMs 200 If RB = 0 Then RB = 128 WaitMs 200 Endif Endif If s0 = 1 Then RC = 1 If s1 = 1 Then RC = 2 Goto inicio

End Ejemplo: en el mismo circuito anterior, se rota al derecha cada que se pulsa S0 y se rota a la derecha cada que se pulsa S1

AllDigital Dim rs0 As Bit Dim rs1 As Bit Symbol s0 = RA0 Symbol s1 = RA1 TRISA = 3 TRISB = 0 TRISC = 0 RB = 1 RC = 1 inicio: If s0 = 1 And rs0 = 0 Then RC = 1 If RB.0 = 0 Then RB = ShiftRight(RB, 1) rs0 = 1 Endif Endif If s0 = 0 Then rs0 = 0 If s1 = 1 And rs1 = 0 Then RC = 2 If RB.7 = 0 Then RB = ShiftLeft(RB, 1) rs1 = 1 Endif Endif If s1 = 0 Then rs1 = 0 Goto inicio End

Page 38: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 38

CONEXION DE TECLADO

Los teclados son pulsadores conectados de forma matricial, o sea, por filas y columnas, se pueden conectar a un PIC usando las filas como salidas y columnas como entradas, también las filas como entradas y columnas como salidas. Se deben tener resistencias pull-up de 1 k y resistencias pull-down de 10k.

En el esquema anterior vamos a utilizar salidas a columnas y entradas a filas. Se debe realizar un cuadro de señales, se deben prender las filas en orden RB0 a RB2 e ir verificando cual de las columnas se activan RB4 a RB7. La tabla nos permite verificar cual es el valor del puerto RB cuando se activa cualquier tecla.

Page 39: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 39

Según el esquema mostrado vamos a realizar un programa donde se muestre en un display de 7 segmentos el valor de la tecla pulsada.

AllDigital Dim k As Byte Dim v1 As Byte TRISB = %11110000 TRISC = %00000000 RB = 0 RC = 0 inicio: For k = 0 To 2 Step 1 RB = LookUp(1, 2, 4), k v1 = RB And 240 If v1 > 0 Then Gosub leer_tecla Next k Goto inicio End leer_tecla: waitms 10 If RB = 82h Then RC = 3fh '0 If RB = 11h Then RC = 06h '1 If RB = 12h Then RC = 5bh '2 If RB = 14h Then RC = 4fh '3 If RB = 21h Then RC = 66h '4 If RB = 22h Then RC = 6dh '5 If RB = 24h Then RC = 7dh '6 If RB = 41h Then RC = 27h '7 If RB = 42h Then RC = 7fh '8 If RB = 44h Then RC = 6fh '9 Return

Ahora vamos a agregar dos led, uno verde a RA0 y uno rojo RA1, deseamos entrar una clave de tres números, usamos el # como enter, si la clave es correcta el led verde prende 3 segundos y se apaga, si la clave es incorrecta el led rojo prende 3 segundos y se apaga. Vamos a utilizar la clave correcta = 192

Page 40: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 40

El esquema electrónico es el siguiente,

AllDigital Dim k As Byte Dim v1 As Byte Dim n1 As Byte Dim n2 As Byte Dim n3 As Byte Dim tecla As Byte Symbol lv = RA0 Symbol lr = RA1 TRISA = %00000000 TRISB = %11110000 TRISC = %00000000 RB = 0 RC = 0 lv = 0 lr = 0 inicio: For k = 0 To 2 Step 1 RB = LookUp(1, 2, 4), k v1 = RB And 240 If v1 > 0 Then Gosub leer_tecla Next k Goto inicio End leer_tecla: If RB = 82h Then tecla = 0 If RB = 11h Then tecla = 1 If RB = 12h Then tecla = 2 If RB = 14h Then tecla = 3 If RB = 21h Then tecla = 4

Page 41: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 41

If RB = 22h Then tecla = 5 If RB = 24h Then tecla = 6 If RB = 41h Then tecla = 7 If RB = 42h Then tecla = 8 If RB = 44h Then tecla = 9 If RB = 84h Then tecla = 10 RC = LookUp(3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 27h, 7fh, 6fh, 249), tecla Gosub verifica Return verifica: If tecla = 10 Then If n1 = 1 And n2 = 9 And n3 = 2 Then lv = 1 WaitMs 2000 lv = 0 Else lr = 1 WaitMs 3000 lr = 0 Endif n1 = 100 n2 = 100 n3 = 100 RC = 0 Else n1 = n2 n2 = n3 n3 = tecla Endif WaitMs 500 RC = 0 espere: RB = 0 If RB <> 0 Then Goto espere

Return Ejercicios propuestos: 1) Programar una clave de 4 números que active el led verde. 2) Programador dos claves de 3 números que activen el led verde. 3) Programa la tecla ‘*’ para cambiar la clave correcta. 4) Conecte 4 leds y programe 4 claves de 3 números que los activen por 3 segundos.

Page 42: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 42

PWM MODULACION POR ANCHO DE PULSO La modulación por ancho de pulsos (o PWM, de pulse-width modulation en inglés) es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (por ejemplo sinusoidal o cuadrada). El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación al período. Matemáticamente: D = t / T D es el ciclo de trabajo t es el tiempo en que la función es positiva (ancho del pulso) T es el período de la función La construcción típica de un circuito PWM se lleva a cabo mediante un comparador con dos entradas y una salida. Una de las entradas se conecta a un oscilador de onda triangular, mientras que la otra queda disponible para la señal moduladora. En la salida la frecuencia es generalmente igual a la de la señal triangular y el ciclo de trabajo esta en función de la portadora. La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya interferencias generadas por radiofrecuencia. Estas pueden minimizarse ubicando el controlador cerca de la carga y realizando un filtrado de la fuente de alimentación.

Parámetros importantes Algunos parámetros importantes de un PWM son: La relación de amplitudes entre la señal portadora y la moduladora, siendo recomendable que la última no supere el valor pico de la portadora y esté centrada en el valor medio de ésta. La relación de frecuencias, donde en general se recomienda que la relación entre la frecuencia de la portadora y la de señal sea de 10 a 1. Aplicaciones En actualidad, existen muchos circuitos integrados que integran la función PWM, además de otros muy particulares para lograr circuitos funcionales que puedan controlar fuentes conmutadas, controles de motores, controles de elementos termoeléctricos, choppers para sensores en ambientes ruidosos y algunas otras aplicaciones. Se distinguen por fabricar este tipo de integrados compañías como Texas Instruments, National Semiconductor, Maxim, y algunas otras más.

Page 43: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 43

CONTROL DE VELOCIDAD DE UN MOTOR DC CON PWM

Realicemos el siguiente circuito,

Con S1 deseamos incrementar la velocidad al motor, con S2 deseamos decrementar la velocidad al motor. Debemos recordar que el PWM es control por ancho de pulso, lo que hacemos es variar el ancho del pulso a una señal conservando su frecuencia, este método es utilizado para realizar variación de velocidad en motores, controlar temperatura en resistencias calefactores, etc. En nuestro ejemplo la frecuencia base es de 400 Hz (un valor típico) por lo que el periodo de la onda (T=1/f) será de 2500 microsegundos.

El programa es el siguiente,

Page 44: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 44

El control por ancho de pulso PWM, viene incorporado en los microcontroladores 16F873A y 16F877A, y son llamados CCPn, siendo n el número de canal, los dos microcontroladores tiene dos canales el CCP1 (pin RC2) y el CCP2 (pin RC1).

El PIC Simulator tiene ya las funciones propias para el control autónomo de estas salidas por PWM, y son:

PWMON, PWMOFF y PWMDUTY

PWMON Canal, Modulo

La función PWMON configura el canal a utilizar, el escalamiento para la salida y la base de frecuencia, requiere de dos parámetros,

Canal = es el CCPn que se va a utilizar, los valores son 1, 2 o 3; 1 para CCP1, 2 para CCP2 y 3 para CCP3 (algunos micros PIC lo tienen)

Modulo = se selecciona la frecuencia base para generar el PWM, y se selecciona el numero de bits que forman de 0 al 100 % de la salida. Se obtiene de la siguiente tabla,

Por ejemplo PWMON 1,1, quiere decir que se utiliza el canal CCP1 (pin RC2), el modulo 1, con frecuencia base de 244 Hz, y una precisión de 10 bits, por lo que salida del 0% será 0, salida del 100% será 1023.

Si PWMON 2, 10, se selecciona canal CCP2 (pin RC1), el modulo 2, con frecuencia base de 1953 Hz, y una presicion de 7 bits, por lo que 0% será 0 y 100% será un valor de 127.

PWMoff Canal

La función PWMoff desactiva el canal iniciado por el PWMON, requiere un parámetro,

Canal = es el CCPn que se va a utilizar, los valores son 1, 2 o 3, 1 para CCP1, 2 para CCP2 y 3 para CCP3 (algunos micros PIC lo tienen)

Después de ejecutar PWMoff, se desactiva el canal y se debe otra vez llamar el PWMON para iniciar.

PWMDuty Canal, variable

La función PWMDUTY es la que genera la salida PWM sobre el pin (canal) seleccionado, require dos parámetros,

Canal = es el CCPn que se va a utilizar, los valores son 1, 2 o 3, 1 para CCP1, 2 para CCP2 y 3 para CCP3 (algunos micros PIC lo tienen)

Variable = es el valor, ya sea una variable o una constante que nos dara el porcentaje de salida, va de acuerdo al modulo seleccionado en PWMON.

Por ejemplo si PWMON 1,9 y PWMDUTY 1,255, la salida estará a un 100% de PWM, si PWMDUTY 1, 127 la salida estará al 50% de PWM. Ejemplo:

Page 45: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 45

Queremos generar en un CCP1 de un 16F873A salida PWM del 50% fijo, se tiene un pulsador en S0 en RC0 que apaga la salida. El código es el siguiente:

Ejemplo:

Según el esquema anterior, queremos que, al pulsar S1 el motor va del 0% al 100% de su velocidad con una rampa de 10 segundos, si se pulsa S2 el motor para inmediatamente. 0% es 0, 100% es 1023, o sea, para ir de 0 al 100% en 10 segundos se debe incrementar con un intervalo de 10milisegundos (aproximadamente). El código será el siguiente:

Page 46: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 46

CONEXION DE MATRIX DE LEDS Una matrix de led es un arreglo de filas y columnas de diodos tipo led, estas se usan entre otras cosas para visualizar mensajes, desplazar caracteres. Viene en diferentes tamaños, según el numero de filas y de columnas, nosotros vamos a trabajar con una de 5x7, o sea, 5 columnas y 7 filas. Las filas las activamos con “0” y las columnas con “0”. Usemos el puerto RB (RB0 a RB6) para controlar las filas y RC (RC0 a RC4) para controlar las columnas. Primero debemos definir en la matrix lo que vamos a mostrar, por ejemplo la “A”, “7”, “0”

Las columnas se enumeran de derecha a izquierda (0, 1, 2, 3, 4) y las filas de arriba hacia abajo (0, 1, 2, 3, 4, 5, 6, 7). De lo anterior debemos sacar de la figura formada los 5 valores para cada columna formado por los bits 0 a 6 de las filas, por ejemplo: La “A”, los códigos son 7ch, 12h, 11h, 12h, 7ch El “7”, los códigos son El “0”, los códigos son 3eh, 51h, 49h, 45h, 3eh Y así podemos hallar los códigos de cualquier figura a formar. Usando un PIC16F873A, vamos a usar una matrix de led de 5x7, para la conexión de filas debemos utilizar un buffer, por ejemplo el 74ls240 que tiene salidas negadas, y en las columnas usamos transistores, por ejemplo 2n3904, que activen la columna a “1”. Por ahorro de tiempo en la simulación se puede conectar en el proteus la matrix de forma directa, teniendo en cuenta, que la salida por RB a filas debe ser negada (invertir bits).

Page 47: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 47

Para la realización del programa debemos realizar los siguientes pasos 1) Crear una subrutina “Msg”, en ella escribimos el mensaje a mostrar, se debe terminar con 255, para saber hasta donde llega el mensaje. Por ejemplo

En la variable “letra” (byte) vamos a poner la letra amostrar, la variable “kletra” (byte) nos dirá cual letra del mensaje a sacar. 2) Crear una subrutina “Codigos”, en ella escribimos los códigos de los caracteres a mostrar. Por ejemplo

Según la letra a mostrar (variable “letra”), buscamos los códigos, os capturamos en la variable “dato” (byte) y los metemos en un vector “datos()” (byte), este ultimo nos permitirá mostrar en la matrix los códigos y rotarlos. 3) Crear una subrutina “Rotar”, esta rota los códigos en el vector “datos()”, lo cual permite que los caracteres se vallan mostrando y rotando sobre la matrix. 4) En el programa principal, debemos leer la letra, luego rotar el vector, hallar los códigos, mostrar las columnas un momento, desplazar la letra, a terminar de desplazar buscamos la otra letra, y se repite el ciclo. El código completo es el siguiente:

AllDigital Dim k1 As Byte Dim k2 As Byte Dim k3 As Word Dim k4 As Byte Dim kletra As Byte Dim letra As Byte Dim dato As Byte Dim datos(6) As Byte TRISB = 0 TRISC = 0 k2 = 0 inicio: Gosub msg If letra = 255 Then k2 = 0

Page 48: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 48

kletra = 0 Goto inicio Endif Gosub rotar Gosub codigos For k3 = 0 To 50 k4 = 1 For k1 = 0 To 5 RC = k4 RB = Not datos(k1) WaitUs 500 k4 = k4 * 2 Next k1 Next k3 k2 = k2 + 1 If k2 > 5 Then kletra = kletra + 1 k2 = 0 Endif Goto inicio

End rotar: datos(5) = datos(4) datos(4) = datos(3) datos(3) = datos(2) datos(2) = datos(1) datos(1) = datos(0) Return msg: letra = LookUp("H", "O", "L", "A", " ", 255), kletra Return codigos: Select Case letra Case "H" dato = LookUp(77h, 8h, 8h, 8h, 77h, 00h), k2 Case "O" dato = LookUp(3eh, 41h, 41h, 41h, 3eh, 00h), k2 Case "L" dato = LookUp(7fh, 40h, 40h, 40h, 40h, 00h), k2 Case "A" dato = LookUp(7ch, 12h, 11h, 12h, 7ch, 00h), k2 EndSelect datos(0) = dato

Return

Page 49: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 49

CONTROL MOTORES PASO A PASO

Recordemos que existen motores paso a paso de tipo unipolar (2 bobinas) y motores bipolares (5, 6 o 8 bobinas). A estos motores se les puede controlar la velocidad, el ángulo y el sentido de giro. La velocidad máxima la da el fabricante y se varía con la frecuencia de activación de las bobinas, el ángulo se varía controlando el número de activaciones de las bobinas y el sentido se controla invirtiendo la secuencia de activación de las bobinas.

Hay que tener cuidado con la conexión al PIC, ya que estos motores requieren mucha corriente. Para controlar un motor bipolar se debe controlar cada bobina con puente H (inversor de giro), ya sea realizado con semiconductores o relés (en lo posible de estado solido).

La secuencia para su control es la siguiente:

Paso Terminales A B C D

1 +V -V +V -V 2 +V -V -V +V 3 -V +V -V +V

4 -V +V +V -V

Page 50: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 50

Para motores paso a paso unipolares se debe conectar cada punta de bobina a través de transistores de potencia (alto consumo de corriente) o relés, ya sea controlado el Gnd o el +Vcc .

Hay tres formas de controlar un motor paso a paso y son (sin importaren que pines del PIC se conecten).:

Por Oleada: Bajo par, sencillo

Paso Normal: Alto par

Por Medio Paso: Mas presicion

Page 51: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 51

Si los valores de las secuencias se invierten, también se invierte el sentido de giro del motor. Por ejemplo si la secuencia es 1, 2, 4, 8, 1, 2, 4, … el motor podría girar de forma continua hacia la derecha, pero si en la misma conexión enviamos 8, 4, 2, 1, 8, 4, 2,… el motor girara hacia la izquierda. Ejemplo: Conectar un motor paso a paso bipolar a un PIC 16F873A, al iniciar el programa el motor debe girar hacia la derecha de forma continua. Por comodidad en el Proteus, lo vamos a conectar de forma directa.

Configurar el MPP con los siguientes parámetros,

O sea, por cada paso el MPP (motor paso a paso) va a girar un (1) grado (hacia la izquierda El programa es el siguiente AllDigital Dim k As Byte TRISB = 0 RB = 0 inicio: For k = 0 To 3 RB = LookUp(5, 9, 10, 6), k WaitMs 50 Next k Goto inicio End

Page 52: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 52

El valor de -37.3 nos indica que el motor a girado 37.3 grados en sentido antihorario Si en el programa cambiamos la secuencia de los pasos, el motor cambia el sentido de giro. AllDigital Dim k As Byte TRISB = 0 RB = 0 inicio: For k = 3 To 0 Step -1 RB = LookUp(5, 9, 10, 6), k WaitMs 50 Next k Goto inicio End

Ejemplo: Se desea que con el circuito anterior el motor gire 45 grados a la derecha, realice una pausa de 1.5 segundos y repita el ciclo de forma indefinida. AllDigital Dim k As Byte Dim pasos As Word TRISB = 0 RB = 0 inicio: For k = 3 To 0 Step -1 RB = LookUp(5, 9, 10, 6), k WaitMs 50 pasos = pasos + 1 If pasos = 45 Then WaitMs 1500

Page 53: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 53

pasos = 0 Endif Next k Goto inicio End La variable “pasos” cuenta cada paso (que equivale a 1 grado), cuando se alcanza el valor 45 se realiza la pausa y se resetea el contador. Ejemplo: Conectar un MPP unipolar a un PIC16F873A, cuando el programa inicie el MPP de be girar de forma continua, usando secuencia normal.

Configure MPP a 5V y 1 grado por paso. AllDigital Dim k As Byte TRISB = 0 RB = 0 inicio: For k = 0 To 3 RB = LookUp(3, 6, 12, 9), k WaitMs 100 Next k Goto inicio End Ejemplo: Con el mismo circuito anterior, realizar un programa donde el MPP gire 45 grados a la derecha, pausa de 1.5 segundos, gire 45 grados a la izquierda, pausa 1,5 segundos, y se repita el ciclo. AllDigital Dim pasos As Word Dim k As Byte TRISB = 0 RB = 0 inicio: Gosub secuencia1 WaitMs 1500 Gosub secuencia2 WaitMs 1500 Goto inicio End secuencia1: For k = 0 To 3 RB = LookUp(3, 6, 12, 9), k WaitMs 100 pasos = pasos + 1

Page 54: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 54

If pasos = 45 Then pasos = 0 Return Endif Next k Return secuencia2: For k = 3 To 0 Step -1 RB = LookUp(3, 6, 12, 9), k WaitMs 100 pasos = pasos + 1 If pasos = 45 Then pasos = 0 Return Endif Next k Return Ejemplo: En el circuito anterior agregar tres pulsadores S1, S2 y S3, con S1 el MPP gira hacia la derecha, con S2 gira hacia la izquierda y con S3 el MPP para. Usar secuencia de medio paso.

AllDigital Dim k As Byte Dim v1 As Byte Symbol s1 = RA0 Symbol s2 = RA1 Symbol s3 = RA2 Symbol mpp = RB TRISA = 7 TRISB = 0 mpp = 0 inicio: If s1 = 1 Then v1 = 1 If s2 = 1 Then v1 = 2 If s3 = 1 Then v1 = 0 If v1 = 1 Then Gosub derecha If v1 = 2 Then Gosub izquierda If v1 = 0 Then mpp = 0 Goto inicio End derecha: mpp = LookUp(1, 3, 6, 4, 12, 8, 9), k WaitMs 50 k = k + 1 If k = 8 Then k = 0 Return

Page 55: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 55

izquierda: mpp = LookUp(1, 3, 6, 4, 12, 8, 9), k WaitMs 50 k = k - 1 If k = 255 Then k = 7 Return El PIC Ide Simulator trae funciones para controlar un MPP unipolar, estas se pueden usar de modo rápido para cualquier control Para cada bobina A, B, C y D se debe configurar el puerto y bit a utilizar.

Luego se define el modo de trabajo, con 1 paso normal, con 2 medio paso.

Se utiliza STEPHOLD para detener el motor Para mover el motor a la derecha o izquierda se usa STEPCW o STEPCCW, estas funciones requieren de dos parámetros, el primero indica los pasos a dar, y el segundo la pausa entre pasos en microsegundos. AllDigital Define STEP_A_REG = PORTB Define STEP_A_BIT = 0 Define STEP_B_REG = PORTB Define STEP_B_BIT = 1 Define STEP_C_REG = PORTB Define STEP_C_BIT = 2 Define STEP_D_REG = PORTB Define STEP_D_BIT = 3 Define STEP_MODE = 1 StepHold inicio: StepCW 45, 3000 WaitMs 500 Goto inicio End En el programa anterior el motor gira a la derecha 45 grados y realiza pausa de 500 milisegundos, el ciclo es infinito Si cambiamos STEPCW por STEPCCW el MPP cambia de sentido de giro AllDigital Define STEP_A_REG = PORTB Define STEP_A_BIT = 0 Define STEP_B_REG = PORTB Define STEP_B_BIT = 1 Define STEP_C_REG = PORTB Define STEP_C_BIT = 2 Define STEP_D_REG = PORTB Define STEP_D_BIT = 3 Define STEP_MODE = 1

Page 56: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 56

StepHold inicio: StepCCW 45, 3000 WaitMs 500 Goto inicio End Ejemplo: Usando el siguiente circuito, se desea que al pulsar S1 el MPP gire a la derecha, con S2 gire a la izquierda, y con S3 el MPP pare.

AllDigital Define STEP_A_REG = PORTB Define STEP_A_BIT = 0 Define STEP_B_REG = PORTB Define STEP_B_BIT = 1 Define STEP_C_REG = PORTB Define STEP_C_BIT = 2 Define STEP_D_REG = PORTB Define STEP_D_BIT = 3 Define STEP_MODE = 1 Dim v1 As Byte TRISA = 7 StepHold inicio: If RA0 = 1 Then v1 = 1 If RA1 = 1 Then v1 = 2 If RA2 = 1 Then v1 = 0 If v1 = 1 Then StepCW 1, 3000 Endif If v1 = 2 Then StepCCW 1, 3000 Endif If v1 = 0 Then StepHold Endif WaitMs 1 Goto inicio End

Page 57: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 57

MANEJO DE UN DISPLAY LCD

El compilador PIC Basic posee las funciones propias para el manejo de display LCD de varios tipos, si tomamos como ejemplo un LCD de 2 Filas y 16 columnas (16x2), podremos enviar mensajes a cualquiera de las dos líneas y en la posición que queramos. Recordemos que un display de 16x2 tienen generalmente 16 pines, a saber:

1. Gnd 2.+5Vcc 3.Vo, manejo de contraste 4.RS, selección de registro instrucción datos 5. R/W, selección escritura o lectura, con R/W=0 se escribe en el Lcd, con R/w=1 se lee 6. E, habilitación, con E=1 se activa el LCD 7 a 14, entrada y salida de datos 15 y 16, algunos tienen luz propia.

Los LCD se pueden manejar con 8 o 4 bits. Para 8 bits se utilizan los pines 7 a 14 (D0 a D7), para 4 bits se utilizan los pines 11 a 14 (DD4 a D7)..

Este curso no pretende explicar el funcionamiento de los LCD, ya que deben ser conocimientos adquiridos por el propio estudiante, por lo que si existen dudas se debe recurrir a adquirir fundamentación propia.

Para controlar el LCD debemos programar las siguientes definiciones:

DEFINE LCD_LINES = 2 ‘numero de filas del LCD DEFINE LCD_CHARS = 16 ‘numero de columnas del lcd DEFINE LCD_BITS = 8 ‘manejo por 8 (8) o 4 (4) bits DEFINE LCD_DREG = PORTB ‘puerto a conectar los 8 o 4 bits DEFINE LCD_DBIT = 0 ‘0 para manejo de 8 bits y 4 para manejo de 4 bits DEFINE LCD_RSREG = PORTC ‘Puerto para manejar RS DEFINE LCD_RSBIT = 1 ‘Bit para manejar RS (RC1) DEFINE LCD_EREG = PORTC ‘Puerto para manejar E DEFINE LCD_EBIT = 3 ‘Bit para manejar E (RC3) DEFINE LCD_RWREG = PORTC ‘Puerto para manejar RW DEFINE LCD_RWBIT = 2 ‘Bit para manejar RW

Algunas funciones son:

LCDINIT n, n=0, sin cursor; n=1, blink; n=2, underline; n=3, blink + underline LCDCMDOUT <orden> ejecuta una orden

LCDClear borrar LCD LCDLINE!HOME se sitúa en fila 1 columna 1

LCDOUT “texto” envía texto a LCD a posición seleccionada

LCDLINE2POS(10) selecciona línea 2 columna 10

Se deja al alumno para que lea las ayudas con respecto a las demás funciones.

Page 58: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 58

Ejemplo: Realizar el siguiente montaje,

Escriba el siguiente programa de prueba,

Define LCD_LINES = 2 ‘2 filas Define LCD_CHARS = 16 ’16 columnas Define LCD_BITS = 8 ‘8 bits Define LCD_DREG = RB ‘puerto a conectar los 8 bits (pines 7 a 14) Define LCD_DBIT = 0 ‘manejo de 8 bits Define LCD_RSREG = RC ‘puerto para RS Define LCD_RSBIT = 0 ‘RC0 a RS Define LCD_EREG = RC ‘puerto para E Define LCD_EBIT = 1 ‘RC1 a E Define LCD_RWREG = RC ‘puerto para R/W Define LCD_RWBIT = 2 ‘RC2 a R/W Lcdinit 0 loop: Lcdcmdout LcdClear Lcdout "Microntroladores" WaitMs 1000 Lcdcmdout LcdClear Lcdcmdout LcdLine1Home Lcdout "Soy Fila 1" WaitMs 500 Lcdcmdout LcdLine2Home Lcdout "Soy Fila 2" WaitMs 2000 Goto loop End

Se vería en el Proteus

Page 59: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 59

Para mostrar variables, escriba el siguiente programa

Define LCD_LINES = 2 Define LCD_CHARS = 16 Define LCD_BITS = 8 Define LCD_DREG = RB Define LCD_DBIT = 0 Define LCD_RSREG = RC Define LCD_RSBIT = 0 Define LCD_EREG = RC Define LCD_EBIT = 1 Define LCD_RWREG = RC Define LCD_RWBIT = 2 Dim v1 As Byte Dim v2 As Byte Lcdinit 0 Lcdcmdout LcdClear loop: Lcdcmdout LcdLine1Home Lcdout "Variable V1=" Lcdcmdout LcdLine1Pos(14) Lcdout #v1 Lcdcmdout LcdLine2Home Lcdout "Variable V2=" Lcdcmdout LcdLine2Pos(14) Lcdout #v2 WaitMs 250 v1 = v1 + 1 v2 = v1 * 7 Goto loop End

Ejemplo: Conectar un LCD 2x16 a un PIC16F873A a 4 bits y enviar un mensaje. AllDigital Define LCD_LINES = 2 Define LCD_CHARS = 16 Define LCD_BITS = 4 Define LCD_DREG = RB Define LCD_DBIT = 4 Define LCD_RSREG = RC Define LCD_RSBIT = 0 Define LCD_EREG = RC Define LCD_EBIT = 1

Page 60: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 60

Define LCD_RWREG = RC Define LCD_RWBIT = 2 Lcdinit 0 loop: Lcdcmdout LcdClear Lcdcmdout LcdLine1Home Lcdout "Microntroladores" Lcdcmdout LcdLine2Home Lcdout "4 BITS !!" WaitMs 50 Goto loop End Lo simulamos en el mismo PIC Ide Simulator

Ejemplo: conectar un LCD 2x16 a un PIC16F873A a 4 bits, rotar de derecha a izquierda un mensaje

Page 61: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 61

LECTURA DE SENALES ANALOGAS Algunos microcontroladores PIC poseen entradas análogas, El PIC16F873A tiene 5 entradas análogas: AN0 (RA0), AN! (RA1), AN2 (RA2), AN3 (RA3), AN4 (RA5) El PIC16F877A tiene 8 entradas análogas: AN0 (RA0), AN! (RA1), AN2 (RA2), AN3 (RA3), AN4 (RA5), AN5 (RE0), AN6 (RE1), AN7 (RE2).

Se puede tener referencias VREF- (RA2) y VREF+ (RA3) o tomar como referencia a VDD y VSS. El puerto RA se puede usar como entradas o salidas digitales (discretas) o como entradas análogas, esto se configura con el registro ADCON1.

Page 62: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 62

Como observamos en la tabla anterior, para tener todo el puerto RA como I/O digitales hay que cargar ADCON1=6 (0x06); por ejemplo si solo se requiere usar la entrada análoga AN0 se carga ADCON1=0x8E; si se requieren usar todas las entradas análogas se configura ADCON1=0x80. Si se configura una entrada análoga (o varias) y no se usan se recomiendo conectarlas a GND ya sea de forma directa o a través de una resistencia de 1 K. Los PIC (16F873A y 16F877A) solo tiene un conversor ADC (análogo a digital) el cual es usado por las entradas análogas por multiplexion, este ADC es de 10 bits con valor digital (Vd) de 0 a 1023 (1024 pasos), este valor Vd nos lo entrega en dos registros llamados ADRESH y ADRESL. Con el bit 7 (ADFM) del ADCON1 se configuran los bits del Vd en ADRESH y ADRESL

Page 63: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 63

El PIC Basic tiene las librerías para leer las entradas análogas de los PIC, estas son Adcin canal, variable canal : es la entrada análoga a leer, sus valores son 0 a 4 para 16F873A y 0 a 7 para 16F877A variable : donde se va aguardar el valor digital Vd correspondiente a la entrada análoga leída, como Vd es de 10 bits con valores desde 0 a 1023 la variable debe poder contener este numero, por lo que se debe configurar como WORD. Ejemplo : leer el la entrada análoga 0, Adcin 0, vd0; leer la entrada análoga 6, Adcin 6,Vd6 Se recomienda también configurar la entrada análoga a usar como entrada con el TRISCn, no es necesario configurar el ADCON1 ya que la instrucción Adcin lo configura de forma automática. Para leer varias entradas análogas se deBe invocar varias veces Adcin y guardando los valores Vd en variables diferentes Adcin 0,vd0 Adcin 2,vd2 Adcin 5,vd5 Ejemplo: Vamos a leer la entrada análoga 0 de un PIC16F873A, el circuito es el siguiente

Se desea que cuando el voltaje en la entrada análoga 0 sea menor a 2.5 voltios se active el led D2, y si el voltaje es superior a 3.5 voltios se active D1. Sabemos que el PIc no me entrega el valor análogo en voltaje, sino en un numero decimal escalado de 0 1 1023 (10 bits), por lo que para un voltaje de 0 voltios el valor decimal es 0, para 2.5 voltios el valor decimal es 511, para 3.5 es 716 y para 5 voltios el valor decimal es 1023 voltios. Para hallar el valor decimal de cualquier voltaje use la formula Vd = Voltios * 1024 / 5 (tome el entero) El programa es el siguiente: Dim vd0 As Word Symbol d1 = RB0 Symbol d2 = RB1 TRISB = 0 inicio: Adcin 0, vd0 If vd0 < 511 Then d2 = 1 Else d2 = 0 Endif If vd0 > 716 Then d1 = 1 Else

Page 64: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 64

d1 = 0 Endif Goto inicio End No utilizar la directiva “AllDigital” ya que se deshabilitan las entradas análogas.

Ejemplo: Vamos a utilizar la entrada análoga 3 como se muestra a continuación

Primero vamos a mostrar en el Lcd el valor decimal de la entrada análoga 3.

Define LCD_LINES = 2 Define LCD_CHARS = 16 Define LCD_BITS = 8 Define LCD_DREG = RB Define LCD_DBIT = 0 Define LCD_RSREG = RC Define LCD_RSBIT = 0 Define LCD_EREG = RC Define LCD_EBIT = 2 Define LCD_RWREG = RC Define LCD_RWBIT = 1 Dim vd3 As Word Dim rvd3 As Word Lcdinit 0 Lcdcmdout LcdClear rvd3 = 2000 Lcdcmdout LcdLine1Home Lcdout "Decimal = ", #vd3 inicio: Adcin 3, vd3 If vd3 <> rvd3 Then Lcdcmdout LcdLine1Pos(11) Lcdout " " Lcdcmdout LcdLine1Pos(11) Lcdout #vd3

Page 65: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 65

rvd3 = vd3 Endif Goto inicio End

Ahora vamos a mostrar también el valor en voltaje, para calcular el voltaje a partir del valor decimal, usar la formula, Voltios = Vd * 5 / 1024 Para obtener un decimal de precisión cambiamos 5 por 50, Voltios = Vd * 50 / 1024 Para obtener la parte entera calculamos , V1 = Voltios / 10 Para obtener el decimal calculamos, V2 = Voltios Mod 10 El programa es el siguiente

Define LCD_LINES = 2 Define LCD_CHARS = 16 Define LCD_BITS = 8 Define LCD_DREG = RB Define LCD_DBIT = 0 Define LCD_RSREG = RC Define LCD_RSBIT = 0 Define LCD_EREG = RC Define LCD_EBIT = 2 Define LCD_RWREG = RC Define LCD_RWBIT = 1 Dim vd3 As Word Dim rvd3 As Word Dim voltios As Word Dim v1 As Byte Dim v2 As Byte Lcdinit 0 Lcdcmdout LcdClear rvd3 = 2000 Lcdcmdout LcdLine1Home Lcdout "Decimal = ", #vd3 Lcdcmdout LcdLine2Home Lcdout "Voltios = ", #v1, ",", #v2

Page 66: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 66

inicio: Adcin 3, vd3 voltios = vd3 * 50 / 1024 v1 = voltios / 10 v2 = voltios Mod 10 If vd3 <> rvd3 Then Lcdcmdout LcdLine1Pos(11) Lcdout " " Lcdcmdout LcdLine1Pos(11) Lcdout #vd3 Lcdcmdout LcdLine2Pos(11) Lcdout " " Lcdcmdout LcdLine2Pos(11) Lcdout #v1, ",", #v2 rvd3 = vd3 Endif Goto inicio End

Ejemplo: Mostrar en un LCD el valor de temperatura dada por un LM35.

Page 67: PIC Con PIC Ide Simulator Basic

PIC CON PIC IDE SIMULATOR BASIC [email protected] / www.ingjaop.blogspot.com

Ing. Jaime Alberto Ocampo Pérez Manizales – Colombia 11_2009 / Derechos reservados Página 67

Recordemos que un LM35 es un sensor de temperatura, con rango de -55 a 150 grados centígrados, nos entrega 10 milivoltios por grado centígrado.

Define LCD_LINES = 2 Define LCD_CHARS = 16 Define LCD_BITS = 8 Define LCD_DREG = RB Define LCD_DBIT = 0 Define LCD_RSREG = RC Define LCD_RSBIT = 0 Define LCD_EREG = RC Define LCD_EBIT = 2 Define LCD_RWREG = RC Define LCD_RWBIT = 1 Dim vd0 As Word Dim rvd0 As Word Dim grados As Word Dim v1 As Byte Dim v2 As Byte Lcdinit 0 Lcdcmdout LcdClear rvd0 = 2000 Lcdcmdout LcdLine1Home Lcdout "Temperatura Lm35" Lcdcmdout LcdLine2Home Lcdout "Grados C. = ", #v1, ",", #v2 inicio: Adcin 0, vd0 grados = vd0 * 50 / 1024 v1 = grados v2 = grados Mod 10 If vd0 <> rvd0 Then Lcdcmdout LcdLine2Pos(13) Lcdout " " Lcdcmdout LcdLine2Pos(13) Lcdout #v1, ",", #v2 rvd0 = vd0 Endif Goto inicio End