Bekerja dengan DSPIC/PIC

Haha iseng2 menulis, semoga bermanfaat.  Sebaga  anak elektro sudah sering tentunya bermain dengan mikrokontroler. Tentunya bagi kalangan mahasiswa apalagi anak kosan tentunya mencari mikrokontroler yang murah dan gampang diprogram. Ya biasanya mikrokontroler 8 bit sering digunakan. Harganya murah sekitar 5 US dollar dapat diprogram dengan PC dan programmernya relatif murah. Biasanya memiliki ROM, RAM dan EEPROM yang cukup digunakan bagi kalangan pelajar serta memiliki beberapa periperal standar seperti ADC, Timer, pwm, dsb.

Biasanya keluarga mikrokontroler yang sering digunakan tersebut adalah dari keluarga Atmel AVR dan MicrochiP PIC. Mikrokontroler PIC sendiri terdiri dari berbagai macam jenisnya, misalnya yang Populer dipasaran yaitu PIC18, ataukah yang lebih powerful lagi yaitu dsPIC. DSPIC yang sering saya gunakan adalah DSPIC3F4013.  Mungkin bagi teman2 yang sering menggunakan AVR berikut ini sedikit perbandingan antara DSPIC3F4013 dengan ATMEGA 8535.

AVR/Atmega 8535

dsPIC30F4013

512 Bytes EEPROM

1024 Bytes EEPROM

Timer 8 bit dan 16 bit

Timer 16 bit dan 32 bit

ADC 8 channel 10 bit

ADC 16 channel 12 bit

8 bit jalur data

16 bit jalur data

Lebih dari 16 MIPS

Lebih dari 30 MIPS

Osilator bisa 16 MHz

Osilator bisa 160 MHz

Flash 8 Kbyte

Flash 48 Kbyte

Selain itu DSPIC3F4013 memiliki ALU yang lebih baik. Terdapat pula berbagai fitur pada prosesor untuk keperluan DSP. Misalnya memiliki barrel shift accumulator 40 bit dsb. Lebih lengkap dapat dilihat di datasheet.

Gambar DSPIC30F4013 40 pin

Berikut ini merupakan beberapa hal yang perlu disiapkan jika ingin bekerja dengan DSPIC/PIC.

Software Integrated Development Environment (IDE) dan Compiler

Kalau biasanya pada AVR software yang dipakai adalah CodeVision ataupun AVRstudio. Untuk penggunaan DSPIC/PIC,  software IDE yang sering digunakan adalah MPLAB IDE. MPLAB sendiri memiliki banyak fitur untuk melakukan simulasi respon program ketika dijalankan dihardware. MPLAB meruPakan produk dari Microchip. Untuk mempermudah pengguna, maka banyak disertakan example program. Terdapat berbagai compiler pada  MPLAB yang mendukung untuk bahasa C maupun assembly tergantung pula dari jenis PIC yang digunakan. Misalnya saya menggunakan DSPIC30F4013 dan ingin menggunakan bahasa C sehingga dapat digunakan compiler C30.  Namun sebagai seorang beginner atau jika sering menggunakan CodeVision pada AVR, tidak banyak fitur fungsi/library yang terdapat pada MPLAB. Bahkan untuk misalnya memrogram LCD 2×16, fungsi2 harus dibuat secara manual terlebih dahulu.

Jika anda ingin menonjolkan sisi Pemrograman yang lebih praktis dan sederhana maka dapat digunakan software dari MikroElektronika. Karena saya biasa memprogram menggunakan bahasa C maka saya menggunakan MikroC dengan compiler untuk dspic 30/33. Tentunya software dari Mikroelektronika adapula yang mendukung bahasa pascal, dsb. Kelebihan dari MikroC adalah banyaknya library yang tersedia sehingga program terlihat lebih mudah dan sederhana. Misalnya untuk mensetting pin2 untuk LCD 2×16 dengan data 4 bit maka terdapat fungsi pada library maka dapat digunakan fungsi LCD_Custom_Config. Begitu pula untuk pengaksesan fiitur lainnya seperti pwm, spi, eeprom dsb telah terdapat pada library.

programmer

Untuk memasukkan program flash ke mikrokontroler maka dibutuhkan sebuah hardware programmer. programmer yang sering digunakan adalah MPLAB ICD dengan berbagai serinya.

Gambar MPLAB ICD 2

Selain MPLAB ICD dapat pula digunakan pickit dengan berbagai serinya.

Gambar pickit 3

ICSP / In Circuit Serial Programming dilakukan melalui Pin PGD dan PGC pada mikrokontroler. Saya bekerja dengan menggunakan MikroC untuk dspic30f. Saya memiliki pickit 3 namun tidak support digunakan pada MikroC. Maka saya mengubah kode program kedalam .hex dengan MikroC lalu menggunakan MPLAB IDE untuk memasukkan flash ke dalam mikrokontroler dengan menggunakan import .hex porgram.

Contoh2 program

Contoh 1 mplab

berikut ini merupakan contoh programming LCD 2×16 4-bit menggunakan dspic30f4013 dengan menggunakan IDE yaitu mplab dan bahasa C.

#include "p30f4013.h"

_FOSC(FRC)				//osc
_FWDT(WDT_OFF)
_FBORPOR(MCLR_EN & PWRT_OFF)		//MCLR enable & power-up timers off
_FGS(CODE_PROT_OFF)			//Code Protection off

void lcd_line1(void);			//function prototypes
void lcd_line2(void);
void lcd_cmd(unsigned char);
void lcd_char(char);
void e_togg(void);
void lcd_init(void);
void lcd_string(char *);
void lcd_busy(void);
void delay(void);
void beep(int);

#define	E		LATDbits.LATD9
#define	RS		LATAbits.LATA11
#define RW		LATCbits.LATC14
#define	busyflag	PORTBbits.RB12
#define RW_TrisBit	TRISCbits.TRISC14
#define D7_TrisBit	TRISBbits.TRISB12
#define piezo		LATCbits.LATC13

char sentence1[] = "dsPIC 30F4013  ";
char sentence2[] = "Two UARTs      ";
char sentence3[] = "Four 16-bit PWM";
char sentence4[] = "33 interrupts  ";

int main(void)
{
	ADPCFG = 0xffff;		//all digital
	TRISA = 0;			//PORTs all outputs
	TRISB = 0;
	TRISC = 0;
	TRISD = 0;
	RW = 0;				//set R/W low
	E = 0;				//set E low
	lcd_busy();			//wait for LCD to settle
	lcd_init();

	while(1)
	{
		lcd_line1();
		lcd_string(sentence1);	//send string to LCD
		lcd_line2();
		lcd_string(sentence2);
		delay();
		lcd_line1();
		lcd_string(sentence3);	//send string to LCD
		lcd_line2();
		lcd_string(sentence4);
		beep(80);
		delay();
	}
	return 0;
}

void beep(int tone)
{
	int x,y;
	for(x=0;x<80;x++)
	{
		piezo = 1;
		for(y=0;y<tone;y++){}
		piezo = 0;
		for(y=0;y<tone;y++){}
	}
}	

void lcd_string(char *senpoint)
{
	while(*senpoint != '')
	{
		lcd_char(*senpoint);
		senpoint++;
	}
}	

void lcd_busy(void)
{
	RW_TrisBit = 1;			//make R/W input (read)
	D7_TrisBit = 1;			//make D7 input
	RS = 0;				//set RS low
	RW = 1;				//set R/W high
	E = 1;				//set E high
	while(busyflag);		//wait for busy flag to go low
	E = 0;				//set E low
	RW = 0;				//set R/W low
	TRISB = 0;			//make D7 output
	RW_TrisBit = 0;			//make R/W output (write)
}	

void lcd_line1(void)
{
	lcd_cmd(0x80);
}

void lcd_line2(void)
{
	lcd_cmd(0xc0);
}		

void lcd_cmd(unsigned char letter)
{
	LATB = letter;			//put char in PORTB
	lcd_busy();
	PORTB = PORTB << 5;		//shift over to output high 4 bits on RB9,10,11,12
	RS = 0;				//RS low
	e_togg();			//latch the data
	PORTB = PORTB << 4;		//shift over to output low 4 bits
	RS = 0;				//RS low
	e_togg();			//latch it
}

void lcd_char(char letter)
{
	LATB = letter;			//put char in PORTB
	lcd_busy();
	PORTB = PORTB << 5;		//shift over to output high 4 bits on RB9,10,11,12
	RS = 1;				//RS high
	e_togg();			//latch the data
	PORTB = PORTB << 4;		//shift over to output low 4 bits
	RS = 1;				//RS high
	e_togg();			//latch it
}

void lcd_init(void)
{
	LATB = 0x0600;			//send 3
	e_togg();
	lcd_busy();
	LATB = 0x0600;
	e_togg();
	lcd_busy();
	LATB = 0x0600;
	e_togg();
	lcd_busy();
	LATB = 0x0400;			//send 2 - set 4-bit mode
	e_togg();
	lcd_busy();
	lcd_cmd(0x28);			//set 4-bit mode and 2 lines
	lcd_busy();
	lcd_cmd(0x10);			//cursor move & shift left
	lcd_busy();
	lcd_cmd(0x06);			//entry mode = increment
	lcd_busy();
	lcd_cmd(0x0d);			//display on - cursor blink on
	lcd_busy();
	lcd_cmd(0x01);			//clear display
	lcd_busy();
}

void e_togg(void)
{
	E=1;
	E=0;
}

void delay(void)
{
	int x,y;
	for(x=0;x<50;x++)
	{
		for(y=0;y<10000;y++){}
	}
}

Adapun konfigurasi hardwarenya adalah sebagai berikut.

Gambar konfigurasi hardware

Contoh 2 mikroc

Berikut ini berikut ini merupakan contoh programming LCD 2×16 4-bit menggunakan dspic30f4013 dengan menggunakan mikroc untuk dspic30f dan bahasa C. Berikut ini merupakan kode program.

Berikut ini merupakan konfigurasi hardwarenya

Gambar konfigurasi hardware

dapat dilihat bahwa program lebih sederhana dengan menggunakan mikroc karena telah terdapat berbagai default library untuk mengakses fungsi untuk fitur tertentu.

3 thoughts on “Bekerja dengan DSPIC/PIC

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s