[Tutorial] y manejo de proton IDE

#81
Estimados Colegas:
Tengo un codigo desarrollado con PROTON 1.0.0.1, y estoy intentado compilar sin embargo no logro mi proposito ya que al darle la orden de compilar el programa me arroja el siguiente mensaje:
ASM ERROR : Error [173] Source file path exceeds 62 characters
ASM ERROR : ASSEMBLER ERRORS.HEX file not Created

Por lo que solicito ayuda, si alguien me puede ayudar que les agradecere.

Un abrazo a todos.
 
#83
Gracias colega, hice como indicas, pero continua el mismo problema (Ruta de origen del archivo supera 62 caracteres)

Gracias.
 
Última edición:
#84
hola amigo mira lo que sucede es que tienes la direccion del archivo del micro que vas a usar muy grande por ejemplo si los haces correr desde mis dicumentos.
anda al disco duro que sea el que uses como raiz o al que lo tienes dedicado para memoria crea una carpeta que tenga un nombre corto no vasa colocar por ejemplo: PRENDIDO Y APAGADO DE UN LED CON RETARDO Y AUTO FANTASTICO eso mas los otros caracteres de ley se hacen mas de 62 procura hacer eso y cerciorate que los estas grabando en .bas
 
#85
Que tal y como vamos,

Estoy empezando con proton y me parece super bueno Ok. utilizo el Amicus ya que es gratis aunque es solo para el pic18f25k20, que parece un pic muy completo aunque apenas empiezo a leer.
Aquí como leer un keypad 4x3 en lcd.
Código:
' LECTURA DE UN TECLADO 4x3 EN UN LCD

[php]
'Device = 18F25K20
'Xtal = 4
Optimiser_Level = 3            
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.0
LCD_ENPin = PORTB.1
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0


Symbol fila1 = PORTC.0
Symbol fila2 = PORTC.1
Symbol fila3 = PORTC.2
Symbol fila4 = PORTC.3
Symbol COLUMNA1 = PORTC.4
Symbol COLUMNA2 = PORTC.5
Symbol COLUMNA3 = PORTC.6
 
Dim boton As Byte
TRISC =%01110000

TRISB = 0
 boton=0
LECTURA:

    Call teclado
    If boton=10 Then LECTURA
    If boton=11 Then boton=0
    If boton=12 Then LECTURA
    Print At 1,1,Dec boton
    GoTo LECTURA
End
 
 teclado:
 boton=0 
 fila1=0
 If COLUMNA1=0 Then boton=1
 If COLUMNA2=0 Then boton=2
 If COLUMNA3=0 Then boton=3
 fila1=1
 fila2=0
 If COLUMNA1=0 Then boton=4
 If COLUMNA2=0 Then boton=5
 If COLUMNA3=0 Then boton=6
 fila2=1
 fila3=0
 If COLUMNA1=0 Then boton=7
 If COLUMNA2=0 Then boton=8
 If COLUMNA3=0 Then boton=9
 fila3=1
 fila4=0
 If COLUMNA1=0 Then boton=10
 If COLUMNA2=0 Then boton=11
 If COLUMNA3=0 Then boton=12
 fila4=1
 DelayMS 20 
 Return
 [/php]
 

Adjuntos

Última edición por un moderador:
#86
Aquí de nuevo,

El siguiente codigo permite comparar 4 numeros digitados con los almacenados en memoria, como no he podido conseguir el Proton y utilizo el Amicus, se deben configurar algunos datos como los fuses.
PHP:
' LECTURA DE UN TECLADO 4x3 EN UN LCD

'Device = 18F25K20
'Xtal = 4
Optimiser_Level = 3            
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.0
LCD_ENPin = PORTB.1
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0

'*****FILAS Y COLUMNAS***
Symbol fila1 = PORTC.0
Symbol fila2 = PORTC.1
Symbol fila3 = PORTC.2
Symbol fila4 = PORTC.3
Symbol COLUMNA1 = PORTC.4
Symbol COLUMNA2 = PORTC.5
Symbol COLUMNA3 = PORTC.6
'**** VARIABLES ******* 
Dim I           As Byte 
Dim Flag        As Byte   
Dim boton       As Byte
Dim CAPTURA[4]  As Byte     'Este arreglo es para capturar los valores pulsados en el teclado
Dim LEER[4]     As Byte     'Este arreglo es para guardar los valores previamente almacenados en memoria
Dim SALUDO[11]  As Byte     'Este arreglo es para el mensaje de bienvenida o el que ustedes deseen
Dim CONTADOR    As Byte
Dim INDEX       As Byte 
Dim Frame       As Byte 
Dim ABC         As Byte              


TRISC =%01110000          'Se declaran como salidas los pines 4,5,6 correspondientes a las columnas 
 TRISB=0                  'Puerto B se deja como salida
 
EWrite 0,[5,6,7,8]        'Guarda en la memoria los numeros 5678


 GoSub MENSAJE

 INICIO:
 CONTADOR=0
 LECTURA:
    Call teclado
    If boton=0  Then LECTURA
    If boton=10 Then LECTURA
    If boton=11 Then boton=0
    If boton=12 Then LECTURA
    Cls
    Print At 1,1,"Digite: ",Dec boton
    DelayMS 30
    CAPTURA[CONTADOR]=boton              'Guarda el valor pulsado en CAPTURA que es un arreglo de 4 bytes
    CONTADOR=CONTADOR+1                  'Se encarga de aumentar la posición donde capturamos el número pulsado
    If CONTADOR=4 Then                   'Cuando se pulsan 4 digitos muestra el mensaje de memoria llena
    Print At 1,1, "VERIFICANDO..."
    DelayMS 400
    GoSub MOSTRAR 
    Else
    GoTo LECTURA
    EndIf
    GoTo INICIO
 End
 
 MOSTRAR:
  For I= 0 To 3 Step 1                      'Aquí tenemos un ciclo que nos permite leer de la memoria los datos
   LEER[I]=ERead I                          'y almacenarlos el la variable LEER, que es un arreglo de 4 bytes
  Next I                                    
   
    Cls
    For I=0 To 3
    Print  Dec CAPTURA[I]                    'Aquí mostramos los cuatro dígitos capturados por teclado
    Next I
    DelayMS 300
    Cls
  
    For I=0 To 3
    Print Dec LEER[I]                        'Aquí mostramos los dígitos grabados en la memoria
    Next I
    DelayMS 300
    
    Flag=1
    For I=0 To 3
    If CAPTURA[I]<>LEER[I] Then Flag=0
    Next I
    Cls
    If Flag=1 Then  
    Print "Iguales"
    Else
    Print "Diferentes"
    EndIf
   Return
   
 MENSAJE:
 Cls

 Print At 1,1, "Bienvenido"
 Print $FE, $C0,"Digite y compare"

 SALUDO [0]  = "B"         
 SALUDO [1]  = "I"         
 SALUDO [2]  = "E"
 SALUDO [4]  = "N"
 SALUDO [5]  = "V" 
 SALUDO [6]  = "E"
 SALUDO [7]  = "N"
 SALUDO [8]  = "I"
 SALUDO [9]  = "D"
 SALUDO [10] = "O"

 'CLS                                
'ROTACION: 
' FOR INDEX = 0 TO 11                 
'   Frame = LOOKUP INDEX , ["BIENVENIDOS"]
'  PRINT AT 1 , 1 , Frame           
'  DELAYMS 200                      
' NEXT                                                
 Return

 
 teclado:
 boton=0 
 fila1=0
 If COLUMNA1=0 Then boton=1
 If COLUMNA2=0 Then boton=2
 If COLUMNA3=0 Then boton=3
 fila1=1
 fila2=0
 If COLUMNA1=0 Then boton=4
 If COLUMNA2=0 Then boton=5
 If COLUMNA3=0 Then boton=6
 fila2=1
 fila3=0
 If COLUMNA1=0 Then boton=7
 If COLUMNA2=0 Then boton=8
 If COLUMNA3=0 Then boton=9
 fila3=1
 fila4=0
 If COLUMNA1=0 Then boton=10
 If COLUMNA2=0 Then boton=11
 If COLUMNA3=0 Then boton=12
 fila4=1
 DelayMS 20 
 Return
 
Última edición por un moderador:
#88
Ok,Chapin, la verdad no he practicado con inkey aun, si tienes un ejemplo que puedas publicar, te lo agradecería pues quiero hacer una alarma sencilla para ponerla en el foro.
 
#89
DEPREDADORX1

Seria algo asi:

PHP:
Xtal 4
TRISB = 00000000
TRISA = 00000000

All_Digital = TRUE    

Declare Keypad_Port PORTB
PortB_Pullups = On
Declare LCD_Type  = 0       ;LCD is Alpha
Declare LCD_DTPin = PORTA.0 ;LCD data line starting port.pin
Declare LCD_ENPin = PORTA.7 ;LCD EN line
Declare LCD_RSPin = PORTA.4 ;LCD RS line
Declare LCD_Interface = 4   ;LCD 4 line interface
Declare LCD_Lines = 2       

Dim tecla As Byte  
Dim var1 As Byte

Cls

inicio:
 
DelayMS 500
var1 = InKey '0 1 2   4 5 6   8 9 10 12  13 14   'leido de teclado
tecla = LookUp   var1, [1,2,3,0,4,5,6,0,7,8,9,0,10,11,12]
                                                     
                                                     
                                                     
Print At 1,1,  Dec tecla                                      
DelayMS 2000 
Cls                                        
GoTo inicio
 
Última edición por un moderador:
#90
Gracias Chapin por el dato, uhm... pos le he dado pero no se cual sea el error, aqui publico para ver si es posible, sin animo de abusar claro, que alguno de nuestros expert echen un empujon a ver cual es el error.
 

Adjuntos

#91
Aquí yo,

Me corrijo, para el pic16f877A me funcionó la lectura eliminando la conexión de las resistencias a las columnas del teclado, no he probado en físico por lo que no estoy seguro si sea correcto, pero la simulación corre bien.
 
#93
Venga!!! aquí estamos otra vez,

El siguiente código es la versión clásica de la clave de acceso vista en pic basic pro, ahora en proton, no he agregado el cambio de clave, eso para alguien interesado. El siguiente código, si no estoy errando, sirve para calcular los kilometros x hora, eso sí, tomando en cuenta el metraje de cada llanta, supongo que el calculo funciona, pero acepto cualquier comentario al respecto de los compas.

PHP:
 'CLAVE DE ACCESO CON PROTON

 Device = 16F877A
 Xtal = 4

 All_Digital=true
 Keypad_Port PORTB
 PortB_Pullups true

 Declare LCD_Type = 0         ;LCD is Alpha
 Declare LCD_DTPin = PORTD.4  ;LCD data line starting port.pin
 Declare LCD_ENPin = PORTD.1  ;LCD EN line
 Declare LCD_RSPin = PORTD.0  ;LCD RS line
 Declare LCD_Interface = 4    ;LCD 4 line interface
 Declare LCD_Lines = 2

Print Cls
Dim I    As Byte
Dim x    As Byte
Dim y    As Byte
Dim CONT      As Byte
Dim flag      As Byte
Dim numero[4] As Byte
Dim LEER[4]   As Byte
Dim SALIDA As PORTC.0

EWrite 0,[5,6,7,8]        'Guarda en la memoria los numeros 5678

INICIO:
Print Cls
Low SALIDA
CONT=0
GoSub MENSAJE

TECLEAR:
x=InKey
x= LookUp x, [1,2,3,255,4,5,6,255,7,8,9,255,"*",0,"#",255,255]
If x <> 255 Then
Print At 2,1+CONT, "*"
DelayMS 400
numero[CONT]=x
CONT=CONT+1
EndIf
If CONT=4 Then 
GoSub COMPARAR_CLAVE
Else
GoTo TECLEAR
EndIf 
 GoTo INICIO
 
COMPARAR_CLAVE:
flag=1
Print Cls
Print At 1,1,"A Ingresado:"
For I=0 To 3
 Print Dec numero[I]
 Next
 DelayMS 1000
 Print Cls
 
For I= 0 To 3                      
 LEER[I]=ERead I                         
 Next I              


For I=0 To 3
 If numero[I]<>LEER[I] Then flag=0
 Next I
 Print Cls
 If flag=1 Then 
 Print "CLAVE CORRECTA"
 DelayMS 1500
 High SALIDA
 DelayMS 1000
 Low SALIDA
 Else
 Print "CLAVE INCORRECTA"
 DelayMS 1600
EndIf
Return


MENSAJE:
Print At 1,1, "Digite la clave "
Return
Device = 16F628A
Xtal = 4
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.1
LCD_ENPin = PORTB.3
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0
All_Digital = True


Dim FLT As Float
Dim centimetros As Float
Dim metros As Float
Dim kilometros As Float
Dim medida As Float

Symbol Pin = PORTB.0
Cls

INICIO:
FLT = Counter Pin,1000
metros=1.97*FLT

kilometros=metros/1000*3600
Print At 1,1,"VELOCIDAD ACTUAL"
Print At 2,1, Dec1 kilometros,"K/h"
GoTo INICIO
 
Última edición por un moderador:
#94
gracias alguien me podria ayudar como debo configurar el 16F628A para usarlo con oscilador externo porque quisiera usarlo para hacer un seguidor de linea y si tienen un ejemplito de un seguidor no tan complejo les agradeceria mucho
 
#95
Hola atricio,

Aunque yo todavia no he llevado nada al protoboard con proton, creo que la configuración es tan sencilla como la que muestro en los ejemplitos anteriores.
Device = 16F628A
Xtal = 4 ; cristal externo de 4 MHZ

Si lo que quieres configurar son los fuses, es decir, el watchdog, protección, etc, ya te tocaría echar mano de algun tuto, de cualquier forma te anexo el que tengo, en ingles, por si acaso te parece para leer.
 

Adjuntos

#96
Buen manual; como dato, el Proton tiene un plugin llamado "Fuse Configurator" que es una manera fácil de configurar los fuses que genera un código para el PIC16F628A con oscilador externo tipo XT:
Código:
Config BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_OFF, WDT_OFF, LVP_OFF, MCLRE_ON, XT_OSC
PIC Fuse Configurator (Ver 1.2.2.4)

saludos
 
#97
Ah, claro, Excelente....

Como tengo la version 2.0.4 no puedo instalar ese plugin, será después, también recordé que existe otro complemento que me parece muy bueno, es el proton Header, este permite además de configurar los fuses, realizar todo el encabezado del programa segun nuestras necesidades, agregar la configuración para lcd, activar pull up internas, timer, I2c.
 
#98
gracias por la ayuda axel una maquina tus aportes pero me ensenarias a usarlo por favor depredadorx1 puedes colocar el plugin para checarlo y ver como va
 
Última edición:
#99
Hola Axel,

Buscalo en google que te sale enseguida, no tiene perdida, si no lo consigues entonces ahi si te lo puedo pasar, claro, si no hay problemas con las normas del foro, la verdad no sé.

Suerte!
 
Si DEPREDADORX1, ya lo encontré gracias.

atricio, luego de instalarlo debe aparecer en "View > PlugIn > JGB Tools > Fuse configurator"; tan solo debes de declarar el PIC que vas a usar con Device, luego ejecutas el Fuse Configurator e inmediatamente te aparecen los fuses del PIC respectivo, seleccionas lo que quieres, luego clic en el botón "Finish" y aceptas... lo que hace es pegar el código de los fuses en la hoja actual de tu programa y lo pone justo donde se queda el cursor; por eso antes de usar "Finish" ubica el cursor debajo de Device.

saludos