USBDemo, something to learn USB a little bit


Closed Thread
Results 1 to 40 of 279

Hybrid View

  1. #1
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default Now working except for RA4 pushbutton??

    Quote Originally Posted by Darrel Taylor View Post
    Sweet!
    Doesn't matter, the VB program will pick up when it connects, and sometimes when it disconnects.
    <br>
    Darrell, thanks to your help I now have the USBDemo running on my EasyPic6 and everything appears to work except an annomaly with the RA4 pushbutton. When I initially power up, the VB6 window shows all four pushbutton lights on (GREEN). When I push each of the RA2-RA5 pushbuttons on the EasyPic6, the lights go temporarily out while the pushbutton is depressed, which is expected. However, when RA4 is released it stays unlit, unlike the other pushbuttons. Then if I power down and power backup or if I reset, it is lit again along with the others, and the sequence described above happens again if I depress the buttons.
    I don't understand why the RA4 pushbutton doesn't operate like the others as a momentary switch. I checked the code and it appears it should. Is there some reason for this? I thought it might even be a problem with my EasyPic6, but the RA4pushbutton is operating normally in other codes I have that use it on the EASYPIC6. I didn't do anything about changing the capacitors on the EasyPic6 that

    I also notice that the RX window continuously shows 10 line entries of "USBDemo" and when you click the Clear RX button, it immediately repopulates the RX window with the same 10 entries. I am trying to understand this and presume that these entries are due to the TMR0 interrupt executing every 100 usec to run the goto at DoUSBService, which reloads the TMR0. I presume each time this reload takes place and the TMR0 overflows, a USBDemo line appears in the RX window. Am I understanding what is happening???

    I am TOTALLY impressed with this code and the functionality Steve created in this demo! He is to be highly commended for sharing this since it helps people (like me) to finally understand at a basic level how to incorporate a USB interface into our applications.
    Now I have to figure out how to modify it for a specific application that operates this way...am explaining in hopes you or someone else on this thread will have some ideas:
    1) the Main code wakes up from SLEEP mode every night at midnight and executes 6-12 ultrasonic range finder measurements which are averaged and the average result is logged into EEPROM, and then it goes back to SLEEP till next midnight.
    2) This data logging occurs every night at midnight. If at any time a USB cable is plugged into the USB connector (which will only happen once every 30 days to download the 30 averaged range measurements from EEPROM), it must recognize this as an interrupt to the normal data logging application and permit the User on the other end of the USB interface (a laptop) to recover the 30 averaged range measurements from EEPROM to the laptop and export them into a spreadsheet.
    Now that I have the USB interface working, I am struggling with how best to support this scenario with an interrupt that recognizes when the USB cable is connected. I thought I might use an RBIE: RB Port Change Interrupt in the MCU code that would be created by the laptop User when one of the RBx boxes in the VB6 User Interface is clicked. Do you have any better suggestions as to how to do this??

    Would also appreciate any pointers you might have to the best approach for a midnight to midnight interrupt without having to add a RTC to my application. I thought a TMR1 approach with 24 hr delays might work for this, but have doubts that it would keep time accuracy well enough to always happen exactly at midnight. Any ideas are appreciated??

  2. #2
    Join Date
    Nov 2009
    Location
    Australia
    Posts
    10


    Did you find this post helpful? Yes | No

    Default Problems with ASM

    G'day
    Have 2.60 PBP and did the latest setup etc as per the last few posts.
    I now get the following errors when compiling.

    ERROR: Unable to execute mpasmwin.Error[118] C:\PBP\USBDEMO260\USBDEMO.ASM 413 : Overwriting previous address contents (0000)

    Error[118] C:\PBP\USBDEMO260\USBDEMO.ASM 413 : Overwriting previous address contents (0001)
    etc.

    Any ideas,
    Tks

  3. #3
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by OzGrant View Post
    I now get the following errors when compiling.
    ERROR: Unable to execute mpasmwin.
    Error[118] C:\PBP\USBDEMO260\USBDEMO.ASM 413 : Overwriting previous address contents (0000)
    Error[118] C:\PBP\USBDEMO260\USBDEMO.ASM 413 : Overwriting previous address contents (0001)
    etc.
    OzGrant,
    See this thread about how to fix the configs ...
    http://www.picbasic.co.uk/forum/show...=6775#post6775

    jellis00,
    Uno momento ...
    <br>
    DT

  4. #4
    Join Date
    Nov 2009
    Location
    Australia
    Posts
    10


    Did you find this post helpful? Yes | No

    Default Asm ok

    Darrel,
    Tks it of course fixed the error. I should spend more time searching the forum, that trying to solve the problem, and then by default put up a newbee sort of question. Will now wait for my Picstart Plus upgrade kit so I can burn the 18F4550 and have even more fun. Will now search the forum before I ask my next question "does the mcHID.dll work with VB5"
    Tks again.
    Grant

  5. #5
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default Here are the 18F4550 _CONFIG settings

    [QUOTE=Darrel Taylor;80423]OzGrant,
    See this thread about how to fix the configs ...
    http://www.picbasic.co.uk/forum/show...=6775#post6775

    Attached .txt document is a list of the _CONFIG settings for the 18F4550 from its corresponding P18F4550.INC file in MPLAB folder. It is always a good idea to have this list handy when setting up code for a new program.

  6. #6
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default This time with the list

    [QUOTE=jellis00;80428
    Attached .txt document is a list of the _CONFIG settings for the 18F4550 from its corresponding P18F4550.INC file in MPLAB folder.QUOTE]
    Forgot to attach with previous post.
    Attached Files Attached Files

  7. #7
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default Try this

    Quote Originally Posted by OzGrant View Post
    Error[118] C:\PBP\USBDEMO260\USBDEMO.ASM 413 : Overwriting previous address contents (0001)
    Make sure you commented out the _config statements in the 18F4550.inc file and resaved it. If you don't the _config statements in the USBDemo code will give this type of error. I don't have any ideas as to the other error...sorry!

    What is your development environment?....editor (MicroCode Studio, MPALAB or what?)...assembler (MPASM or PM?).....programmer (PicKit2, EasyPic or what?)

  8. #8
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    USBDemo was a good starting point for me, Thanks Steve.
    But there are several problems that don't coincide with what you want.

    1) When you disconnect the cable, it will still try to send data, causing the PIC to enter a Locked Loop, waiting to send to an inactive bus.

    2) You really have no indication that anything was received.
    If there's no incoming data, it just goes ahead and sets the dutycycles again, using the old data left over in the buffer.

    3) There's no indication of when it's connected, when something was received or when it's ok to send.

    4) With the 1mS servicing from Timer0, it's a bit sluggish when enumerating, overall data rates suffer and it uses TMR0 when it doesn't need to.

    5) EasyHID no longer works with 2.60, so it's difficult to make changes to the descriptors.

    6) I don't use Visual Basic, so I can't update the PC program.
    My main language is Delphi, and I stopped using mchid.dll a long time ago.

    I would have worked with Steve to build a better demo, but alas, he's not here.
    <hr>
    I'm thinking it's time to unveil DT_HID.
    It's the PIC side of USB, made ... yes, I'll say it ... EASY!

    The PC side is still up to you, but it even works with Steve's original VB prog, so that, or any other VB/Delphi program from EasyHID can be used as a "template".

    I'm not even going to tell you how it works.
    I defy you to not understand what it does.
    Up until you ask a question.

    Warning, the example is setup for 13K50/14K50.
    Comment the configs, and uncomment the other configs (if needed).
    Change ANSELs to ADCON1 (if needed).

    Also note: This is for PBP 2.60 only.
    BasicUSB.pbp is the test program.

    Don't shoot me, I can't even play a piano ...
    Attached Files Attached Files
    DT

  9. #9
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Question Compiles and programs but USB doesn't connect

    Quote Originally Posted by Darrel Taylor View Post
    USBDemo Warning, the example is setup for 13K50/14K50.
    Comment the configs, and uncomment the other configs (if needed).
    Change ANSELs to ADCON1 (if needed).
    I made these changes to the BasicUSB.pbp code for use with 18F4550 as you can see in my listed code below. It compiles OK into a .hex file which I then programmed into the 18F4550 using the PicFlash programmer in my EasyPic6. By all appearances everything was OK until I turned on power to the MCU with Steve's VB6 program running....at that point the USB connection was not recognized and nothing else happened. Can you look at this code and tell me what is wrong. I made shure both the include files were in the PBP folder and since it compiled I interpreted that to mean the INCLUDES were OK. Since I was able to get Steve's code to run in my EasyPic6 I believe that eliminates the VB6 code as the problem, so need to figure out how to debug yours and when it doesn't connect or do anything visible, I don't know how to debug it.

    I'm not even going to tell you how it works.
    I defy you to not understand what it does.
    Up until you ask a question.
    I studied the code in both the test program and in DT__HID.bas and unfortunately I guess I don't understand what it does since I can't get it to work. I need your HELP.
    Code:
    '**********************************
            '*  Name    : BasicUSB.pbp        *
            '*  Author  : Darrel Taylor       *
            '*  Notice  : Copyright (c) 2009  *
            '*  Date    : 7/23/2009           *
            '*  Version : 1.0                 *
            '*  Notes   :                     *
            '*          :                     *
            '**********************************
    ;--- if you un-comment these, you must comment the ones in the .inc file ---
    ASM  ; 18F2550/4550, 8mhz crystal as used in EasyPic6
       __CONFIG    _CONFIG1L, _PLLDIV_2_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
    
    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
    ENDASM
    
    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  "Darrel Taylor"
    DEFINE USB_PRODUCTNAME "DT_HID"
    DEFINE USB_SERIAL      "001"
    DEFINE USB_INSIZE      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  PORTB,0 ; LED indicates if USB is connected
    DEFINE USB_TXLED       PORTC,2 ;  "      "     data being sent to PC
    DEFINE USB_RXLED       PORTC,1 ;  "      "     data being received from PC
    
    OutCount    VAR  WORD : OutCount = 0
    Value       VAR  WORD
    X           VAR  WORD
    
    ;--- Setup ADC -------------------------------------------------------------
    DEFINE ADC_BITS 10  ; Number of bits in ADCIN result
    ADCON2.7 = 1        ; right justify    (Change this if ADFM in diff register)
    ADCON1 = %00010000  ; AN4/RC0 Analog
    'ANSELH = 0
    
    ;--- The Main Loop ---------------------------------------------------------
    Main:
        FOR X = 0 to 1000           ; Check for incomming USB data while pausing
    @     ON_USBRX_GOSUB  _HandleRX
          PAUSE 1
        NEXT X
        
        ADCIN 4, Value
        OutCount = OutCount + 1
        ARRAYWRITE USBTXBuffer,["AN0=",DEC Value," -",DEC OutCount,"  "]
        IF Plugged THEN GOSUB DoUSBOut     ; only send when USB is connected
    GOTO Main
    
    ;---- This just sends the received packet back to the PC -------------------
    HandleRX:
        ARRAYWRITE USBTXBuffer,[STR USBRXBuffer\USBBufferSizeRX]
    return

  10. #10
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Apparently, I missed the CONFIG2L.
    I always miss that one, weird ...
    Code:
       __CONFIG    _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _VREGEN_ON_2L
    And try the HIDmonitor program from the .zip

    When I said it works with Steve's original program, well it will, but it's not set up to send/receive the same analog values and switches/LED's. With HIDmonitor you should see when it connects and what data it's sending.

    hth,
    DT

  11. #11
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default Made config change..compiles, nothing happening

    [QUOTE=Darrel Taylor;80452]Apparently, I missed the CONFIG2L.
    I always miss that one, weird ...
    Code:
       __CONFIG    _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _VREGEN_ON_2L
    I made this _CONFIG change in the code. Compiles/assembles OK and appears to program the 18F4550 OK.

    And try the HIDmonitor program from the .zip

    When I said it works with Steve's original program, well it will, but it's not set up to send/receive the same analog values and switches/LED's. With HIDmonitor you should see when it connects and what data it's sending.
    Tried both your HIDmonitor and Steve's VB6 routine after programming and power/resetting the 18F4550 . Although I hear a low "click" and see the USB icon appear in my WINDOWS tray when the USB cable is connected from the PC, I don't see any indication of the connection on the HIDmonitor or on Steve's VB6. And the USB icon disappears out of the tray about 10 secs after the next keyboard key or mouse button is pressed with no audible "click". Nor do I hear another "click" or see any visual indication of disconnect when USB cable is disconnected. Nor is there any indication of any communications on either the HIDmonitor or the VB6 window.

    Do you have any suggestions how I might monitor what is happening in the code while running so I can debug? I don't have a usable ICD.
    Last edited by jellis00; - 5th November 2009 at 18:22. Reason: Add sentence

  12. #12
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,159


    Did you find this post helpful? Yes | No

    Default Re: USBDemo, something to learn USB a little bit

    Quote Originally Posted by Darrel Taylor View Post
    ...
    Also note: This is for PBP 2.60 only ...
    Someone found a workaround for PBP 3:

    http://www.picbasic.co.uk/forum/show...599#post126599

    Robert

  13. #13
    Join Date
    Mar 2009
    Location
    Colorado
    Posts
    378


    Did you find this post helpful? Yes | No

    Default Solved problem! Would still like answer to other questions.

    Quote Originally Posted by jellis00 View Post
    I don't understand why the RA4 pushbutton doesn't operate like the others as a momentary switch. I checked the code and it appears it should. Is there some reason for this?
    I also notice that the RX window continuously shows 10 line entries of "USBDemo" and when you click the Clear RX button, it immediately repopulates the RX window with the same 10 entries. I am trying to understand this...
    The problem resolved itself and I don't know exactly why. The only changes I made were to make sure the pull-down resistors were enabled properly and to connect the RA0 pin to the potentiometer for the Analog A/D input. Either as a result of these changes or some other unknown reason, the annomaly of the RA4 pushbutton and the "USBDemo" messages in the RX window went away. I see now that the "USBDemo messages are not a result of the TMR0 reloads but only appear when the pushbuttons are pressed and the RX window clears normally now and stays clear until the next pushbutton.
    Even though these problems are solved, I would still appreciate any inputs/ideas regarding my other questions. It begins to look like I can achieve my intentions for detecting USB connection by implementing the "self-power only" circuit as shown in Figure 17-11 of the 18F4550 data sheet. Will try it and report in later post.

Similar Threads

  1. Bits, Bytes Words and Arrays
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 24
    Last Post: - 14th June 2016, 07:55
  2. How to receive stream of bytes using PIC USART
    By unifoxz in forum mel PIC BASIC Pro
    Replies: 34
    Last Post: - 20th June 2009, 10:38
  3. Replies: 9
    Last Post: - 31st July 2008, 08:56
  4. PICBasic newbie problem
    By ELCouz in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 12th February 2008, 00:55
  5. USART interrupt not interrupting right
    By Morpheus in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 6th March 2005, 01:07

Members who have read this thread : 1

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