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