Wednesday, 1 June 2016

Program ATmega16 : LED

     Kembali sebagai fungsi keluaran, dapat mempengaruhi kerja dari hardware atau rangkaian yang nantinya akan diakses. Ada beberapa tipe kerja rangkaian untuk mengaksesnya, yaitu Aktif LOW dan Aktif HIGH. Aktif LOW merupakan kerja rangkaian yang dapat dioperasikan atau di ON-kan dengan diberi logika rendah ("0"/0V). Sedangkan Aktif HIGH merupakan kerja rangkaian yang dapat dioperasikan atau di ON-kan dengan diberi logika tinggi ("1"/+5V). Berdasarkan skematik dari kerja rangkaian diatas dapat digambarkan sebagai berikut :

     Pengaturan nilai keluaran setiap port disesuaikan dengan prinsip kerja rangkaian yang akan dioperasikan. Secara logika untuk pengaturan nilai keluaran pada setiap port harus berkebalikan dengan logika untuk menghidupkan atau mengoperasikan rangkaian tersebut. Misalkan, rangkaian LED aktif LOW, maka nilai keluaran harus diatur dengan nilai 1/HIGH. Sebaliknya juga dengan rangkaian LED aktif HIGH, maka nilai keluaran harus diatur dengan nilai 0/LOW. Pada tutorial kali ini, rangkaian yang digunakan memiliki prinsip kerja ON/aktif bila diberi logika 1/HIGH sehingga nilai keluaran pada PORT-B harus diatur menjadi LOW. Pengaturan tersebut dengan tujuan untuk mematikan rangkaian saat pertama kali dihidupkan atau LOW dalam keadaan normal.

     Instruksi yang digunakan dalam CVAVR untuk mengakses data keluaran (output) ke salah satu port sudah baku. Ada dua macam peng-akses-an port, yaitu secara bersamaan dan secara satu-persatu pin/bit. Sebagai contohnya sebagai berikut ini :
Mengakses PORT B.
Instruksi CVAVR secara bersamaan :
   PORTB = 0xf0;               //pada 8 bit data PORTB akan mengeluarkan data 11110000
atau
   PORTB = 0b11110000;  

Instruksi CVAVR secara per-bit:
   PORTB.0=1;   //pin atau bit ke-0 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
   PINB.0=1;
   .
   .
   PORTB.3=1;   //pin atau bit ke-3 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
   PINB.3=1;
   PORTB.4=0;   //pin atau bit ke-4 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
   PINB.4=0;
   .
   .
   PORTB.7=0;   //pin atau bit ke-7 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
   PINB.7=0;

RANGKAIAN SIMULASI ATMEGA16 DENGAN KELUARAN 8 LED



Contoh program LED menyala semua secara bersamaan :
     #include <mega16.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;
     while(1){
      PORTB=0xff;
         }  
     }

Contoh program running LED :
     #include <mega16.h>
     #include <delay.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;      //PORTB diatur menjadi output
     while (1)
          {
           PORTB=0b10000000;
           delay_ms(10);
           PORTB=0b01000000;
           delay_ms(10);
           PORTB=0b00100000;
           delay_ms(10);
           PORTB=0b00010000;
           delay_ms(10);
           PORTB=0b00001000;
           delay_ms(10);
           PORTB=0b00000100;
           delay_ms(10);
           PORTB=0b00000010;
           delay_ms(10);
           PORTB=0b00000001;
           delay_ms(10);
           }
     }  

atau

    #include <mega16.h>
    #include <delay.h>
    int geser=1;
    void main(void){
    PORTB=0x00;
    DDRB=0xFF;
    delay_ms(10);
    PORTB=0x01;
    delay_ms(10);
         while (1){
              if(geser<0){
                    geser=0x01;}
              delay_ms(10);
              PORTB=geser;
              geser<<=1;     //melakukan shift register
              };
     }


Contoh program LED berkedip secara bersamaan dengan delay :
     #include <mega16.h>
     #include <delay.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;      //PORTB diatur menjadi output
     while (1)
          {
           PORTB=0xff;
           delay_ms(500);
           PORTB=0x00;
           delay_ms(500);
           }
     }


1 comment:

Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara menga...