Wednesday, June 9, 2021

PortE programming of dsPIC30F1010 in XC16

00:00 / 00:00

PortE of dsPIC30F1010 is a 16-bit bi-directional I/O port. Within the 28-pin SOC package of this device, there are only six usable pins. They are not complex because there are not analog input function relate to this port.

PortE programming of dsPIC30F1010 in XC16

Experiment on breadboard

As it was shown in previous post, total pin numbers and its description is figured out below.

PortE programming of dsPIC30F1010 in XC16

Pin diagram of dsPIC30F1010

In SFR of this controller, PORTE is an input register while LATE is an output register. To get digital input data PORTE register must be read. Writing digital data out, LATE must be modify. TRISE is data direction control register. Writing '1' to this register to make data register as digital input. Clearing this register to make data register as digital output.

PortE programming of dsPIC30F1010 in XC16

dsPIC30F1010/2020 PORT REGISTER MAP

In this programming example I select RE4 as digital input, connecting to a button. RE5 connects an LED as a digital output.

PortE programming of dsPIC30F1010 in XC16

Schematic diagram

This system operates at 5VDC as it's supplied from PICKIT2 device programmer. Internal fast RC oscillator is used in this programming example to cut down component counts during prototyping on breadboard.

Pin 1 connects to reset circuit. Pressing SW1 to restart the system. Whenever SW2 is pressed and released, output LED D1 toggles its logic state.

/*
* Blinking dsPIC30F1010 using XC16
* in MPLABX IDE
*/
#include <p30F1010.h>
#include "config.h"
/*Nominal internal fast oscillator frequency of 15MHz*/
#define FCY 15000000UL
#include <libpic30.h>
/*LED connects to RE5*/
#define LED LATEbits.LATE5
/*Button connects to RE4*/
#define BTN PORTEbits.RE4
void main(void){
/*Additionaly select the maximum nominal frequency of 15MHz*/
OSCTUNbits.TUN=0x07;
/*Clear I/O of PORTE*/
PORTE=0x0000;
LATE=0x00000;
/*LED OUTPUT*/
TRISEbits.TRISE5=0;
/*Button INPUT*/
TRISEbits.TRISE4=1;
while(1){
/*Check Input Button - active high*/
if(BTN==1){
while(BTN==1);
LED^=1;
}
}
}

Device's configuration setting is stored in "config.h" file of project directory.

// DSPIC30F1010 Configuration Bit Settings
#include <p30Fxxxx.h>
// FBS
#pragma config BWRP = BWRP_OFF // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_BOOT_CODE // Boot Segment Program Flash Code Protection (No Boot Segment)
// FGS
#pragma config GWRP = GWRP_OFF // General Code Segment Write Protect (General Segment may be written)
#pragma config GSS = GSS_OFF // General Segment Code Protection (Disabled)
// FOSCSEL
#pragma config FNOSC = FRC // Oscillator Mode (Internal Fast RC (FRC))
// FOSC
#pragma config POSCMD = PRIOSC_OFF // Primary Oscillator Source (Primary Oscillator Disabled)
#pragma config OSCIOFNC = OSC2_IO // OSCI/OSCO Pin Function (OSCO pin has digital I/O function)
#pragma config FRANGE = FRC_HI_RANGE // Frequency Range Select (High Range)
#pragma config FCKSM = CSW_FSCM_OFF // Clock Switching and Monitor (Sw Disabled, Mon Disabled)
// FWDT
#pragma config WDTPS = WDTPOST_PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA0 = WDTPRE_PR128 // WDT Prescaler (1:128)
#pragma config WWDTEN = WINDIS_OFF // Watchdog Timer Window (Non-Window mode)
#pragma config FWDTEN = FWDTEN_OFF // Watchdog Timer Enable (Disable)
// FPOR
#pragma config FPWRT = PWRT_128 // POR Timer Value (128ms)
// FICD
#pragma config ICS = ICS_PGD // Comm Channel Select (Use PGC/EMUC and PGD/EMUD)
// FUID0
// FUID1

Click here to download this example in zip file.


Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)