El código, lo consegui con el EasyHID, cuando lo compilo tal cual no sale errores, cuando quiero programarlo con el PICKIT me sale una advertencia en fondo amarillo que dice …
Warning: Some configuration words not in hex file.
Ensure default values above righ are aceptable.
Aquí el código, el resto del programa lo adapte al voltimetro de Neoteo el descriptor es mio.
Por otra parte dicen que por defecto viene configurado para 20MHz en el Proton? Es eso cierto?
Uso el compilador PROTON IDE versión 2.0.1.0
'****************************************************************
'* Name : ADC SORIATEL *
'* Author : Xxxx X. Xxxxxx *
'* Notice : Copyright (c) 2013 - SORIATEL *
'* : All Rights Reserved *
'* Date : 25/07/2013 *
'* Version : 1.0 *
'* Notes : TEST HID *
'* : *
'****************************************************************
' SELECCIONAMOS EL PIC Y EL CRISTAL
Device = 18F2550
Xtal 48
Adin_Res 10 'AJUSTAMOS A UNA RESOLOCIÓN DE 10 BITS (0-5V = 0 - 1023)
Adin_Tad FRC 'ELEJIMOS EL OSCILADOR RC INTERNO PARA LAS MUESTRAS DEL ADC
Adin_Stime 100 'PERMITIMOS UNA RECARGA DEL ADC CADA 100uS
' EL ARCHIVO "DESCRIPTOR",ALOJADO EN EL MISMO DIRECTORIO QUE ESTE ARCHIVO .BAS
USB_Descriptor = "ADC_SORIATELDESC.inc"
' COMENZAMOS CON LA VARIABLES
Dim TENSION As ADRESL.Word ' \
Dim VALOR As Word ' \
Dim VOLT As Byte ' / VARIABLES PARA EL CONVERSOR ADC
Dim MILI As Byte ' /
Dim A As Byte 'VARIABLE PARA ACUMULAR MEDICIONES Y PROMEDIAR
Dim B As Byte 'VARIABLE PARA CONTAR ENVÍOS
' USB Buffer...
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX = 8 'CANTIDAD DE BYTES QUE ENTRAN EN EL BUFFER
Symbol USBBufferSizeRX = 8
Dim USBBuffer[USBBufferSizeMax] As Byte
' BANDERAS DEL SISTEMA.
Dim PP0 As Byte System ' STATUS DEL USBPOLL
Symbol CARRY_FLAG = STATUS.0 ' EN ESTADO ALTO CUANDO EL PIC NO TIENE EL CONTROL SOBRE EL BUFFER
Symbol ATTACHED_STATE = 6 ' CUANDO SE "ENGANCHA" EL BUS USB
'SETEO DEL ADC Y EL PUERTO A (AN0 SOLAMENTE ES ANALÓGICA)
TRISA.0 = 1 ' PORTA.0 ES UNA ENTRADA
ADCON1 = %10001110 ' PORTA.0 ES ANALÓGICA
ADCON2 = %10000000 ' EL RESULTADO DEL ADC JUSTIFICADO A LA DERECHA
' ************************************************************
' * LAZO PRINCIPAL DEL PROGRAMA - RECUERDA, TU DEBES MANTENER*
' * LA CONEXIÓN USB SIEMPRE "VIVA" LLAMANDO A LAS RUTINAS *
' * USBPoll, USBIn or USBOut CADA POCOS MILISEGUNDOS *
' ************************************************************
GoSub AttachToUSB
ProgramLoop:
For A = 1 To 20 'ARMO UN CONTADOR DE 20 EVENTOS PARA OBTENER
TENSION = ADIn 0 'MUCHAS MEDICIONES Y PROMEDIARLAS
VALOR = VALOR + TENSION 'PARA OBTENER UN VALOR MÁS ESTABLE
USBPoll 'ADEMÁS SE COLOCA EN EL HARD UN CAPACITOR DE 10uF
Next 'EN LA ENTRADA AN0 (A ENE CERO)
VALOR = VALOR / 20
VALOR = 489 * (TENSION / 10) 'ARMO EL RESULTADO PARA QUE 1023 SEA = A 5VOLTS
VOLT = VALOR / 10000 'SEPARO LOS VOLTS
MILI = (VALOR // 10000) / 100 'SEPARO LOS MILIVOLTS
USBBuffer[0] = 0 'EL PRIMER BYTE ES DE REPORTE DE CONEXIÓN
USBBuffer[1] = VOLT 'COLOCO LOS VOLTIOS EN EL BUFFER
USBBuffer[2] = MILI 'COLOCO LOS MILIVOLTIOS EN EL BUFFER
GoSub DoUSBOut 'TRANSMITO
DelayMS 1
GoTo ProgramLoop 'REINICIO EL CICLO DE MEDICIÓN INDEFINIDAMENTE
' ************************************************************
' * RUTINA DE RECEPCIÓN DE DATOS (NO USADA) *
' ************************************************************
DoUSBIn:
USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
Return
' ************************************************************
' * RUTINA DE TRANSMISIÓN DE DATOS *
' ************************************************************
DoUSBOut:
USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
Return
' ************************************************************
' * ESPERA HASTA QUE EL USB SE CONECTE *
' ************************************************************
AttachToUSB:
Repeat
USBPoll
Until PP0 = ATTACHED_STATE
Return
'*****************************************************************
Lo que le modifique fue esto…
Cristal de 20MHz:
Nota: En ProtonIDE, si no declaras el valor del cristal, por defecto lo compila para uno de 20Mhz., entonces no haría falta declararlo si vas a usar esa frecuencia. De todas formas la configuración es tal como lo ves y puede servirte de ejemplo para modificar otros "fuses" si en tu proyecto fuera necesario.
@CONFIG_REQ
@PLL_REQ
@__config config1l, PLLDIV_5_1 & CPUDIV_1_1 & USBDIV_2_1
@__config config1h, FOSC_HSPLL_HS_1
@WATCHDOG_REQ
@__config config2h, WDT_OFF_2 & WDTPS_128_2
@DEBUG_REQ
@__config config4l, LVP_OFF_4 & ICPRT_OFF_4 & XINST_OFF_4 & DEBUG_OFF_4
@__config config3h, PBADEN_OFF_3
Extracto de:
https://sites.google.com/site/proyectosroboticos/encoder/encoder-por-software/pic-encoder-usb/configuracion-del-cristal-para-18fxx5x-con-USB