Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Problems with PICKIT3, MPLAB and PIC18F4550

Status
Not open for further replies.

wolfrose

New Member
Hello,

I have a problem running my PIC18F4550 with assembly and C simple blink codes.

It's not working!! I don't know.

What to do?

I would post the C code, so anyone test it on a PIC and see the result.

Code:
#define _XTAL_FREQ 8000000

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1L
#pragma config PLLDIV = 1  // PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
#pragma config USBDIV = 1  // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale)

// CONFIG1H
#pragma config FOSC = INTOSC_XT // Oscillator Selection bits (Internal oscillator, XT used by USB (INTXT))
#pragma config FCMEN = OFF  // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF  // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRT = OFF  // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOR = OFF  // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 3  // Brown-out Reset Voltage bits (Minimum setting 2.05V)
#pragma config VREGEN = OFF  // USB Voltage Regulator Enable bit (USB voltage regulator disabled)

// CONFIG2H
#pragma config WDT = OFF  // Watchdog Timer Enable bit (WDT enabled)
#pragma config WDTPS = 32768  // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = ON  // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON  // PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input channels on Reset)
#pragma config LPT1OSC = OFF  // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = ON  // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

// CONFIG4L
#pragma config STVREN = ON  // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF  // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
#pragma config ICPRT = OFF  // Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT disabled)
#pragma config XINST = OFF  // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = OFF  // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
#pragma config CP1 = OFF  // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
#pragma config CP2 = OFF  // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
#pragma config CP3 = OFF  // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)

// CONFIG5H
#pragma config CPB = OFF  // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
#pragma config CPD = OFF  // Data EEPROM Code Protection bit (Data EEPROM is not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF  // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
#pragma config WRT1 = OFF  // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
#pragma config WRT2 = OFF  // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
#pragma config WRT3 = OFF  // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)

// CONFIG6H
#pragma config WRTC = OFF  // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF  // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
#pragma config WRTD = OFF  // Data EEPROM Write Protection bit (Data EEPROM is not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF  // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF  // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF  // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF  // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF  // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)


//  ADCON1 = 0x0E;

int main()
{
  TRISDbits.RD2 = 0;
  TRISDbits.RD3 = 0;
  
  while(1)
  {
  LATD = 0x0C;  // LED ON
  //PORTD = 0x08;
  
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  LATD = 0x00; // LED OFF
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  __delay_ms(90);
  }
  return 0;
}
[code/]
 
Better test the simplest possible code that works and keep adding sections.

Have you got your micro working already?
 
Wolfrose "It's not working " is a little vague... You should be able to single step in Debug and find where its going to ? with PK3 , perhaps show us a circuit ?
 
Last edited:
As said you need to say a little more about your problem, is it MPlab V8.92 or MPlab X that your are using ?
What is the actual error, not programming in or not running ?

The .hex file below will run on a 4550 chip (tested with my Pk3 ok) and it will flash pin RB0 and RB1 alternately every second.

Common problems;_

You have the Config Mclre = ON , so you must pull pin 1 up to +5v via a 10k or similar resistor or simply set Mclre = OFF.

If you are having problems programming the chip, ensure the cables from the Pk3 to the 4550 pins are less than 150mm.

Have you got the PK3 powering the 4550 after its programmed ? if so is the Pk3 power turned on ? - depending on which IDE /Pk3 software you are using, there is always a box, somewhere to turn VDD on.
 

Attachments

  • FLASH.HEX
    574 bytes · Views: 222
  • 000220.jpg
    000220.jpg
    17.8 KB · Views: 305
  • 000221.jpg
    000221.jpg
    10.5 KB · Views: 286
Hello,

Thank you all very much.

A member at edaboard told me the solution, and it's the same solution Wp100 provided :)

It's the MCLR!!

Didn't know about the fact that you can turn it ON & OFF.

So, I better turn it off for testing purposes, then MCLR should be important in embedded system, where a signal should reset the chip.

Regards,
 
Hello,

Thank you all very much.

A member at edaboard told me the solution, and it's the same solution Wp100 provided :)

It's the MCLR!!

Didn't know about the fact that you can turn it ON & OFF.

So, I better turn it off for testing purposes, then MCLR should be important in embedded system, where a signal should reset the chip.

Regards,

MCLR is required for programming. I recommend leaving it "ON" and pulling it up to Vcc with a 10k resistor, as suggested earlier.
 
MCLR is required for programming. I recommend leaving it "ON" and pulling it up to Vcc with a 10k resistor, as suggested earlier.

As long as you're powering the board from your PICKit3 then it doesn't matter (I commonly use MCLR as an input pin, it's too useful not to) - my board design has a suitable 10K from MCLR, and the PICKit3 still programmes it quite happily despite MCLR been set as an input (because it switches Vdd off and back on, this allows access to programming mode before the PIC can start running and disable MCLR).
 
hi,
For ICSP using the PicKit3 I have a 10K and 1N914 diode in series, from /MCLR to Vcc. [Diode Cathode towards the MCLR pin]

E
 
hi,
For ICSP using the PicKit3 I have a 10K and 1N914 diode in series, from /MCLR to Vcc. [Diode Cathode towards the MCLR pin]

E

That's exactly what I did for a while but then I got lazy and left out the diode :p
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top