RSS

PROGRAM MENGAKSES SEVEN SEGMENT MENGGUNAKAN CODEVISION AVR

28 Apr

Sebelumnya teman-teman harus mengerti terlebih dahulu tentang dasar-dasar dari seven segment. Sebenarnya seven segment tersusun dari 8 buah led yang dibentuk menyerupai angka 8 yang terdiri dari 7 segmen dan ditambah 1 segmen berupa titik (dot). Untuk mendapatkan datasheet penampil seven segment silakan download disini.

Seven segment terdiri dari 2 jenis konfigurasi yaitu katoda bersama atau common cathoda (CC) dan anoda bersama atau common anoda (CA) .

Dari gambar diatas teman-teman tentu  sudah dapat langsung bisa membedakannya. Jika common cathoda, dimana sisi katoda pada LED tiap segmennya digabungkan (common) sehingga sering disebut katoda bersama. Sedangkan jika common anoda, pada sisi anoda pada LED tiap segmennya digabungkan sehingga sering disebut katoda bersama.

Antara CC (common cathoda) dan  CA (common anoda) mempunyai perbedaan yang mendasar yaitu cara untuk mengaktifkan/menyalakan tiap segmennya.

Untuk CC agar segmennya dapat menyala harus diberi logika HIGH (misalnya 5V), sedangkan untuk CA agar segmennya dapat menyala harus diberi logila LOW (GND).

Berikut adalah cara untuk menampilkan angka pada CA dan CC, disini saya akan menampilkan angka 7 (tujuh).

Dari gambar diatas terlihat jelas bahwa untuk menampilkan  angka 7 pada CA harus menyalakan segment a (bit0), b (bit1) dan c (bit2) dengan memberikan logika LOW (GND).

Sedangkan untuk CC merupakan kebalikan dari CA, dimana untuk menampilkan angka 7 harus menyalakan segment a (bit0), b (bit1) dan c (bit2) dengan memberikan logika HIGH (5V atau VCC).

Dari penjelasan diatas dapat dibuat tabel untuk menampilkan angka dari 0-9.

TABEL 1

Sekarang teman-teman sudah tahu bagaimana cara membentuk tampilan angka pada seven segment. Selain dari itu seven segment dapat pula dibentuk karakter selain angka, teman-teman hanya tinggal menyesuaikannya sesuai keinginan dengan menyalakan segment yang diinginkan.

Sekarang saya akan menjelaskan bagaimana cara kerja seven segment jika di-interface-kan dengan mikrokontroler. Dimisalkan saya ingin menampilkan angka 2163 pada seven segment, maka saya akan membutuhkan 4 buah seven segment (digit1=2, digit2=1, digit3=6 dan digit4=3). Dan pada prinsipnya cara kerja seven segment dilakukan secara scanning yaitu “jika ingin menampilkan 2163, maka saya akan menampilkan angka 2 terlebih dahulu pada seven segment digit1 (digit ke1) dengan mematikan digit2, digit3 dan digit4. Kemudian saya akan menampilkan angka 1 pada seven segment digit2 dengan mematikan digit1, digit3 dan digit4 dan seterusnya sampai menampilkan angka 3 pada digit4″. Metode inilah yang dinamakan scanning, dengan melakukan scanning secara cepat (biasanya 25x dalam 1 detik), maka mata kita tidak akan bisa mengikuti scanning seven segment tersebut sehingga mata kita akan melihat bahwa semua seven segmen (digit1-digit4) menyala secara bersamaan.

Pertanyaaannya, mengapa kita menggunakan metode scanning? Jawabannya dikarenakan metode scanning dapat mengurangi konsumsi daya listrik dibandingkan dengan menyalakan semua seven segment. Dan yang paling penting yaitu dapat menghemat pemakaian pin-pin mikrokontroler, sehingga tidak banyak input/output yang terpakai untuk mengakses seven segment.

Baiklah berikut adalah aplikasi menampilkan angka 2163 menggunakan mikrokontroler dengan seven segment tipe common anoda (CA). Saya sarankan untuk menggunakan seven segment tipe CA karena nantinya mikrokontroler bersifat sebagai sinking. Untuk lebih jelasnya baca pada postingan Sinking Vs Sourching output.

Berikut adalah schematic dan listing program lengkapnya:

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

char digit1, digit2, digit3, digit4;

void main(void)
{
PORTC=0xff;
DDRC=0xff;

PORTD=0x0f;
DDRD=0x0f;

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

digit1=0xa4;//hexa untuk angka 2
digit2=0xf9;//hexa untuk angka 1
digit3=0×82;//hexa untuk angka 6
digit4=0xb0;//hexa untuk angka 3

while (1)
      {
      PORTC=digit1;//mengirimkan data untuk angka 2
      PORTD=0b11110111;//menyalakan digit1
      delay_ms(5);

      PORTC=digit2;//mengirimkan data untuk angka 1
      PORTD=0b11111011;//menyalakan digit2
      delay_ms(5);

      PORTC=digit3;//mengirimkan data untuk angka 6
      PORTD=0b11111101;//menyalakan digit3
      delay_ms(5);

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

Mudah bukan untuk mengakses seven segment? Tapi jangan senang dulu, disini saya akan menjelaskan tentang kesulitan yang akan dihadapi jika menggunakan penampil seven segment. Pada program diatas kita membuat aplikasi untuk menampilkan angka 2163 pada keempat buah seven segment dengan mengirimkan datanya secara langsung ke setiap seven segment. Pertanyaannya, bagaimana jika kita ingin menampilkan isi dari sebuah variabel ke dalam seven segment? Misalnya saya punya sebuah variabel dengan nama data yang bernilai 2163. Jika dalam program menjadi seperti ini.

int data;//mendeklarasikan tipe data
data=2163;//variabel nilai berisi 2163

Cukup sulit bukan jika ditampilkan kedalam seven segment, jika kita menggunakan LCD 2×16 maka akan sangat mudah sekali menampilkannya. Tetapi tenang saja, disini saya akan menjelaskan cara mengatasi permasalahan diatas dengan menggunakan beberapa tambahan algoritma pemrograman.

Sekarang saya akan memberikan sebuah solusi dari permasalahan diatas untuk menampilkan isi dari sebuah variabel ke dalam seven segment. Rangkaiannya masih sama seperti gambar diatas.

Caranya adalah:

Dengan melakukan pembagian dengan angka 10 sebanyak 4 kali, dimana sisa dari pembagian tersebut akan ditampilkan berupa satuan, puluhan, ratusan dan ribuan.

data=2163;

data dibagi 10, hasilnya adalah 216 dan menghasilkan sisa pembagian yaitu 3, angka 3 tersebut kemudian disimpan kedalam variabel satuan.

sekarang data=216 (karena sudah bagi 10 sebelumnya), dengan cara yang sama.

data dibagi 10 lagi, hasilnya adalah 21 dan menghasilkan sisa pembagian yaitu 6, angka 6 tersebut kemudian disimpan kedalam variabel puluhan.

sekarang data=21

data dibagi 10 lagi, hasilnya adalah 2 dan menghasilkan sisa pembagian yaitu 1, angka 1 tersebut kemudian disimpan kedalam variabel ratusan.

sekarang data=2

data dibagi 10 lagi, hasilnya adalah 0 dan menghasilkan sisa pembagian yaitu 2, angka 2 tersebut kemudian disimpan kedalam variabel ribuan.

Untuk dapat mengimplementasikannya keprogram dibutuhkan sebuah intruksi % (dalam bahasa C adalah operator untuk operasi sisa pembagian). Berikut adalah listing program lengkapnya untuk mengatasi masalah diatas.

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

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

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 main(void)
{
PORTC=0xff;
DDRC=0xff;

PORTD=0x0f;
DDRD=0x0f;

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

data=2163;

while (1)
      {
      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;

      tampil_7segment();//fungsi untuk menampilkan ke 7segment
      };
}

Semoga bermanfaat…

About these ads
 
8 Comments

Posted by on April 28, 2011 in Tutorial AVR

 

Tags: , , , , ,

8 responses to “PROGRAM MENGAKSES SEVEN SEGMENT MENGGUNAKAN CODEVISION AVR

  1. aa

    May 5, 2011 at 17:53

    mas cri transistor 2n3702 dmn ko ga da? lw 2n3704 bnyak mas?
    mohon infonya

     
    • ElectrO-cOntrOl

      May 5, 2011 at 19:03

      untuk transistor yang penting jenisnya PNP, karena pada aplikasi ini transistor hanya difungsikan sebagai saklar elektrik. Untuk transistor 2n3704 itu bertipe NPN, jadi tidak support dengan hardware pada aplikasi ini. Penggunaan transistor untuk aplikasi ini diharuskan menggunakan PNP, gunakan transistor bertipe apa saja yg penting PNP. saya saja menggunakan transistor A562.

       
  2. gesta

    May 9, 2011 at 10:54

    mas saya mau menanyakan??? gimana kalo mau menampilkan angka pada seven segmen jika menggunakan input.an keypad 3×4..mhon pencerahanya mas..

     
    • ElectrO-cOntrOl

      May 20, 2011 at 15:28

      klo untuk keypad 3×4 anda tinggal mengurangi jumlah input atau outputnya saja… tetapi anda bisa juga menggunakan program yang sudah saya buat

       
  3. irfanu

    July 20, 2011 at 07:53

    OK i try

     
    • ElectrO-cOntrOl Team

      July 21, 2011 at 03:00

      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.

       
  4. joe8370oe

    November 9, 2011 at 20:19

    mas boleh saya belajar disini?

     

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: