Simulasi Seven Segment untuk Program Jam Digital dengan Tampilan Jam-Menit-Detik

Seven Segment adalah salah satu komponen yang paling sering digunakan terutama untuk menampilkan data dalam bentuk angka. Untuk itu, Microcontroller Project juga menyediakan simulasi untuk seven segment, yaitu SSLED.exe

Simulasi seven segment yang disediakan oleh SSLED.exe berukuran delapan digit dengan cara multipleks. Cara multipleks adalah cara yang paling sering digunakan karena pengkabelan yang ringkas dan hanya membutuhkan sedikit port untuk mengendalikannya. Cara mengendalikan seven segment yang disusun secara multipleks adalah dengan membagi dua macam jalur berupa jalur data dan jalur pengendali digit. Jalur data digunakan untuk menentukan lampu mana yang menyala, sedangkan jalur pengendali digit digunakan untuk mengatur digit mana yang menyala.

Jalur data dan jalur pengendali digit pada SSLED.exe diterima menggunakan window message berupa WM_USER. Jika lParam bernilai 1, maka sinyal yang diterima akan dianggap sebagai sinyal untuk jalur pengendali digit. Sedangkan jika lParam bernilai 2, maka sinyal yang diterima akan dianggap sebagai sinyal untuk jalur data.

Pada jalur data, bit 0 akan digunakan untuk menyalakan lampu a, bit 1 untuk menyalakan lampu b, dan seterusnya hingga bit 6 untuk menyalakan lampu g. Sedangkan bit 7 digunakan untuk menyalakan lampu titik desimal. Jika sebuah bit bernilai 1, maka lampu yang bersangkutan akan menyala. Hal ini akan sesuai dengan penyalaan lampu pada tipe common cathode. Akan tetapi kita juga bisa membalik data sehingga jika data yang dikirim bernilai FF, maka data tersebut justru akan dianggap 00. Kemampuan ini berguna untuk penyesuaian dengan tipe seven segment yang akan digunakan.

SSLED.exe menyediakan dua cara pengendalian digit, yaitu cara paralel dan cara counter. Pada cara paralel, setiap digit bisa diaktifkan secara individual tergantung nilai bit pada jalur pengendali. Bit 0 pada jalur pengendali akan mengendalikan digit paling kanan dan bit 7 akan mengendalikan digit paling kiri. Jika sebuah bit bernilai 1, maka digit yang bersangkutan akan aktif. Dan seperti halnya pada jalur data, maka jalur pengendali digit juga bisa dibalik.

Pada mode counter, hanya bit 0 dan bit 1 pada jalur pengendali digit yang digunakan. Bit 0 digunakan untuk mereset counter, sehingga digit yang aktif menjadi digit yang paling kanan. Sedangkan bit 1 digunakan untuk menggeser digit yang aktif menjadi digit disebelah kirinya, atau sebutlah sebagai menaikkan cacahan counter. Cara menaikkan cacahan counter pun ada dua macam, yaitu transisi L to H atau transisi H to L. Jika kita menggunakan transisi L to H, maka counter akan dinaikkan cacahannya jika bit 1 berubah kondisi dari 0 menuju 1. Sebaliknya jika transisi yang digunakan adalah H to L, maka cacahan justru akan dinaikkan jika bit 1 berubah kondisi dari 1 menjadi 0.

Jika digit yang aktif adalah digit paling kiri dan cacahan dinaikkan, maka digit yang aktif akan kembali menjadi digit paling kanan.

Gambar di atas adalah contoh bagaimana simulasi seven segment jika dioperasikan untuk menampilkan program jam digital. Program di atas sebenarnya merupakan modifikasi dari program pada bab Interupsi dari buku Mudah dan Menyenangkan Belajar Mikrokontroler, yaitu pada program Timer.A51. Akan tetapi pada buku tersebut kita akan mencoba program pada seven segment yang sebenarnya, jadi kita perlu berhemat hanya dengan menggunakan empat digit saja. Sedangkan pada simulasi ini, kita memiliki simulasi seven segment yang menyediakan delapan digit. Oleh karena itu, kita bisa menampilkan tidak hanya jam dan menit saja, tetapi juga detik. Bahkan kita masih memiliki sisa dua digit. Sisa digit ini kita gunakan untuk memisahkan jam dengan menit dan menit dengan detik, yantu dengan menampilkan tanda (-). Oleh karena itu, kita perlu sedikit modifikasi dari program Timer.A51 agar bisa menampilkan detik dan tanda pemisahan tersebut.

Kode sumber ditulis dengan format M51 dan c dimana sinyal data dikirim menggunakan P0, dan sinyal kendali digit menggunakan P1. Dengan demikian kita harus mengatur P0 untuk dilink secara Link Message dengan message berupa WM_USER dan lParam bernilai 2 serta mengisi Handle dengan Capture Handle ke SSLED.exe yang sedang berjalan. Demikian juga dengan P1. Hanya bedanya pada P1, nilai lParam adalah 1. Dan ingat, buang tanda cek pada menu Update Display pada simulator.

Tapi perlu diingat bahwa program tersebut ditulis untuk berjalan di mikrokontroler dengan kristal 11,592Mhz. Jadi kecepatan perubahan detik pada saat simulasi belum tentu tepat. Dan kecepatannya tergantung kecepatan komputer yang Anda gunakan.

Nah, menarik kan? Selamat mencoba :!:

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.

Comments

saya tertarik melihat tampilan jam digital di 7 segment, tuk melihat lebih jelas rangkaianna dimana ya?

Contoh rangkaian ada di buku Mudah dan Menyenangkan Belajar Mikrokontroler. Atau sebenarnya kita juga bisa memperkirakan rangkaian dengan membaca listing programnya. Sebagai contoh, pada listing program tertulis bahwa port data berada pada P0. Itu artinya, semua lampu segment (a-g+ titik) dihubungkan ke port 0 dengan cara semua lampu yang sama digabungkan menjadi satu. Kemudian tertulis juga bahwa port digit pada P1. Itu artinya digit-digit seven segment dikendalikan oleh P1. Gitu bro.

trima kasih untugg itu…

infonya…
klow bisa tw ap nama IC yang dipake??
dan gambara rangkaiannya pada papan pcb..

harap kirim ke febiiy_sanchez@yahoo.com

ini menyangkut saya NAIK ATAU TINGGAL KELAS…

KUMOHOHN

yah, yang naik kelas bung yoko dunk hehe… liat penjelasan bukunya gamblang kok :)

IDE baru V6 sudah saya donlot and bisa saya pakai simulasi enak mas(tinggal coba write pake alat saya)
mo sekalian tanya neh, saya suka source ini dan mau saya kembangkan untuk timer penyalaan lampu aquarium 3 formasi dengan 3 waktu yg berbeda (ada seh yg jual timer jadi tp 45rb an klo butuh 3 Rp.150.000 mahal dung and habisin tempat)
saya yakin source anda ini bisa saya kembangkan, tp dg assembler perintah yg mirip VB
‘——-batas timer—
dim jamNeon as Time
dim JamLED as Time
dim JamUV as Time
if format(now(),”hh:mm”) > jamNeon and _ Format(now(),”hh:mm”)+durasi > jamNeon then
‘–bla bla bla
nyalakan_Neon
‘–bal bla…. dst
endif

‘–bal bla…. dst

klo asembly mnemonic lebih besar bisa gak ya…?
thx b4

@roy: sebenernya aku belum begitu paham ma pertanyaannya, tp kalo mo pake source pada contoh ini untuk ngatur jadwal, tu bisa dg cara gini:
tu kan ada variabel jam, dan menit. nah, buat bandingin apakah waktu sekarang sudah pada waktu untuk melakukan aktivitas tertentu ato belum, kita bisa melakukannya begini:

          mov   a,#JamNoen
          xrl   a,Jam
          jnz   BukanNeon
          mov   a,#MenitNeon
          xrl   a,Menit
          jnz   BukanNeon
;lakukan penyalaan neon disini
BukanNeon:
;---dan seterusnya...

Tetapi karena mungkin kita akan banyak membuat penjadwalan dan setiap penjadwalan kita gunakan cara membandingkan jam sekarang dengan jadwal, maka akan lebih mudah jika kita menggunakan macro seperti berikut:

~mac TestWaktu JadwalJam JadwalMenit Loncat
          mov   a,JadwalJam
          xrl   a,Jam
          jnz   Loncat
          mov   a,JadwalMenit
          xrl   a,Menit
          jnz   Loncat
~endmac
;penggunaan menggunakan konstanta waktu jam 12:00
          ~callmac TestWaktu #12 #00 BukanNeon
;lakukan penyalaan neon di sini
BukanNeon:
;penggunaan menggunakan variabel JamUV dan MenitUV
          ~callmac TestWaktu JamUV MenitUV BukanUV
;lakukan penyalaan uv di sini
BukanUV:
;---dan seterusnya...

Kuharap ini menjawab pertanyaan :)

Terimakasih mas, wah hebat
[/b]@roy: sebenernya aku belum begitu paham ma pertanyaannya[b]
maaf mas pertanyaanku yg ribet mungkin, tapi hebat bisa jawab persoalanku,
iya mas, aku sekarang punya gambaran dari macro ini

tantangan saya selanjutnya adalah saya akan coba atur agar bisa berjalan di 89C2051 4 digit SS and dg 2 tombol unt setting,3 port untuk nyalain lampu
emm…
.. bisa aku kayaknya..
nanti klo ada kendala, bakal ganggu mas lagi hehe sorry n thx b4 mas

[b]Bisa[/b] 892051 port na P3 and P1
[b]Sepertinya[/b] bisa untuk 4 digit(8 bit data seven segmen) di kemudikan dengan 4 bit untuk menentukan digit aktif, trus 2 bit untuk saklar. sisanya 2 bit untuk atur relay lampu neon
yaahh kurang satu dunk klo untuk 4 lampu (tambah IC TTL pencacah dunk sepertinya)
kecuali ada ide lain apa ya…?

Pengendali digit pake counter 4017 aja. Tu cmos dan murah. Bisa sampe 10 digit lho. Trus cuma butuh 2 pengendali, reset ma clock. Reset untuk mengaktifkan digit pertama, clock untuk memindah ke digit berikutnya. Nah sekarang malah sisa 1 pin port kan?

sip bener mas (saya sudah punya itu 4017 sisa experiment dot matrix dg printerport), atau klo saya ngeyel g mau pake ic tambahan, berarti saya pake 2 skenario lampu saja,
makasih mas

(sticngk this post)
mas klo saya menginginkan downloader untuk default downloader dari anda prosedurnya gimana…?, bisa di jangkau khan..?
Email saya ya…! thx b4

DEFAULT DOWNLOADER untuk micro v 611
saya tidak terburu buru butuhnya mas tapi klo memang ada saya berminat untuk mendapatkan juga, atau default itu juga bisa di fungsikan sebagai DTK..?

NB: mas di micro v6 ini saya menggunakan directive
JAM1 equ 8
JAM2 equ 9
jam3 equ 10

mov SP,#savestack

tapi waktu di SIM(simulasi) SaveStack nilainya kok #08H ..?

thx b4 mas

Default Downloader, nanti kalo sudah ada iklannya di web site ini, berarti itu telah tersedia, gitu ya mas roy :)

Trus untuk pembuatan variabel, seharusnya mas roy pake

~byte jam1 jam2 jam3
          mov SP,#SaveStack

Liat juga di Alokasi memori yang mudah

ocley……aku perlu contoh rangkaian itu dan beberapa lagi…..mohon dikirim ke email q aja….thanq…..moga cepat sukses selalu…

Halo,
MInta info nya kalau pengen memprogram seven segment 4 digit dengan vb gimana caranya nya. Saya udah googling berkali2 blom ketemu.

Thanks

Program seven segment pake VB? maksudnya dikendalikan lewat PC?
Harus ditentukan dulu interfacenya? mo pake Paralel port, ato mau pake PPI?
Klo menurutku lewat paralel port sih sudah cukup untuk mengendalikan 4 digit. Port data untuk mengendalikan segment, trus untuk mengendalikan digit menggunakan port control. Kita bisa menggunakan port control bit 0 hingga bit 3. Akan tetapi harus diingat bahwa hanya bit 2 saja dari port control tersebut yang tidak dibalik.
Cara untuk mewujudkan pengendaliannya sebenarnya sama saja dengan contoh di sini, yaitu dengan cara scanning. Kecepatan scanning 1ms sudah cukup bagus. Gunakan komponen timer untuk menjalankan scanningnya. Sedangkan untuk mengendalikan paralel port melalui VB, Kholid bisa coba googling lg, banyak kok yang mbahas.

mas sulhan,
MInta bantuannya kalau pengen memprogram seven segment 4 digit dengan C menggunakan mikro AVR atmega8535 gimana caranya nya. Saya udah brpwsing2 tetapi lum dapet.

terima kasih

kan kode sumber juga ditulis dengan c (sdcc), kan tinggal kamu sesuaikan dengan hardware km aja. Coba pahami source itu bagaimana kerjanya. Jika cara kerjanya udah bisa dipahami, pake mikrokontroler apapun jg tidak masalah lg. Hanya perlu penyesuaian saja.

OK mas Sulhan,

terima kasih atas pencerahannya, saya akan coba memdalaminya, kebetulan masih pemula jadi agak kesulitan.
kalau ada bahan2 yang bisa sebagai acuan belajar mohon dikirimi ya mas,

mz bisa minta souce code untuk at89c2051 cos aq dapat kok g ada yg bisa ya? kl ada tlng di kirim ke email achmadmuchlis17@gmail.com terimakasih sebelumnya

Siang Kang…Yoko… Setelah saya download rev debouncing saya jalankan ternyata swit yang di P3.3 dan P3.4 jika ditekan membuat digit pertama menyala lebih terang dan titik berkedip2. tetapi tidak bisa ntuk seting jam dan menit. gimana yaaa..?? terus untuk detikan saya coba pasang common anoda digit 1 di P3.5 digit 2 di P3.4 digit 3 di P3.3 digit 4 di P3.2 digit 5 di P3.1 dan digit 6 di P3.0 ternyata gak mau muncul detikannya.. salahnya dimana yaaa???? Tolong dong kaang. dikasi jalan keluar…..please deh ahhhh…

@AHMAD:Contoh yg disini bisa jg buat 89C2051 kok, cuma tinggal menyesuaikan portnya saja. Dan karena hanya ada 15 bit port untuk 89C2051, sementara untuk contoh disini butuh 16 untuk display dan 2 untuk tombol, maka sebaiknya buang saja digit yg hanya menampilkan srtip (-) jadi 6 digit saja. jadi kebutuhan total adalah 14 bit untuk display. Nah, yg jd masalah adalah, untuk tombol masih kurang 1 lg. Kekurangan ini bisa diambilkan dari bagian segment. gunakan 7 bit saja untuk segment dan kita tidak perlu menyalakan titik desimal.
@Deddy: program di deouncing rev memang tidak ada detikannya. yang ada detikannya kan contoh yg disini. untuk hardware pada contoh di sini, sesuaikan dg programnya, yaitu port untuk segment adalah P0 dan untuk digit adalah P1, juga tidak ada penanganan untuk mengubah waktu menggunakan tombol. Plis baca listing programnya dg teliti, dan pahami apa yg sebenernya dilakukan oleh program.

bang aq baru belajar mikrokontroller aq pengen buat jam digital dengan at89c2015 menggunkan 4 digit 7 segmen tpi terbentur sama souce code nya. bisa minta tlng untuk kirimkan souce code ke achmadmuchlis17@yahoo.com
terima kasih sebelumnya

Owh, kalo cuma 4 digit sih, contoh yg di sini jg bisa digunakan, tinggal sesuaikan aja portnya. 89C2951 hanya punya P1 dan P3. Jadi ubah saja PortDigit menjadi P3 dan PortData menjadi P1. Terus, aturlah digitnya agar hanya menampilkan bagian jam dan menit. atau lihatlah Pertanyaan seputar buku “Mudah dan Menyenangkan Belajar Mikrokontroler” dan donlotlah source yg ada di situ.

mz maaf ngerepoti lgi kok masih ada yang error ya di baris 10 n 14? knp ya?

mz saya pakek program read51 saya coba masukkan program yang saya dapat dari mz sulhan tpi kok ada errornya 1. tulisannya
cSio51.c is up to date
Linking c51.obj
c0.OBJ
cSio51.obj
-> cSio51.hex
1 linker error found. Generating error file…
gmn penyelsaiannya mz . mohon petunjuknya biar saya bisa belajar

semua listing program yg ada disini ditulis untuk digunakan menggunakan Microcontroller Project

Kang Yoko.. saya sudah bisa berhasil dengan jam digital tapi masih 4 digit. yaitu jam dan menit aja. gimana ya caranya biar bisa kelihatan detiknya….???? udah bolak-balik saya coba.. masih belum berhasil tuh… tolong dong dibantu bagaimana caranya biar bisa detiknya…atau 6 digit…

@Bli Dedi: dengan menggabungkan contoh program yg ada di sini dengan Debouncing2rev, seharusnya Bli Dedi sudah bisa membuat program jam digital 6 digit yg menampilkan detikan.

Permisi bang. Sampe skrg saya blom tau cara membuat delay yang akurat 1 detik. Kebetulan disini lg ngebahas jam digital. Yang saya mau tanya, program delay 1 detik yang akurat seperti apa ya bang. Sebelumnya saya cuma nyocokin ama stopwatch, kalo blom terasa pas, kudu di re-program lagi.

Delay 1 detik yg akurat bisa dilihat dari listing untuk contoh di artikel ini. Yang jelas, delay akurat harus dibuat menggunakan interupsi timer. Keakuratannya tergantung pada keakuratan kristal yg digunakan.

maaf kalo ngerepotin sebelumnya bang, kebetulan saya nguliknya di bahasa assembler. Saya gak paham dengan bahasa C.

Kalo saya pake kristal, misalnya 1Mhz. berarti periodanya 10^-6s, kalo 1 perintah bernilai 1 siklus. Apakah untuk 1 detik saya membuat pengulangan 1juta kali terhadap siklus ts?!. Apa perhitungannya sesederhana itu bang?

ini delay yang saya buat :

delay:
mov r0,#01h (nilai r0 dan r1 hanya contoh)
mov r1,#0ffh
sjmp penghabis_delay1

penghabis_delay1:
djnz r1,penghabis_delay1
djnz r0,penghabis_delay1
ret

Makasih sebelumnya… maaf merepotkan.

Listingnya kan ditulis pake c dan assembly, tapi assemblynya ditulis untuk menggunakan IDE dari web site ini. Jadi donlot dulu IDEnya ya. Trus, seperti yang sudah saya bilang, kalau mau buat time-base, maka sebaiknya gunakan interupsi timer, bukan menggunakan perulangan dengan djnz. Coba baca Pertanyaan seputar buku “Mudah dan Menyenangkan Belajar Mikrokontroler”. Dan kalau bisa, baca juga bukunya. Di situ dijelaskan bagaimana membuat time-base yang akurat.

gmna cra buat script pada pembuatan jam digital stuan jam dan menit…..

script? maksudnya?

mas, Aq bole minta tolong kirimi contoh program+codingnya ini ke e-mailq ngk.???
kalau semisal bole & ngk keberatan tlg di kirimkan ke lucky_maghfirah@yahoo.com, makaci sebelumnya.. !!!???? :)

@Lucky: Wong tinggal donlot aja ko, tu di tulisan Kode Sumber kan link buat donlot.

saya pemula yang ingin mempelajari mikrokontroller.. Ingin membuat alat sebagai alat pencatat kendaraan yang lewat dengan menggunakan mikrokontroller..
Mikrokontroller apa yang baik sy gunakan??
Apakah buku ini bagus sebagai panduan dalam buat alat saya??
Trims

kurasa pake avr atau mcs51 (AT89S51/AT89S52) tu pilihan yg cukup baik, karena kedua jenis itu harganya relatif murah dibandingkan dg unjuk kerjanya. buku panduan untuk alat yg mau km bikin? kurasa klo yg secara khusus membahas itu tidak akan ada. tp yg lebih penting adalah cari buku yg akan membuatmu mengerti ttg mikrokontroler, setelah itu, apapun yg km inginkan akan bisa km wujudkan (lebay..tidak perlu merasa seperti tuhan). Nah, kurasa buku yg aku tulis, tu bisa membantu bagi yg belum ngerti sama sekali tentang mikrokontroler, agar menjadi mengerti dan mampu memahami mikrokontroler.

mas, boleh minta source code bahasa c buat avr atmega16 donk..
kalo bisa kirim ke email ku ya.. cheche_dunk@yahoo.co.id

assalamualikum bang……..
bang bisa bantu saya buatkan program argometer
dan skema rangkainya pakai at 89s52
sebelumnya terimakasih banyakni bang…………

assss.
permisi,saya baru belajar tentang micro controler dan saya igngin membuat jam digtal dengan 6 digit 7 segmen (jam,menit,detik) kira2 boleh gak aku minta skema jam digital + file hex nya.
sekian terimakasih.

@Doni: Usulan saya tampung :P
@Hartoyo: Listing program bisa langsung didonlot. Sedangkan skema rangkaian sebenernya sama dg contoh seven segment yg ada di buku Mudah dan Menyenangkan Belajar Mikrokontroler hanya dengan menambah 2 digit lagi.

salam kenal mas. saya boleh gak dikasih program listingnya untuk jam digital (jam : menit)dan rangkaian linenya. mohon di emalkan aja ke saya. trimakasi pak.

yang saya maksud diatas tadi mas listing bahasa C u/ ATmega8535

mas sulhan, saya mau tanya ni, di dala buku yang mas buat, jenis2 instruksi bahasa asemblynya lengkap gak..??
saya kebetulan baru ingin belajar mikro kontroler, tapi soal instruksi pemrogramannya gak ngerti, harap di bantu…

@koe: mmm lengkap ga ya? di buku itu instruksi2 bahasa assembly disajikan dalam bentuk contoh2. Jadi, di buku itu setiap instruksi hanya dijelaskan jika pada contoh tersebut menggunakan instruksi itu. Tp menurutku sih, menurutku ya, cara seperti itu lebih mudah untuk belajar, karena kita tidak perlu mengerti semua instruksi terlebih dahulu sebelum kita melakukan percobaan. Kita hanya perlu mengerti instruksi yang memang kita perlukan dalam percobaan. Dan apakah itu lengkap? coba aja liat daftar isinya. Cekitdot gan :D

mas sulhan, saya mau minta source code jam digital menggunakan at89s51..hampir sama dengan Rendra T, hanya jam dan menit saja
dengan menggunakan bhs C
send saja ke e-mail saya yah mas…
terima kasih sebelumnya

@ucox: lha wong tinggal donlot aja kok, kode sumber kan ditulis dalam bahasa assembly dan c, dan itu untuk MCS-51. klo mau cuma jam dan menit kan tinggal buang bagian yg menampilkan detik. Gitu aja ko repot :P

Beli buku buku sulhan ada dimana , apakah bisa beli langsung sebab saya tidak melihat daftar buku dan harganya

@indra: buku bisa dibeli secara online. coba aja search. ato bisa juga langsung ke web site penerbit, biasanya harus register dulu.

ok mas Sulhan,terima kasih atas informasinya

akan saya coba dan jalankan..

bisa bntu sya g mas??
sya sdang mmbwt aplikasi login,
pke keypad matrix yg ada tampilan lcd-nya,,,
password yg saya ketik ingin trlihat “******”
gmn caranya y mas??

mas sulhan…
mau konsul lg nie,ad perubahan trhdp tugas saya ternyata..
saya bleh minta tolong, minta schematic jam digital dgn ic at89s51 menggunakan RTC 12c887 dengan outputan 3 display 7segment (contoh outputan: jam&menit WIB, jam&menit WITA, jam&menitWIT)

thanks b4 mas..

Tinggalkan komentar

(wajib)

(wajib)