Page 1 of 1

Firewing standard fuses for 24HJ128GP502

PostPosted: Sat Apr 18, 2015 2:23 pm
by Coccoliso
Hello,
I want to implement a DIY board that mounts a 24HJ128GP502 programmed via PicKit.
Firewing, via bootloader, charges its fuses .. can you give me an example of this standard configuration for a 80 mhz clock setting?
I looked into the PIC24 bootloader source without positive results.
Thanks.

Re: Firewing standard fuses for 24HJ128GP502

PostPosted: Sat Apr 18, 2015 7:46 pm
by Jerry Messina
If you're looking for code to set config/change osc settings, perhaps this helps

Code: Select all
device = 24HJ128GP502      ' default FW device
clock = 80

#if (_device = 24HJ128GP502)
config FOSCSEL = {FNOSC_FRCPLL, IESO_OFF}
config FOSC = {FCKSM_CSECMD, OSCIOFNC_OFF, POSCMD_NONE, IOL1WAY_OFF}    // OSC2 output on (pin 10)
config FWDT = {WDTPOST_PS256, WDTPRE_PR128, WINDIS_OFF, FWDTEN_OFF}
config FPOR = {FPWRT_PWR128, ALTI2C_OFF}
#endif

macro SetSysClock()
    const sysClock = _clock

    // Fosc = Fin * (M/N1*N2))
    // CLKDIVbits.FRCDIV = 0    (CLKDIV[10:8]) FRC/1= 7.3728MHz
    // CLKDIVbits.PLLPOST = N2  (CLKDIV[7:6])  N2: 00=2, 01=4, 11=8
    // CLKDIVbits.PLLPRE = N1-2 (CLKDIV[4:0])  N1 = 2-33
    // PLLFBDbits.PLLDIV = M-2
    if (sysClock = 80) then     // 40 MIPS
        const FRCDIV = 0
        const PLLPOST = 0
        const PLLPRE = 1
        const PLLDIV = 63       // 39.94
        WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
        CLKDIV = WREG4
        PLLFBD = PLLDIV               
    elseif (sysClock = 64) then // 32 MIPS                   
        const FRCDIV = 0
        const PLLPOST = 0
        const PLLPRE = 1
        const PLLDIV = 50       // 31.95
        WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
        CLKDIV = WREG4
        PLLFBD = PLLDIV               
    elseif (sysClock = 32) then // 16 MIPS                   
        const FRCDIV = 0
        const PLLPOST = 1
        const PLLPRE = 1
        const PLLDIV = 50       // 15.97
        WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
        CLKDIV = WREG4
        PLLFBD = PLLDIV               
    elseif (sysClock = 16) then // 8 MIPS
        const FRCDIV = 0
        const PLLPOST = 3
        const PLLPRE = 1
        const PLLDIV = 50       // 7.99 
        WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
        CLKDIV = WREG4
        PLLFBD = PLLDIV               
    elseif (sysClock = 8) then  // 4 MIPS
        const FRCDIV = 1        // note: this is outside the VCO range... should use FNOSC_FRC mode
        const PLLPOST = 3
        const PLLPRE = 1
        const PLLDIV = 50 
        WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
        CLKDIV = WREG4
        PLLFBD = PLLDIV               
    else
        checkparam(etError, "unsupported system clock freq")
    end if

    // trim osc for accurate baud (optional)
    'OSCTUN = &H03A

    // wait until the PLL is locked
    while (OSCCON.bits(5) = 0)    // check LOCK bit
    end while
end macro

sub main()
    SetSysClock()
end sub


If that's not what you're after, ask again

Re: Firewing standard fuses for 24HJ128GP502

PostPosted: Sun Apr 19, 2015 7:33 am
by Coccoliso
Yes Jerry,
to start some testing is exactly what I meant ;) .
I will use the same topic if I have other requests.
Thank you.