This is a update to Mister E's VB6 demo program, and firmware that uses Darrel's DT_HID260.pbp include file. It brings back some of the functions that went away with the HID update, and it adds a few more. It now transfers 10 bit A/D conversions to the PC, and it has a really low bandwidth mschart function. It also transfers the port info up to the computer in a single byte, and it's read by VB in bits. (It is hard to read bits with VB!) Ports are changed to match the Olimex PIC-USB-STK ( http://www.olimex.com/dev/pic-usb-stk.html ) . On the chart, it's a little over a second from left to right. By the way, if anyone knows how to keep the mschart from flickering as it is being redrawn, please let me know.


VB6 doesn't make it very easy to be sure you have include all the necessary files, so if you have issues, let me know. The code was made for a PIC18F4550 with a 20 mhz crystal. You will also need Darrel's DT_HID260 file from here: http://www.picbasic.co.uk/forum/show...0434#post80434
(Thanks Steve and Darrel for giving me the USB bug!)
Code:
'****************************************************************************
'* Name : USB_Demo_4_HID.pbp *
'* Author : Walter Dunckel ScaleRobotics using Darrels example as template*
'* Notice : Copyright (c) 2011 *
'* Date : 1/13/2011 *
'* Version : 1.1 *
'* Notes : Added Darrel's text example *
'* : *
'****************************************************************************
;--- if you un-comment these, you must comment the ones in the .inc file ---
ASM ; 18F2550/4550, 20mhz crystal
__CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
__CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
__CONFIG _CONFIG3H, _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ENDASM
'add if using Microchip's HID Bootloader
'DEFINE LOADER_USED 1
'DEFINE RESET_ORG 1000h ' For Microchip USB Bootloader
;ASM ; 18F13K50/14K50 Only 12mhz crystal can be used for USB
; __CONFIG _CONFIG1L, _CPUDIV_NOCLKDIV_1L & _USBDIV_OFF_1L
; __CONFIG _CONFIG1H, _FOSC_HS_1H & _PLLEN_ON_1H & _PCLKEN_ON_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
;
; ;added
; __CONFIG _CONFIG2H, _WDTEN_ON_2H & _WDTPS_512_2H
; __CONFIG _CONFIG3H, _MCLRE_ON_3H
; __CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _BBSIZ_OFF_4L & _XINST_OFF_4L
;ENDASM
DEFINE OSC 48
clear
PortA = %00000000
TrisA = %00000001
PortB = %00000000
TrisB = %11110100 'make pushbuttons inputs for PIC-USB-STK
'TrisB = %00010000 'for 18k50
PortC = %00000000
TrisC = %00000000
TrisD = %00000000
CMCON = 7
'CM1CON0 = 7 'for 18f14k50
'CM2CON0 = 7
' CCP/PWM
' -------
CCP1CON = %00001100 ' CCP1, PWM mode
CCP2CON = %00001100 ' CCP2, PWM mode
PR2 = 249 ' 12khz PWM Freq
T2CON = %00000101 ' TMR2 on, prescaler 1:4
;--- Setup Interrupts ------------------------------------------------------
INCLUDE "DT_INTS-18.bas" ; Base Interrupt System
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler USB_Handler
endm
INT_CREATE ; Creates the interrupt processor
endasm
;--- Setup USB -------------------------------------------------------------
INCLUDE "DT_HID260.pbp"
DEFINE USB_VENDORID 6017
DEFINE USB_PRODUCTID 2000
DEFINE USB_VERSION 1
DEFINE USB_VENDORNAME "ScaleRobotics"
DEFINE USB_PRODUCTNAME "Cheap-Scope"
DEFINE USB_SERIAL "001"
DEFINE USB_INSIZE 8 ;was 32 IN report is PIC to PC (8,16,32,64)
DEFINE USB_OUTSIZE 16 ; OUT report is PC to PIC
DEFINE USB_POLLIN 10 ; Polling times in mS, MIN=1 MAX=10
DEFINE USB_POLLOUT 10
; --- Each USB LED is optional, comment them if not used ----
DEFINE USB_LEDPOLARITY 1 ; LED ON State [0 or 1] (default = 1)
'DEFINE USB_PLUGGEDLED PORTD,0 ; LED indicates if USB is connected
'DEFINE USB_TXLED PORTD,2 ; " " data being sent to PC
'DEFINE USB_RXLED PORTD,1 ; " " data being received from PC
OutCount VAR WORD : OutCount = 0
Value VAR word 'analog result from AN0
Value2 var word 'analog result from AN11
X VAR WORD
counter var byte
Duty1 var word EXT ' make them available
Duty2 var byte EXT
smallvalue var byte
;--- Setup ADC -------------------------------------------------------------
DEFINE ADC_BITS 10 ; Number of bits in ADCIN result
ADCON2.7 = 1 ; right justify (Change this if ADFM in diff register)
'ANSEL = %00000000 'for 18f14k50
'ANSELH = %00000100 'for 18f14k50
ADCON0 = %00000001 ' turn on a/d AN0
;--- The Main Loop ---------------------------------------------------------
pause 2000 'wait for connection
ARRAYWRITE USBTXBuffer, ["USB Demo"] 'show text example
GOSUB WaitToSend
Main:
FOR X = 0 to 2 ; Check for incomming USB data while pausing
@ ON_USBRX_GOSUB _HandleRX
PAUSE 1
NEXT X
ADCin 8, value2
@Duty1=_USBRXBuffer+1
@Duty2=_USBRXBuffer+3
counter = counter +1
ADCIN 0, Value
ARRAYWRITE USBTXBuffer,[portb,counter,value.highbyte,value.lowbyte,Value2.highbyte,Value2.lowbyte,0,0]
CCP1CON.5=DUTY1.1 ' load CCP1 duty value
CCP1CON.4=DUTY1.0 ' with Duty1
CCPR1L=DUTY1>>2
CCP2CON.5=DUTY2.1 ' load CCP2 duty value
CCP2CON.4=DUTY2.0 ' with Duty1
CCPR2L=DUTY2>>2
portd = usbrxbuffer[0]
'IF Plugged THEN GOSUB DoUSBOut ; only send when USB is connected
gosub SendIfReady
GOTO Main
;---- This just sends the received packet back to the PC -------------------
HandleRX:
ARRAYWRITE USBTXBuffer,[STR USBRXBuffer\USBBufferSizeRX]
return
SendIfReady:
IF Plugged AND TX_READY THEN DoUSBOut
RETURN
WaitToSend:
WHILE Plugged and !TX_READY : WEND
IF TX_READY THEN GOSUB DoUSBOut
RETURN
Edit:
Ok, now looking at Darrel's post 221 http://www.picbasic.co.uk/forum/show...0611#post80611 , he already made the program compatible with most of the original functions for the 18F4550. So I (also) lifted his code to transfer text to the PC. However, I only do this at power up, so I don't slow the analog transfers down.
Bookmarks