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.-

  • Powered by

    8 Comentarios...
    Dejar un comentario

    SEÑOR AUTOR, TENGO UNA PREGUNTA. ¿QUÉ PROCEDIMIENTO HAY QUE SEGUIR PARA INTRODUCIR ESTAS INSTRUCCIONES EN EL MICROCONTROLADOR? ¿CON QUÉ SE QUEMA?

    Hola Anderson, para quemar el pic necesitas tener un programador, un ejemplo de ello es el GTP plus que trabaja por puerto USB.- ya pondré algún ejemplo cuando pueda conseguir un poquitin de tiempo, saludos y gracias por tu consulta

    puedo utizar cualquier quemador usb?

    Hola Enrique, si puedes utilizar el programador que quieras siempre y cuando el software que uses para quemar los pics lo tenga en su lista de permitidos, por ejemplo yo uso el Winpic800, que soporta muchisimos programadores de todo tipo.-

    MIRA TENGO UN PROGRAMITA ES UN CIONTADOR QUE HISE EN PROTON
    LO QUE PASA ES QUE NO SE COMO UTILIZAR LO DE LA MEMORIA EEPROMN OSEA
    QUE ME QUEDE GUARDADO TANTO LA PALABRA RO_YALL COMO EL ULTIMO DIGITO CONTADO AHI DEJO MI CODIGO PARA VER SI ALGUIEN PUEDE AYUDARME EL PIC COM QUE TRABAJO ES EL 16F628 Y LO QUE QUIERO ES QUE LOS DATOS QUE MUESTRO POR PANTALLA SIGA MOSTRANDOMELOS AUNQUE SE HAYA IDO LA ENERGIA OSEA LA ALIMENTACION AL CIRCUITO OSEA QUE ME MUESTRE EL ULTIMO DATO CONTADO JUNTO CON LA PALABRA ESCRITA AHI QUE ES ROYALL SI ALGUIEN PUEDE AYUDARME ESTA ECHO EN PPROTON
    CMCON=7
    TRISB=0
    DefineLCD_DREGPORTB
    DefineLCD_DBIT4
    DefineLCD_RSREGPORTB
    DefineLCD_RSBIT3
    DefineLCD_EREGPORTB
    DefineLCD_EBIT2
    Dim BOTON As PORTA.4
    Dim sonido As PORTA.3
    Dim DATOS As DWord
    DATOS=0
    Print $fe,1,”RO_YALL=”,Dec DATOS
    GoTo PULSAR
    PULSAR:
    If BOTON=1 Then ENCEN
    GoTo PULSAR
    ENCEN:
    Inc DATOS
    High sonido
    DelayMS 1000
    Low sonido
    Print $fe,1,”RO_YALL=”,Dec DATOS
    GoTo PULSAR
    End

    hola, sabes que programe un 16f628a con este programa y pasa que cuando apreto el pulsador, salta a la rutina “alternar” pero luego salta a “titilar” solo y se queda en ese loop, porque sera? gracias

    Hola Sergio, algunos dias sin internet me impidieron responderte antes, para grabar en la eprom debes usar la instrucción ewrite y para leerlos eread, mirate el la ayuda que viene en el programa y podrás implementarlo facilmente ya que vienen algunos ejemplos-

    Hola Martin, si es que copiaste el código a mano fijate que no hayas invertido el orden de las lineas de codigo, y si hiciste un copy, paste mucho cuidado por que pueden moverse a veces las lineas, de todas formas postea el codigo tal cual lo tienes y lo miramos.- revisa muy bien las etiquetas de salto que esten bien posicionadas, saludos.-



    Dejar un comentario
    Los saltos de linea son automaticos, las direcciones de e-mail nunca seran mostradas, HTML esta permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

    (requerido)

    (requerido)