RSS

COUNTER (PENGHITUNG) 0-9999 MENGGUNAKAN PENAMPIL SEVEN SEGMENT DENGAN CODEVISION AVR

01 Jun

Pada aplikasi counter 0-9999 saya menggunakan fitur timer/counter1 yang dapat menghitung sampai 65536 (16 bit). Untuk lebih jelasnya mengenai timer dan counter AVR, dapat membaca postingan saya di tutorial timer dan counter AVR.

Dikarenakan saya menggunakan 4 buah seven segment tipe CA (common anoda), maka hanya dapat menampilkan maksimal 9999 penghitungan. Untuk mendapatkan datasheet penampil seven segment silakan download disini. Metode yang saya gunakan untuk menampilkan di seven segment adalah metode scanning, untuk lebih jelasnya tentang seven segment silakan baca tutorial seven segment. Jika penghitungan telah mencapai 10000 maka akan saya set kembali menjadi 0000. Berikut adalah schematic rangkaiannya.Input timer/counter1 berasal dari pin PB1(T1), dimana untuk aplikasi ini saya menggunakan sebuah push button sebagai inputnya. Pada program yang saya buat, jika terjadi perubahan logika dari high ke low (falling edge) maka akan dideteksi sebagai input counter. Untuk input yang berupa push button diatas dapat diganti menggunakan sensor yang sesungguhnya. Berikut adalah listing program lengkapnya:

#include <mega16.h>
#include <delay.h>

int data, data_temp;
char ribuan, ratusan, puluhan, satuan, ubah;

void ambil_data_counter()
{
    if (TCNT1==10000){TCNT1=0;}//jika counter bernilai 10000 maka kembali lagi ke 0000
    data=TCNT1;//nilai dari register counter1 diumpankan ke data
}

void tampil_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 ubah_ke_format7segment()//fungsi untuk mengubah kedalam format 7segment
{
      if (ubah==0){ubah=0xc0;}
      if (ubah==1){ubah=0xf9;}
      if (ubah==2){ubah=0xa4;}
      if (ubah==3){ubah=0xb0;}
      if (ubah==4){ubah=0×99;}
      if (ubah==5){ubah=0×92;}
      if (ubah==6){ubah=0×82;}
      if (ubah==7){ubah=0xf8;}
      if (ubah==8){ubah=0×80;}
      if (ubah==9){ubah=0×90;}
}

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

      data_temp=data_temp/10;
      puluhan=data_temp%10;
      ubah=puluhan;
      ubah_ke_format7segment();
      puluhan=ubah;

      data_temp=data_temp/10;
      ratusan=data_temp%10;
      ubah=ratusan;
      ubah_ke_format7segment();
      ratusan=ubah;

      data_temp=data_temp/10;
      ribuan=data_temp%10;
      ubah=ribuan;
      ubah_ke_format7segment();
      ribuan=ubah;
}

void main(void)
{
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=0×00;
TCCR1B=0×06;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

while (1)
      {
      ambil_data_counter();
      ambil_nilai_tiap_digit();
      tampil_7segment();
      };
}

Untuk mendapatkan file program dalam bentuk CodeVision AVR dapat didownload pada link dibawah ini.

File program CodeVision AVR

Semoga bermanfaat…

About these ads
 
8 Comments

Posted by on June 1, 2011 in AVR Projects

 

Tags: , ,

8 responses to “COUNTER (PENGHITUNG) 0-9999 MENGGUNAKAN PENAMPIL SEVEN SEGMENT DENGAN CODEVISION AVR

  1. eddy

    June 21, 2011 at 14:14

    om, klo tampil’y di LCD bisa G om???
    pleace… bantuanya…
    kirim lwt e-mail ya???
    eddy_kurnianto@yahoo.com
    thex

     
  2. sandy

    July 17, 2011 at 16:21

    bagaimana cara membuat counter bila tanpa switch otomatis berjalan..???

     
    • sandy

      July 17, 2011 at 16:22

      tolong ya mas brow…
      kebutuhan mendesak..

       
      • ElectrO-cOntrOl Team

        July 21, 2011 at 02:59

        Blog ini telah dipindah ke alamat baru yaitu:

        elektro-kontrol.blogspot.com

        Jika ada pertanyaan atau komentar silakan kunjungi blog yg terbaru, jika anda meninggalkan pertanyaan atau saran disini tidak akan ditanggapi.

        Harap maklum. Terima kasih.

         
  3. faride

    December 9, 2011 at 16:10

    bos pny program 7 segment counter dari 0-99 ngk bos…
    nek pny krim email ya boss q tunggu jjjmoons1@gmail.com
    q tunggu ya boss

     

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

 
Follow

Get every new post delivered to your Inbox.

%d bloggers like this: