LAB-XUSB Experimenter Board help


Closed Thread
Results 1 to 20 of 20

Hybrid View

  1. #1
    Join Date
    Jan 2010
    Posts
    88

    Default LAB-XUSB Experimenter Board help

    Hello,

    I bought the following product and am trying to run a sample program on it provided by their website. I have a PIC16F874A installed and can't seem to get the sample programs to work. All I get is a single row of solid blocks on the LCD.

    Here is the original code:
    Code:
    ' PICBASIC PRO program to display key number on LCD
    
    ' Define LOADER_USED to allow use of the boot loader.
    ' This will not affect normal program operation.
    Define	LOADER_USED	1
    
    ' RESET_ORG can be set to move the BASIC program out of the way
    ' of any boot loader running from location 0, such as the
    ' Microchip USB boot loader
    'Define	RESET_ORG	800h
    
    Define	OSC	48		' Core is running at 48MHz
    
    ' Define LCD connections
    Define  LCD_DREG        PORTD
    Define  LCD_DBIT        4
    Define  LCD_RSREG       PORTE
    Define  LCD_RSBIT       0
    Define  LCD_EREG        PORTE
    Define  LCD_EBIT        1
    
    
    ' Define program variables
    col     var     byte            ' Keypad column
    row     var     byte            ' Keypad row
    key     var     byte            ' Key value
    
    
            INTCON2.7 = 0		' Enable PORTB pullups
            ADCON1 = 15		' Make PORTA and PORTE digital
            Low PORTE.2             ' LCD R/W low (write)
            Pause 100               ' Wait for LCD to start
    
            Lcdout $fe, 1, "Press any key"  ' Display sign on message
    
    loop:   Gosub getkey            ' Get a key from the keypad
            Lcdout $fe, 1, #key     ' Display ASCII key number
            Goto loop               ' Do it forever
    
    
    ' Subroutine to get a key from keypad
    getkey:
            Pause 50                ' Debounce
    
    getkeyu:
            ' Wait for all keys up
            PORTB = 0               ' All output pins low
            TRISB = $f0             ' Bottom 4 pins out, top 4 pins in
            If ((PORTB >> 4) != $f) Then getkeyu    ' If any keys down, loop
    
            Pause 50                ' Debounce
    
    getkeyp:
            ' Wait for keypress
            For col = 0 to 3        ' 4 columns in keypad
                    PORTB = 0       ' All output pins low
                    TRISB = (dcd col) ^ $ff ' Set one column pin to output
    		Pauseus 1
                    row = PORTB >> 4        ' Read row
                    If row != $f Then gotkey        ' If any keydown, exit
            Next col
    
            Goto getkeyp            ' No keys down, go look again
    
    gotkey: ' Change row and column to key number 1 - 16
            key = (col * 4) + (ncd (row ^ $f))
            Return                  ' Subroutine over
    
            End
    Because PBP3 doesn't like it using the instruction Loop as a label, I changed it to Looper. Also changed INTCON2.7 = 0 to OPTION_REG.7 = 0 for the 874A and changed the define osc 48 to define osc 20.

    I am new to this type of code and find it difficult to read, so the problem doesn't stand out for me. What I'm left with is this:

    Code:
    ;----[16F874A Hardware Configuration]-------------------------------------------
    #IF __PROCESSOR__ = "16F874A"
      #DEFINE MCU_FOUND 1
    #CONFIG
    cfg = _XT_OSC                 ; XT oscillator
    cfg&= _WDT_OFF                ; WDT disabled
    cfg&= _PWRTE_OFF              ; PWRT disabled
    cfg&= _BODEN_OFF              ; BOR disabled
    cfg&= _LVP_OFF                ; RB3 is digital I/O, HV on MCLR must be used for programming
    cfg&= _CPD_OFF                ; Data EEPROM code protection off
    cfg&= _WRT_OFF                ; Write protection off; all program memory may be written to by EECON control
    cfg&= _DEBUG_OFF              ; In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins
    cfg&= _CP_OFF                 ; Code protection off
      __CONFIG cfg
    
    #ENDCONFIG
    
    #ENDIF
    
    ;----[Verify Configs have been specified for Selected Processor]----------------
    ;       Note: Only include this routine once, after all #CONFIG blocks
    #IFNDEF MCU_FOUND
      #ERROR "No CONFIGs found for [" + __PROCESSOR__ +"]"
    #ENDIF
    
      define  osc 20                 ' Core is running at 20MHz
    
    ' Define LCD connections
      Define  LCD_DREG        PORTD
      Define  LCD_DBIT        4
      Define  LCD_RSREG       PORTE
      Define  LCD_RSBIT       0
      Define  LCD_EREG        PORTE
      Define  LCD_EBIT        1
    
    
    ' Define program variables
      col     var     byte          ' Keypad column
      row     var     byte          ' Keypad row
      key     var     byte          ' Key value
    
    
            OPTION_REG.7 = 0	    ' Enable PORTB pullups
            ADCON1 = 15		        ' Make PORTA and PORTE digital
            Low PORTE.2             ' LCD R/W low (write)
            Pause 100               ' Wait for LCD to start
    
            Lcdout $fe, 1, "Press any key"  ' Display sign on message
    
    looper: Gosub getkey            ' Get a key from the keypad
            Lcdout $fe, 1, #key     ' Display ASCII key number
            Goto looper             ' Do it forever
    
    
    ' Subroutine to get a key from keypad
    getkey:
            Pause 50                ' Debounce
    
    getkeyu:
            ' Wait for all keys up
            PORTB = 0               ' All output pins low
            TRISB = $f0             ' Bottom 4 pins out, top 4 pins in
            If ((PORTB >> 4) != $f) Then getkeyu    ' If any keys down, loop
    
            Pause 50                ' Debounce
    
    getkeyp:
            ' Wait for keypress
            For col = 0 to 3        ' 4 columns in keypad
                    PORTB = 0       ' All output pins low
                    TRISB = (dcd col) ^ $ff ' Set one column pin to output
    		Pauseus 1
                    row = PORTB >> 4        ' Read row
                    If row != $f Then gotkey        ' If any keydown, exit
            Next col
    
            Goto getkeyp            ' No keys down, go look again
    
    gotkey: ' Change row and column to key number 1 - 16
            key = (col * 4) + (ncd (row ^ $f))
            Return                  ' Subroutine over
    
            End
    Does anything jump out to anyone? I'm just playing with this board and am trying to get it to work. It says "PIC18F4550 recommended" but lists the 16F874 as a compatible chip. Thanks in advance.

    Tony

    Product in question
    Schematic and code links

  2. #2
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    Lower case DEFINEs?

    I can never remember when it's ok to use, so I always use upper case DEFINEs.

    Robert

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


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    Also, I am not familiar with your chip. It should be good enough as long as you have the ports used in your code, as well as enough code space.

    The 4550 is required if you want to use USB.

    Robert

  4. #4
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    I just remembered, I have jumpers on my Lab X1. Have you checked if any on your Lab USB?

    Robert

  5. #5
    Join Date
    Jan 2009
    Location
    Miami, Florida USA
    Posts
    699


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    I think that you are missing the LCD_BITS and the LCD_LINES defines. Also, how do you have the pin Vo connected in your LCD?
    "No one is completely worthless. They can always serve as a bad example."

    Anonymous

  6. #6


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    This
    cfg = _XT_OSC ; XT oscillator

    Should be
    cfg = _HS_OSC

    Check this syntax

  7. #7
    Join Date
    Jan 2010
    Posts
    88


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    Well, changing the config did it, but only for the LCD sample program where it just repeats saying Hello World. On this key press program, I am getting mixed results. Sometimes it's a single line of blocks. Other times it's a cursor or 9 characters like arrow symbols and slashes. When I press a button, each one yields a ?. If I hit the reset button, those characters side step off of the lcd.

    At one point, when I played with the power up and watchdog timers, I did get the words "press any key" however, several of the letters were missing.

    The schematic of the board is available at the links provided. Nothing was changed, or requires to be changed on the jumpers. I have JP2 set to USB power instead of a wall wart.

    The chip I have matches the pinout of the 4550 exactly, so the configuration should be the same. I thought buying the completed board and using the sample programs was going to be straight forward. Silly me.

  8. #8
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    Quote Originally Posted by ERMEGM View Post
    Well, changing the config did it, but only for the LCD sample program where it just repeats saying Hello World.
    this is confusing - from what I can see the crystal on the board is 20 Mhz, but the OSC value in the first bit of code is 48 !

    What happens if you change the OSC to 48 or 40 in your code ? - Also, comment out the section of the code that deals with the key pad and make the main loop a simple LCDout "hello world" - once you get that part running then you know you have the config and LCD setting right, and then you can un-comment the switch routines and debug them.

  9. #9


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    this is confusing - from what I can see the crystal on the board is 20 Mhz, but the OSC
    value in the first bit of code is 48
    check out the fuses, PLL etc. 48Hhz is needed for USB
    Last edited by towlerg; - 12th May 2015 at 02:09.

  10. #10
    Join Date
    Jan 2010
    Posts
    88


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    It IS confusing. As I said, I made the change to the LCD program that just says Hello World over and over again, but it doesn't work on the keypad program.

    I'm still learning this type of code, so the error could be right in front of me and I won't see it. That's why I'm asking for help deciphering this type of coding.

    Thanks,
    Tony

  11. #11
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: LAB-XUSB Experimenter Board help

    Quote Originally Posted by towlerg View Post
    check out the fuses, PLL etc. 48Hhz is needed for USB
    But how would you get the timing right with a 20mhz crystal. I thought HS setting means that you run at the crystal speed, and the HS_PLL is typically a multiplier (of 4). IE to get 48 Mhz a 12 Mhz crystal is required, OSC is set to 48 and the fuse set to HS_PLL. - From the pictures of this LAB it's not clear if you can interchange the crystals, which is why I found that confusing.

Similar Threads

  1. Lab X USB
    By jimbostlawrence in forum USB
    Replies: 6
    Last Post: - 25th January 2012, 00:32
  2. LAB-X1 Timer2 Clock
    By Bruce in forum Code Examples
    Replies: 0
    Last Post: - 25th July 2010, 02:03
  3. Making the Lab X1 communicate with the Lab X2
    By MatthewM in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 19th June 2008, 22:26
  4. HELP with LAB-X1 board
    By manwolf in forum Off Topic
    Replies: 1
    Last Post: - 11th June 2008, 19:52
  5. Replies: 2
    Last Post: - 20th December 2007, 06:32

Members who have read this thread : 0

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

Posting Permissions

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