Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pic18F14K22 with USB MCP2200
#1
I will appreciate help with this.
Spent days and can not get the bootloader to work at all. With a C program, comms Tx and Rx works and the MCP2200 Usb to serial converter works 100%.
I have tried just every option with clock speeds, configurations, etc. I also tried it with the latest bootload version.
The Osc is running 64000000 with the PLL but the code gives an error and I therefore switch off the PLL to run 16000000 hz.
Here is my user setup, changed to enable the MCP2200 and a led, tried with and without the OSCCON setup:

USER_CODE.INC:

Code:
; UserInit()
; Description: this is executed immediately on start-up before the boot loader code
;------------------------------------------------------------------------------
UserInit macro
            

        ;    enable MCP2200
    movlw     b'11110110' ; setup clock     to 16M clock speed
    movwf     OSCCON
    bcf 0x0F93,6        ; tris B6 out
    bcf 0x0F81,6        ; pin B6 // ce low
    bsf 0x0F81,6        ; pin B6 // ce high
    bcf 0x0F93,4        ; tris B4 out
    bsf 0x0F81,4        ; pin B4 blue led        
;
            ; Make uart pins digital
            ifdef    ADCON1
;                error Do you need to configura uart pins to be digital? If not, remove this line
            endif
            ;movlw     b'01100000'        ;xxx disable
            ;movwf     ADCON1            ;xxx analog on tx/rx             
            
            ; UART/CAN pps config
            ifdef    HAS_PPS
                ifdef USE_UART2
                    error You need to configure PPS    ;xxx remove this line when PPS is configured
                    
                    ; This template maps U2Rx to RP4
                    bcf        RPINR16, RX2DT2R0        ;xxx
                    bcf        RPINR16, RX2DT2R1        ;xxx
                    bsf        RPINR16, RX2DT2R2        ;xxx
                    bcf        RPINR16, RX2DT2R3        ;xxx
                    bcf        RPINR16, RX2DT2R4        ;xxx
                    
                    ; This template maps RP3 to U2Tx
                    bsf        RPOR3,    RP3R0            ;xxx
                    bcf        RPOR3,    RP3R1            ;xxx
                    bsf        RPOR3,    RP3R2            ;xxx
                    bcf        RPOR3,    RP3R3            ;xxx
                    bcf        RPOR3,    RP3R4            ;xxx
                endif
            endif
        endm
        
        
;------------------------------------------------------------------------------
; UserExit()
; Description: this is executed right before the user application is loadaed
;------------------------------------------------------------------------------
UserExit macro

        endm

SETTINGS.INC:

Code:
;------------------------------------------------------------------------------
; Device
;------------------------------------------------------------------------------
        processor    18F14K22                    ;xxx


;------------------------------------------------------------------------------
; Includes
;------------------------------------------------------------------------------
        #include "devices.inc"


;------------------------------------------------------------------------------
; User preferences
;------------------------------------------------------------------------------
        radix DEC
        
        #define        OSCF            16000000    ;xxx oscillator frequency (including pll)
        #define        BLINIT            2000        ;xxx hello receive timeout [ms]
        #define        HELLOTRIES        2            ;xxx number of non hello characters received before branching to the user application
        #define        BLTIME            2000        ;xxx data receive timeout [ms]


;------------------------------------------------------------------------------
; UART settings
;------------------------------------------------------------------------------            
        #define        USE_UART1        1            ;xxx uncomment to use uart1
        ;#define    USE_UART2        1            ;xxx uncomment to use uart2
        #define        BAUDRATE         38400        ;xxx baudrate
        ;#define    USE_ABAUD        1            ;xxx uncomment to use auto baud rate detection, READ ERRATA FIRST        
        ;#define    USE_BRG16        1            ;xxx uncomment to use 16-bit brg

        ;#define    USE_TXENABLE    1            ;xxx uncomment to use a tx enable pin        
        ifdef USE_TXENABLE
            #define    TXE_DELAY         10            ;xxx time in us to wait before transmitting after pulling the tx enable pin high
            #define    TRISR_TXE        TRISD        ;xxx tris register containing tx enable
            #define    LATR_TXE        LATD        ;xxx port register containing tx enable
            #define    TRISB_TXE        TRISD0        ;xxx tris bit for tx enable
            #define LATB_TXE        RD0            ;xxx port bit for tx enable
        endif


;------------------------------------------------------------------------------
; Advanced settings
;------------------------------------------------------------------------------        
        ;#define    KICK_WD            1            ;xxx uncomment to kick the wd in the rx loop, only enable if the watchdog is enabled
        #define        PROT_GOTO        1            ;xxx protect goto at 0x00
        #define        PROT_BL         1            ;xxx protect bootloader
        #define        WRITE_VER        1            ;do flash write verification
        #define        EWRITE_VER        1            ;do eeprom write verification
        
        ifdef IS_PIC18F
            #define        BLPLP        9            ;bootloader placement, pages from end
            #define        BLSIZEP        9            ;bootloader size [pages], used by bootloader protection    
        endif
        
        ifdef IS_PIC18FJ        
            #define        BLPLP        2            ;bootloader placement, pages from end
            #define        BLSIZEP        1            ;bootloader size [pages], used by bootloader protection    
        endif

Attached is the code listing...


Attached Files
.txt   ds30loader.txt (Size: 93.65 KB / Downloads: 7)
Reply
#2
You need to configure the RX pin to be digital, put the code in the UserInit macro:
Code:
bcf ANSELH, ANS11
Reply
#3
Where are the configuration bits?
Reply
#4
Dear Mikael, please pat yourself on the shoulder...
Twice please!
bcf ANSELH, ANS11
was the problem....

Still will not work with PLL= on (64000000hz) but it may be the chip config.

Thank you!
Reply
#5
Great. Do you enable the PLL?
Code:
bsf    OSCTUNE, PLLEN
Reply
#6
The PLL enabled (64000000hz) does not work.
Reply
#7
I am trying to run PIC18F firmware on PIC18F14K22 too.
I have changed settings.inc file like this;
Code:
;------------------------------------------------------------------------------
;
; Title:            ds30 Loader for PIC18F
;
; File description:    user settings and configuration bits
;
; Copyright:         Copyright 2009-2012 Mikael Gustafsson
;                                                                            
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;    This file is part of ds30 Loader.
;
;    ds30 Loader is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation.
;
;    ds30 Loader is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.
;
;    You should have received a copy of the GNU General Public License
;    along with ds30 Loader. If not, see <http://www.gnu.org/licenses/>.
;------------------------------------------------------------------------------



;------------------------------------------------------------------------------
; Device
;------------------------------------------------------------------------------
        ;LIST         P=18F14k22
        processor    18F14K22                    ;xxx



;------------------------------------------------------------------------------
; Includes
;------------------------------------------------------------------------------
        #include "devices.inc"


;------------------------------------------------------------------------------
; User preferences
;------------------------------------------------------------------------------
        radix DEC
        
        #define        OSCF              16000000    ;xxx oscillator frequency (including pll)
        #define        BLINIT            1000        ;xxx hello receive timeout [ms]
        #define        HELLOTRIES        2            ;xxx number of non hello characters received before branching to the user application
        #define        BLTIME            1000        ;xxx data receive timeout [ms]


;------------------------------------------------------------------------------
; UART settings
;------------------------------------------------------------------------------            
        #define        USE_UART1        1            ;xxx uncomment to use uart1
        #define        BAUDRATE         9600        ;xxx baudrate
        ;#define    USE_ABAUD        1            ;xxx uncomment to use auto baud rate detection, READ ERRATA FIRST        
        ;#define    USE_BRG16        1            ;xxx uncomment to use 16-bit brg

        #define    USE_TXENABLE    1            ;xxx uncomment to use a tx enable pin        
        ifdef USE_TXENABLE
            #define    TXE_DELAY         100            ;xxx time in us to wait before transmitting after pulling the tx enable pin high
            #define    TRISR_TXE        TRISB        ;xxx tris register containing tx enable
            #define    LATR_TXE        LATB        ;xxx port register containing tx enable
            #define    TRISB_TXE        TRISB6        ;xxx tris bit for tx enable
            #define LATB_TXE        RB6            ;xxx port bit for tx enable
        endif


;------------------------------------------------------------------------------
; Advanced settings
;------------------------------------------------------------------------------        
        #define        KICK_WD            1            ;xxx uncomment to kick the wd in the rx loop, only enable if the watchdog is enabled
        #define        PROT_GOTO        1            ;xxx protect goto at 0x00
        #define        PROT_BL         1            ;xxx protect bootloader
        #define        WRITE_VER        1            ;do flash write verification
        #define        EWRITE_VER        1            ;do eeprom write verification
        
        ifdef IS_PIC18F
            #define        BLPLP        9            ;bootloader placement, pages from end
            #define        BLSIZEP        9            ;bootloader size [pages], used by bootloader protection    
        endif
        
        ifdef IS_PIC18FJ        
            #define        BLPLP        2            ;bootloader placement, pages from end
            #define        BLSIZEP        1            ;bootloader size [pages], used by bootloader protection    
        endif
        

;------------------------------------------------------------------------------
; Configuration bits, these macros can be found at the end of the inc-files located in
; C:\Program Files\Microchip\MPASM Suite\
;
; These can also be set in MPLAB IDE instead, they are found in Configure->Configuration bits...
;------------------------------------------------------------------------------


        ; xxx
        ;config    RETEN             = OFF           ;Ultra low-power regulator is Disabled (Controlled by REGSLP bit)
        ;config    INTOSCSEL         = LOW            ;LF-INTOSC in Low-power mode during Sleep
        ;config    SOSCSEL         = LOW               ;Low Power SOSC circuit selected
        config    XINST             = OFF               ;Disabled
        config    FOSC             = IRC            ;XT oscillator
        config    PLLEN             = Off               ;Enabled
        config    PCLKEN            = Off
        config    FCMEN             = OFF           ;Disabled
        config    IESO             = OFF           ;Disabled
        config    PWRTEN             = OFF           ;Disabled
        config    HFOFST            = Off

        config BOREN             = OFF            ;Brown Out Detect
        ;config    BORV             = 3             ;1.8V
        ;config    BORPWR            = MEDIUM        ;BORMV set to medium power level
        config    WDTEN             = OFF              ;WDT disabled in hardware; SWDTEN bit disabled
        config    WDTPS             = 32768         ;1:32768
        ;config    CANMX             = PORTE         ;ECAN TX and RX pins are located on RE5 and RE4, respectively
        ;config    T0CKMX             = PORTG             ;Timer0 gets its clock input from the RG4/T0CKI pin on 64-pin packages
        ;config    T3CKMX             = PORTB         ;Timer3 gets its clock input from the RB5/T3CKI pin on 64-pin packages
        ;config    MSSPMSK         = MSK7          ;7 Bit address masking mode
        config    MCLRE             = ON            ;MCLR Enabled, RG5 Disabled
        config    STVREN             = ON            ;Stack Overflow Reset            
        
        ;config    BBSIZ             = BB2K            ;Boot Block Size
        config    CP0             = OFF            ;Code Protect 00800-03FFF
        config    CP1             = OFF            ;Code Protect 04000-07FFF
        ;config    CP2                 = OFF            ;Code Protect 08000-0BFFF
        ;config    CP3             = OFF            ;Code Protect 0C000-0FFFF
        ;config    CPB             = OFF            ;Code Protect Boot
        config    CPD             = OFF            ;Data EE Read Protect
        config    WRT0             = OFF            ;Table Write Protect 00800-03FFF
        config    WRT1             = OFF            ;Table Write Protect 04000-07FFF
        ;config    WRT2             = OFF            ;Table Write Protect 08000-0BFFF
        ;config    WRT3             = OFF            ;Table Write Protect 0C000-0FFFF
        config    WRTC             = OFF            ;Config. Write Protect
        config    WRTB             = OFF            ;Table Write Protect Boot
        config    WRTD             = OFF            ;Data EE Write Protect
        config    EBTR0             = OFF            ;Table Read Protect 00800-03FFF        
        config    EBTR1             = OFF            ;Table Read Protect 04000-07FFF
        ;config    EBTR2             = OFF            ;Table Read Protect 08000-0BFFF
        ;config    EBTR3            = OFF            ;Table Read Protect 0C000-0FFFF
        config    EBTRB             = OFF           ;Table Read Protect Boot
        

;------------------------------------------------------------------------------
; ds30 Loader commercial version
;------------------------------------------------------------------------------
;-Supports read of flash and EEPROM
;-Supports software UART
;-Supports CAN
;-Available with encryption
;-Read more at www.ds30loader.com


;------------------------------------------------------------------------------
; End of file
;------------------------------------------------------------------------------
PLL function does not affect it. It is still 16MHz.

And uart.inc has some problem.
Code:
;------------------------------------------------------------------------------
;
; Title:            ds30 Loader for PIC18
;
; File description:    UART functions
;
; Copyright:         Copyright © 2011, Mikael Gustafsson
;
; Webpage:             http://mrmackey.no-ip.org/elektronik/ds30loader/
;
; History:            3.0.0 first version of this file
;                                                                            
;------------------------------------------------------------------------------

;-----------------------------------------------------------------------------
;    This file is part of ds30 Loader.
;
;    ds30 Loader is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation.
;
;    ds30 Loader is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.
;
;    You should have received a copy of the GNU General Public License
;    along with ds30 Loader. If not, see <http:;www.gnu.org/licenses/>.
;------------------------------------------------------------------------------
        

;------------------------------------------------------------------------------
; UARTs
;------------------------------------------------------------------------------
        ifdef USE_UART1
            ifdef USE_UART2
                error "Both uarts are specified"
            endif
            
            #define PIRRCIF_        PIR1                ;uart interupt status register
            #define RCIF_            RCIF
            
            ifndef TXSTA1
                   #define TXSTA_        TXSTA                ;uart status
                   #define    RCSTA_        RCSTA                ;uart status
                   #define    SPBRG_        SPBRG                ;uart baudrate
                   #define    TXREG_        TXREG                ;uart transmit
                   #define    RCREG_        RCREG                ;uart receive
            else
                   #define    TXSTA_        TXSTA1                ;uart status
                   #define    RCSTA_        RCSTA1                ;uart status
                   #define    SPBRG_        SPBRG1                ;uart baudrate
                   #define    TXREG_        TXREG1                ;uart transmit
                   #define    RCREG_        RCREG1                ;uart receive
            endif
            
            ifdef BAUDCON
                   #define    BAUDCON_    BAUDCON                ;uart receive
            else
                   #define    BAUDCON_    BAUDCON1            ;uart receive
            endif
            
            ifdef SPBRGH
                   #define    SPBRGH_        SPBRGH                ;uart receive
            else
                   #define    SPBRGH_        SPBRGH1                ;uart receive
            endif
        endif

        ifdef USE_UART2
            ifdef USE_UART1
                error "Both uarts are specified"
            endif        
            ifndef HAS_UART2
                error "UART2 specified for a device that only has uart1"
            endif
            
            
            #define PIRRCIF_    PIR3                    ;uart interupt status register
            #define RCIF_        RC2IF

               #define    TXSTA_        TXSTA2                    ;uart status
               #define    RCSTA_        RCSTA2                    ;uart status
               #define    SPBRG_        SPBRG2                    ;uart baudrate
            #define    SPBRGH_        SPBRGH2                    ;uart baudrate
               #define    TXREG_        TXREG2                    ;uart transmit
               #define    RCREG_        RCREG2                    ;uart receive
            #define    BAUDCON_    BAUDCON2                ;uart receive
        endif
        
        ;
        ifdef USE_TXENABLE
            #define    TXE_DELAY_CNT    ( (TXE_DELAY * OSCF) / (4000000 * 3) )
        endif

                
;------------------------------------------------------------------------------
; Range check
;------------------------------------------------------------------------------
        ifndef USE_BRG16
            if UBRG > 255
                error spbrg_value_ is out of range
            endif
        else
            if UBRG > 65535
                error spbrg_value_ is out of range
            endif
        endif
        
        if UBRG == 0
            error spbrg_value_ might be out of range
        endif
        

;------------------------------------------------------------------------------
; CommInit()
;------------------------------------------------------------------------------    
CommInit
        banksel    TXSTA_
        ifdef USE_BRG16
            bsf        BAUDCON_, BRG16
            movlw    (UBRG>>8)
            movwf    SPBRGH_
        endif

        movlw     b'00100100'        ;enable transmit and
        movwf     TXSTA_            ; high speed mode
        movlw     (UBRG&0xff)
        movwf     SPBRG_
        movlw     b'10010000'        ;enable serial port
        movwf     RCSTA_            ; and receive
            
        ifdef USE_ABAUD
            ; Activate auto baud rate detection
            bsf        BAUDCON_, ABDEN            
            ; Wait for auto baudrate detection to finish with timeout control
            movlw     BLSTART
            movwf    cnt1            ;
abd_rpt2    movlw    DELBASE            ;
            movwf    cnt2            ;        
abd_rpt3    clrf     cnt3        
abd_rptc    clrwdt
            btfss     BAUDCON_, ABDEN
            bra     abd_ok        
abd_notrcv    decfsz     cnt3
            bra     abd_rptc
            decfsz     cnt2
            bra     abd_rpt3
            decfsz     cnt1
            bra     abd_rpt2
            ; abd timed out if we get here
            bra        exit            
            ; abd finished
abd_ok        movf    RCREG_, w        ;clear rcif
            SendL    OK    
    
        endif
        
        ; Make tx enable pin output and set to 0
        ifdef USE_TXENABLE
            bcf    TRISR_TXE, TRISB_TXE
            bcf    LATR_TXE, LATB_TXE
        endif
        

        movlb 0x0
        return    
        

;------------------------------------------------------------------------------
; CommExit()
;------------------------------------------------------------------------------    
CommExit
        banksel    RCSTA_
        clrf    RCSTA_            ;reset receive status and control register
        clrf    TXSTA_            ;reset transmit status and control register
        ifdef USE_BRG16
            clrf BAUDCON_
            clrf SPBRGH_
        endif
        
        movlb 0x0        
        return    

;------------------------------------------------------------------------------
; Receive()
;------------------------------------------------------------------------------    
Receive    movlw     BLDELAY
RcvIni    movwf    cnt1            ;
rpt2    movlw    DELBASE            ;
        movwf    cnt2            ;        
rpt3    clrf     cnt3        
rptc    
        ifdef KICK_WD
            clrwdt
        endif
        btfss     PIRRCIF_, RCIF_
        bra     notrcv
        banksel    RCREG_
        movf     RCREG_, w        ;return read data in W
        movlb     0x0
        addwf     crc, f            ;compute crc
        return        
notrcv    decfsz     cnt3
        bra     rptc
        decfsz     cnt2
        bra     rpt3
        decfsz     cnt1
        bra     rpt2
        ; Receive timed out if we get here
        bra        exit        
        
        
;------------------------------------------------------------------------------
; Send()
;------------------------------------------------------------------------------        
Send    ; Enable tx
        banksel    TXSTA_
        ifdef USE_TXENABLE
            bcf        RCSTA_, CREN            ;disable serial receiver
            movwf    cnt2
            bsf    LATR_TXE, LATB_TXE
            movlw    TXE_DELAY_CNT
            movwf    cnt1
txe_del_lo    decfsz    cnt1
            bra        txe_del_lo
            movf    cnt2, w
        else        
            ; Wait for transmit shift register to get empty
txwait        btfss    TXSTA_, TRMT
            bra        txwait
        endif        
        ;Send byte
        movwf     TXREG_
        ; Disable tx
        ifdef USE_TXENABLE
            ; Wait for transmit shift register to get empty
txwait        btfss    TXSTA_, TRMT
            bra        txwait
            bcf        LATR_TXE, LATB_TXE
            bsf        RCSTA_, CREN            ;enable serial receiver
        endif
        ; Send complete
        movlb 0x0
        return
    
    
;------------------------------------------------------------------------------    
; End of file
;------------------------------------------------------------------------------
Reply
#8
Start a separate thread.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)