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, yaitu 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 ❗

Source
Source

125 Comments

Leave a Reply to Lucky Cancel reply

Time limit is exhausted. Please reload the CAPTCHA.

Notify me of followup comments via e-mail. You can also subscribe without commenting.

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

    1. 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 [email protected]

    ini menyangkut saya NAIK ATAU TINGGAL KELAS…

    KUMOHOHN

    1. 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

    1. @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 🙂

    2. 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…?

    1. 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?

    2. 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

    1. 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

    2. 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

    1. 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.

    2. mas mw nanya untuk program seven segmen pake vb menggunakan metode multi media programnya ada g?

  • 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

    1. 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.

    2. 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 [email protected] terimakasih sebelumnya

    1. @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.

    2. 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 [email protected]
      terima kasih sebelumnya

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

    4. 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

  • 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…

  • 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…

    1. @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.

    1. 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.

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

  • mas, Aq bole minta tolong kirimi contoh program+codingnya ini ke e-mailq ngk.???
    kalau semisal bole & ngk keberatan tlg di kirimkan ke [email protected], makaci sebelumnya.. !!!???? 🙂

  • 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

    1. 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.

  • 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.

  • 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…

    1. @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 😀

  • 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

    1. @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 😛

    2. ok mas Sulhan,terima kasih atas informasinya

      akan saya coba dan jalankan..

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

  • 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..

  • mas bisa minta rangkaian jam digital berbasis atmega8535 dengan bahasa programnya yang ditampilkan ke seven segmen?
    kalo bisa tolong kirim ke email ini:
    [email protected]

    terima kasih atas perhatiannya..

  • mas sulhan apa kbr…mas aq nie lagi TA bkin traffic light pke timer berbasis mikro mcs51…mas saya ksulitan di program mas gk mnta script counter dwoun smpai 45…

    mas hatur nuhun/terima kasih sblumnya…
    mas tunggunya jwbnya…

  • kasih tw dong program untuk bikin itung mundur menit sama detik

    1. org 0h
      mov TMOD,#01H ;aktifkan timer 0 mode 16 bit
      tampil1 :mov R1,#0FFh
      dec R1 ;tambah 1 ke r2
      mov B,#10
      mov A,R1 ;copikan r2 ke A
      Div AB ;A dibagi B
      swap A ;byte rendah dan tinggi ditukar
      add A,B ;menambahkan A dengan B
      Cjne R1,#60,tampil1
      mov p1,A ;copykan isi A ke port1

      Detik1 :mov r0,#100
      Again :mov TH0,#0d8h
      mov tlo,#0f0h
      setb tr0 ;mulai menghitung
      wait :jnb tf0,wait ;cek time overflow
      clr tr0 ;mengosongkan time overflow
      clr tr0 ;selesai menghitung
      djnz r0,again ;ulang siklus sebanyak isi r0

      mov r7,#15h
      mov p2,#00h
      mov ro,#60
      lcall detik1
      dec r0
      mov B,#10
      mov A,R0 ;copikan r2 ke A
      Div AB ;A dibagi B
      swap A ;byte rendah dan tinggi ditukar
      add A,B ;menambahkan A dengan B
      mov p2,A

      saya baru belajar mikon nih,, ini program buat delay 1 detik, tolong dong bagi2 ilmu bgaimana caranya biar bisa itung mundur di seven segment cuman menit sama ddetik doang ko.. tolong kak sulhan^^

  • saya mau tanya,, apa seven segmen ada bermacam2 jenisnya???? kalau ada,, apa saja???? kalau bisa diberi keterangan ya…

    trims…^^

    1. @guruh: ya banyak macemnya lah, dari segment yg digunakan, misalnya ada yg pake lcd, ada jg yg led, boleh jg klo mo bikin sendiri pake lampu pijar. trus klo yg led, tu ada 2 tipe, common anode sama common cathode.

  • terimakasih mz sulhan setelah membeli buku mdah dan menyenangkan belajar mikrokontroller telah membantu saya yang masih awam sekali dalam memahami mikrokontroller. saya sudah bisa membuat led berjalannamun saya terhambat pada contoh tombol1.a51 dengan rangkaian dan jenis IC mikro yang di gunakan. bisakah mz sulhan mengirimkan gambar rangkaian nya? ke alamat email saya. terimakasih sebelumnya

    1. Mikro yg digunakan di seluruh bab dalam buku adalah sama, yaitu keluarga MCS-51, bisa menggunakan AT89C2051, AT89C51, AT89S51, dll. Sedangkan rangkaian untuk percobaan Tombol1.A51, masih menggunakan rangkaian pada percobaan sebelumnya, yaitu percobaan seven segment. Hanya dg menambah pemasangan tombol yg gambarnya ada di halaman 98.

  • Asslm, gimana kabarnya Pak, smg baik, sehat dan selalu dalam lindungan Allah swt. Sdh lama ni gak pegang mikro lagi, ini kok kepingin lagi coba-coba.
    Saya sdh download file source nya jam 8 digit, setelah tak lihat2 kok kayaknya berbeda dengan yah 4 digit ? Kalau yg dulu khan ada proses aktifkan digit dengan mengirim data 0 ke port digit yg diaaktifkan. Lha yg ini saya cari2 kok gak ketemu, apa memang dibuat lain ? Dan itu blm ada tombolnya ya? Kalau langsung dicopykan program tombol yg dulu itu nyambung nggak ya kira2?
    Terimakasih atas jawabannya semoga bisa membuat pemahaman saya lebih baik.

    1. Wa alaikum salam Pak Pri,
      Sebenernya sama saja, pada contoh 4 digit di buku, saya menggunakan tabel untuk mengatur digit yg aktif. Sedangkan pada contoh 8 digit, pengaturan digit yg aktif disimpan dalam variabel DigitAktif. Perhatikan bahwa pada bagian inisialisasi program, variabel ini diisi dengan 1. Kemudian pada proses scanningnya, isi variabel ini yg digunakan untuk menentukan digit yang aktif dan setiap saat digeser ke arah kiri. Untuk pengaturan tombol, karena kebetulan kita menggunakan nama variabel yang sama untuk jam, menit, dan detiknya, maka bisa saja langsung dicopykan dari contoh2 program yang ada pengaturan tombolnya.

  • Asslm wr wb,
    Terimakasih Pak atas jawabannya, tapi setelah saya cermati kode program sepertinya masih ada yg kurang. Ada awal yg hilang,disitu tertulis notasi “~”, ini apa maksudnya? Ini awalnya :

    ~byte Digit DigitAktif Jam Menit Detik Counter8 Counter225
    ;// Digit secara otomatis akan ditempatkan pada alamat 8
    ;// yang merupakan R0 jika bank1 aktif
    ~array 8 Buffer

    …diedit…

    dan ada lagi :

    ;//———————————————–
    ~mac FillBuff Obj BuffPos

    …diedit…

    ~endmac

    Tolong diberi pencerahan apa maksudnya ~byte, ~mac ?

  • O ya sdh tak baca, ternyata ada cara lain saya kira kurang. Sekarang ada pertanyaan lagi. Kalau program yg dibuku jam 4 digit mau saya ubah ke 6 digit seperti ini :

    Digit equ 8
    Buffer equ 9
    Jam equ 13
    Menit equ 14
    Detik equ 15
    Puluhan equ 16
    Satuan equ 17
    Counter225 equ 18
    Counter8 equ 19
    Bendera1Detik bit 20H.0

    apakah bisa untuk buffer harus diberi alokasi 6 alamat, jadi 9,10,11,12,13,14 dan yang bawahnya itu mengikuti jadi: jam equ 15, menit equ 16 dst ?

    ;———–bagian sub-sub program————
    org 0BH ;timer0
    push PSW
    push Acc
    djnz Counter225,Scanning
    mov Counter225,#225
    djnz Counter8,Scanning
    mov Counter8,#8
    cpl Bendera1Detik
    jnb Bendera1Detik,NyalakanTitik
    inc Detik ;1 detik
    mov a,Detik
    cjne a,#60,MatikanTitik
    mov Detik,#0
    inc Menit ;1 menit
    mov a,Menit
    cjne a,#60,PerbaruiTampilan
    mov Menit,#0
    inc Jam ;1 jam
    mov a,Jam
    cjne a,#24,PerbaruiTampilan
    mov Jam,#0
    sjmp PerbaruiTampilan

    Dari listing diatas supaya setiap detik berubah terjadi ‘perbarui tampilah’, maka ditaruh mana ? Itu tempatnya perbaruiTampilan sdh ditempati ‘matikan titik’ ?

    Itu saja dulu, dan isi buffer juga disesuaikan untuk jam puluhan = mov buffer+5,a, jam satuan= mov buffer+4,a dst ?

    Terimakasih atas bantuannya, mohon maaf kalo pertanyaannya kurang berbobot, namanya juga belajar.

    1. memang klo mo bikin 6 digit, jumlah buffer ya harus disesuaikan. terus biasanya klo ada tampilan detiknya, ga perlu ada titik yg dikedip2kan. coba Pak Pri perhatikan bagaimana perbedaannya dg yg 8 digit. tinggal lakukan sedikit penyesuaian saja kan Pak?

  • Ok Pak, sdh saya fahami hanya msh ragu2 saja sampai batasan angka berapa equ itu diperbolehkan. Dan insya allah saya sdh agak faham untuk modifikasi yg 4 digit jadi 6 digit, tolong nanti kalo ada masalah dibimbing.

    Pertanyaan berikutnya : Ini yg sama sekali masih blank, sebenarnya jam ini mau saya fungsikan seperti stop watch, Jadi bisa stop, lanjut dan reset. mungkin kalau reset bisa direset mikronya ya atau lebih pakai program juga?

    Jawabannya sangat saya tunggu Pak, terimakasih atas bimbingannya ,semoga Allah yang membalasnya dan dicatat sebagai amal sholeh, dan senantiasa Pak Sulhan diberikan kesehatan, dan diberikan keselamatan beserta keluarga. amiin.

    1. Kalo mau menambah stop dan lanjut, pertama harus ditambahkan tombol untuk stop dan lanjut itu. Penekanan tombol itu digunakan untuk membalik sebuah bendera katakanlah nama benderanya adalah Run. Kemudian pada bagian interupsi timer, tambahkan baris seperti berikut:

                org   0BH ;timer0
                push  PSW
                push  Acc
                jnb   Run,Scanning
                djnz  Counter225,Scanning
                mov   Counter225,#225
                djnz  Counter8,Scanning
                ....

      Perhatikan bahwa jika bendera Run tidak diset, maka proses perhitungan waktu akan dilewati dan hanya melakukan scanning seven segment saja.

  • Rencananya akan saya tambahkan tombol push button stop dan lanjut sendiri-sendiri, jadi ada dua tombol S1 dan S2. Apa seperti ini programnya, dan nanti ditempatkan dimana ?

    S1: jb S1,S2
    clr run
    S2: jb S2,S1
    setb run
    jml S1
    Harapannya kalau S1 ditekan maka run bernilai 1, dan jika S2 ditekan run bernilai 0.
    Mohon sarannya, terimakasih.

    1. contoh menggunakan tombol kan sudah ada di buku dan cukup lengkap. penulisan program seperti yg pak pri kasih ya jelas salah. jika S1 adalah nama untuk sebuah pin port, maka nama tersebut tidak boleh digunakan sebagai label. oia, untuk memastikan apakah program yg ditulis telah bekerja dg benar atau masih salah, sebaiknya lakukan percobaan menggunakan simulator.

    2. Ok, terimaksih atas penjelasannya. Saya kok blm terbiasa pakai simulator. Kemarin nyoba, tapi untuk seven segmen gak bisa berfungsi. Cara menghubungkan port sdh tak coba sesuai di help tapi msh blm bisa mungkin ada prosedur yg kurang.
      Port setelah tak isi kalau gak salah port 0 dan potr 1 disisi ada yg 1 dan 2, tapi kok gak ada tombol enter atau Ok nya. Tak klik yg user… kok ya gak ada efek ?

    3. lakukan percobaan demo dari demo yg pertama dulu, kemudian demo kedua, ketiga, dst

  • Bang, buku anda “Mudah dan Menyenangkan Belajar Mikrokontroler” kok di toko2 buku sudah ndak ada ya? Aq ke gramedia maupun ke togamas ndak ada. Apa memang sdh tak diterbitkan?

    1. @trijoko: buku sebenernya masih banyak, tp memang tidak begitu tersedia di toko buku konvensional. jadi lebih mudah didapat melalui toko buku online. ada banyak toko buku online yg menjualnya. bisa juga langsung membeli dari website penerbit.

  • Assalamu alaikum wr. wb.

    Alhamdulillah Pak Sulhan saya sudah berhasil meggunakan program simulai untuk jam digital 8 digit. Tapi sekarang ada permasalahan, setelah saya compile dan saya downloa ke dalam rangkaian nyata, ternyata tidak bisa berjalan, hanya tampil angka 8 semua digit dan angkanya tidak berubah. Setelah saya cari-cari, saya punya dugaan bahwa yg disimulasikan itu control digitnya pakai aktif high sedangkan rangkaian saya merujuk pada buku pakai aktif low. Saya sdh coba-coba rubah agar dapat aktif low ternyata masih blm berhasil. mohon bantuannya. Ini listingnya :

    Display: setb RS0 ;aktifkan bank1
    mov PortDigit,#00h ;matikan semua digit
    mov PortData,@R0
    mov PortDigit,DigitAktif
    xch a,DigitAktif
    ;cpl a
    rl a
    xch a,DigitAktif
    inc R0
    cjne R0,#Buffer+8,dispfin
    mov R0,#Buffer
    dispfin: clr RS0 ;aktifkan bank0
    ret

    Baris kedua sdh pernah tak ganti dg 0FFH dan dibaris keenam saya balik a nya ternyata juga msh blm bisa. Mohon bantuannya. Terimakasih sebelumnya.

    Wassalamu alaikum wr. wb.

    1. wa alaikum salam wr.wb.
      apa pak pri jg sudah menyesuaikan port yg digunakan? pada buku yg digunakan adalah port1 untuk data segment dan port 3 untuk pengaturan digit. sednagkan pada contoh 8 digit ini PortData di port0 dan PortDigit di port1.

  • Assalamu alaikum wr.wb.
    Permasalahan kemarin sdh terselesaikan Pak, terimakasih ats bimbingannya. Saya sebenarnya ada 2 pilihan untuk modifikasi, yaitu program 8 digit yang saya tambah dengan tombol untuk setting jam seperti dulu yg Bapak berikan. Yang kedua modifikasi ham 4 digit yg sdh lengkap dgn tombol, tinggal ditambahi 2 dgt lagi.
    Keduanya sdh saya coba, namun keduanya tidak berjalan mulus. Yang ingin saya kemukakan disini modifikasi yg kedua aja, kelihatannya lebih mudah. Semua port sdh saya sesuaikan, dan saya mulai modifikasi program sedikit demi sedikit. Terakhir saya modifikasi daerah awal, buffer saya beri 6 alamat otomatis yg lain saya naikkan 2, tapi hasilnya semua digit muncul 000000, dan tidak berjalan. Dan pada main menu pada program savetack tdk muncul tapi pada source kok muncul dan alamatnya kok 8, dan itu sudah dilapakai untuk digit, apa ini yg jadi masalah? Terus terang untuk urusan memori saya masih kesulitan untuk memahaminya. Apakah alamat yg saya pakai itu melebihi batas ?
    Berikut program lengkapnya setelah saya edit dan tak sesuaikan dg hardware saya. TErimakasih atas bantuannya semoga Allah yg membalasnya, dan dicatat sebagai amal baik.

    source code …. diedit

    1. Wa alaikum salam wr.wb
      Terus terang saya kecewa sekali dg Pak Pri. Dari pertanyaan2 yg Pak Pri ajukan jelas sekali bahwa Pak Pri tidak membaca buku secara keseluruhan, jg tidak benar2 mencoba untuk mengerti jawaban2 yg telah saya berikan. Silakan baca lagi dan pahami halaman 74 tentang tumpukan, kemudian baca juga lampiran 2 Optimasi Penggunaan IDE. Jika percobaan Pak Pri sudah sampai disini, seharusnya Pak Pri sudah membaca halaman 74. Dan satu hal lg yg harus diperhatikan dalam mempelajari pemrograman adalah, cobalah untuk benar2 memahami setiap baris2 program ❗

  • Assalamu alaikum wr. wb.
    Alhamdulillah PAk proyek saya sdh selesai berkat komentar terakhirnya. Jam 6 digit sdh berjalan, juga pemberian tombol untuk stop dan go sdh berjalan. Ada dua versi satu menggunakan saklar on/off dan satunya lagi pakai tombol push button ( dua tombol). Ada beberapa baris perintah yang saya sisipkan pada program. Setelah saya bandingkan dengan stopwacth hasilnya sepertinya sama, tapi saya ragu apakah secara teori mempengaruhi perhitungan timer apa nggak ?

    org 0BH ;timer0
    push PSW
    push Acc

    …………
    …………
    …………

    djnz Counter225,Scanning
    mov Counter225,#225
    djnz Counter8,Scanning
    ….

    1. wa alaikum salam,
      Dalam membuat penghitung waktu, yg pertama harus dihitung adalah seberapa cepat interupsi itu dipanggil. Untuk mengatur ini, kita harus mengatur TMOD, THx dan TLx yg tentu saja perhitungannya tidak bisa dilepaskan dr kristal yg digunakan. setelah kita menentukan seberapa cepat interupsi akan dipanggil, maka langkah selanjutnya tinggal melakukan perhitungan sehingga didapatkan satuan waktu yg diinginkan, misalnya detik, setengah detik, sepersepuluh detik, dsb. Penjelasan ini sebenernya sudah ada pada BAB9.

  • sy tertarik dg tulisan anda diatas,dan kbetulan sy lg blajar mengenal microcontroller,kira2 dmana sy bs mendapatkan buku tsb?sy tgl d SBY.
    Please blz via email aja.thx

  • Assalamu alaikum wr.wb

    Mas aq sudah membuat rangkaian jam digital 4digit.Aq cari listing program yg sdh direvisi soalnya buku saya buku lama jadi kalau menggunakan listing program lama untuk mencocokan jam sulit
    thx

  • asskum.wr.wb
    mas saya mau nanyaq, sebener-a sich request mas. hehehe.
    ginie loeh mas, saya dapat project at89c52 matrix led proteus, truz di project itu saya di suruh untuk menampilkan huruf A, nah yg jadi pertanyaan saya isi listing program-a apa ya mas??
    harap mas reply ke [email protected]

    atas perhatian-a saya ucapkan terima kasih.

  • pada contoh program jam 8 digit itu menggunakan commond anoda, kalau misal di rubah menjadi commond katoda, itu porgramnya jadi berubah tidak mas?? perubahannya dimana??

    1. mas sulhan kalau 7 segment nya menggunakan LED setiap segmentnya ada 12 LED, saya rangkai 3 seri, 3 seri, 3 seri, 3 seri, jadi ada 4 seri lalu saya paralel untuk portdata nya apa harus dikuatkan lagi dengan transistor??? seperti pada matrik led menggunakan transistor untuk pengendali baris dan kolom.

    2. Maksimum arus total dalam satu port untuk AT89S51 dan sejenisnya adalah 71 mA, sehingga setiap pin port hanya bisa dilalui arus sebesar 8 mA lebih sedikit. Sedangkan rangkaian led diparalel hingga 4. Artinya 8 mA ini harus dibagi menjadi 4 buah, yaitu hanya 2 mA. Arus ini tentu saja terlalu kecil untuk menyalakan led. Apa butuh transistor atau tidak? Itu terserah kamu, jika kamu merasa 2 mA sudah cukup, boleh saja tanpa transistor, tapi tentu saja akan sangat redup.

  • Mas.Sulhansetiawan….
    Saya mau tanya nih giman cara menghiting call delay perhitungan menghidupkan seven segment angka 1,2,3,4,5,6,7 sampai 9….

    Rumusnya gimananya klo saya pengin hidupkan angka seven segment 55 …..minta batuannya…….

    1. Maksudnya bagaimana? apa membuat konstanta untuk menampilkan angka? atau bagaimana?
      Kalau untuk membuat konstanta untuk menampilkan angka pada seven segment, bisa menggunakan SSMaker.

  • artikelnya bagus mas,,

    tp tolong dong mas .,,

    kirimin gambar rangkaiannya ke email aq [email protected]

    soalnya ini tugas akhir dari guru aq,,

    mohon bantuannya mas

  • assalamualaikum mas?
    mas saya boleh minta skema jam digital tersebut gak mas..atau kalau saya bisa download dimana mas…

    1. Skemanya mirip dengan skema yang ada di buku, hanya ditambah jumlah digitnya.

  • mas saya mencoba untuk debouncingrev itu berhasil, trs untuk driver segmentnya saya tambahi transistor biar lebih terang menyalanya, kok menyalanya jadi terbalik, untuk mengatasinya gimana mas???

    1. Jawabannya sudah ada dalam pertanyaannya. Kalau nyalanya terbalik, cara mengatasinya tentu saja dengan membalik nyalanya. Terbaliknya bagaimana? Apa yang seharusnya menyala menjadi padam dan sebaliknya? Kalau begitu, baliklah data yang akan dikirim ke port dengan perintah cpl A. Port yang mana? Port yang digunakan untuk menyalakan yang nyalanya terbalik itu.

  • pak cara mengganti 7segmen cathode menjadi anode pada jam digital gimana ya?
    soalnya kemarin saya beli 7segmen cothode malah dikasih anode udah saya coba2 tapi gak bisa2.
    trims

    1. kalau cara lainnya misalnya merubah hardwarenya bisa ngak?

    2. Jika menggunakan MCS-51, maka justru lebih tepat menggunakan 7 segment common anode dibandingkan dengan common cathode. Caranya adalah dengan menyambungkan cathode (segment) ke port melalui resistor 560 ohm, atau jika ingin lebih terang bisa menggunakan 330 ohm (sangat terang). Kemudian untuk anode (common) dihubungkan ke colector dari transistor pnp dimana emitornya dihubungkan ke VCC. Dari basis transistor tersebut dihubungkan ke port melalui sebuh resistor 10K sebagai pengendali digit tersebut.
      7 segment common anode

  • Mas Sulhan program jam seven segment dirubah ke dotmatrix dan disatukan ke tampilan teks dotmatrix, jadi kombinasi ledmatrix teks berjalan dengan jam digital. Bagaimana caranya menyatukan keduanya bergantian.???
    Penalaran program saya masih lambat mas mohon bantuannya.
    terimakasih

    1. Perhatikan pada contoh yang ada di website ini. Pada Interupsi timer, keduanya digunakan untuk melakukan scanning (7segment/matriks LED). Perbedaannya pada contoh jam digital selain digunakan untuk menjalankan proses scanning, juga digunakan untuk menghitung waktu. Nah, tambahkan proses menghitung waktu ini kepada contoh program matriks LED. Kemudian, buatlah prosedur yang setiap satu detik atau setengah detik untuk memperbarui isi BufferDisplay. Apa yang dilakukan? tentu saja menuliskan waktu yang telah dihitung oleh Interupsi Timer. Cara membuat tulisan juga sudah ada pada contoh-contoh di website ini.

  • Bisa gak ya program jamnya digabung dengan rtc ds1307?

    1. Tentu saja bisa. Tambah saja prosedur-prosedur untuk mengakses DS1307, kemudian gantilah pewaktuannya dengan mengambil data dari RTC dan bukan dengan cara menghitung waktu.

    2. satu lagi mas,pewaktuannya disisipkan di program interupsi atau program utamanya?

    3. Pada contoh di sini, interupsi timer berfungsi ganda, yaitu menghitung waktu dan melakukan scanning display. Jika menggunakan RTC, waktu tidak perlu lagi dihitung oleh mikrokontroler, tetapi scanning tetap diperlukan. Jadi, pewaktuannya bisa diambil dari RTC hanya saat dibutuhkan saja. Dalam hal membuat jam digital, waktu yang ditampilkan juga harus diupdate setiap ada perubahan waktu. Penempatannya terserah saja, suka-suka, mau ditempatkan pada interuptsi atau dalam program utama.

      Ada baiknya melakukan sedikit perubahan pada interupsinya, yaitu gunakan interupsi eksternal yang dikendalikan dengan waveout dari DS1307 yang diset pada kecepatan 4KHz. Pada interupsi itu dibagi menjadi beberapa langkah, misalnya dibagi 16 untuk menghasilkan frekuensi 256Hz yang digunakan untuk melakukan scanning. Frekuensi 256 ini juga bisa digunakan untuk membuat bendera-bendera khusus, misalnya bendera 1 siklus 256Hz, bendera pertengahan detik, dan bendera satu detik.Bendera satu siklus akan bermanfaat jika kita membuat animasi. Bendera pertengahan detik dan satu detik bisa kita gunakan untuk update waktu yang ditampilkan.

      Terakhir yang tidak kalah penting adalah bahwa pada saat startup, set waveout untuk berfrekuensi 1Hz dan tunggu dapat interupsinya. Hal ini digunakan untuk mendapatkan waktu yang sinkron dengan RTC. Jadi, saat dapat interupsi ini, lakukan inisialisasi angka-angka pada variabel yang digunakan untuk membuat hitungan yang akan menghasilkan bendera-bendera tadi. Jadi bendera satu detik akan diperoleh tepat pada saat RTC mengalami perubahan detik.

  • assalamu’alaikum master !!
    mau nanya nih (nanya terus ya !! :))
    menggunakan IC RTC itu menyimpan data ke IC tsb, terpisah dengan trik tertentu atau coding nya disertakan bareng dengan program utama.

    terima kasih. marhaban yaa ramadhan “mohon maaf lahir dan bathin”

    1. Wa alaikum salam, selamat menunaikan ibadah puasa, dan mohon maaf lahir dan bathin.

      Programnya bagaimana itu terserah programmernya, style programmer kan unik dan beda-beda. Sebaiknya buatkan fungsi-fungsi khusus untuk berkomunikasi dengan RTC. Misalnya buatkah fungsi-fungsi seperti GetSecond (mengambil detik), GetMinute, GetHour, dll, yang berfungsi untuk mengambil data dari RTC, juga fungsi-fungsi PutSecond (mengubah nilai detik), PutMinute, dll, untuk mengubah data pada RTC. Setelah membuat fungsi-fungsi tersebut, kan tinggal digunakan pada saat dibutuhkan, terserah dimana, mungkin di program utama, interupt, atau dimana saja.

    2. Kalau menyimpan data di eeprom harus di isikan dulu baru digabung dg micro atau sekaligus di donlod sama program utama nya

    3. Eeprom dan kode program adalah sesuatu yang lumrahnya terpisah. Jadi tidak ada hubungannya antara mengisi eeprom dengan mengisi kode mikrokontroler.

    4. Eeprom dan kode program adalah sesuatu yang lumrahnya terpisah. Jadi tidak ada hubungannya antara mengisi eeprom dengan mengisi kode mikrokontroler.

  • mas kalo programnya jam digital dg 6 digit. jam,menit,detik.. itu gmna mas ?

    1. Perhatikan saja contohnya yang 8 digit. Tinggal kurangi proses scan hanya untuk 6 digit, serta mengubah nomor buffer untuk penempatan angka-angka waktunya.

  • pak Sulhan saya mau tanya,semoga bertanya disini tidak salah kamar hehe.. saya praktekan jam digital dengan 7 segmen yang ada di buku, Alkhamdulillah berhasil, tapi kok kedua tombolnya tidak fungsi, ditekan bersama, ditekan salah satu, diteka lama juga tidak berfungsi, apa karena saya pake AT89S52? saya pake file program yang Debouncing2.A51 , apa harus dirubah dulu? kalo ga salah tombol swit1 nyambungnya ke P3.4 -gnd, dan tobol yang satu nyambung ke P3.5 – gnd, mohon pencerahan, terimakasih.