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://leselektronika.blogspot.com/
// Sharing melalui e-mail di: munandar89@yahoo.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...
Kalo ada kekurangan dari tulisan saya atau ada yang mau sharing, silahkan share di kolom komentar...
oke terima kasih banyak gan.
BalasHapusya sama-sama.. mas
BalasHapusmas boleh tanya donk, saya tertarik membuat rangkaian untuk kebutuhan papan score...
BalasHapussebelumnya saya adalah lulusan teknik informatika untuk mslh program bsa dipelajari..
lah untuk mslh mikrokontroller AVR ATmega 16 ini menghubungkan dengan PC gmn ya? kan haru dihubungkan ke PC dlu untuk diflash programnya???
makasih banyak mas.. :)
Sama- sama mas....
HapusKalau untuk memasukan program flashnya ke mikrokontroller dengan menggunakan bantuan alat khusus namanya " DOWNLOADER " mas...
saya kira itu semoga bisa sedikit terbantu....
mas bisa minta program dan rangkaian papan scorenya gak??
Hapusmaaf mas untuk programnya dan rangkaiannya saya belum buat,,, tapi kalau mas mau buat tinggal rubah saja.. kalau rangkain tinggal tambahin input... untuk program modifikasi saja dari program di atas,,,,
Hapusmas bisa tolongin buat program up down counter dengan atmega16 dengan output lcd dong mas
BalasHapusboleh insyaallah nanti kalau ada kesempatan saya coba postingin mas...
Hapusok mas di tunggu postingan nya...
Hapusuntuk tutorial counter updown yang display lcd sudah saya postingin..
Hapusmang di cek...
--> http://leselektronika.blogspot.com/2013/07/counter-up-down-display-lcd.html?showComment=1374227033312
semoga bisa terbantu...
ok mas maksih bantuan nya....
Hapusya sama-sama mas bekti... semoga bisa terbantu dan bermanfaat..
Hapusmas. waktu saya burn ke atmega16 ny keluarnya EEEE pas di start. itu kenapa y? mohon bantuan ny.
BalasHapusuploadnya (burn) menggunakan software apa mas...?. itu keluar EEEE itu dimananya mungkin masnya bisa lebih diperjelas...
Hapusmas saya tertarik mau bikin ini, tapi di segmen yg ratusan+sibuan mau saya ganti jadi satuan puluhan ,, gimana ya mas ?? mohon pencerahanya ...
BalasHapuskalau mau jadi angka satuan + puluhan... ya tinggal rubah yang di tampil 7 segmentnya,, jadi satuan dan puluhan...
HapusMas broo mau nanya dong, untuk pemula enaknya belajar mikrokontroler pake bahasa C, assembler , codevision atau pake bascom yaa??
BalasHapusPemula nih baru mau belajar padahal alat, atmega16, downloader dan sgala macem udah beli tapi belom bisa digunain.. Hehee
Monggo dijawab...
Thanks ya sebelumnya...
maaf Kang Rivaldi saya baru bisa bales Sekarang..
Hapus- Pada dasarnya untuk memprogram mikrokontroller bisa menggunakan bahasa pemograman apa saja, asalkan ada compilernya (program yang merubah bahasa pemograman ke .hex). karena yang diproses dimikrokontroller (dimasukan kemikrokontroller) bukan bahasa pemogramannya melaikan bahasa mesin (hexadecimal / biner).
- Mengenai bahasa pemograman yang digunakan dari pengalaman saya sih untuk assembler sepertinya lumayan sulit untuk dipelajari he... sementara untuk C sepertinya lebih mudah apalagi otodidak ditambah tutorial di internet juga lumayan banyak....
- kemudian jika menggukan basaha C software yang digunakannya bisa menggunakan codevision. kelebihan Codevision ada setingan codewizard untuk inisialisasi awal hardwarenya. walaupun banyak compiler yang lain seperti AVR studio, ATMEL Studio, Arduino, dll. sementara Bascom itu harus menggunakan bahasa Basic.
- Jika mau nyoba tapi hardwarenya belum ada, akang bisa menggunakan software simulasi ISIS PROTEUS. saya kira begitu Kang, semoga dapat terbantu...
Waduhh kang aris baik bgt mau berbagi, semoga barokah ilmu nya kang...
HapusMakasih balesanya jd makin semangat dan makin mantap buat milih codevision utk belajar...
Kalo ada contekan tolong kirim email dong kang buat coding kontrol servo yg langsung puter kiri-kanan dan seterusnya ya kang..
Rencana mau bikin robot-robotan kang pake 2 servo
Maap ya kalo ngerepotin..
Rivaldi89@yahoo.com
Amien... Maju terus pantang mundur kang.... he... semoga robotnya cepet jadi...
HapusPA..,izin bertanya..,untuk meng-up dan meng-down kan 7 segment dengan sekali tekan push button up atau down push button down itu bagaimana..?,apakah bisa..,bisa di share program nya pa...?
BalasHapusterimakasih di tunggu jawabannya
yang maksud kang Sahlan kalau ditekan tombol down sekali jadi count down (turun terus) atau sebaliknya. begitu bukan kang maksudnya?.
Hapusjika benar, ya bisa saja, akang tinggal rubah sedikit program inputnya jadi seolah-olah neken terus, saya kira begitu kang... semoga bisa terbantu...
..,saya udah coba mengganti program inputnya supaya up down nya berfungsi otomatis tapi tetap tidak bisa ..,kalau menurut mas apa yg harus di ubah ya di bagian inputnya
Hapuskang sahlan coba aja programnya di posting dulu.. barang kali saya bisa bantu kalau belum melihat program yang kang sahlan jadi agak susah...
Hapus--> Semangat terus kang belajarnya... he...
maaf mas saya ingin buat project ini, tpi 2 digit, yg di rubah apa ya mas?
BalasHapusterus segment yg di gunakan anodha apa catodha mas...mohon pencerahanya :)
untuk kang danang silah coba saja yang dirubanya..
Hapus- variable ratusan dan ribuan dibuang z.
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;
PORTC=ribuan;//mengirimkan data ribuan
PORTD=0b11110111;//menyalakan digit1
delay_ms(5);
PORTC=ratusan;//mengirimkan data ratusan
PORTD=0b11111011;//menyalakan digit2
delay_ms(5);
- if (TCNT1==10000){TCNT1=0;} dirubah jadi if (TCNT1==100){TCNT1=0;}
untuk 7segmentnya menggunakan comond anoda kang..
semoga bisa terbantu...
gan mau nanya saya mau bikin papan skor ne ada ngak cntoh program.skematik dan proteusnya makasih sebelumnya
BalasHapuskalau untuk programnya saya belum ada kang, tapi kalau mau buat bisa saja, untuk skematik kurang lebih hampir sama dengan di atas, paling tiggal tambahin 2 tombol lagi, kemudian kalau mau menggunakan 7segment yang ukuran besar (tegangan >= 12 V) pin A-H dan PIN D0-D3 ditambah ULN2803. untuk programnya tinggal edit dari program diatas konsepnya hampir sama. saya kira begitu kang ridho...
Hapusmau tanya mas.. saya coba bikin sperti yang di atas.. sukses namun display 7 segment nya kedap kedip gtu? gmna supaya ga kedap kedip ya mas? makasih
BalasHapusrancangan display di atas menggunakan sistem scaning, yaitu menampilkan nilai di 7segment secara bergantian dari 7segment 1 ke yang lainnya, proses pergantiannya itu yang menyebabkan kedip, untuk kedipnya supaya tidak tampak oleh mata kita, maka intervalnya dipercepat, dengan kata lain, nilai delaynya diperkecil. saya kira begitu kang alan semoga bisa terbantu.
Hapuskang aris, ini permasalahannya. ketika delay saya perbesar(delay_ms(100)) yang terjadi nilai di 7 segment bergantian lambat(segment 1,2,3,4) namun teratur penghitungannya (1-2-3-dst) tapi ketika delay saya perkecil(delay_ms(2)) yang terjadi nilai di 7segmentnya berkedip alias bergantian cepat(segment 1,2,3,4) tapi penghitungannya agak ngawur kang. jadi gak urut seperti ketika delay diperbesar tadi gan. gimana solusinya agar ketika delay itu diperkecil(ttep delay_ms(2)) tapi berurutan perhitungannya(1-2-3-4-5-dst)? mohon petunjuk kang...trims
Hapusini dicoba di pcb atau hanya di simulasi, harusnya kalau di aplikasikan di pcb dengan delay 2 ms itu sudah bagus kang, nilai akan stabil, tetapi kalau di simulasi proteus ada kemungkinan displaynya kurang stabil akibat dari kemampuan memori komputer yang lambat, atau jika masih belum bisa coba di portc di clear dulu sebelum nampilin datanya, saya kira begitu kang fuady semoga bisa terbantu.
Hapusmas mau tanya, jika counternya di tambah alarm bisa g? maksudnya bisa di set pada hitungan tertentu atau angka tertentu akan menyalakan alarm atau lampu.
BalasHapusbisa aja kang, tinggal tambahin aja programnya biar di anggka yang sudah ditentukan nanti bunyi alarm atau menyalakan lampu.
Hapusmas, bisa bantu programnya kalo setiap kelipatan 10 alarm berbunyi? terimakasih..
Hapusinsyallah nanti kalo senggang kang, saya coba.
Hapuskalau dibuat papan skor dengan penampilan 2 seven segment tiap tim dan 4 push button,, program.a gmna gan, bisa bantu kah ?
BalasHapusbisa aja kang, tinggal tambahin tombolnya, dan display dipisah. kemudian buat variable baru untuk counter satunya lagi. untuk logic programnya hampir sama dengan contoh diatas, saya kira begitu kang...
HapusMas, cara bikin program counter dengan arduino gmn ya mas? saya sudah bikin 7segment yg disusun menggunakan LED,. gini mas cara kerjanya saya untuk inputnya menggunakan program vb6. misal yg nilai d textbox 100 akan di tampilkan di 7segmentnya 100 juga, rencana saya mau masukin inputan tiap segment ke arduino mas..
BalasHapusgimana ya, agak susah kalo dijelasin.. he....
Hapusmungkin gini kali mas.. nanti dari VB nya kirim data ke arduino menggunakan serial (UART), kemudian datanya ditampilin di 7 segment.. untuk logika penampilan datanya bisa menggunakan logic di atas. cuman di instruksi pemogramannya agak beda nanti, saya kira bigutu mas.. maaf kalo kurang jelas.. he,...
MAAF SAYA MAU NANYA UNTUK PIN TOMBOL UP DOWN DAN RESET NYA PIN BERAPA YA MAS ITU THKNS
BalasHapussilahkan lihat langsung aja di skematiknya kang..
Hapusmas kalau boleh minta nanya neh.klo outputnya dibikin sendiri untuk satuan sampe ribuan gimana listing programnya. jadi ntar pake 4 ic driver untuk seven segmenya.jadi atmega 16 ngeluarin 4 unit port BCD.trima kasih
BalasHapusya bikin aja mas, per 1 display 4 pin, tampilinnya tetap gantian..
Hapusok mas thank.saya ada tanya lagi lewat email.
BalasHapusok kang sama - sama..
Hapusmas kalo boleh tanya, gmna yah bikin rangkaian untuk odometer pengukur jarak?
BalasHapusuntuk yang sederhana mungkin bisa menggunakan sensor reedsweet yang dipasang di ban, utuk menghitung jarak. pertama hitung dulu keliling lingkaran ban. jika sudah setiap sensor yang kedetek (satu putaran) dikali dengan keliling tadi. berarti jarak yang ditempuh = jumlah putaran ban x keliling lingkaran ban. semoga bisa terbantu...
Hapusmas mau nanya dong, contoh program counter rgb led matriks 16x5 gimana ya?
BalasHapusthanks gan. Izin copas.
BalasHapusizin download gan :)
BalasHapussalam kenal Mas Aris,counter up/down diaplikasikan ke radio komunikasi bisa nggak,kebetulan radio saya kenwood tm 7930 displaynya dari lcd mati.kalau bisa saya ingin rubah pakai 7segmen 4digit berbasis microcontroler atmega,mohon penjelasannya.sugeng.
BalasHapusmas aris kalau pin yg tersisa supaya keluar biner untuk 3 digit itu nulisnya gimana mas trims
BalasHapuslinknya mati mas nggak bisa didownload
BalasHapusAss bg, salam kenal.
BalasHapusKalau yg hanya menggunakan satu 7 segment ada gak ya bg, masih menggunakan atmega 16, sekalian dngan program nya.
Trimakasih.
gan bisa ga ini dipake atmega52 ?
BalasHapusgan kalau inputnya sensor ultrasonik bagaimana ya?
BalasHapusGan . Mahu codes dan proteusnya bisa ngak. Yg di atas tk bisa download. Pliss gan
BalasHapusMas bisa menggunakan bahasa bascom avr. Tks
BalasHapusMas tolong yang bisa bantu saya kemaren sudah coba buat tapi kendalanya ada 1 komponen TR2N3702 tidak ada jadi kalo saya ganti bisa diganti tipe apa mas ? / bagaimana solusinya? Tmks
BalasHapusmas link untuk proteusnya rusak, bisa kirim ke email ini 15524073@students.uii.ac.id
BalasHapusKaka....Apakah coding di atas bisa diapload ke arduino uno atau tidak bisa?
BalasHapuslink rusak mas
BalasHapusnunggu postingan counternya di tambah alarm kapan mas, maksudnya bisa di set pada hitungan tertentu atau angka tertentu akan menyalakan alarm atau lampu.
BalasHapusseumpama di ganti atmega 8 apa yang drubah mas
BalasHapusGan,link nya di perbaharui dong
BalasHapustiktok beğeni satın al
BalasHapus