[Tutorial] y manejo de Proton IDE

este ejemplo està en inglès, pero si le echas cabeza creo que algo puedes obtener, lo saquè de la misma ayuda de protòn.

Código:
12F675 ADC Example 

' Perform an ADC conversion on the 12F675 8-pin PICmicro device

 Device = 12F675
 XTAL = 4
        
 SERIAL_BAUD = 9600 
 RSOUT_PIN = GPIO.0
 RSOUT_MODE = TRUE
 RSOUT_PACE = 10
        
'-------[DEFINE SOME ALIAS'S TO ADC REGISTERS]---------------------------

' ANSEL register's bits
 Symbol ANS0 = ANSEL.0
 Symbol ANS1 = ANSEL.1
 Symbol ANS2 = ANSEL.2
 Symbol ANS3 = ANSEL.3
 Symbol ADCS0 = ANSEL.4  ' ADC conversion clock select bit
 Symbol ADCS1 = ANSEL.5  ' ADC conversion clock select bit        
 Symbol ADCS2 = ANSEL.6  ' ADC conversion clock select bit       
  
' ADCON0 register's bits  
 Symbol ADFM = ADCON0.7
 Symbol VCFG = ADCON0.6
 Symbol CHS2 = ADCON0.4  ' ADC channel select bit
 Symbol CHS1 = ADCON0.3  ' ADC channel select bit
 Symbol CHS0 = ADCON0.2  ' ADC channel select bit
 Symbol GO_DONE = ADCON0.1  ' ADC Conversion status/ plus enable conversion-bit
 Symbol ADON = ADCON0.0  ' ADC Enable bit: 1 = enabled, 0 = disabled.
        
'-------[ASSIGN A VARIABLE FOR THE ADC RESULT]---------------------------
        
 Dim AD_RESULT as ADRESL.WORD ' Convert the ADRESL register into a WORD variable 

'-------[INITIALISE THE PICMICRO]----------------------------------------
 Delayms 500    ' Wait for the PICmicro to stabilise
 Goto OVER_ADC_SUBS   ' Jump over the subroutines
        
'-------[START AN ADC CONVERSION]----------------------------------------
GET_ADC:
 ADON = 1     ' Enable the ADC
 Delayus 50                ' Wait for sample/hold capacitors to charge
 GO_DONE = 1              ' Start conversion
 While GO_DONE = 1 : Wend  ' Poll the GO_DONE flag for completion of conversion
 ADON = 0     ' Disable the ADC, to save power
 Return
          
'-------[INITIALISE THE ADC REGISTERS]----------------------------------
' Standard procedures for setting up the ADC 
OVER_ADC_SUBS:                
 TRISIO = %11111111   ' All pins set for input
        
 ADCS0 = 1    ' \
 ADCS1 = 1    '   Setup ADC's clock for FRC
 ADCS2 = 0    ' /
        
 VCFG = 0     ' VREF is set to VDD of PICmicro
 ADFM = 1     ' Right justify the ADC result
        
 ANS0 = 0     ' Set AN0 (GPIO.0) as Digital input
 ANS1 = 0     ' Set AN1 (GPIO.1) as Digital input
 ANS2 = 1     ' Set AN2 (GPIO.2) as Analogue input
 ANS3 = 1     ' Set AN3 (GPIO.3) as Analogue input
        
'-------[MAIN PROGRAM LOOP STARTS HERE]----------------------------------
' Perform ADC conversions and display the result serially
       
 While 1 = 1     ' Create an infinite loop
  ADCON0 = ADCON0 | (2 << 2)   ' Select the channel to read
  Gosub GET_ADC    ' Perform an ADC conversion
  Rsout "CHANNEL 2 = " , DEC AD_RESULT,13  ' Display the result serially
  Delayms 500     ' Wait for half a second
 Wend      ' Do another conversion
 
hola amigos aqui regresando de un lago tiempo a lo que me gusta martirizame con los micros ahora vengo con una duda como puedo hacer una comunicacion I2C para comunicarme con 2 micros como deberia configurarla le agradeceria mucho una ayuda quisiera hacerla con 16f877a o con 16f628a
 
amigo mecatrodatos soy un seguidor tuyo y e visto tus aportes y son buenísimos quisiera saber para cuando estar listo el siguiente tutorial porque te quedaste en 7.2 pantallas glcd solo quisiera saber cuando saldrá el 7.3 o el 8 un saludo y felicitaciones por el material esta excelente
 
buenas tardes amigo tengo una pregunta para aclarar unas dudas hasta que serie de pic se pueden programar con proton, y lo otro que quiero decir es que tengo un problema en cuanto a la lectura de memoria de la eeprom de un pic877 con proton, el problema es el siguiente: yo stoy guardando datos que son unas rutas para un robot movil mediante un teclado las meto en el pic para guardarlas con ewrite, si las leo de una vez con eread el dato leido es el correcto pero si hago otras cosas y luego quiero leer el dato en la direccion correcta el dato es otro es una locura puesto que el dato deberia ser el mismo. si alguien puede ayudarme de antemano le agradezco
 
el proton lee desde el 12fxx asta 18f4550 pasando tambien por los mas conocidos como:
16f84,16f84a,16f628, 16f628a, 16f877, 16877a ,16f876,etc lo cuales estos son los mas principales
y sobre lo otro no te entiendo tu pregunta
 
Bueno, lo que pasa es que tengo el siguiente problema, yo kiero guardar un dato en la eeprom del pic lo stoy haciendo con la funcion ewrite y me funciona bien el dato es guardado pero cuando lo voy a leer con la funcion eread no extrae el dato q guarde, sino un dato diferente, entonces hice la prueba guardando y en la siguiente linea envie a leer y publicar en un lcd y me funciona bien. La cosa es que cuando guardo el dato y hago un salto a otra rutina y envío a leer el dato q guarde como que se pierde no es el mismo y stoy apuntando en la misma direccion q guarde de forma directa pero nose porque cambia ese dato, ya esto lo he practicado con picbasic y me funciona bien. Y pues kisiera solucionar este problema en proton.
 
les pasare el codigo donde tengo el problema ya que el codigo es muy extenso:

Código:
For i = cont1 To cont2
EWrite i, [X]
sal = ERead i             ' si hago esto no tengo problemas el dato x al leerlo es el que se guardo      
Print  # sal
DelayMS 500
next

asi me funciona bien pero si hago esto es donde el dato guardado en la eeprom se me pierde o por lo menos no me arroja el que es.

Código:
For i = cont1 To cont2
EWrite i, [X]
DelayMS 500
next
goto leer
leer:
For i = 0 To cont2
sal = ERead i        'aqui cuando leo en la variable sal se guarda un dato incorrecto
Next

en el primer for staria guardando funciona asi yo introduzco datos con un teclado al micro y el va guardando en la eeprom luego cuando ya introduje todos los datos mando a ejecutar q seria leer para mover un robot movil pero cuando mando a leer en las direcciones q guarde no sta el dato q deberia star, el error me lo da es cuando hago un salto como explique arriba si guardo y leo de una vez me funciona bien pero si guardo y realizo un salto no me funciona.
 
Última edición por un moderador:
Hola duaiber,

Yo te recomendarìa que utilizaras el còdigo de la clave de acceso que està en las primeras pàginas del foro, como punto de partida claro, una vez establecido que si funciona entonces ir agregandole, yo tuve un problema parecido al querer cambiar la clave, a la final no supe y abandonè, ojalà y tengas una respuesta màs concreta de los compañeros.

Suerte.
 
Hola duaiber,

Con este se guarda lo que se digita y se compara con lo que hay en memoria, especulando solamente creo que el problema debes tenerlo al empezar a leer la memoria, de cualquier forma, parte de este y ve agregandole a ver como te va.

suerte.

Código:
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
EData 5,1,2,3
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
 
hola atricio,

pues este ejemplo está en la ayuda, parece igual que en pic basic.

Código:
 dim var1 as byte
 dim result as byte

 delayms 300             ' wait for picmicro to stabilise
 cls                     ' clear the lcd

 result = 0              ' clear the result variable before we start
 var1 = 1                ' variable to base the conditions upon
 
 select var1

  case 1                 ' is var1 equal to 1 ?
   Result = 1            ' load result with 1 if yes

  case 2                 ' is var1 equal to 2 ?
   Result = 2            ' load result with 2 if yes

  case 3                 ' is var1 equal to 3 ?
   Result = 3            ' load result with 3 if yes

  case else              ' otherwise...
   Result = 255          ' load result with 255

 endselect

 print dec result        ' display the result
 stop

hola amigo me he guiado de este programa keriendo modificar a agregar unas 4 entradas mas es q lo kiero acoplar a un texteo de unos sensores pa un proyecto qm e toy inventando pero se me vuelve loco ahi te adjunto algo de lo q he hecho
espero me des una ayuda y me explikes ya q soy nuevo en esto del entorno de los microcontroladores
 

Adjuntos

  • PROYECTO.rar
    34.7 KB · Visitas: 130
si disculpa el problema es q al compilar el programa la lcd me bota un error tremendo osea me va botando los mensajes todos consecuitivos como si siempre estuviera detectando todos los pulsadores al mismo tiempo la idea mia es q al presionar pulsador me bote un solo mensaje y se kede ahi en la lcd y ps al notar el segundo pulsador presionado osea ambos juntos bote otro mensaje y asi consecutivamente hasta estar los 5 pulsadores presionados
serian 5 mensajes diferentes, tengo la lcd configurada por el ptod la entrada de los pulsadores por ptob ahi anexe el diagrama y lo k llevo del programa espero me puedan decir q podria hacer pa solucionar
 
Hola a todos,

La verdad no entiendo muy bien que quieres hacer con esto ecajg2b, veo que preguntas por el puerto c.0, etc pero mirando la simulaciòn no hay nada conectado en el puertoC, aclara y miramos.

De cualquier forma, si quieres sacar un mensaje especìfico con dos pulsadores, utiliza la condiciòn lògica AND. Ej:

if port1=1 AND port2=1 then gosub MENSAJE1
if port3=1 AND port2=1 then gosub MENSAJE2

Ojalà y te sirva, sino, publica nuevamente tus dudas.
 
Última edición:
hola amigo mira esta parte del post ahi el amigo mecatrodatos me explico como hacer lo que tu me dices que quieres hacer esta ya realizado es solo que adaptes un poco lo que quieres hacer en la lcd nada mas miralo ami me ayudo

https://www.forosdeelectronica.com/posts/486110/
 
hola amigosl es cuento q leyendo bien aki en el foro y ps con las ideas q me dio los usuarios q me respondieron creo q lleguen al fin y al logro del programa tal cual como lo keria lo adjuntare en un archivo en rar aunque falta unos reotqes ya esta la idea tal cual yo la keria
 

Adjuntos

  • AQUI.rar
    21.3 KB · Visitas: 198
hola que tal @mecatrodatos, debido a que el tutorial se extendio de forma indefinida XD se me canso la vista, de tanto leer y me gustaria saber si cuentas con algun tutorial especializado en la programacion del pic16f84 para nosotros los principiantes ya que lo que encuentro es para otros pics y supongo que la forma de programar no es la misma para todos los pics. desde ya muchas gracias y espero puedas ayudar a los novatos je.
 
Atrás
Arriba