Overview
In this tutorial, we will learn How to Blink an LED with DSPIC33FJ64GS606 Microcontroller using MPAB XC16 Compiler.
Table of Contents
Product Overview
The DSPIC33FJ64GS606-I/PT is a 16-bit Digital Signal Controller with high-speed PWM, ADC and comparators. The PGECx and PGEDx pins are used for In-circuit Serial Programming™ (ICSP™) and debugging purposes. It is recommended to keep the trace length between the ICSP connector and the ICSP pins on the device as short as possible. The CPU module has a 16-bit (data) modified Harvard architecture with an enhanced instruction set, including significant support for DSP. The CPU has a 24-bit instruction word with a variable length opcode field. The Program Counter (PC) is 23-bit wide and addresses up to 4M x 24 bits of user program memory space.
Product Category: | Digital Signal Processors & Controllers – DSP, DSC |
Number of Cores: | 1 Core |
Maximum Clock Frequency: | 40MHz |
Flash Memory Size: | 64KB |
No. of I/O’s: | 58I/O’s |
No. of Pins: | 64Pins |
Core Size | 16-Bit |
Oscillator Type | Internal |
Core Supply Voltage: | 2.75V |
Voltage – Supply (Vcc/Vdd) | 3V to 3.6V |
Embedded Interface Type: | ECAN, I2C, SPI, UART |
Operating Temperature Min & Max | -40°C to 85oC |
Components required table
S.No | Components | Quantity | link |
1 | DSPIC33FJ64GS606 | 1 | https://www.mouser.in/ProductDetail/Microchip-Technology-Atmel/dsPIC33FJ64GS606 |
2 | PICkit4 Programmer | 1 | https://www.amazon.in/MPLAB-PICkit4-in-Circuit-Debugger |
3 | LED’S | 1 | https://www.amazon.in/Traffic-Lights-Signal-Module-Digital |
4 | Breadboard – 2 | 1 | https://www.amazon.in/Robotbanao-Solderless-MB102-Breadboard1 |
5 | Jumper wires | 1(set) | https://www.amazon.in/YUVS-Jumper-Wires |
Software Requirments
- MPLAB X IDE
- MPLAB X X16 Compailer
Circuit Diagram
Pin Description
PORT | Direction Register | Number of Pins | Alternative Function |
PORTB | RB0-RB15 | 16 | bidirectional I/O port |
PORTC | RC12-RB15 | 4 | bidirectional I/O port |
PORTD | RD0-RD11 | 12 | bidirectional I/O port |
PORTE | RE0-RD7 | 8 | bidirectional I/O port |
PORTF | RF0-RF6 | 7 | bidirectional I/O port |
PORTG | RG2-RG9 | 8 | bidirectional I/O port |
PIC I/O Register Configurations
Register | Description |
TRISx | Used to configure the respective PORT as output/input |
PORTx | Used to Read/Write the data from/to the Port pins |
LATx | Used to Read/Write the data from/to the Port pins |
Source Code
/*
* File: main.c
* Author: Admin
*
* Created on March, 2023,
*/
// DSPIC33FJ64GS606 Configuration Bit Settings
// 'C' source line config statements
// FBS
#pragma config BWRP = WRPROTECT_OFF // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
// FGS
#pragma config GWRP = OFF // General Code Segment Write Protect (General Segment may be written)
#pragma config GSS = OFF // General Segment Code Protection (General Segment Code protect is disabled)
// FOSCSEL
#pragma config FNOSC = FRCDIVN // Oscillator Source Selection (Internal Fast RC (FRC) Oscillator with postscaler)
#pragma config IESO = ON // Internal External Switch Over Mode (Start up device with FRC, then switch to user-selected oscillator source)
// FOSC
#pragma config POSCMD = NONE // Primary Oscillator Source (Primary Oscillator disabled)
#pragma config OSCIOFNC = OFF // OSC2 Pin Function (OSC2 is clock output)
#pragma config FCKSM = CSDCMD // Clock Switching Mode bits (Both Clock switching and Fail-safe Clock Monitor are disabled)
// FWDT
#pragma config WDTPOST = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128 // WDT Prescaler (1:128)
#pragma config WINDIS = OFF // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog timer enabled/disabled by user software)
// FPOR
#pragma config FPWRT = PWR128 // POR Timer Value (128ms)
#pragma config ALTSS1 = ON // Enable Alternate SS1 pin bit (SS1A is selected as the I/O pin for SPI1)
#pragma config ALTQIO = OFF // Enable Alternate QEI1 pin bit (QEA1, QEB1, INDX1 are selected as inputs to QEI1)
// FICD
#pragma config ICS = PGD1 // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF // JTAG Port Enable (JTAG is disabled)
// FCMP
#pragma config HYST0 = HYST45 // Even Comparator Hysteresis Select (45 mV Hysteresis)
#pragma config CMPPOL0 = POL_FALL // Comparator Hysteresis Polarity (for even numbered comparators) (Hysteresis is applied to falling edge)
#pragma config HYST1 = HYST45 // Odd Comparator Hysteresis Select (45 mV Hysteresis)
#pragma config CMPPOL1 = POL_FALL // Comparator Hysteresis Polarity (for odd numbered comparators) (Hysteresis is applied to falling edge)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#include "p33FJ64GS606.h"
#include "dsp.h"
#include "libpic30.h"
int main(void) {
// select output pin
TRISGbits.TRISG3 = 0; // 0 as a Ouput 1 as a Input
TRISGbits.TRISG2 = 0; // 0 as a Ouput 1 as a Input
TRISDbits.TRISD2 = 0; // 0 as a Ouput 1 as a Input
while(1)
{
LATGbits.LATG3 = 1;// led high
LATGbits.LATG2 = 1; // led high
LATDbits.LATD2 = 1; // led high
__delay32(900000);
LATGbits.LATG3 = 0;// led Low
LATGbits.LATG2 = 0; // led Low
LATDbits.LATD2 = 0; // led Low
__delay32(900000);
}
}