nea 7seg

8
7/23/2019 nea 7seg http://slidepdf.com/reader/full/nea-7seg 1/8 ntara CC (common cathoda) dan CA (common anoda) mempunyai perbedaan yang mendas ar yaitu cara untuk mengaktifkan/menyalakan tiap segmennya. Untuk CC agar segmennya dapat menyala harus diberi logika HIGH (misalnya 5V), se dangkan untuk CA agar segmennya dapat menyala harus diberi logila LOW (GND). Berikut adalah cara untuk menampilkan angka pada CA dan CC, disini saya akan men ampilkan 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 logi ka 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 sev en segment. Selain dari itu seven segment dapat pula dibentuk karakter selain an gka, teman-teman hanya tinggal menyesuaikannya sesuai keinginan dengan menyalaka n segment yang diinginkan. Sekarang saya akan menjelaskan bagaimana cara kerja seven segment jika di-interf ace-kan dengan mikrokontroler. Dimisalkan saya ingin menampilkan angka 2163 pada  seven segment, maka saya akan membutuhkan 4 buah seven segment (digit1=2, digit 2=1, digit3=6 dan digit4=3). Dan pada prinsipnya cara kerja seven segment dilaku kan 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 seg ment digit2 dengan mematikan digit1, digit3 dan digit4 dan seterusnya sampai men ampilkan angka 3 pada digit4?. Metode inilah yang dinamakan scanning, dengan mel akukan scanning secara cepat (biasanya 25x dalam 1 detik), maka mata kita tidak akan bisa mengikuti scanning seven segment tersebut sehingga seolah-olah mata ki ta akan melihat bahwa semua seven segmen (digit1-digit4) menyala secara bersamaa n. Pertanyaaannya, mengapa kita menggunakan metode scanning? Jawabannya dikarenakan  metode scanning dapat mengurangi konsumsi daya listrik dibandingkan dengan meny alakan semua seven segment. Dan yang paling penting yaitu dapat menghemat pemaka ian pin-pin mikrokontroler, sehingga tidak banyak input/output yang terpakai unt uk mengakses seven segment. Baiklah berikut adalah aplikasi menampilkan angka 2163 menggunakan mikrokontrole r dengan seven segment tipe common anoda (CA). Saya sarankan untuk menggunakan s even segment tipe CA karena nantinya mikrokontroler bersifat sebagai sinking. Un tuk 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;

Upload: tsananidamelodypratiwi

Post on 19-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 1/8

ntara 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 1Sekarang 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 mematikandigit2, 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 tidakakan bisa mengikuti scanning seven segment tersebut sehingga seolah-olah 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;

Page 2: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 2/8

PORTD=0x0f;DDRD=0x0f;

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

digit1=0xa4;//hexa untuk angka 2digit2=0xf9;//hexa untuk angka 1digit3=0×82;//hexa untuk angka 6digit4=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 sayaakan 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 datadata=2163;//variabel nilai berisi 2163

Cukup sulit bukan jika ditampilkan kedalam seven segment, jika kita menggunakanLCD 2×16 maka akan sangat mudah sekali menampilkannya. Tetapi tenang saja, disinisaya 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 samaseperti 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;

Page 3: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 3/8

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=21data dibagi 10 lagi, hasilnya adalah 2 dan menghasilkan sisa pembagian yaitu 1,angka 1 tersebut kemudian disimpan kedalam variabel ratusan.

sekarang data=2data 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 listingprogram 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)

Page 4: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 4/8

{PORTC=0xff;DDRC=0xff;PORTD=0x0f;DDRD=0x0f;

// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=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  };}

 Penjelasan blog diagram1. Membuat rangkaian minimum system dari ATmega 8535 yaitu merupakan mikrokontroler 8 bit dengan kapasitas ROM 4KB dan RAM 128 bytes, yang nantinya dihubungkan dengan rangkaian output, yaitu rangkaian yang mencakup seven segmen, rangkaian minimum system digunakan sebagai pengontrolnya, dan sebagai rangkaian aplikasi tertentu berdasarkan program yang dibuat. dibawah ini merupakan gambar rangkaian dalam pcb minimum system dan simulasi dari rangkaian keypad dan seven segment

Page 5: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 5/8

Gambar . Simulasi dari rangkaian penghitung waktu2. Membuat listing program traffic light,//Library yang digunakan#include <mega8535.h>#include <delay.h>//deklarasi array untuk menampilkan karakter pada seven sgmenunsigned char bil[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//deklarasi untuk keypadunsigned char keypad();//fungsi utamavoid main(void){//variabel lokalint satu ;int dua ;int one ;int two ;int t ;int langkah=1 ; //setting port pada mikrokontroler  PORTA=0x00;DDRA=0xFF;

PORTB=0x0f;DDRB=0xf0;

PORTC=0x00;DDRC=0xff;

PORTD=0x00;DDRD=0x00;  //program utamawhile (1)  {

if (langkah==1){  one=keypad();  langkah=2;}

  if (langkah==2){  two=keypad();}  if (one>50){ goto x;  }  else { goto y;  }  // Place your code here 

//untuk counter up x:  satu=0;

  dua=0;for (satu=0;satu<10;satu++){for (dua=0;dua<10;dua++){  for (t=1;t<100;t++)

if(satu==9&dua==9) 

goto x;  else

Page 6: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 6/8

  {  PORTD.7=1;  PORTD.6=0;  PORTA=bil[dua];  delay_ms(1);

PORTD.7=0;  PORTD.6=1;  PORTA=bil[satu];  delay_ms(1);

//untuk counter downy:for (satu=9;satu>=0;satu--){for (dua=9;dua>0;dua--){

for (t=1;t<100;t++)  if(satu==9&dua==9)  goto x;  else

{  PORTD.7=1;

  PORTD.6=0;  PORTA=bil[dua];  delay_ms(1);

PORTD.7=0;  PORTD.6=1;  PORTA=bil[satu];  delay_ms(1);

}  }  }

}  }

}}}//deklarasi untuk keypadunsigned char keypad(){PORTB = 0b11111110; //aktifkan baris1 (memberi logika 0 ke baris1)delay_ms(100);if(PINB.7==0) return (10); if(PINB.6==0) return (3); if(PINB.5==0) return (2); if(PINB.4==0) return (1);//========================PORTB = 0b11111101;//aktifkan baris2delay_ms(100);if(PINB.7==0) return (11); if(PINB.6==0) return (6); if(PINB.5==0) return (5); i

f(PINB.4==0) return (4);//========================PORTB = 0b11111011; //aktifkan baris3delay_ms(100);if(PINB.7==0) return (12); if(PINB.6==0) return (9); if(PINB.5==0) return (8); if(PINB.4==0) return (7);//========================PORTB = 0b11110111; //aktifkan baris4delay_ms(100);if(PINB.7==0) return (13);

Page 7: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 7/8

if(PINB.6==0) return (15); if(PINB.5==0) return (0); if(PINB.4==0) return (14);}Berdasarkan program diatas dapat diketahui bahwa:PORT pada ATMEGA8535 yang I gunakan yaitu PORT B untuk inisialisasi pada keypad. keypad tidak di buat rangkaian output karena port pada keypad akan langsung diletakkan pada PORT B pada minimum sistemnya.PORT D dan PORT A pada ATMEGA8535 di gunakan untuk inisialisasi seven segment. PORTA sebagai output untuk data seven segment sedangkan PORTD sebagai output daninput pada seven segment untuk control seven segment digit 1 dan 2.

 Dalam hal software pemrograman, saya lebih menyukai menggunakan AVR Studio, karena software ini gratis, dan dengan software ini saya dibuat membuat semua librarynya sendiri karena kita tidak dimanjakan dengan autogenerate code seperti pada

 codevision.

#include#includeint X[5]= {0b11000000,0b11111001,0b10100100,0b10110000,0b10011001};int satuan,puluhan;int main(){DDRA = 0xff;int i;while(1)  {  i=4;

  for(i=4;i>0;i--)  {  pecah(i);  _delay_ms(5000);  }  }}

void pecah(int VALUE){  satuan = (VALUE%10)+0x30;  puluhan = (VALUE%100)/10;  puluhan += 0x30;

  PORTA = X[puluhan];  PORTB = X[satuan];}

Penjelasan dari kode diatas adalah berikut : int X[5]= {0b11000000,0b11111001,0b10100100,0b10110000,0b10011001};

kode diatas berfungsi untuk mendeklarasikan pin mana yang digunakan sebagai bagian dari seven segment untuk membentuk angka tertentu , dimana 0 adalah led7 on dan 1 led7 off, seven segment terdiri dari beberapa part led seperti gambar dibaw

Page 8: nea 7seg

7/23/2019 nea 7seg

http://slidepdf.com/reader/full/nea-7seg 8/8

ah

 pada mikrokontroler, pin yang digunakan hanya 7 buah dimulai dari pin0 - pin 6. seperti angka 0, memiliki nilai 11000000, maka seven segment akan menyalakan led F,E,D,C,B,A dan mematikan led G. dimana setiap pin terhubung dengan susunan berikut :A - PIN0B - PIN1C - PIN2D - PIN3E - PIN4F - PIN5G - PIN 6

untuk memisahkan antara nilai ratusan dan puluhan serta satuan, teman-teman bisa menggunakan rumus berikut

satuan = (VALUE%10)+0x30;  puluhan = (VALUE%100)/10;  puluhan += 0x30;  PORTA = X[puluhan];  PORTB = X[satuan];

value adalah nilai variabel, misalnya 81;untuk mencari satuan dihitung dengan rumus value%10+0x30; ini maksudnya adalah (

81%10) dimana % adalah modulo atau sisa bagi, dimana 81%10 sisa baginya adalah 1, dan ditambahkan dengan nilai 0x30 yang merupakan kode ascii untuk 0. jika ingin paham apa itu kode ascii, teman-teman bisa gunakan tabel berikut untuk referensi :