Bingung nch mau ngapain minggu-minggu menunggu seminar skripsi akhirnya
teringat ada temen kampus yang tanya tentang 7 segment mulai dech
membongkar file-file di komputer tentang 7 segment yang udah sy buat
dulu. ok sebelumnya kita harus tahu dulu apa itu seven segment.
Ringkasnya 7 segment merupakan komponen yang berfungsi sebagai penampil
karakter angka dan karakter huruf. 7 segment tersusun atas led-led.
lihat gambar dibawah ini untuk lebih jelasnya.
Dari gambar diatas ada 2 jenis 7 segment yaitu common cathode dan common
anode. perbedaanya cuma cara menghidupkan 7 segment tersebut.
Untuk common cathode pin kaki a b c d e f g harus diberi tegangan vcc
dan pin gnd di hubungkan ke ground agar 7 segment menyala. Sedangkan
untuk common anode pin a b c d e f g harus dihubungkan ke ground dan pin
vcc di hubungkan ke vcc agar 7 segment menyala (lihat gambar diatas).
1. Project 1 (Menampilkan angka 0 - 9)
Pada project 1 ini kita mengendalikan 7 segment ini menggunakan mikrokontroller. Buat rangkaian berikut ini bisa langsung menggunakan real mikrokontroller atau menggunakan proteus sebagai simulasi.
Komponen yang dipakai ATmega 8535 dan 7 segment jenis common cathode. pin a b c d e f g pada 7 segment dihubungkan di PORTC sedangkan pin gnd dihubungkan di PORTD 3 (port yang dipakai ini bisa anda rubah sesuai kebutuhan).
Selanjunya kita akan menuliskan angka 0 - 9 pada 7 segment dengan 7 segment berjumlah satu. Bagaimana caranya..? lihat skematik isi dari 7 segment pada gambar diatas. Untuk angka 1 maka yang perlu dihidupkan adalah pin b dan c pada 7 segment sehingga di mikrokontroller kita perlu mengeset PORTB 1 dan PORT B 2 dengan nilai 1 dan PORT D3 dengan nilai 0 ( PORTD 3 sebagai grn maka diberi nilai 0) , angka 2 yang perlu dihidupkan adalah pin a b g e d pada 7 segment. demikian seterusnya sampai angka 9. program di CAVR sebagai berikut :
1. Project 1 (Menampilkan angka 0 - 9)
Pada project 1 ini kita mengendalikan 7 segment ini menggunakan mikrokontroller. Buat rangkaian berikut ini bisa langsung menggunakan real mikrokontroller atau menggunakan proteus sebagai simulasi.
Komponen yang dipakai ATmega 8535 dan 7 segment jenis common cathode. pin a b c d e f g pada 7 segment dihubungkan di PORTC sedangkan pin gnd dihubungkan di PORTD 3 (port yang dipakai ini bisa anda rubah sesuai kebutuhan).
Selanjunya kita akan menuliskan angka 0 - 9 pada 7 segment dengan 7 segment berjumlah satu. Bagaimana caranya..? lihat skematik isi dari 7 segment pada gambar diatas. Untuk angka 1 maka yang perlu dihidupkan adalah pin b dan c pada 7 segment sehingga di mikrokontroller kita perlu mengeset PORTB 1 dan PORT B 2 dengan nilai 1 dan PORT D3 dengan nilai 0 ( PORTD 3 sebagai grn maka diberi nilai 0) , angka 2 yang perlu dihidupkan adalah pin a b g e d pada 7 segment. demikian seterusnya sampai angka 9. program di CAVR sebagai berikut :
Spoiler :
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 07/01/2013
Author : Bayu Sasongko
Company : Teknik Elektro UNILA
Comments:
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
while (1)
{
PORTC=0b00111111; //angka 0
delay_ms(100);
PORTC=0b00000110; // angka 1
delay_ms(100);
PORTC=0b01011011; //angka 2
delay_ms(100);
PORTC=0b01001111; // angka 3
delay_ms(100);
PORTC=0b01100110; //angka 4
delay_ms(100);
PORTC=0b01101101; // angka 5
delay_ms(100);
PORTC=0b01111101; //angka 6
delay_ms(100);
PORTC=0b00000111; // angka 7
delay_ms(100);
PORTC=0b01111111; //angka 8
delay_ms(100);
PORTC=0b01101111; // angka 9
delay_ms(100);
}
}
(login dulu ke account google anda untuk mendownload)
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 07/01/2013
Author : Bayu Sasongko
Company : Teknik Elektro UNILA
Comments:
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
while (1)
{
PORTC=0b00111111; //angka 0
delay_ms(100);
PORTC=0b00000110; // angka 1
delay_ms(100);
PORTC=0b01011011; //angka 2
delay_ms(100);
PORTC=0b01001111; // angka 3
delay_ms(100);
PORTC=0b01100110; //angka 4
delay_ms(100);
PORTC=0b01101101; // angka 5
delay_ms(100);
PORTC=0b01111101; //angka 6
delay_ms(100);
PORTC=0b00000111; // angka 7
delay_ms(100);
PORTC=0b01111111; //angka 8
delay_ms(100);
PORTC=0b01101111; // angka 9
delay_ms(100);
}
}
(login dulu ke account google anda untuk mendownload)
2. Project 2 (menampilkan angka sampai ribuan)
Pada project ini kita menggunakan 4 buah 7 segment yang mampung menampilkan nilai pada variabel tertentu. Buat rangkaian seperti dibawah ini :
Dari gambar diatas terlihat bahwa 7 segment terhubung paralel antara
yang satu dengan yang lain. Dalam menampilkan data dengan susunan 7
segment seperti ini kita perlu menggunakan teknik scaning. apa itu
teknik scaning...? kita kembali dulu pada project 1, pada project
tersebut seandainya kita ingin menambah 7 segment tapi dilain port misal
PORTD memang bisa tetapi hal itu tentu sangat boros. Bayangkan
seandainya kita perlu menambah 4 seven seven segment, berapa port
banyaknya yang kita butuhkan...? tentu banyak khan....karena 1 seven
segment membutukan 8 PORT pada mikrokontroller. Maka untuk menghemat
PORT kita menggunakan teknik scaning ini. Pada teknik ini sebenarnya
yang kita kendalikan adalah kolom mana yang hidup. Ok lihat gambar
diatas misal kita ingin menampilkan nilai 4657 maka pertama-tama kita
kirimkan nilai 7 pada PORTC, maka dapat dipastikan bahwa keempat seven
segment menunjukkan angka 7. namun yang kita inginkan adalah nilai
satuannya maka kita kendalikan kolomnya yaitu dengan mengatur PORTD.
Lihat seven segment yang kita ingin hidupkan hanya yang paling kanan
(satuan) maka PORTD0 kita beri nilai 0 dan PORTD1,PORTD2,PORTD3 diberi
angka 1 sehingga hanya seven segment yang paling kanan yang hidup.
Begitu seterusnya untu seven segment yang menunjukkan angka puluhan maka
PORTD1 diberii nilai 0 sedangkan PORTD yang lain 1. Untuk coding
lengkapnya silahkan lihat dibawah ini :
Spoiler :
#include <mega8535.h>
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp;
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
data=4657;
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
while (1)
{
ambil_data();
tampilkan_seven_segment();
};
}
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp;
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
data=4657;
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
while (1)
{
ambil_data();
tampilkan_seven_segment();
};
}
variabel data merupakan variable yang nilainya akan ditampilkan ke 7
segment. Silahkan anda coba ubah-ubah sesuai kebutuhan. Berikut tampilan
screenshootnya:
download coding lengkapnya disini (Login ke account google anda terlebih dahulu sebelum men-downlod).
Sekarang rangkaian kita modif untuk counter up dan counter down. Tambah switch push button misal pada PORTB. Rubah DDRB menjadi intput (DDRB=0x00;) aktifkan internal pull up (PORTB=0xFF;). buat rangkaian seperti dibawah ini :
programnya sebagai berikut :
Spoiler :
#include <mega8535.h>
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp,x;
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
data=0;
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
while (1)
{
for(x=0;x<50;x++)
{
ambil_data();
tampilkan_seven_segment();
}
if (PINB.0==0)
{
data++;
if (data>9999)
{
data=0;
}
}
if (PINB.1==0)
{
data--;
if (data<=0)
{
data=0;
}
}
};
}
Screenshootnya seperti dibawah ini:
Download projectnya lengkap disini.
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp,x;
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
data=0;
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
while (1)
{
for(x=0;x<50;x++)
{
ambil_data();
tampilkan_seven_segment();
}
if (PINB.0==0)
{
data++;
if (data>9999)
{
data=0;
}
}
if (PINB.1==0)
{
data--;
if (data<=0)
{
data=0;
}
}
};
}
Screenshootnya seperti dibawah ini:
Download projectnya lengkap disini.
4. Project 4 (Menampilkan data ADC)
Selanjutnya kita modif rangkaian diatas untuk menampilkan data ADC ( analog to digital konverter). Dalam percobaan ini menggunakan potensiometer untuk mendapatkan tegangan output yang akan dirubah menjadi nilai digital. Buat rangkaian seperti dibawah ini :
Programnya sebagai berikut :
Spoiler :
#include <mega8535.h>
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp,x;
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
data=read_adc(0);
for(x=0;x<50;x++)
{
ambil_data();
tampilkan_seven_segment();
}
};
}
Screenshoot hasilnya sebagai berikut:
Download Poject lengkap disini.
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp,x;
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
data=read_adc(0);
for(x=0;x<50;x++)
{
ambil_data();
tampilkan_seven_segment();
}
};
}
Screenshoot hasilnya sebagai berikut:
Download Poject lengkap disini.
Setelah kita dapat menampilkan data ADC, sekarang kita naik lagi yaitu membuat termometer digital dengan sensor suhu LM35 dan menampilkannya dengan seven segment. Buat rangkaian seperti dibawah ini:
Programnya sebagai berikut :
Spoiler :
#include <mega8535.h>#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int satuan,puluhan,ratusan,ribuan,data,data_temp,x;
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void ambil_data()
{
data_temp=data;
satuan=data_temp%10;
puluhan=(data_temp/10)%10;
ratusan=(data_temp/100)%10;
ribuan=(data_temp/1000)%10;
}
void tampilkan_seven_segment()
{
PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[satuan];
delay_ms(1);
PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTC=angka[puluhan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTC=angka[ratusan];
delay_ms(1);
PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;;
PORTC=angka[ribuan];
delay_ms(1);
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
data=read_adc(0)*0.488;
for(x=0;x<100;x++)
{
ambil_data();
tampilkan_seven_segment();
}
};
}
Hasilnya seperti dibawah ini :
Download project lengkap disini.
0 komentar:
Posting Komentar