Aplikasi Input-Output Arm LPC2138 (jenis Arm7)

    Daripada Geladi menganggur / makan Gabut(gaji buta) kalo kata dia sih, hehehe .saya mencoba Belajar Arm.
    Setalah saya memperkenalkan LPC2138, sekarang giliran saya untuk mencoba belajar hal yang paling sederhana dalam peng-aplikasian Mikrokontroller.
   Untuk memulai mencoba peng-aplikasian input output pada LPC2138 dibutuhkan Compiler, disini saya menggunakan Keil uVIsion 4 yang banyak digunakan oleh orang lain. Silahkan download Kiel uVision 4 disini .
   Setelah kita mempunya Compilernya disini yang dibutuhkan selanjutnya adalah Proteus yang digunakan untuk mensimulasikan aplikasi input-output LPC2138. Proteus yang saya gunakan proteus versi 7.6. Mengapa saya menggunakan Proteus, karena masih belum pernah membuat board LPC2138, mungkin next sih pengen buat sendiri kalo di simulasinya udah lancar menggunakan Arm.
   Ok, setelah memiliki Keil uVision 4 dan Proteus, langsung saja dibuka Keil uVision 4, tutorial untuk menggunakan Keil uVision 4 bisa dilihat disini.

   Setelah itu kita harus membuat rangkaian LPC2138 di Proteus, disini pengaplikasian Input-Output Arm saya menggunakan LED sebagai bahan pembelajarannya, langsung aja kita lihat schematic LPC2138 dengan LED :

Setelah selesai membuat rangkaian diatas menggunakan Proteus, langsung kita coba coding di Keil uVision 4 untuk pengaplikasiannya.. Berikut register input-output pada Arm yang saya dapatkan dari sini:

berikut beberapa register input output
- IODIRx digunakan untuk mengeset port apakah input atau output
-IOSETx digunakan untuk menset port (aktif high), memberikan logika high.
-IOCLRx digunakan untuk menclear port (aktif low), memberikan logika low.

Langsung saja kita coba di Keil uVision, disini saya akan share hasil coding yang saya coba:

#include                 /*merupakan library dari LPC213*,  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 DDR_LED (LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7)

unsigned char i;

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

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

void tunda(int delay) /*delay function*/
{
        int i;
   
        for(i=0;i<=delay;i++)
        {
                wait();
        }
}

int main (void) {
  
    IODIR0=0xff; //semua pin yang ada di PORT.0 di set sebagai output

  while (1)  {                             /* Looping forever */
       
        //aplikasi blink LED
        IOSET0=DDR_LED; // semua pin led di set high atau led menyala
        tunda(1);
        IOCLR0=DDR_LED; // semua pin led di set low atau led mati
        tunda(1);
       
        // aplikasi LED menyala berurutan
        for (i = 1<<0; i < 1<<8; i <<= 1) { //looping untuk menyalakan led secara berurut
               IOSET0 = i;  //pin led di set active high atau menyala                        
               tunda (1);  //waktu delay                                                   
        }
       for (i = 1<<8; i > 1<<0; i >>=1 ) {   //looping untuk mematikan led secara berurut                           
               IOCLR0 = i;  //pin led di set active low atau mati
               tunda (1); //waktu delay
       }
  }
}


Ya mungkin baru segini ilmu yang saya dapatkan pada saat saya geladi dari pada gabut..haha
Terimakasih, mohon dikoreksi bila ada kesalahan.

No comments:

Post a Comment