SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
 


                            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




 
 


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.




 
 


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



 
 



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:




 
 




'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




 
 


    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




 
 




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.




 
 


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.




 

Más contenido relacionado

La actualidad más candente

Digital E
Digital EDigital E
Digital E
toni
 
Practica7 katherine mariana figueroa flores
Practica7  katherine mariana figueroa floresPractica7  katherine mariana figueroa flores
Practica7 katherine mariana figueroa flores
WhitneyPeralta
 
Equivalencias de ls compuertas basicas por transistores mos g4
Equivalencias de ls compuertas basicas por transistores mos   g4Equivalencias de ls compuertas basicas por transistores mos   g4
Equivalencias de ls compuertas basicas por transistores mos g4
A CG
 
Ao Y 555
Ao Y 555Ao Y 555
Ao Y 555
toni
 
Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4
Luis Zurita
 
Circuito logicos combinacionales ver 2
Circuito logicos combinacionales ver 2Circuito logicos combinacionales ver 2
Circuito logicos combinacionales ver 2
xdorzx
 
MICROCONTROLADORES II EN C. TEMA 5
MICROCONTROLADORES II EN C. TEMA 5MICROCONTROLADORES II EN C. TEMA 5
MICROCONTROLADORES II EN C. TEMA 5
Luis Zurita
 

La actualidad más candente (20)

C ircuitosintegrados
C ircuitosintegradosC ircuitosintegrados
C ircuitosintegrados
 
Experiencia 01
Experiencia 01Experiencia 01
Experiencia 01
 
Digital E
Digital EDigital E
Digital E
 
Informe 4
Informe 4Informe 4
Informe 4
 
5. ADC - ARDUINO
5. ADC - ARDUINO5. ADC - ARDUINO
5. ADC - ARDUINO
 
Practica7 katherine mariana figueroa flores
Practica7  katherine mariana figueroa floresPractica7  katherine mariana figueroa flores
Practica7 katherine mariana figueroa flores
 
Equivalencias de ls compuertas basicas por transistores mos g4
Equivalencias de ls compuertas basicas por transistores mos   g4Equivalencias de ls compuertas basicas por transistores mos   g4
Equivalencias de ls compuertas basicas por transistores mos g4
 
Ao Y 555
Ao Y 555Ao Y 555
Ao Y 555
 
Circuitos lógicos secuenciales
Circuitos lógicos secuencialesCircuitos lógicos secuenciales
Circuitos lógicos secuenciales
 
Cubo de LEDs controlado por microprocesador
Cubo de LEDs controlado por microprocesadorCubo de LEDs controlado por microprocesador
Cubo de LEDs controlado por microprocesador
 
Arduino Análogo
Arduino AnálogoArduino Análogo
Arduino Análogo
 
Ampliación arduino
Ampliación arduinoAmpliación arduino
Ampliación arduino
 
Circuitos digitales act4
Circuitos digitales act4Circuitos digitales act4
Circuitos digitales act4
 
Circuitos secuenciales=u.o
Circuitos secuenciales=u.oCircuitos secuenciales=u.o
Circuitos secuenciales=u.o
 
catalogo de control
catalogo de controlcatalogo de control
catalogo de control
 
Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4Microcontroladores ii en c. tema 4
Microcontroladores ii en c. tema 4
 
Circuito logicos combinacionales ver 2
Circuito logicos combinacionales ver 2Circuito logicos combinacionales ver 2
Circuito logicos combinacionales ver 2
 
MICROCONTROLADORES II EN C. TEMA 5
MICROCONTROLADORES II EN C. TEMA 5MICROCONTROLADORES II EN C. TEMA 5
MICROCONTROLADORES II EN C. TEMA 5
 
Clase 2
Clase 2Clase 2
Clase 2
 
Protocolo phillips
Protocolo phillipsProtocolo phillips
Protocolo phillips
 

Destacado

Tutorial proton ide plus part 1
Tutorial proton ide plus part 1Tutorial proton ide plus part 1
Tutorial proton ide plus part 1
dar851112
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
dar851112
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
ezequiel
 
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
georgeguitar
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
Alejandra Ruiz
 

Destacado (20)

Tutorial proton ide plus part 1
Tutorial proton ide plus part 1Tutorial proton ide plus part 1
Tutorial proton ide plus part 1
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
 
Control lcd 16X2 proton
Control lcd 16X2 protonControl lcd 16X2 proton
Control lcd 16X2 proton
 
Juego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87xJuego de instrucciones: PIC 16F87x
Juego de instrucciones: PIC 16F87x
 
Gea fuente de_voltaje
Gea fuente de_voltajeGea fuente de_voltaje
Gea fuente de_voltaje
 
Diapositivas pic 18f452 microprocesadores
Diapositivas pic 18f452  microprocesadoresDiapositivas pic 18f452  microprocesadores
Diapositivas pic 18f452 microprocesadores
 
Pic problemas resueltos
Pic problemas resueltos Pic problemas resueltos
Pic problemas resueltos
 
Presentacion
PresentacionPresentacion
Presentacion
 
PEP Comida - Jasone
PEP Comida - JasonePEP Comida - Jasone
PEP Comida - Jasone
 
Programador usb 2011_pickit2 modificado
Programador usb 2011_pickit2 modificadoProgramador usb 2011_pickit2 modificado
Programador usb 2011_pickit2 modificado
 
Comunicación via bluetooth
Comunicación via bluetoothComunicación via bluetooth
Comunicación via bluetooth
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
 
Tutorial de diseño de circuitos impresos por técnica de termotransferible
Tutorial de diseño de circuitos impresos por técnica de termotransferibleTutorial de diseño de circuitos impresos por técnica de termotransferible
Tutorial de diseño de circuitos impresos por técnica de termotransferible
 
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
Introduccion a las herramientas libres GNU/Linux para la programacion de micr...
 
pic 18f4550
pic 18f4550 pic 18f4550
pic 18f4550
 
Tutorial comunicación bluetooth con módulos rn42 y rn41_by_ editronikx
Tutorial comunicación bluetooth con módulos rn42 y rn41_by_ editronikxTutorial comunicación bluetooth con módulos rn42 y rn41_by_ editronikx
Tutorial comunicación bluetooth con módulos rn42 y rn41_by_ editronikx
 
50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
 
Interrupciones y Temporizadores
Interrupciones y TemporizadoresInterrupciones y Temporizadores
Interrupciones y Temporizadores
 
Bootloader USB Multiplataforma para pic18f4550
Bootloader USB Multiplataforma para pic18f4550Bootloader USB Multiplataforma para pic18f4550
Bootloader USB Multiplataforma para pic18f4550
 

Similar a Tutorial proton part 4

Arduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con ArduinoArduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con Arduino
SANTIAGO PABLO ALBERTO
 
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
Gabriel Bravo Rojas
 
Programación del microcontrolador
Programación del microcontroladorProgramación del microcontrolador
Programación del microcontrolador
Juan Gamboa P
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
freddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 

Similar a Tutorial proton part 4 (20)

Proyecto1
Proyecto1Proyecto1
Proyecto1
 
Informe N°2-Microcontroladores
Informe N°2-MicrocontroladoresInforme N°2-Microcontroladores
Informe N°2-Microcontroladores
 
Arduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con ArduinoArduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con Arduino
 
Tarea final
Tarea finalTarea final
Tarea final
 
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
 
Proyecto micro
Proyecto microProyecto micro
Proyecto micro
 
Programación del microcontrolador
Programación del microcontroladorProgramación del microcontrolador
Programación del microcontrolador
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timers
 
Proyecto3
Proyecto3Proyecto3
Proyecto3
 
Tramas phillips
Tramas phillipsTramas phillips
Tramas phillips
 
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladoresMicrocontroladores: Fundamentos de microprocesadores y microcontroladores
Microcontroladores: Fundamentos de microprocesadores y microcontroladores
 
Trabajo final.
Trabajo final.Trabajo final.
Trabajo final.
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltos
 
Universidad autonoma de chiapas fcp
Universidad autonoma de chiapas fcpUniversidad autonoma de chiapas fcp
Universidad autonoma de chiapas fcp
 
Ejercicio pic assembler
Ejercicio pic assemblerEjercicio pic assembler
Ejercicio pic assembler
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
 

Tutorial proton part 4

  • 1.   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  
  • 2.   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.  
  • 3.   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  
  • 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:  
  • 5.   '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  
  • 6.   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  
  • 7.   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.  
  • 8.   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.