Vous êtes sur la page 1sur 12

Aprender a programar en PROTON compiler

Proton Compiler A partir de este momento vamos a colocar una serie de ejemplos sencillos que muestran como iniciarse con este compilador para micros, con esto no pretendo que despus de leer esta serie de articulos ud. sea experto en microcontroladores, pero si intento que muchas personas que estn interesadas en los PICs puedan comenzar haciendo sus primeros programas de una forma sencilla, no piense que vamos a hacer todo el trabajo por ud. aqui es donde necesitamos que cada uno ponga su parte, leyendo y familiarizandose con el compilador y sus instrucciones, y eso ya corre por su cuenta.Primeramente necesitamos tener los programas instalados as que si est interesado a prepararse.Puede descargar proton en su versin lite, cuya limitacin es la cantidad de 50 lneas de cdigo y no mas de 4 modelos diferentes de pics dos de la serie 12fxxx y dos de la serie 16fxxx, para comenzar ser mas que suficiente Con respecto a Proteus la version demo no permite grabar nuestros trabajos y no permite mas que jugar con los ejemplos que tiene el programa por defecto.Supongo que mas de uno tendr un protoboard, entonces puede optar por usarlo para armar los circuitos de prueba que colocaremos.

Primer programa con PROTON (titilar un Led)


Proton Compiler Como habamos comentado antes vamos a tratar de explicar de manera sencilla algunos ejemplos que sean el punto de partida para quien quiera aprender, primero lo primero y como en todos los lenguajes tenemos el ejemplo de encender un Led a una frecuencia establecida, de por ejemplo 500ms que es 1/2 segundo. Para este caso y de aqu en mas, como son muchas las instrucciones que tiene el compilador vamos a ir describiendo las que intervienen en nuestro cdigo y cada uno puede sacar sus conclusiones, para esto tendrn que leer el manual para seguir aprendiendo. Doy por sentado que todos los que sigan estos ejemplos tienen claro que es un microcontrolador pic, en este caso el famoso y muy reconocido PIC16f84A, un detalle importante es que antes de seguir adelante con los ejemplos lean bien el datasheet del mismo y se familiarizen con sus puertos y registros internos. Hay mucha informacin en la red con respecto a esto, grficos y esquemticos que muestran la disposicin de pines, etc.

De todas maneras en la web de microchip pueden descargar el datasheet de este micro.Bueno seores comencemos ! Abrimos el Proton compiler y ponemos en FILE > NEW

Muy bien ahora vamos a observar la hoja de trabajo en blanco con la cabecera donde van a estar los datos de nuestro cdigo

Ya tienes todo listo para empezar, solo resta colocar el cdigo y estaremos muy cerca de encender el LED Ahora observa en este detalle que se muestra a continuacin

Se puede observar como al declarar con Device = 16f84A , el compilador automticamente identifica el micro y se prepara para que trabajemos con el. En la imagen anterior se ve como ya est cargado el cdigo en el programa, puedes hacer lo mismo copiando lo que coloco a continuacin y pasamos a explicar cada parte del programa
********************************************************** * Name : primer programa titilar un led * * Author : [DOPPELBLOG] www.cirware.com.ar/blog * * Notice : Copyright 2008 [PROTON IDE] * * : All Rights Reserved * * Date : 25/07/2008 * * Version : 1.0 * * Notes : Nuestro primer programa con pics usando un * * : PIC16F84A corriendo a 4 MHZ * ********************************************************** ******************* declaramos el pic a usar y el cristal* Device = 16F84A en nuestro caso vamos a utilizar este pic XTAL 4 ************ renombramos al PORTB.1 como LED************* Symbol LED = PORTB.1 ****************definiciones de puertos******************* TRISB.1 = 0 PORTB = 0 DelayMS 30 puerto B.1 como salida iniciamos todo el puerto B apagado pequea pausa de 30 milisegundos

****************** aqui empieza el programa**************** main: High LED encendemos el LED DelayMS 500 esperamos 1/2 segundo Low LED apagamos el Led DelayMS 500 esperamos 1/2 segundo GoTo main volvemos a la etiqueta main End

Programar en Proton Compiler (3 parte)


Proton Compiler Ya copiaron el cdigo en el compilador? muy bien entonces vamos a ver que significa cada linea de este pequeo programa. Como primera observacin vamos a notar que al copiar nuestro cdigo vemos lo siguiente en el Code Explorer, esta es una barra de exploracin donde podemos ver el rbol de nuestro cdigo, es muy til ya que el nombre del pic que aparece arriba como nombre de carpeta es el que nosotros hemos indicado en el cdigo y si presionamos el + de esta carpeta podemos ver los registros de este micro.adems vemos que se han agregado otros nombres al code explorer como son XTAL, LED y main que justamente son directivas que ha enviado nuestro cdigo al compilador para saber que cosas y nombres vamos a usar.

Pues bien lo primero que tenemos es:


Device = 16F84A XTAL 4 para decirle al compilador que pic usaremos vamos a usar un cristal de 4 MHZ

y vamos a lo siguiente: Aqui usamos Symbol para ponerle un alias al bit 1 del puerto B entonces la sintaxis sera: Syntax SYMBOL nombre { = } valor En nuestro caso queda como sigue
Symbol LED = PORTB.1

Que significa esto? ahora nuestro PORTB.1 pasa a llamarse LED con esto logramos mejor entendimiento para nuestro programa ya que cuando tengamos que activar PORTB.1 (osea el bit 1 del PORTB) de ahora en mas nos referimos a LED vamos con lo que sigue
TRISB.1 = 0 PORTB = 0 puerto B.1 como salida iniciamos todo el puerto B apagado

TRISB es un registro de direccin de datos de nuestro pic, con esto indicamos que pines tienen que ser de salida y que pines sern de entrada, en nuestro caso vamos a encender un LED por eso debemos configurar el pin donde se conecte el LED como salida para que encienda. Para eso hemos puesto TRISB.1 que quiere decir que el bit 1 del PORTB ser salida, osea el pin 7 de nuestro microcontrolador.PORTB=0 le est indicando al compilador que todo el PORTB arrancar en 0 osea apagado.Lo siguiente que podemos ver es:
DelayMS 30

como su nombre lo indica es un DELAY osea una pausa en MS (milisegundos) que en este caso es 30milisegundos Seguimos y nos encontramos con la etiqueta main:
main: High LED DelayMS 500 Low LED DelayMS 500 GoTo main encendemos el LED esperamos 1/2 segundo apagamos el Led esperamos 1/2 segundo volvemos a la etiqueta main

End

Aqui tenemos nuestro programa, que hace que se active el LED conectado a la patita 7 de nuestro pic
High LED

decimos que ponga en alto (1) a LED, que como dijimos mas arriba es el bit 1 del PORTB luego tenemos la pausa
DelayMS 500

aqui hacemos un delayms de 500 milisegundos que es 1/2 segundo, hasta aqui mantenemos el LED encendido por 1/2 segundo luego viene
Low LED

con Low enviamos un 0 a LED, por lo tanto el PORTB1 se apaga luego otro
DelayMS 500

hacemos una pequea pausa nuevamente de 1/2 con lo que mantenemos apagado el LED por este tiempo y finalmente encontramos
GoTo main

donde le decimos que vuelva a la etiqueta main: que a pasado hasta aqui? podemos decir que el led se encendio por 1/2 segundo y luego se apago por 1/2 segundo al encontrarse con GoTo comenz de nuevo en main y as sucesivamente en un loop infinito por lo que si armamos el circuito logramos ver que enciende cada 1/2 segundo.Este programita es por dems sencillo, pero es el comienzo.en el prximo post otro ejemplo agregando mas cosas, pueden ver el circuito que se utiliza para este ejemplo en la siguiente imagen.-

Programar con Proton Compiler (4 parte)

Proton Compiler Armaron el circuito? probaron el cdigo? ...Muy bien! seguimos con los ejemplos de Protn y que mejor para seguir conociendo a este fabuloso compilador que ver mas ejemplos, con esto aprenderemos ms instrucciones y nos acostumbramos a la estructura de programacin.Ampliando un poco el tema de definicin de puertos para utilizarlos como entrada salida podemos utilizar la siguiente sintaxis usando TRIS
TRISB = %00000001

Podemos observar que esto difiere de la definicin que hicimos en el primer ejemplo, por que? hay 8 nmeros entre 0 y 1 que corresponden a los bits del puerto, en este caso el puerto B, y se leen de derecha a izquierda, el 1 que se ve arriba corresponde al BIT0 del puerto B y significa que ese bit ser ENTRADA si por el contrario tuvieramos
TRISB = %00001100

Vemos que el BIT0 y el BIT1 son SALIDAS, el BIT2, BIT3 son ENTRADAS y finalmente los BIT5, 6, 7 y 8 son SALIDAS repasando: 0 significa SALIDA y 1 significa ENTRADA.Tambin podemos referirnos a un BIT en particular de la siguiente forma
TRISB.2 = 0 BIT2 del PORTB como salida

otro ejemplo:
TRISB.7 = 1 BIT7 del PORTB como entrada

Si bien no est el ejemplo existe TRISA y se utiliza de la misma forma y es para el puerto A Despus del ejemplo ms bsico y primordial, vamos a agregarle un pulsador y un led ms al programa anterior para que al presionar el pulsador poder elegir entre dos efectos por llamarle de alguna manera, que seran: titilar y alternar.

El circuito es muy sencillo, se han omitido la etapa del cristal y del reset para simplificar el dibujo pero recuerden que si lo van a probar en la realidad tendrn que agregarlos.********************************************************* * Name : titilar y alternar * * Author : [DOPPELBLOG] www.cirware.com.ar/blog * * Notice : Copyright 2008 * * : All Rights Reserved * * Date : 30/07/2008 * * Version : 1.0 * * Notes : un pulsador y dos leds, se elije entre la* * : funcin titilar y alternar * ********************************************************* Device = 16F84A XTAL = 4 *******************definiciones*************************** Dim btn As Byte defino btn como variable del tipo byte Symbol LED1 PORTB.1 portb.1 ahora se llama LED1 Symbol LED2 PORTB.2 portb.1 ahora se llama LED2 Symbol pulsador PORTB.3 portb3 ahora se llama pulsador PORTB = 0 apago todo el puerto B TRISB = %00000100 DEFINO ENTRADAS Y SALIDAS **************************aqui comienza el program******** titilar: DelayMS 10 delay de 10 ms High LED1 enciendo el led1 High LED2 enciendo el led2 DelayMS 250 pausa de 1/4 de seg Low LED1 apago el led1 Low LED2 apago el led2 DelayMS 250 pausa de 1/4 de seg Button pulsador,0,10,5,btn,1,alternar ver texto GoTo titilar vuelvo a la rutina titilar alternar: DelayMS 10 delay de 10 ms High LED1 enciendo el led1 Low LED2 apago el led2 DelayMS 250 pausa de 1/4 de seg Low LED1 apago el LED1 High LED2 enciendo el led2 DelayMS 250 pausa de 1/4 de seg

End

Button pulsador,0,10,5,btn,1,titilar GoTo alternar vuelvo a la rutina alternar fin del programa

veamos que hace este sencillo cdigo, primero definimos el pic a usar y el cristal como ya lo habiamos visto recuerdan? Bien aqui explicaremos algo nuevo y es la instruccin BUTTON, segn la sintaxis del manual sera de la siguiente forma BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label Esa sera la estructura bsica del BUTTON Pin a PORT.BIT, constant, or variable (0 15), that specifies the I/O pin to use. This pin will automatically be set to input. DownState a variable, constant, or expression (0 or 1) that specifies which logical state occurs when the button is pressed. Delay a variable, constant, or expression (0 255) that specifies how long the button must be pressed before auto-repeat starts. The delay is measured in cycles of the Button routine. Delay has two special settings: 0 and 255. If Delay is 0, Button performs no debounce or auto-repeat. If Delay is 255, Button performs debounce, but no auto-repeat. Rate a variable, constant, or expression (0 255) that specifies the number of cycles between auto-repeats. The rate is expressed in cycles of the Button routine. Workspace a byte variable used by Button for workspace. It must be cleared to 0 before being used by Button for the first time and should not be adjusted outside of the Button command. TargetState a variable, constant, or expression (0 or 1) that specifies which state the button should be in for a branch to occur. (0 = not pressed, 1 = pressed). Label a label that specifies where to branch if the button is in the target state.
Button pulsador,0,10,5,btn,1,alternar

Pin = sera en nuestro caso pulsador el puerto de entrada a usar, automticamente tambin coloca este pin como entrada.Downstate = en nuestro ejemplo es 0, es el estado que queremos cuando presionamos el pulsador puede ser 0 1.Delay = sera 10 en el ejemplo y es el tiempo que tiene que pasar antes que suceda la autorepeticin.Rate = 5 en nuestro ejemplo, es el nmero de ciclos que tienen que pasar entre las autorepeticiones.Workspace = es un buffer que usa el comando para funcionar (btn)

Target state = especifica el estado del button en el que debe estar BUTTON para que suceda la accin, 0sin presionar (sera al soltar el pulsador) y 1 al presionar.- (nuestro caso es 1).Label = etiqueta que especifica donde salta la instruccin al producirse la accin (ejemplo: alternar) Explicado lo anterior se habrn dado cuenta que btn es la variable que usa la instruccin button para funcionar y a la cual le podemos poner cualquier nombre.*******************definiciones*************************** Dim btn As Byte defino btn como variable del tipo byte

Luego sigue la definicion de ALIAS y la definicin de puertos


Symbol LED1 PORTB.1 portb.1 ahora se llama LED1 Symbol LED2 PORTB.2 portb.1 ahora se llama LED2 Symbol pulsador PORTB.3 portb3 ahora se llama pulsador PORTB = 0 apago todo el puerto B TRISB = %00000100 defino las entradas y salidas a utilizar

Y nos encontramos ahora con las rutinas (NOTA: los asteriscos y nmeros son para seguir el curso del programa pero no forman parte del mismo)
titilar: ****(901)**** DelayMS 10 delay de 10 ms High LED1 enciendo el led1 High LED2 enciendo el led2 DelayMS 250 pausa de 1/4 de seg Low LED1 apago el led1 Low LED2 apago el led2 DelayMS 250 pausa de 1/4 de seg Button pulsador,0,10,5,btn,1,alternar ****(123)**** GoTo titilar vuelvo a la rutina titilar delay de 10 ms

alternar: *****(456)*****DelayMS 10

End

High LED1 enciendo el led1 Low LED2 apago el led2 DelayMS 250 pausa de 1/4 de seg Low LED1 apago el LED1 High LED2 enciendo el led2 DelayMS 250 pausa de 1/4 de seg Button pulsador,0,10,5,btn,1,titilar ****(678)**** GoTo alternar vuelvo a la rutina alternar fin del programa

Como vern est todo el cdigo explicado y si estudiaron lo anterior lo nico que les llamar la atencin el la instruccin BUTTON que para resumir podemos decir que el programa al llegar a esta instruccin verifica si est presionado el pulsador, si se encuentra

presionado salta a la etiqueta alternar****(123)**** que es la que se encuentra en primer lugar, sale de esa rutina y comienza alternar****(456)****, de lo contrario se queda realizando la tarea de la rutina titilar hasta detectar que se ha presionado el pulsador.Una vez dentro de la rutina alternar ****(456)**** vern que los leds encienden alternadamente, hasta que nuevamente se presione el pulsador****(678)**** y nuevamente retorna a la rutina titilar ****(901)**** realizando esto infinitamente hasta que presionen nuevamente y se vuelve a repetir todo.Si tienen dudas por el funcionamiento de este programa pueden dejar sus comentarios y sern respondidos en la medida que sea posible.-

Programador de Pics (Gpic USB) por WillyP


Hardware de programacin Hace tiempo que anda por la red, un programador de microcontroladores Pic free, el GPIC USB, con una muy buena interfaz de usuario y adems de todo esto, soporta muchsimos micros Pic, muchos estudiantes y autodidactas ya han probado que el GPIC USB se est convirtiendo en una excelente opcin a la hora de programar nuestros proyectos, est probado en Windows7 y funciona perfectamente.Toda la informacin necesaria para su construccin la pueden obtener del sitio de WillyP www.sitionica.com.ar Una imagen del software que se utiliza con el GPIC USB

Una imagen de la placa terminada!! y lista para funcionar