USB on 18F27J53. Closer but still struggling with this.


Closed Thread
Results 1 to 14 of 14

Hybrid View

  1. #1
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default Re: USB on 18F27J53. Closer but still struggling with this.

    Here's one that enumerates, and doesn't need a crystal. I can't get it to work with 2.60 and I don't know why. But it does work on PBP 3.0. This is for a 18F47J53, and I only quickly changed the registers to match, so it may need some work for your 27J53, but hopefully it will get you started. You will need Darrel's DT_HID260 from here: http://www.picbasic.co.uk/forum/show...0434#post80434

    And you will need DT_INTS-18.bas which you can get from here: http://darreltaylor.com/DT_INTS-18/home.html

    And you will need the executable or the Visual Basic interface: http://www.picbasic.co.uk/forum/show...0334#post30334

    Code:
    '***************************************************************************
    '*  Name    : USBdemo_DTHID.pbp                                            *
    '*  Author  : Steve Monfette/Darrel Taylor                                 *
    '*  Date    : 11/9/2009                                                    *
    '*  Version : 2.0                                                          *
    '*  Notes   : This is a re-creation of mister-e's USBdemo for DT_HID       *
    '*          : Meant to work with mister-e's GUI                            *
    '***************************************************************************
    
    ; 18F47J53, no crystal - 8 mhz internal
    #CONFIG
        config WDTEN = OFF          ;//WDT disabled (enabled by SWDTEN bit)
        CONFIG PLLDIV = 2           ;//Divide by 2 (8 MHz internal oscillator input)
        config STVREN = ON          ;  //stack overflow/underflow reset enabled
        config XINST = OFF          ;//Extended instruction set disabled
        config CPUDIV = OSC1        ;//No CPU system clock divide
        config CFGPLLEN = ON    ;        //turn on PLL config   
        config CP0 = OFF        ;    //Program memory is not code-protected
        config OSC = INTOSCPLL;HSPLL      ;    //HS oscillator, PLL enabled, HSPLL used by USB
        config FCMEN = OFF      ;    //Fail-Safe Clock Monitor disabled
        config IESO = OFF       ;    //Two-Speed Start-up disabled
        config WDTPS = 32768    ;    //1:32768
        config DSWDTOSC = INTOSCREF ;//DSWDT uses INTOSC/INTRC as clock
        config RTCOSC = T1OSCREF    ;//RTCC uses T1OSC/T1CKI as clock
        config DSBOREN = OFF        ;//Zero-Power BOR disabled in Deep Sleep
        config DSWDTEN = OFF        ;//Disabled
        config DSWDTPS = 8192       ;//1:8,192 (8.5 seconds)
        config IOL1WAY = OFF        ;//IOLOCK bit can be set and cleared
        config MSSP7B_EN = MSK7     ;//7 Bit address masking
        config WPFP = PAGE_1        ;//Write Protect Program Flash Page 0
        config WPEND = PAGE_0       ;//Start protection at page 0
        config WPCFG = OFF          ;//Write/Erase last page protect Disabled
        config WPDIS = OFF          ;//WPFP[5:0], WPEND, and WPCFG bits ignored 
    #ENDCONFIG
    
    DEFINE OSC 48
    CLEAR
    
    ;--- 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  "Mister E/DT"
    DEFINE USB_PRODUCTNAME "USBDemo"
    DEFINE USB_SERIAL      "001"
    DEFINE USB_INSIZE      8    ;  IN report is PIC to PC (8,16,32,64)
    DEFINE USB_OUTSIZE     8    ; OUT report is PC to PIC
    DEFINE USB_POLLIN      10   ; Polling times in mS, MIN=1 MAX=10
    DEFINE USB_POLLOUT     10
    
    ; --- Each USB status LED is optional, comment them if not used ------------
    ; --- They can be assigned to any pin, and no further action is required --- 
    DEFINE USB_LEDPOLARITY 1       ; LED ON State [0 or 1]  (default = 1)
    ;DEFINE USB_PLUGGEDLED  PORTB,7 ; LED indicates if USB is connected
    ;DEFINE USB_TXLED       PORTB,6 ;  "      "     data being sent to PC
    ;DEFINE USB_RXLED       PORTB,5 ;  "      "     data being received from PC
    
    
    ;--- Variables -------------------------------------------------------------
    Value0      VAR  WORD
    Value1      VAR  WORD
    X           VAR  WORD
    DUTY1       VAR  WORD
    DUTY2       VAR  WORD
    Old_PORTA   VAR  BYTE
    New_PORTA   VAR  BYTE
    
    ;--- Setup ADC -------------------------------------------------------------
    DEFINE ADC_BITS 8  ; Number of bits in ADCIN result
    
    ;--- Initialize ------------------------------------------------------------
    CCPR1L = 0
    CCPR2L = 0
    CCP1CON =   %00001100       ' CCP1, PWM mode
    CCP2CON =   %00001100       ' CCP2, PWM mode
    PR2     =   249             ' 0-1000 duty range
    T2CON   =   %00000101       ' TMR2 on, prescaler 1:4
    TRISA = %00000011
    TRISB = 0
    OUTPUT PORTC.1
    OUTPUT PORTC.2
        
    ADCON1.7 = 0       ; left justify    (Change this if ADFM in diff register)
    ADCON0 = %0001     ; AN0/AN1 Analog
    
    ;--- The Main Loop ---------------------------------------------------------
    Main:
        FOR X = 0 to 1000           ; Check for incomming USB data while waiting
    @       ON_USBRX_GOSUB  _HandleRX
            PAUSE 1
        
            New_PORTA = PORTA                ; Check PORTA pins
            IF New_PORTA != Old_PORTA THEN
                Old_PORTA = New_PORTA
                ARRAYWRITE USBTXBuffer, ["USB Demo"]
                GOSUB WaitToSend
                ARRAYWRITE USBTXBuffer, [Value0, Value1, PORTA.2, _
                                         PORTA.3, PORTA.4, PORTA.5,0,0]
                GOSUB WaitToSend
            ENDIF
        NEXT X
        
        ADCIN 0, Value0            ; Send A/D about once/sec
        ADCIN 1, Value1
        ARRAYWRITE USBTXBuffer, [Value0, Value1, PORTA.2, _
                                 PORTA.3, PORTA.4, PORTA.5,0,0]
        GOSUB SendIfReady
    GOTO Main
    
    ;--- Send Data if Plugged and ready, otherwise discard ---------------------
    SendIfReady:
        IF Plugged AND TX_READY THEN DoUSBOut
    RETURN
    
    ;--- Wait till Ready to send of until unplugged ----------------------------
    WaitToSend:
        WHILE Plugged and !TX_READY : WEND
        IF TX_READY THEN GOSUB DoUSBOut
    RETURN
    
    ;---- Receive incoming data PORTB LEDS and CCP PWM dutycycle ---------------
    HandleRX:
        ARRAYREAD  USBRXBuffer,[PORTB, DUTY1.LowByte, DUTY1.HighByte, _
                                        DUTY2.LowByte, DUTY2.HighByte]
        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 Duty2
        CCPR2L=DUTY2>>2         '
    return
    Last edited by ScaleRobotics; - 10th August 2011 at 16:29.

  2. #2
    Join Date
    Mar 2005
    Location
    Cocoa, Florida
    Posts
    44


    Did you find this post helpful? Yes | No

    Default Re: USB on 18F27J53. Closer but still struggling with this.

    Magic, thank you. Upgraded to PBP3 and it all works on 18F27J53.
    CCP1/2 had to go to CCP4/5/6, and now we have three PWMs over USB (which was the object of using this device).

    As getting USB working on 18F27J53 involves collecting various files and then some tweaking I'll convert the USB demo for this PIC and put them in one place.
    (One day soon... )

    Thanks again for all your help.

Members who have read this thread : 0

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts