Monday, 25 July 2011

Tutorial ARM : Menyalakan Led dengan LPC2138 -Proteus Simulaion-

0 comments
Sudah bikin program berkali - kali, tetapi tetap saja ga mau di simulasikan di proteus..ga jalan....

Usut punya usut....ternyata proteus saya kurang uptodate... kalau mau simulasi LPC2138 lancar, gunakan proteus versi 7.6



Bisa download di sini
http://www.mediafire.com/?mm4wmwzkdia

Biar belajar makin tambah bingung, jangan lupa baca datasheetnya, download di sini :
http://www.nxp.com/documents/data_sheet/LPC2131_32_34_36_38.pdf


Di lembar kerja yang sudah kita buat di keil uvision 3 (baca :Membuat Project baru dengan Keil uVision)
ketikan program dibawah ini..


===================================================================
#include <LPC213x.H>                       /* LPC21xx definitions */
#define LED0 (1<<0)
#define LED1 (1<<1)
#define LED2 (1<<2)
#define LED3 (1<<3)
#define LED4 (1<<4)
#define LED5 (1<<5)
#define LED6 (1<<6)
#define LED7 (1<<7)

#define DIR_LED (LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7)

void wait (void)  {                        /* wait function */
  int  d;
  for (d = 0; d < 1000000; d++);           /* only to delay for LED flashes */
                          }
void tunda(int z){
int x;
for(x=0;x<z;x++){wait();};
}

int main(void)
{
IODIR0=DIR_LED;
while(1)
{
IOSET0=DIR_LED;
tunda(1);
IOCLR0=DIR_LED;
tunda(1);
};
}
==================================================================

Lalu buat skema pada proteus seperti ini.
Jangan lupa beri tegangan 3Volt pada Vbatt.
Penjelasan Programnya sebagai berikut :

#include <LPC213x.H>                       /* LPC21xx definitions */
untuk memasukan library lpc2138

#define LED0 (1<<0)
#define LED1 (1<<1)
#define LED2 (1<<2)
#define LED3 (1<<3)
#define LED4 (1<<4)
#define LED5 (1<<5)
#define LED6 (1<<6)
#define LED7 (1<<7)
Biar enak saja nyebut PORTx.0 dengan sebutan LED0, PORTX.1 dengan sebutan LED1, dst..

#define DIR_LED (LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7)
Buat menggantikan sebutan LED0, LED1,.... dengan DIR_LED
Semua di atas optional aja, ga musti seperti itu... suka - suka hati yang bikin program...

void wait (void)  {                        /* wait function */
  int  d;

  for (d = 0; d < 1000000; d++);           /* only to delay for LED flashes */
}

void tunda(int z){
int x;
for(x=0;x<z;x++){wait();};
}
Buat bikin delay.. nggak tahu delay nya berapa ms, pokoknya delay aja..hehe..

int main(void)
{
IODIR0=DIR_LED;


while(1)
{
IOSET0=DIR_LED;
tunda(1);
IOCLR0=DIR_LED;
tunda(1);

};
}
nah nie... IODIR digunakan untuk inisialisasi port.. seperti DDR pada AVR..
bila IODIR bernilai 1, maka PORT digunakan sebagai output, kalau 0 PORT digunakan sebagai input.
IOSET untuk memberi nilai 1 pada keluaran.
IOCLR untuk memberi nilai 0 pada keluaran

Contoh Program lainnya :

======================================================================
#include <lpc213x.h>

#define LED0 (1<<0)
#define LED1 (1<<1)
#define LED2 (1<<2)
#define LED3 (1<<3)
#define LED4 (1<<4)
#define LED5 (1<<5)
#define LED6 (1<<6)
#define LED7 (1<<7)
#define LED_DIR (LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7)

unsigned char a;
void tunda(int z)
{int x;
while (z--)
for (x=0;x<1000000;x++);}

int main(void)
{IODIR0=LED_DIR;
while(1)
{
for (a=0;a<8;a++)
{IOSET0=(1<<a); tunda(1);};
for (a=0;a<8;a++)
{IOCLR0=(1<<a); tunda(1);};
};
}
=====================================================================
Kalau bingung dan program nggak jalan.. download aja simulasi dan programnya di sini :
http://www.4shared.com/file/_m3ZHq29/BLINK_LED.html

Leave a Reply

 

Blogroll

About