Jumat, 02 Mei 2014

Membuat Display Counter Up- Down dengan Mikrokontroller ATmega16

Sebenarnya agak bingung mulai dari mana enaknya nulis kata-katanya, oh iya maaf banget kawan-kawan sudah lumayan lama saya gak posting lagi. Maklum kemaren banyak banget kendalanya dimulai kebanjiran, sakit dan ngerjain Project “ Sistem Reader ID magnetic  ditambah LCD TFT 230X400 yang lumayan cukup menyita waktu berfikir saya, dan Alhamdulillah sekarang sudah ada titik terang. Amiien..

  • Begini kawan postingan kali ini sedikit berbeda, karena saya akan coba menjawab permintaan kawan kita “ Todalife” pada Postingan Membuat Skematik Counter  UpDown," beliau meminta di buatkan contoh Counter Updown dengan menggunkan mikrokontroller dan ditampilkan dengan 7 segment. Project ini saya beri judul “ Membuat Display Counter Up- Down dengan Mikrokontroller ATmega16”.

Untuk lebih memudahkan kita dalam memahami Project ini, saya akan bagi menjadi tiga bagian yaitu :




Bagian Input : Tombol Push button.
Dalam project kali ini saya mengunakan Push button sebagai input, karena saya pikir komponennya cukup murah dan gampang banget didapatkan, jika ada dari kawan-kawan yang mau nyoba mempraktekan itu bisa lebih memudahkan, tentunya bagian input ini bisa kita modifikasi dengan komponen lain sesuai kebutuhan kita misalnya dengan sensor infra Red , Sensor gerak, Optokopler dan lain sebagainya sesuai kebutuhan kita. Tombol push button ini berfungsi sebagai tombol input untuk Up, down dan reset.
Jika kawan – kawan belum mengerti  mengenai Tombol Push Button Silahkan Baca Postingan Saya sebelumya ”Tombol Push Button”.

Bagian Proses: Mikrokontroller dan Program
Bagian Proses ini kita akan menggunakan mikrokontroller AVR ATmega 16, fitur yang akan kita gunakan adalah timer/counter 1 16 bit (dapat menghitung maksimal 65536), letak timer / counter1 ini berada pada PORTB.1 yang difungsikan sebagai UP, dan PORTA.0 sebagai DOWN.

Bagian Output: 7segment 
Pada bagian output kita akan menggunakan 7segment, yang berfungsi untuk menampilkan nilai counter ke 7segment, sistem  pemograman yang akan digunakan adalah dengan menggunakan sistem scaning, yaitu sistem pemograman dengan pengiriman data perbagian (satu persatu per 7segment) keunggulan sistem ini kita tidak perlu memerlukan port yang bayak untuk mengontroll banyak komponen dibanding dengan sistem pemograman standar .
Oke sepertinya sudah terlalu panjang dan lebar pembahasannya , entar jenuh lagi  he… kita langsung  saja ke gambar skematiknya, skematiknya seperti berikut ini kawan:

Gambar: Skematik Counter Up Down Menggunakan Mikrokontroller ATmega16

Untuk listing Programnya seperti berikut ini:

//  -----------------------------------------------------------------------
//                              LES ELEKTRONIKA BLOG
//                          " Padepokan Pendekar Solder "
//  Kunjungi blog Les ELektronika Untuk Mendapatkan Pengetahuan Elektronika
//                 di: -==> http://adityadicky01.blogspot.com/
//             Sharing melalui e-mail di: adityadicky04@gmail.com
//  -------------------------------------------------------------

#include ;  // memasukan fungsi ic mikrokontroller
#include ;   // memasukan fungsi delay/jeda

#define yes 1;
#define no  0;

int data, data_temp, tampil;
int status_in;
char ribuan=0, ratusan=0, puluhan=0, satuan=0, ubah;

void data_counter();
void Display_7segment();



void data_counter()
{
    if (TCNT1==10000){TCNT1=0;}//jika counter bernilai 10000 maka kembali lagi ke 0000
   
  
    if (PINA.0==1)
    { status_in=1;
    }
    if ((PINA.0==0)&&(status_in==1))
    { status_in=0;
     if(TCNT1>=1){
                    TCNT1--;    }
     if(TCNT1<=0){
                    TCNT1=0;    }              
    }
    data=TCNT1;//nilai dari register counter1 diumpankan ke data
  
   
}

void Display_7segment()
{
      PORTC=ribuan;//mengirimkan data ribuan
      PORTD=0b11110111;//menyalakan digit1
      delay_ms(5);

      PORTC=ratusan;//mengirimkan data ratusan
      PORTD=0b11111011;//menyalakan digit2
      delay_ms(5);

      PORTC=puluhan;//mengirimkan data puluhan
      PORTD=0b11111101;//menyalakan digit3
      delay_ms(5);

      PORTC=satuan;//mengirimkan data satuan
      PORTD=0b11111110;//menyalakan digit4
      delay_ms(5);
      //lamanya waktu scanning ditentukan oleh intruksi delay
}

void Convert_ke_7segment()//fungsi untuk mengubah kedalam format 7segment
{
      if (ubah==0){tampil=0xc0;}
      if (ubah==1){tampil=0xf9;}
      if (ubah==2){tampil=0xa4;}
      if (ubah==3){tampil=0xb0;}
      if (ubah==4){tampil=0x99;}
      if (ubah==5){tampil=0x92;}
      if (ubah==6){tampil=0x82;}
      if (ubah==7){tampil=0xf8;}
      if (ubah==8){tampil=0x80;}
      if (ubah==9){tampil=0x90;}
}

void Kirim_data_Perdigit()
{
      data_temp=data;
      satuan=data_temp%10;//sisa dari pembagian disimpan di variabel satuan
      ubah=satuan;
      Convert_ke_7segment();//panggil fungsi mengubah kedalam format 7segment
      satuan=tampil;

      data_temp=data_temp/10;
      puluhan=data_temp%10;
      ubah=puluhan;
      Convert_ke_7segment();
      puluhan=tampil;

      data_temp=data_temp/10;
      ratusan=data_temp%10;
      ubah=ratusan;
      Convert_ke_7segment();
      ratusan=tampil;

      data_temp=data_temp/10;
      ribuan=data_temp%10;
      ubah=ribuan;
      Convert_ke_7segment();
      ribuan=tampil;
}

void main(void)
{
PORTA=0xff;
DDRA=0xff;

PORTC=0xff;
DDRC=0xff;

PORTD=0x0f;
DDRD=0x0f;

// Timer/Counter 1 initialization
// Clock source: T1 pin Falling Edge
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x06;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

status_in=0;

while (1)
      {
      data_counter();
      Kirim_data_Perdigit();
      Display_7segment();
      };
}

Untuk file program lengkap dan File Simulasi dengan proteusnya silahkan download Disini.

Mungkin ini Saja dulu Postingan dari saya semoga bisa terbantu dan bermanfaat...
Kalo ada kekurangan dari tulisan saya atau ada yang mau sharing, silahkan share di kolom komentar...

Tidak ada komentar:

Posting Komentar