tutorial proton part 4

8
PROYECTOS CON LED Con este conocimiento previo de BASIC, ahora estamos en condiciones de empezar a experimentar y escribir algunos programas. En este tutorial se usara el PIC 18f4550 y PROTEUS. Se espera que haya sido instalado PROTON IDE, PROTEUS 7.6 y el PIC Kit 2 configurado para utilizar el PIC184550. Casi todos los libros sobre la programación tienen como primer programa, el denominado 'Hello world' esto es generalmente una forma de poner un simple texto "hola mundo" en la pantalla o algún dispositivo de salida, en la forma más simple y más fácil, para mostrar todo el ciclo, y para estar seguros de que todo está funcionando. En nuestro caso, usaremos la pantalla LCD más tarde, vamos a utilizar LEDS para mostrar nuestro mensaje. Sólo queremos que todos los LEDS conectados en PORTD se enciendan a la vez, lo que tenemos que hacer es escribir un 1 lógico a todos los bits de PORTD, asegurando que todos los LEDS se enciendan. Escribir este programa en BASIC PROTON, y guardarlo en su carpeta de proyectos PIC según la extensión que más se le facilite, compilar el programa y cargarlo en su microcontrolador. Device=18F4550 'Selecciona PIC XTAL 20 'Cristal de 20MHz ALL_DIGITAL true 'Configura todas las Salidas Como Digitales Output PORTD 'Poner todos los bits de PORTC como Salidas lo mismo que TRISD=0 PORTD= %11111111 'Asigna todos los bits de PORTC a 1 lógico End

Upload: nelsontorres326

Post on 11-Aug-2015

31 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Tutorial Proton Part 4

 

 

PROYECTOS CON LED

Con este conocimiento previo de BASIC, ahora estamos en condiciones de empezar a experimentar y escribir algunos programas. En este tutorial se usara el PIC 18f4550 y PROTEUS. Se espera que haya sido instalado PROTON IDE, PROTEUS 7.6 y el PIC Kit 2 configurado para utilizar el PIC184550.

Casi todos los libros sobre la programación tienen como primer programa, el denominado 'Hello world' esto es generalmente una forma de poner un simple texto "hola mundo" en la pantalla o algún dispositivo de salida, en la forma más simple y más fácil, para mostrar todo el ciclo, y para estar seguros de que todo está funcionando.

En nuestro caso, usaremos la pantalla LCD más tarde, vamos a utilizar LEDS para mostrar nuestro mensaje. Sólo queremos que todos los LEDS conectados en PORTD se enciendan a la vez, lo que tenemos que hacer es escribir un 1 lógico a todos los bits de PORTD, asegurando que todos los LEDS se enciendan.

Escribir este programa en BASIC PROTON, y guardarlo en su carpeta de proyectos PIC según la extensión que más se le facilite, compilar el programa y cargarlo en su microcontrolador. Device=18F4550 'Selecciona PIC XTAL 20 'Cristal de 20MHz ALL_DIGITAL true 'Configura todas las Salidas Como Digitales Output PORTD 'Poner todos los bits de PORTC como Salidas lo mismo que TRISD=0 PORTD= %11111111 'Asigna todos los bits de PORTC a 1 lógico End

Page 2: Tutorial Proton Part 4

 

 

Ahora vamos a diseccionar este programa una instrucción a la vez, para conocer estos comandos. Device=18F4550 Esta línea informa al compilador que vamos a utilizar el microcontrolador 18F4550. Desde el mapeo de memoria, la disponibilidad de dispositivos de los puertos, y los bits del puerto, así como otros a bordo difieren entre microcontroladores, es importante informar al compilador. Esta suele ser la primera línea en su programa. Cada compilador, puede ser BASIC, C o el que sea que esté utilizando es importante comprobar que el dispositivo en particular está siendo apoyado por su compilador. No todos están respaldados por estos compiladores. XTAL 20 Esta declaración informa al compilador la velocidad de operación del PIC. De modo que el compilador puede calcular los diversos tipos de retrasos y baudios para la comunicación serial. ALL_DIGITAL true Como ustedes saben hay número de entradas analógicas de estos dispositivos, y hablamos de cómo habilitar y desactivarlas. Vamos a hablar más sobre este tema en la sección adecuada. En los programas que no necesite entrada analógica y en su lugar desea utilizar como E/S digitales, este comando deshabilita la entrada analógica en todas las líneas, y las hace digital. Aunque en este programa no se va a utilizar cualquier línea, para la grabación analógica. Output PORTD Como ya hemos discutido previamente, PORTD es bidireccional. Esto significa que puede obtener datos desde el exterior, así como hacia el exterior. Esto se logra mediante un seguimiento del registro TRISD. Este comando habilita a TRISD internamente, para establecer todos los bits de PORTD como salida. Así que algún valor para registrar en PORTD por el de software, se refleja inmediatamente en los pines correspondientes, con esto, tenemos PORTD configurado como salida. PORTD= %11111111 Ahora vamos a asignar un valor al registrar PORTD. El registro PORTD es de 8 bits, por lo que puede establecer su valor al usar cualquier número de 0 a 255. % 11111111 es el número binario. Usted podría escribir la misma instrucción como: PORTD= 255 255 es el número decimal, equivalente a% 11111111, o podría utilizar el número hexadecimal, como: PORTD= $FF Observe el signo $ antes del número hexadecimal, y un signo% antes del número binario. Los compiladores varían en estos signos.

Page 3: Tutorial Proton Part 4

 

 

End Tan pronto como se establece el registro PORTD con este valor el efecto se refleja en los pines. La declaración End crea un bucle sin fin, manteniendo el procesador ocupado, por lo que no puede tomar ninguna acción hasta que el programa se restablezca. Cualquiera que sea la salida fijada en los pines del puerto se mantendrá fija, aún en la declaración final.

Ahora trate de cambiar el valor que se asigne a PORTD. Asignación de 0 a su vez, todos los LED apagados, y un % 10101010 para LEDS alternados en ON y OFF. Espero que esto sea bastante simple y claro. Parpadeo de LED

En nuestro próximo proyecto, vamos a hacer que estos LED parpadeen. El parpadeo tiene dos fases, una ON y OFF. Ambas fases tienen un período de tiempo determinado, antes de cambiar a otro estado. Esto determina la frecuencia de parpadeo. Si los tiempos de ON y OFF son los mismos, podemos decir que es una onda cuadrada. Para ver estos pulsos, estamos usando LEDS a través de sentencias de bucle.

Device=18F4550 'seleccionar PIC XTAL 20 ' frecuencia 20MHz ALL_DIGITAL true 'Todas las líneas digitales Output PORTD 'PORTD como salida TRISD=0 Loop: PORTD= 255 'Asigna todos los bits de portD a 1 lógico DelayMS 1000 'Dejar que los LEDS queden encendidos durante l segundo PORTD= 0 'LEDs OFF DelayMS 1000 'Mantenerlos en OFF por 1 Segundo GoTo Loop 'Repita proceso

Page 4: Tutorial Proton Part 4

 

 

Se declara una etiqueta llamada Loop, y una declaración correspondiente Goto Loop. Las instrucciones entre estas dos declaraciones se repetirán indefinidamente. PORTD = 255 todos los LEDS en ON. Sin embargo, antes de desactivarlos, tenemos que imponer un retraso.

DelayMS 1000

Esta declaración da un retraso en mili-segundos del número. Así 1000ms de demora es igual a 1 segundo, de manera similar 500ms retraso es medio segundo, y 100 ms es 1/10 de un segundo. También se pueden hacer retrasos en micro-segundos usando DelayUs.

Los LEDS se encienden, y el procesador demora la activación en 1 segundo, entonces PORTD = 0 apagará los LEDS. Una vez más, introducir un retraso, para mantenerlos en la condición actual durante 1 segundo. Después del un retraso de 1segundo, cuando testigos están apagados, el comando GOTO transfiere el control de nuevo a la sentencia de bucle, que es seguido por PORTD = 255, que volverá a su vez LEDS ON. El ciclo de ON / OFF con 1 segundo continuará para siempre

En otras palabras, podemos decir una onda cuadrada de 1 Hz se está generando en todos los pines de PORTD.

Compilar el programa y cargarlo en el microcontrolador. Ejecutarlo, y todos los LED deberían parpadear, precisamente, ON durante 1 segundo y OFF durante 1 segundo. Ahora puede experimentar de varias maneras: Así que hemos visto que podemos asignar distintos valores a PORTD, que se reflejan en LED para activar o desactivar salidas del PIC 18F4550.

Hágalo usted mismo:

1. LED en ON durante medio segundo y OFF durante 1 segundo 2. LED activado durante 200ms y apagado durante 2 segundos 3. Crear una frecuencia de onda cuadrada de 10Hz. 4. Parpadeo de LED de dos veces, con un retraso de 500 ms seguidos por un

estado OFF de 2 segundos

Utilización de una Variable

Ahora vamos a tratar de mostrar algunos números binarios en los LED. Se creara una variable, para asignarle un valor y mostrarlo en los LEDS. Eso es bastante simple. ¿Qué pasa si queremos que todos los valores de 0 a 255 sean mostrados en LEDS, con un retraso de 200ms intervenir? Ciertamente, no es una buena idea escribir 255 bloques de código con cada uno con un valor diferente. Aquí el uso de variables y los bucles es muy útil. Veamos este ejemplo:

Page 5: Tutorial Proton Part 4

 

 

'EJEMPLO3.Bas ‘Mostrar los números binarios de 0 a 255 en los LED: Device=18F4550 'Seleccionar PIC XTAL 20 'Frecuencia de Cristal 20MHz ALL_DIGITAL true 'Poner todas las líneas del PIC como digital Output PORTD 'PORTD como salida al igual que TRISC=0 Dim x As Byte Loop: For x=0 To 255 'Iniciar un bucle controlado de la variable X PORTC=x 'Asignar x a PORTC DelayMS 200 Next x GoTo Loop

En este programa hemos declarado una variable llamada X, que es una variable de tamaño bytes. Para uso de un For... Next, el valor del bucle X se le permite variar de 0 a 255; cada vez, a PORTD se le asigna un valor de X, que inmediatamente se muestra en los LEDs, un retraso 200ms se inserta de manera que podamos ver el estado de los LED. Next X es el contador del valor de incremento de x por 1, todo este proceso se repite cada vez con un nuevo valor de X, después de que el valor ha llegado a 255, el bucle se termina y el control se transfiere a la declaración después de X. La instrucción Goto Loop transfiere el control al bucle For, que se inicia de nuevo desde 0 a 255.

Con este ejemplo se muestra dos cosas:

1. La utilidad del bucle, para variar el valor de una variable y luego usar la variable dentro del bucle.

2. En segundo lugar el uso de dos bucles, uno (el For... Next) bucle está limitado a 255 repeticiones y el segundo bucle sin fin de mantener este ciclo, a partir de Loop y Goto Loop .Estos ciclos se denominan "bucles anidados. Ahora aplique de estas variaciones: En la Comunicación del EJEMPLO3.Bas: For x=0 To 255 Step 2 ‘informa compilador que se incrementan en 2.

Ejercicios Propuestos

1. Los números de inicio y final de 65 a 190 2. Inicio Números de 0 a 255 se incrementan en 2 3. Los números de inicio 0 a 255, cada intervalo de tiempo también se incrementa

por el mismo factor 4. Número de inicio y la disminución de 255 a 0

Page 6: Tutorial Proton Part 4

 

 

5. Iniciar desde 0 a 255, todos los LEDs se mantienen en ON durante 2 segundos después de decremento 255 a 0, mantenga todos los LEDs en OFF durante 2 segundos y luego repite el proceso

6. Iniciar 0 a 255 entonces los LED parpadean 5 veces y luego disminuir a 0 esperar 2 segundos y repetir

Utilización de un Bit por Puerto

Eso está muy bien, usted ha pasado por una serie de ejercicios, para asignar números distintos a un puerto. Hasta ahora se han asignado valores a la totalidad del puerto, que afectan a los 8 bits a la vez. En nuestros proyectos del mundo real la totalidad del puerto prácticamente no se utiliza, de hecho bits individuales de un puerto se adjuntan a los diferentes dispositivos. Por ejemplo, si el bit 0 del PORTD está conectado a un relé de control del ventilador, y el bit 1 conectado a un relé de control de segundo ventilador y el bit 3 adjunto al relevo calentador. Así que nos gustaría que el control de los tres bits de forma individual. A pesar de que puede hacerse mediante la asignación de número es mejor el control de bits individuales directamente sin afectar a otros bits. Esto es aún más útil, cuando algunos de los bits en un puerto actúan como insumos.

Un bit individual puede ser contemplado no sólo en un puerto, sino también en los registros de funciones especiales, e incluso variables de memoria. Esto hace la programación muy fácil y manejable. Los bits del puerto se hacen referencia mediante la colocación de un período después del nombre del puerto y un número para indicar el número de bits. Por ejemplo, para referirse al bit 7 (bit más alto) en PORTB, usamos PORTB.7, observe que el número 7 indica el número de bit. Al igual que en el acceso del registro de estado 0, por ejemplo, usamos STATUS.0 similar para hacer el bit 0 de PORTB como entrada, con registro TRISB, TRISB.0 = 1. Con el fin de establecer el bit de puertos de alta o baja, puede asignar un valor de 1 o 0. También puede utilizar el comando, High y Low hacen lo mismo. Los comandos High and Low sólo funcionan en bits del registro del puerto y no en los bits de variable general. Device=18F4550 XTAL=20 ALL_DIGITAL=true Output PORTD.7 Loop: High PORTD.7 DelayMS 500 Low PORTD.7 DelayMS 500 GoTo Loop

Page 7: Tutorial Proton Part 4

 

 

En este programa, como pueden ver, tenemos acceso directo al bit 7 de PORTD. Uso de los comandos High y Low que alternan el bit seleccionado entre el 1 lógico y 0. Comando Toggle Protón tiene el comando Toggle que varía el valor de un bit. Este comando acepta un pin de puerto, y los cambios de nivel opuesto. Así que si el bit es 1, es cambiado a 0 y si se ha cambiado a 0 el 1.Este programa produce esencialmente los mismos resultados, sin embargo mediante un comando de conmutación.

Page 8: Tutorial Proton Part 4

 

 

Device=18F4550 XTAL=20 ALL_DIGITAL=true Output PORTD.7 High potd.7 loop: DelayMS 500 Toggle PORTD.7 GoTo loop Cambio de Operadores Los Bits pueden ser transferidos dentro de una variable o un puerto a la izquierda o la derecha, como las posiciones. El Desplazamiento de los bits hacia la izquierda tiene un efecto matemático de multiplicar por 2, y el desplazamiento de los bits a la derecha se divide por defecto en 2 .El Desplazamiento a la izquierda se indica con operador << y desplazamiento a la derecha por operador >>. Device=18F4550 XTAL=20 ALL_DIGITAL=true Output PORTD PORTD=0 Loop: High PORTD.0 Dim x As Byte For x=0 To 7 DelayMS 500 PORTD=PORTD << 1 Next x DelayMS 500 GoTo Loop Este ejemplo se carga el bit 0 del PORTD en alto, entonces después de cada 500ms desplaza los bits a la izquierda, los bits de 0 lógico se colocan a la derecha, el bit menos significativo, cuando se desplazan bits. Operaciones AND, OR, XOR y NOT son las puertas lógicas, sin embargo, también se aplican en la misma lógica dentro del software. Dos variables, o los números pueden ser comparados entre sí mediante estos operadores lógicos y el resultado se utiliza directamente para tomar una decisión, como en los bucles IF, While o almacenada en otra variable para su posterior uso en el programa. Estos los ejemplos concretos se darán en las secciones pertinentes del tutorial.