Programador de Pics (Gpic USB) por WillyP

Hace tiempo que anda por la red, un programador de microcontroladores Pic free, el GPIC USB, con una muy buena interfaz de usuario y además de todo esto, soporta muchísimos micros Pic, muchos estudiantes y autodidactas ya han probado que el GPIC USB se está convirtiendo en una excelente opción a la hora de programar nuestros proyectos, está probado en Windows7 y funciona perfectamente.-

Toda la información necesaria para su construcción la pueden obtener del sitio de WillyP  www.sitionica.com.ar

Una imagen del software que se utiliza con el GPIC USB

GpicSoft

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

prg2 

Muchas gracias WillyP por este programador ! y esperamos que a mas de uno le sea de mucha utilidad.-

Programar con Proton Compiler (4º parte)

Armaron el circuito? probaron el código? ...Muy bien!  seguimos con los ejemplos de Protón y que mejor para seguir conociendo a este fabuloso compilador que ver mas ejemplos, con esto aprenderemos más instrucciones y nos acostumbramos a la estructura de programación.-

Ampliando un poco el tema de definición de puertos para utilizarlos como entrada ó salida podemos utilizar la siguiente sintaxis usando TRIS

 TRISB = %00000001

Podemos observar que esto difiere de la definición que hicimos en el primer ejemplo, por que?

hay 8 números entre “0” y “1” que corresponden a los bit’s 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.-

También 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

Después del ejemplo más básico y primordial, vamos a agregarle un pulsador y un led más al programa anterior para que al presionar el pulsador poder elegir entre dos “efectos” por llamarle de alguna manera, que serían: titilar y alternar.

Example-titilar-o-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 tendrán 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 led’s, se elije entre la*
‘*          : función 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
          Button pulsador,0,10,5,btn,1,titilar
           GoTo alternar   ‘vuelvo a la rutina alternar
End      ‘fin del programa

veamos que hace este sencillo código, primero definimos el pic a usar y el cristal como ya lo habiamos visto recuerdan?

Bien aqui explicaremos algo nuevo y es la instrucción BUTTON, según la sintaxis del manual sería de la siguiente forma

BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label

Esa sería la estructura básica del BUTTON

  • Pina PORT.BIT, constant, or variable (0 – 15), that specifies the I/O pin to use. This pin will automatically be set to input.
  • DownStatea variable, constant, or expression (0 or 1) that specifies which logical state occurs when the button is pressed.
  • Delaya 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.
  • Ratea 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.
  • Workspacea 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.
  • TargetStatea 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).
  • Labela label that specifies where to branch if the button is in the target state.

    Button pulsador,0,10,5,btn,1,alternar

    Pin = sería en nuestro caso “pulsador” el puerto de entrada a usar, automáticamente también 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 = sería 10 en el ejemplo y es el tiempo que tiene que pasar antes que suceda la auto-repetición.-

    Rate = 5 en nuestro ejemplo, es el número de ciclos que tienen que pasar entre las auto-repeticiones.-

    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 acción, “0”sin presionar (sería al soltar el pulsador) y “1” al presionar.- (nuestro caso es 1).-

    Label = etiqueta que especifica donde salta la instrucción al producirse la acción (ejemplo: alternar)

    Explicado lo anterior se habrán dado cuenta que btn es la variable que usa la instrucción 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 definición 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 números 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          

  • alternar: ‘*****(456)*****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
              Button pulsador,0,10,5,btn,1,titilar  ****(678)****
               GoTo alternar   ‘vuelvo a la rutina alternar
    End      ‘fin del programa

  • Como verán está todo el código explicado y si estudiaron lo anterior lo único que les llamará la atención el la instrucción BUTTON que para resumir podemos decir que el programa al llegar a esta instrucción 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)**** verán que los led’s 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 serán respondidos en la medida que sea posible.-

  • Programar en Proton Compiler (3º parte)

    Ya copiaron el código en el compilador? muy bien entonces vamos a ver que significa cada linea de este pequeño programa.

    Como primera observación vamos a notar que al copiar nuestro código vemos lo siguiente en el Code Explorer, esta es una barra de exploración donde podemos ver el árbol de nuestro código, es muy útil ya que el nombre del pic que aparece arriba como nombre de carpeta es el que nosotros hemos indicado en el código y si presionamos el “+” de esta carpeta podemos ver los registros de este micro.-

    además vemos que se han agregado otros nombres al code explorer como son XTAL, LED y main que justamente son directivas que ha enviado nuestro código al compilador para saber que cosas y nombres vamos a usar.

    imgname

    Pues bien lo primero que tenemos es:

    Device = 16F84A  ’ para decirle al compilador que pic usaremos
    XTAL 4                 ’ 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 sería:

    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   ‘puerto B.1 como salida
    PORTB = 0      ’ iniciamos todo el puerto B apagado

    TRISB es un registro de dirección de datos de nuestro pic, con esto indicamos que pines tienen que ser de salida y que pines serán 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         ’ 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 

    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 pequeña 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 demás sencillo, pero es el comienzo.-

    en el próximo post otro ejemplo agregando mas cosas, pueden ver el circuito que se utiliza para este ejemplo en la siguiente imagen.-

    ejemplouno

    Primer programa con PROTON (titilar un Led)

    Como habíamos 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 código y cada uno puede sacar sus conclusiones, para esto tendrán 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 información en la red con respecto a esto, gráficos y esquemáticos que muestran la disposición de pines, etc.

    De todas maneras en la web de microchip pueden descargar el datasheet de este micro.-

    Bueno señores comencemos !

    Abrimos el Proton compiler y ponemos en FILE —> NEW

    NEW

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

    ventana-PROTON

    Ya tienes todo listo para empezar, solo resta colocar el código y estaremos muy cerca de encender el LED

    Ahora observa en este detalle que se muestra a continuación

    declaración

    Se puede observar como al declarar con Device = 16f84A , el compilador automáticamente identifica el micro y se prepara para que trabajemos con el.

    En la imagen anterior se ve como ya está cargado el código en el programa, puedes hacer lo mismo copiando lo que coloco a continuación 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 pic’s 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   ‘puerto B.1 como salida
    PORTB = 0      ’ iniciamos todo el puerto B apagado
    DelayMS 30     ’ pequeña 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

    Aprender a programar en 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 después de leer esta serie de articulos ud. sea experto en microcontroladores, pero si intento que muchas personas que están interesadas en los PIC’s 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 versión lite, cuya limitación es la cantidad de 50 líneas de código y no mas de 4 modelos diferentes de pic’s 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.-

    seguimos en el próximo post.-

    Proton compiler ( compilador pic basic PROTON IDE)

    Hace tiempo que quiero contarles un poco acerca de PROTON compiler, es un IDE que permite escribir código en picbasic y además algunas cositas interesantes como por ejemplo probar comunicación serial por nombrar alguna, este compilador es actualmente el compilador de basic para micros pic más potente del mercado ya que permite realizar operaciones que con otros compiladores no se puede, por supuesto que hablamos de otros basics.-

    Últimamente han perfeccionado su código y ahora presenta un mejor manejo de interrupciones que es lo que siempre todos critican de los lenguajes BASIC, mucha gente opina que ASM es el mejor lenguaje ya que permite aprender realmente  el funcionamiento interno de estos maravillosos micro’s, ya muchos estarán discrepando tal vez, pero eso es tema de conversación para otro post tal vez.-

    Personalmente creo que mucha gente últimamente esta siendo atrapada de alguna forma por este maravilloso mundo de los microcontroladores y cuando comienzan a montar sus primeros experimentos es muy difícil que lo dejen, es por ello que creí conveniente ir colocando una serie de ejemplos para que aquellos que se inician con los pic’s puedan en poco tiempo estar armando sus primeros circuitos sin tener que estudiar demasiado algún lenguaje, ya que proton es muy didáctico y rápido para aprender.-

    una vista de PROTON IDE mostrando su interfase  (para ampliar haga click en la imagenscreenPROTON)

     

     

     

     

     

     

    Este compilador interactúa perfectamente con Proteus VSM , es uno de los pocos simuladores de microcontroladores que permiten cargarle el archivo HEX etc etc dentro del esquemático para simularlo de una manera casi como si estuviera armado en casa, es muy práctico para probar nuestros programas con el circuito.-

    Dentro del simulador de Proteus que se llama ISIS tenemos instrumentos de medición que podemos acoplar al esquemático, realmente recomendable para el que no lo conoce.-

    Proteus además ofrece otras herramientas como ser ARES que sirve para diseñar las placas de circuito impreso, en nuestro caso vamos a usar ISIS ya que con esa herramienta dibujaremos el circuito y vamos a simular el código escrito en proton para corroborar que todo esté perfecto.-

    Una imagen de PROTEUS VSM    (para ampliar haga click en la imagen)

    ScreenSimulation

    DOPP 16 placa entrenadora PIC16Fxxx (continuación…)

    Hace tiempo publiqué las fotos de la placa entrenadora, ahora les dejo todo lo necesario para que la puedan armar y comenzar a experimentar realmente con micros de la gama pequeña, especialmente dirigido a quienes se inician.-

    DOPP16-schem

    (click en la imagen para agrandar)

    Espero que comenten si lo arman y compartan fotos de su versión, a continuación les dejo en formato PDF los diseños listos para imprimir y realizar la placa.-

    link-desc-DOPP16

    temas-rel

    DOPP18 Interconexión con distintos módulos

    dopp18-interconexion

    En esta imagen se puede observar como se interconectan los distintos módulos que se van mostrando desde hace un tiempo para experimentar con micros pic.-

    DOPP 18 - Placa entrenadora para 18Fxxxx -

    Presentamos en esta ocasión la primer versión de mi placa entrenadora que fue construida allá por octubre del 2007, la placa en cuestión es para la linea de microcontroladores  PIC18Fxxxx especialmente pensada para poder hacer ejercicios de todo tipo y conectividad USB aprovechando esta caracteristica en esta linea de micros.-

    dopp-18-placa

    Las caracteristicas de esta placa entrenadora son las siguientes:

    conectividad USB, conectividad RS232, indicador Rx/Tx de RS232,  conexión ICSP compatible con cualquier programador por ejemplo el GTP USB plus, conector para el ICD2 clone que nos permite tanto grabar como debugear , 5 conectores de 10 pines para utilizar exteriormente todos los pines de los puertos, selección de oscilador interno ó externo mediante jumpers, 5 pulsadores con selección por jumpers para poder utilizar el pin exteriormente, 5 led’s con selección de jumpers para uso de los pines con elementos externos, un potenciometro para pruebas de ADC (convertidor anológico digital) selección del pin en cuestión mediante jumper, un buzzer con su respectivo jumper de selección, entrada de alimentación compatible con la fuente DOPP16.-

    Actualmente la placa ha sufrido algunas actualizaciones como ser la implementación de la fuente sobre la misma placa, y algunos cambios menores que constituyen mejoras y mayor comodidad.-

    La placa fue construida para el aprendizaje del lenguaje de programación C18 de microchip y sirvió de punto de partida para empezar con la linea de micros PIC18XXXX.-

    Mas adelante veremos ejemplos de C18 fáciles que nos permitirán utilizar esta placa.-

    Hasta la próxima entrega…

    dopp-18-placa-01

    Máquina corta PCB (continuación…)

    Después de algo de tiempo totalmente desconectado debido a la falta de tiempo, he podido terminar la mini máquina de cortar placas de pcb que comenzó hace ya tiempo (aqui más info) ya se hicieron las pruebas de corte y realmente es mas que satisfactorio el trabajo que realiza, he podido trabajar de forma más cómoda al hacer pequeñas cantidades de placas, al tener que montar placas en cajas plásticas donde las medidas juegan un papel importante es donde se aprecia esta ayuda para cortar.-

    Les dejo un pequeño video de funcionamiento para que vean por uds mismos.-

    maqu_tube

    (hacer click en imagen para ver el video )

    Espero pronto, poner algún video más ya con sonido, y poderles mostrar algunas fotos mas.-

    Espero les guste esta nota y dejen sus comentarios y/o consultas, y por que no si alguien se anima a hacer una espero me envien sus fotos para compartir con los demás lectores.-

    será hasta el próximo articulo…saludos.-