[Tutorial] y manejo de Proton IDE

hola, estoy iniciandome en programacion con proton que descargue de internet, pero no me compila el programa, me tira un error que dice : USB Key not found.
Alguien me puede ayudar con esto ? gracias.
 
el microcontrolador debería funcionar con un reloj externo de 16MHz pero a pesar de que se lo quito éste sigue funcionando
Éste y algunos otros PIC, cuentan con un sistema llamado (Fail-Safe Clock Monitor)
Sirve para detectar fallas en el módulo del oscilador externo.
Cuando existe una falla empieza a funcionar este sistema, habilitando automáticamente el oscilador interno.
Pero si estás trabajando a una frecuencia de 16MHz, entonces se reducirá la frecuencia trabajo,
ya que la máxima frecuencia de operación del oscilador interno es de 8MHz.

Éste modo de operación es controlado por el fuse FCMEN (Fail-Safe Clock Monitor Enable)
Cuando está en ON se habilita la capacidad de que entre en funcionamiento el oscilador interno.

mi duda es como se hace que trabaje con un reloj externo de 16MHz, es necesario configurar el registro OSCCON?
Para trabajar con un oscilador externo se debe usar el fuse EXT_RC.
Y para usar un cristal de 16MHz, se debe usar el fuse HS_OSC.
El registro OSCCON solamente se configura cuando se trabaja con el oscilador interno.
En el se establece a que frecuencia trabajara el oscilador interno, si será de baja o alta frecuencia,
desde 31KHz, hasta 8MHz, si en baja o alta frecuencia será estable, y otras cosas más.

Cómo siempre se a dicho...
Lean la hoja de datos del PIC y encontraran toda la información que necesitan.
nesecito ayuda cuando compilo en proton sale este error
error:usb key not found
hola, estoy iniciandome en programacion con proton que descargue de internet, pero no me compila el programa, me tira un error que dice : USB Key not found.
Alguien me puede ayudar con esto ? gracias.
Ese mensaje es debido a que el programa no está registrado.
Necesitas adquirir una licencia para recibir la clave (KEY)

Suerte.
 
Última edición:
Ok D@rkbytes muchas gracias por la ayuda, ahora he estado experimentando con estas palabras de configuración y lo que me pasa es que conecto el circuito y el PIC se reinicia cada segundo aproximadamente, al quemarlo con el masterprog me tira el siguiente aviso "faltan bits de configuración en el archivo HEX!!" y lo que tengo es lo siguiente:

Código:
Device 16F887
'* PALABRAS DE CONFIGURACIÓN.
Config1 EXT_RC_ON,HS_OSC_ON,PWRTE_ON,MCLRE_ON,CP_OFF,CPD_OFF,WDT_OFF,FCMEN_ON,IESO_OFF,LVP_OFF,BOR_OFF
Config2 FCMEN_OFF,WRT_OFF,BOR21V  
'* CONFIGURACIÓN DEL OSCILADOR INTERNO.     
Xtal=16
'* TODOS LOS PUERTOS SE CONFIGURAN COMO DIGITALES.
All_Digital = true 
'* SE DEFINEN LOS PARÁMETROS DEL CONVERSOR ANALÓGICO.
Declare Adin_Res = 10       ; 10 bits de resolución. 
Declare Adin_Tad = 32_FOSC   ; Seleccionar OSC.
Declare Adin_Stime = 50     ; 50uS para tiempo de muestreo.

otra duda es que estuve revisando el Declare Adin_Tad = 32_FOSC y tengo duda si está bien escrito ya que voy a utilizar un oscilador externo de 16MHz, según la ayuda es uno de los siguentes DECLARE ADIN_TAD 2_FOSC , 8_FOSC , 32_FOSC , or FRC, pero no estoy seguro si es el 32_FOSC.
 
que me pasa es que conecto el circuito y el PIC se reinicia cada segundo aproximadamente, al quemarlo con el masterprog me tira el siguiente aviso "faltan bits de configuración en el archivo HEX!!"
Debe ser porque está mal tu palabra de configuración.
Para lo que requieres, usa esta...
Código:
Reminders = False
Config1 EXTRCIO,LVP_OFF,FCMEN_OFF,IESO_OFF,MCLRE_ON,PWRTE_ON,WDTE_OFF
Config2 WRT_OFF,BOR21V
Reminders = True
otra duda es que estuve revisando el Declare Adin_Tad = 32_FOSC y tengo duda si está bien escrito ya que voy a utilizar un oscilador externo de 16MHz, según la ayuda es uno de los siguentes DECLARE ADIN_TAD 2_FOSC , 8_FOSC , 32_FOSC , or FRC, pero no estoy seguro si es el 32_FOSC.
Es muy importante el uso de esas declaraciones, ya que de ellas depende la resolución de la conversión.
Si no seleccionas bien el tipo de reloj que se usará para la conversión AD, puedes tener mala resolución,
y en el peor de los casos, ninguna conversión. Usa por ahora FRC y ve realizando pruebas.
Al usar FRC se garantiza que el conversor funcione sin problemas,
aunque se obtenga menor velocidad de conversión y resolución.
En la hoja de datos, pagina 105, tabla 9-1 se explica lo que te menciono con más detalles.

Saludos.
 
Última edición:
D@rkbytes ¿podrías indicarme dónde puedo encontrar información sobre los fuses? Gracias.
Dependiendo del tipo de PIC, son los fuses que tiene, no todos tienen los mismos.
Por aquí puedes ver algunos. Significado de los Fuses
En la hoja de datos del PIC también, y en la carpeta PPI de Proton vienen los que usa cada PIC.
Sólo busca el archivo *.ppi correspondiente al PIC que vayas a usar.
La carpeta se encuentra por default en C:\Archivos de programa\ProtonIDE\PDS\Includes\PPI

Suerte.
 
Muchas gracias D@rkbytes, ya supongo que cada micro tiene sus fuses, pero en los datasheets no dicen qué es cada uno, al menos yo no soy capaz de entenderlos y es por eso que este documento me aclara bastante.
 
Con estos ejemplos que realicé, se demuestra el funcionamiento del sistema "Fail-Safe Clock Monitor".
Están desarrollados en torno a un PIC18F4550, que también cuenta con este sistema, así como el 18F2550,
el 16F88 y la serie 16F88X que son mas grandes que el anterior y cuentan con oscilador interno a 8MHz.

Los ejemplos muestran el estado del registro OSCCON en una pantalla LCD 16x2 y se hace parpadear un LED.
El LED tiene una duración de 1 segundo encendido y otro segundo apagado.

En el primer ejemplo se llevó la frecuencia de trabajo del PIC a 48MHz, partiendo de un cristal de 4MHz.
Y se configuró el registro OSCCON para trabajar estable a 8MHz.
Así, al desconectar el cristal de los pines 13 (OSC1/CLKI) y 14 (OSC2/CLKO/RA6) se activa el oscilador interno.
En este ejemplo se puede ver como se reduce la velocidad del encendido y apagado del LED a 4 veces.

En el segundo ejemplo también se parte de un cristal de 4MHz, pero sin elevar la frecuencia de reloj.
Entonces se configura el registro OSCCON para trabajar estable a 4MHz.
Cómo ambos osciladores tienen la misma frecuencia de reloj, no se nota el cambio al activarse el oscilador interno.

Para volver a restaurar el oscilador a cristal, se debe hacer un reset en el pin 1 (MCLR/Vpp/RE3)
Ya que no se sale de este modo ni activando el perro guardián (Watch Dog Timer)

Notas:
.- En los dos ejemplos se usa la misma conexión, lo único que cambia son los programas.
.- Se incluyen las simulaciones, pero los proyectos sólo se pueden ver funcionar si se hacen físicamente.

Saludos.
 

Adjuntos

  • 18F4550 Fail-Safe Clock Monitor (SCH).jpg
    18F4550 Fail-Safe Clock Monitor (SCH).jpg
    101.4 KB · Visitas: 60
  • 18F4550 Fail-Safe Clock Monitor (48MHz Core).rar
    74.8 KB · Visitas: 85
  • 18F4550 Fail-Safe Clock Monitor (4MHz Core).rar
    75 KB · Visitas: 86
Gracias por la información D@rkbytes, ahora estuve haciendo pruebas con el código que me mandaste
Debe ser porque está mal tu palabra de configuración.
Código:
Reminders = False
Config1 EXTRCIO,LVP_OFF,FCMEN_OFF,IESO_OFF,MCLRE_ON,PWRTE_ON,WDTE_OFF
Config2 WRT_OFF,BOR21V
Reminders = True
Pero el pic sigue funcionando cuando le quito el cristal de 16MHz y no se ve ninguna diferencia en los tiempos de operación, cuando está con el cristal y cuando no, ya verifique la conexión y todo anda bien, sospecho de estas lineas de mi programa, no sé si afecten el PORTA.6 y 7 (pines para el clock):
Código:
'* TODOS LOS PUERTOS SE CONFIGURAN COMO DIGITALES.
All_Digital = true 
'* SE DEFINEN LOS PARÁMETROS DEL CONVERSOR ANALÓGICO.
Declare Adin_Res = 10       ; 10 bits de resolución. 
Declare Adin_Tad = FRC   ; Seleccionar OSC.
Declare Adin_Stime = 50     ; 50uS para tiempo de muestreo.
También intenté poner las otras palabras de configuración, pero me tira el mismo error en el masterprog:
Código:
Reminders = False
Config1 EXT_RC_ON,HS_OSC_ON,EXTRCIO,PWRTE_ON,MCLRE_ON,WDT_OFF,LVP_OFF,BOR_OFF
Config2 FCMEN_OFF,WRT_OFF,BOR21V
Reminders = True
No sé si algo estoy haciendo mal, pienso que una forma de verificar que el FSCM esté apagado es desconectar el cristal una ves que el PIC esté funcionando y que éste deje de funcionar o que en su defecto la velocidad de operaciones del PIC disminuya. Nuevamente gracias por la ayuda.
 
Última edición por un moderador:
Gracias por la información D@rkbytes, ahora estuve haciendo pruebas con el código que me mandaste

Pero el pic sigue funcionando cuando le quito el cristal de 16MHz y no se ve ninguna diferencia en los tiempos de operación, cuando está con el cristal y cuando no, ya verifique la conexión y todo anda bien, sospecho de estas lineas de mi programa, no sé si afecten el PORTA.6 y 7 (pines para el clock):
¿Estás usando un oscilador externo a 16MHz, o un cristal de 16MHz.?
Debes aclarar que tipo estás usando, porque por lo que ahora comentas, estás usando un cristal de 16MHz.
Para los tipos, oscilador externo o cristal, el fuse de configuración es diferente.
sospecho de estas lineas de mi programa, no sé si afecten el PORTA.6 y 7 (pines para el clock):
Código:
'* TODOS LOS PUERTOS SE CONFIGURAN COMO DIGITALES.
All_Digital = true 
'* SE DEFINEN LOS PARÁMETROS DEL CONVERSOR ANALÓGICO.
Declare Adin_Res = 10       ; 10 bits de resolución. 
Declare Adin_Tad = FRC   ; Seleccionar OSC.
Declare Adin_Stime = 50     ; 50uS para tiempo de  muestreo.
Nop, esas líneas del programa no afectan a los pines del oscilador.
También intenté poner las otras palabras de configuración, pero me tira el mismo error en el masterprog:
Código:
Reminders = False
 Config1 EXT_RC_ON,HS_OSC_ON,EXTRCIO,PWRTE_ON,MCLRE_ON,WDT_OFF,LVP_OFF,BOR_OFF
 Config2 FCMEN_OFF,WRT_OFF,BOR21V
 Reminders = True
No sé si algo estoy haciendo mal, pienso que una forma de verificar que el FSCM esté apagado es desconectar el cristal una ves que el PIC esté funcionando y que éste deje de funcionar o que en su defecto la velocidad de operaciones del PIC disminuya. Nuevamente gracias por la ayuda.
En esa palabra de configuración aparte de tener mal la sintaxis, no debes repetir los fuses del oscilador.
EXT_RC_ON ; No existe.
HS_OSC_ON ; No existe.
Cómo el compilador no los reconoce, toda la palabra de configuración quedará errónea en el archivo HEX.
Y seguramente queda activo el fuse FCMEN, por lo tanto tu programa está trabajando con el oscilador interno.
Si estás usando un cristal de 16MHz, esta debe ser tu palabra de configuración...
Código:
Config1 HS_OSC,LVP_OFF,FCMEN_OFF,IESO_OFF,MCLRE_ON,PWRTE_ON,WDTE_OFF
Config2 WRT_OFF,BOR21V
Suerte.
 

Adjuntos

  • error.rar
    11.2 KB · Visitas: 52
Última edición:
Me saliò el siguiente mensaje de error (ver adjunto)
¿como puedo solucionarlo?

error.jpg
Claramente el compilador te está indicando los siguientes errores...

ERROR: Incapaz de encontrar PrPrc.exe
ERROR: Asegúrese que éste se localice en la carpeta Includes

PrPrc.exe.jpg
Busca dentro de esa carpeta para comprobar la existencia del programa PrPrc.exe.

Puede ser que la instalación esté corrupta y tengas que reinstalar el programa Proton IDE.

Suerte.

 
Última edición:
Hola Compañeros de foro:

Estoy practicando con transmisores/receptores infrarojos y en particular con un sensor de presencia, con la finalidad de tener otra opción a los sensores de calor PIR.

¿Por que? como sabemos los sensores PIR aun cuando son muy efectivos como sensor de movimiento, no se desempeñan muy bien cuando en su campo de acción un objeto se queda fijo y simplemente ya no sensan nada a menos que se mueva de nuevo el objeto.

Viendo por el foro los diferentes circuitos, en la que la mayoría, están basados en el 555 y el 567 que son analógicos y por tanto dependen de temperatura y tolerancia de los componentes o que mas bien están pensados como sensores de proximidad de poco alcance, me decidi a usar un microcontrolador para este propósito.

dejo aquí el código, diagrama y archivo en proteus (dentro del archivo .rar)...aunque debo advertir que el archivo en proteus no simula para nada la sección del infrarojo, ya que no encontré ningún receptor para poderlo simular.

HTML:
'****************************************************************
'*  Name    : detector IR.BAS                                   *
'*  Author  : miborbola                                         *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 04/06/2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
 
Device = 16F628                      'SE DECLARA EL TIPO DE MICROCONTROLADOR A UTILIZAR 
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, CP_OFF, MCLRE_OFF, DATA_CP_OFF 'se configuran fusibles de operacion (oscilador interno)
Xtal = 4                          ' DELCARAMOS LA FRECUENCIA DEL OSCILADOR EN EL MICROCONTROLADOR

All_Digital = On    
TRISA = %11111100       ' SE CONFIGURA PORTA COMO ENTRADAS
TRISB = %10000000       ' se configura el portb como salidas de la 0 a la 6 y la 7 como entrada
Symbol ROJO =   PORTB.4  'LED ROJO QUE INDICARA CUANDO ESTA OCUPADO EL LUGAR
Symbol VERDE =  PORTB.5  'LED VERDE QUE INDICARA CUANDO ESTA LIBRE EL LUGAR
Symbol RECEPTOR=PORTB.7  'ENTRADA CONFIGURADA PARA DAR ACUSE, SI EL FOTORECEPTOR SENSA LA FRECUENCIA EMITIDA POR EL DIODO EMISOR INFRAROJO 
Symbol HABILITA=PORTB.6  'salida que se utiliza para habilitar los pulsos del led infrarojo o Modulacion del Led infrarojo

                        '
Low ROJO                ' nos aseguramos de tener en nivel bajo nuestros leds a manera de "inicializacion"
Low VERDE               '
Low HABILITA            '

TRISB.3 = 0            ' SE DECLARA QUE PUERTO SE UTILIZARA COMO SALIDA PWM PARA EL DIODO EMISOR INFRAROJO
PR2       = 25         ' configura frecuencia 38KHz
CCPR1L    = 15         ' configura el Duty-Cycle al 50%
CCP1CON   = %00001100  ' selecciona el modo de PWM
T2CON     = %00000100  ' enciende el Timer2 ON + 1:1 prescale


Inicio:
    
    Low HABILITA       ' activamos rafaga infraroja de 38 khertz en el ambiente
    DelayUS 125        ' esperamos a que se propague el infrarojo en el ambiente
        If RECEPTOR=0 Then GoTo Enciende   ' si el receptor LF 1838 detecta la rafaga de 38 khz va a la rutina Enciende,
        If RECEPTOR=1 Then GoTo Apaga      ' si no la detecta va a la rutina Apaga
    High HABILITA       ' Desactivamos la rafaga de 38 khz en el ambiente
    DelayUS 125
        GoTo Inicio    ' volvemos al Inicio


Enciende:
            High ROJO    ' Encendemos el Led rojo para indicar que se detecto un objeto y,
            Low VERDE    ' Apagamos led verde 


Confirma:                 ' Con la finalidad de confirmar que un objeto se encuentra proximo se inicia este ciclo
                
                    High HABILITA ' nos aseguramos de no tener la rafaga infraroja de 38 khertz en el ambiente
                     DelayMS 2000  'esperamos dos segundos, aunque puede ser mayo o menor el tiempo 
                    Low HABILITA   ' activamos rafaga 38 kilohertz nuevamente
                     DelayUS 125
                    If RECEPTOR=0 Then GoTo Confirma' Si el recepto LF 1838 detecta rafaga de 38 khz salta a Confirma mientras se detecte objeto
                    High HABILITA  'si no se detecta rafaga (objeto) apagamos ragaga
                     DelayUS 125
                
GoTo Inicio                  'Regresamos al Inicio
        
Apaga:
            Low ROJO         'Como no se detecto rafaga de 38 khz apagamos led ROJO y
            High VERDE       'Encendemos led Verde
               
GoTo Inicio

Mi teoría de operación:

Como se podrá apreciar, el circuito esta basado en en un LED Infrarojo Comun y corriente, que produce una ráfaga a 38 Khz utilizando la técnica PWM del propio microcontrolador y encendido/apagando por medio del PIN RB6; para poder "modular" el Infrarojo en comento.

Por otro lado tenemos un "clasico" receptor de infrarojos (a 38khz) que es muy utilizado en todo tipo de aparatos y que su salida, es conectado al microcontrolador a travez del pin RB7 y que por este medio podremos saber si existe la ráfaga de 38 khz. Esta Actividad es mostrada por medio de dos leds: Uno verde y otro rojo, que indicaran si hay presencia (rebote) o no de la rafaga de 38 KHZ.

Con este circuito he logrado desde unos centímetros hasta varios metros (5mts) con una estabilidad bastante buena y que depende de la resistencia en serie con el Led emisor infrarojo (he probado desde 1.2 kohms hasta 47 ohms) entre mas baja en ohms es la resistencia mas alcance tengo y viceversa.

Nota.- en un principio puede ser desconcertante la "sensibilidad" ya que, en mi caso, tuve que "aislar" el led transmisor del receptor para que la radiacion infraroja, no se ligara directamente entre los dos componentes. por lo tanto debe considerarse este punto. Yo coloque un cable de 50 cms al led infrarojo y lo puse bajo mi mesa de pruebas, usando la misma como aislante óptico.

Espero sus comentarios, es la primera versión, ya que mi intención es lograr mas estabilidad por software, en su momento haré las actualizaciones pertinentes....

Por lo pronto tengo algunas preguntas, o dudas, a los mas experimentados en el tema de infrarojos, ojala me las pueden despejar .

En el comienzo del proyecto, la señal PWM de 38 KHZ obtenida en el pin RB3/ccp1, la colocaba en el Diodo infrarojo y el otro pin del Led a tierra, y aunque tenia el transmisor muy cercas del receptor, no lograba establecer el enlace, sin embargo si Yo "conmutaba" manualmente el led, si que se hacia el enlace, pero por solo un minimo de tiempo, de tal suerte que quedaba en la misma situacion. ¿por que pasa esto? y ¿por que si volvía a "conmutar" las veces que quisiera de nuevo el LED, en las mismas veces, se establecía el enlace por un breve espacio de tiempo?

Para probar que el microncrolador, o el receptor estaba "Vivo", utilizando un transmisor de TV, si me daba el acuse debido los leds que puse para ese proposito. Por otro lado, utilizando mi multimetro en su modalidad de medidor de Frecuencia me daba los 38 khz exactos.

Por estas razones que expongo, me di a la tarea de conmutar por medio del microcontrolador al diodo infrarojo por medio del PIN RB6....

Les dejo un saludo y en verdad espero sus comentarios, ya que me tiene intrigado el asunto.
 

Adjuntos

  • IRDETECTOR.PDF
    23.5 KB · Visitas: 97
  • IRDETECTOR.rar
    20.1 KB · Visitas: 106
Última edición:
hola amigos ojala me puedan ayudar necesito medir la corriente que existe en un circuito y he pensaxo usar un micro y un lcd pero no se como realizar la medicion de corriente para poder incluirlo en la analoga del micro alguna idea que me puedan facilitar les agradeceria mucho
 
Que tal yo estoy en lo mismo, yo lo estoy haciendo con una resistencia shunt,en forma de bobina con alambre de cobre de calibre 14 mas o menos de unos 30 cm, para después aplicarla en el circuito y medir su voltaje (conociendo la resistencia de la bobina) y así obtener la corriente indirectamente.
Como la medición del voltaje en la bobina será muy pequeña, puedes implementar un par de OPAMPs.
 
hola si mal no te entiendo usas una bobina en lugar de una resistencia..esta es equivalente a 1ohm y luego la mides en el micro verdad....ahora te pregunto es aplicable a AC xq ese es mi cometido ademas no se si sea y xq no usar una resistencia en lugar de una bobina cual es el efecto si me puedes explicar por favor me seria de mucha ayuda
 
Si investigas sobre la resistencia shunt, te darás cuenta que son resistencias muy pequeñas que no afectan a la carga a la cual le vas a medir la corriente, propiamente la bobina es la resistencia shunt, para mi caso obtuve una resistencia de 0.00186 ohms aproximadamente, bueno habra que indagar un poco para ver como se puede aplicar a AC
 
Bueno, siguiendo con éste hilo del amperímetro, tengo un problema a la hora de medir, y es que la medición oscila tremendamente (en la realidad) y no sé por que oscila tan feo, las resistencias para las ganancias de los OPAMPs son potenciometros de precisión para reducir la distorsión de las ganancias, funciona con una resistencia shunt, y por cada 10mV en la Rshunt tengo 1V a la salida de los OPAMPs y por ende a la entrada de mi PIC, cuya Rshunt es muy baja y a la cual le mido el voltaje, para conocer después indirectamente la corriente, mi circuito y código lo adjunto:
 

Adjuntos

  • Amperimetro.rar
    241.4 KB · Visitas: 124
Última edición:
Bueno, siguiendo con éste hilo del amperímetro, tengo un problema a la hora de medir, y es que la medición oscila tremendamente (en la realidad) y no sé por que oscila tan feo
Intenta tomando varias muestras de la lectura, y luego obtén el valor promedio.
Para que entiendas cómo se hace, adjunto un ejemplo.

Espero te sirva.

Saludos.
 

Adjuntos

  • 16F887 ADC Promedio.rar
    19.9 KB · Visitas: 36
Última edición:
Atrás
Arriba