Minggu, 20 Desember 2009

HELP Pada Aplikasi Mikrokontroller

.
Baca : Keypad Matriks 4x4 dan LCD 16x2.

Jika anda kesulitan memahami suatu sistem (Hardware) yang berbasis mikrokontroller mengenai cara penggunaan alat, pengoperasian alat, input apa yang harus diberikan, tombol apa saja yang ditekan, dst maka anda akan mencari Manual Book atau buku petunjuknya kemudian membaca secara perlahan.
Bagaimana jika buku itu hilang atau rusak atau halaman tertentu hilang (dan hal ini bisa terjadi bahkan sering) alat tersebut sulit dipahami dan bisa saja jadi tidak berguna karena takut rusak dan sebagainya.

Membuat Help pada aplikasi mikrokontroller bisa dilakukan dan tentu saja tidak bisa dibandingkan dengan Help pada komputer yang lengkap dan mudah, tapi Help yang dibuat pada aplikasi mikrokontroller dapat dibuat sehingga mudah dipahami meski digunakan oleh orang awam sekalipun.

Sebelumnya, ada 2 cara (yang saya ketahui) pembuatan HELP agar cara penggunaan alat yang dibuat dapat dipergunakan oleh orang lain, yaitu :

1. Sequensial (berurutan)
Dengan cara ini maka penggunaan alat haruslah berdasarkan urutan tertentu, yaitu langkah 1 harus dilakukan sebelum langkah 2 dijalankan, langkah 2 harus dilakukan sebelum ke langkah 3, dst. Sehingga langkah 2 tidak mungkin terjadi jika langkah 1 belum dilakukan, dst.
Cara ini sangat efektif untuk kasus tertentu dan kadang cara ini HARUS untuk sistem tertentu.

2. Branching (Percabangan)
Cara ini lebih fleksibel dibanding cara 1, yaitu langkah berapapun bisa dilakukan tergantung keinginan User (pengguna). Karena fleksibilitasnya maka sangat efektif untuk suatu sistem kontroller yang berfungsi untuk mengendalikan banyak sistem lainnya

Hal yang menarik jika menguasai cara menggunakan atau menggabungkan coding Sequensial dan Branching adalah anda bisa merancang sistem yang multi fungsi hanya dengan menggunakan 4 buah Push Button saja sebagai inputannya tanpa memerlukan keypad matrix.
Silahkan berkreasi.

Saya akan membahas tips menambahkan Nama Pembuat, Judul alat, Help, Link Web Site, dst yang bisa diimplementasikan pada mikrokontroller menggunakan gabungan cara ke-1 dan cara ke-2 pada Coding berikut.

Coding ini akan saya bagi menjadi 3 bagian yaitu:
* Main Coding : Coding utama sistem (Cabang Utama).
* State Coding: Coding kondisi pergantian menu help.
* System Coding : Coding tampilan menu Help setiap sistem.

Main Coding
Program utama terdiri dari Inisalisasi mikrokontroller, tampilan pembuka, dan pernyataan switch-case. Tampak sederhana bukan, dan mudah dipahami. Dengan membuat banyak fungsi dan tinggal memanggil fungsi tersebut maka program anda akan menjadi lebih sederhana, mudah dipahami, mudah dikoreksi, mudah dikembangkan, dan lebih terstruktur.

Program ini adalah coding yang akan selalu digunakan baik sebelum memasuki Help suatu sistem maupun sesudah keluar dari Help suatu sistem sehingga disebut sebagai cabang utama. Pada Coding diatas sistem yang ditampilkan Help-nya antara lain : About, Main Help, Help LED, Help UART, Help motor Stepper, Help motor DC, dan Help Buzzer. Setiap sistem menggunakan case tersendiri yang saya beri nama : ABOUT_help, MAIN_help, LED_help, UART_help, STEPPER_help, MTRDC_help, dan BUZZER_help.

State Coding
Program ini terdiri dari : Scanning Keypad matrix 4x4 dan perubahan nilai memori help_mode yang menunjukkan State (kondisi) apa yang sedang diaktifkan. Karena menggunakan keypad matrix 4x4 maka bisa hingga 16 kemungkinan mode yang dapat dipergunakan (tentu saja bisa hingga 999 atau lebih).

Untuk percabangan atau pergantian state dan merupakan inti dari Posting Help pada aplikasi mikrokontroller terletak pada State Coding karena pada bagian inilah yang mengatur pergantian kondisi atau mode HELP pada sistem keseluruhan. Oleh sebab itu jika anda memahami pada State Coding ini akan sangat memungkinkan untuk dikembangkan untuk fungsi lain dan tidak hanya sebagai HELP saja.

Perhatikan pada fungsi SCAN_help(), fungsi ini selain sebagai scanning keypad juga sebagai delay atau tundaan. Diantara pergantian tampilan LCD harus ada delay tertentu agar tampilan LCD dapat terlihat oleh user akan tetapi harus ada pula scanning keypad terus-menerus untuk pergantian mode (state).
Jika menggunakan fungsi delay_ms(1500) akan kesulitan karena
  • keypad tidak akan bisa di scan selama 1500 ms.
  • mencari waktu (timing) yang tepat untuk penekanan keypad akan sulit bagi pengguna.
Oleh sebab itu scanning keypad terus menerus selama 30 kali dan delay antar scanning adalah 50 ms sehingga total delay yang disebabkan scanning keypad adalah 30x50 = 1500 ms.

Scanning keypad menggunakan looping 30 kali dan delay 50ms sehingga 1500 ms tetapi fungsi break akan menyebabkan keluar dari scannig keypad ketika user menekan keypad meskipun belum mencapai 1500 ms, hal inilah yang menyebabkan perubahan tampilah HELP dan perubahan mode (state) bisa kapan saja dan bersifat fleksibel tanpa perlu menunggu suatu event harus selesai.

Oiya saya hampir lupa, Biasanya cara lain yang digunakan untuk mendeteksi penekanan keypad yaitu menggunakan interupsi tetapi disini saya menggunakan cara scanning keypad sehingga keypad memang harus di scan terus menerus dan pada kasus ini tidaklah masalah. Silahkan mencoba dengan cara interupsi.

System Coding
Bagian ini adalah menampilkan Help-help setiap mode (state) yang diaktifkan. Tentu saja bisa digantikan dengan yang lain misalkan anda ingin menampilkan Help-nya sekaligus menjalankan sistem tersebut.

Bagian tersulit adalah "dimana dan kapan harus memanggil fungsi SCAN_help()" untuk setiap sistem karena setiap sistem berbeda-beda. Pemanggilan fungsi SCAN_help() haruslah tepat agar tidak terjadi kesalahan, oleh sebab itu pahami karakteristik sistem anda, kapan sistem "istirahat dan waktunya SCAN_help()".

Fungsi SEQUEN_help() belum saya cantumkan pada Main Coding maupun State Coding, Silahkan anda coba sisipkan beberapa coding sehingga SEQUEN_help() jadi berfungsi dan bandingkan...

Help ini memang belum rumit masih yang sederhana saja, tapi meskipun rumit asal dipahami konsepnya maka Help-nya bisa dibuat.
Cara saya menguji Coding ini yaitu orang baru (awam elektro/anak teknik arsitek) saya minta menyalakan alatnya dan mengoperasikannya tanpa saya bantu and it's work, dia bilang "Wah gampang dipahami nih." (untung IQ yang nyobain ga jongkok Xixixixixi......).

met mencoba ;)

Sabtu, 19 Desember 2009

IC Digital Project : Up/Down Counter

.
DataSheet IC 74HC192, IC 74HC193, dan IC 74LS47.

Perancangan alat ini, bisa menggunakan Mikrokontroller maupun IC digital.
Kali ini akan saya bahas Up Down Counter dgn menggunakan IC digital 74HC192 tampilan berupa Seven Segmen menggunakan IC 74LS47.

Coba bandingkan pada data sheet antara 74HC192 dgn 74HC193, yang saya buat dulu menggunakan IC 74HC193. Simulasi tampilan Seven segmen dengan data BCD silahkan lihat dilink ini (tampilan 0-9 sesuai dengan IC 74LS47).

Sebelum memulai sebaiknya baca dulu posting berikut:
* Display : 7-Segmen dan 16-Segmen
* IC Digital : 74LS47 BCD to 7-Segmen
* IC Digital : 74HC192 Up/Down Counter

7-Segmen yang digunakan adalah Single 7-Segmen Common Anode:







Schematic untuk Up/Down Counter :

Met Mencoba ;)

IC Digital : 74HC192 Up/Down Counter

.
DataSheet IC 74HC192 dan IC 74HC193.

Dengan menggunakan IC digital, dapat dirancang alat Up/Down Counter.
Up Down Counter yaitu Counter (pencacah) yang bisa menghitung naik (Count Up) dan menghitung turun (Count Down) aplikasinya antara lain :
- Jam Digital
- Stopwatch
- RPM counter
- Tachometer
- Product counter
- dll

Konfigurasi Pin IC 74HC192 sebagai berikut :
Pin Input :
CPd, CPu, MR, ^PL, D0-D3.
Pin Output:
Q0-Q3, ^TCu, ^TCd.






  • CPd (Count Down Clock Input) dan CPu (Count Up Clock Input) berfungsi sebagai input clock yg akan memicu (trigger) penghitungan Down atau Up, pemicuan akan terjadi jika pada pin ini terjadi perubahan logika LOW-to-HIGH atau PGT (Positif Going Transition), Baca Flip-Flop Lecture. Penggunaan CPd dan CPu tidak boleh bersamaan, jika CPd diberikan Clock maka CPu harus HIGH dan sebaliknya jika CPu diberikan Clock maka CPd harus HIGH. Pemberian Clock pada CPu dan CPd secara bersamaan menyebabkan kesalahan pada outputnya.
  • MR (Master Reset) Logika 1 pada pin MR dan input lainnya don't care kecuali input CPd menyebabkan output Q0-Q3 logika 0, dan ^TCu logika 1. Output ^TCd memiliki logika yang sama dengan input CPd.
  • ^PL (Paralel Load) berfungsi untuk memberikan nilai pada output Q0-Q3 dari input D0-D3 secara paralel, nilai ini dapat di set sebagai nilai awal sebelum di Counting Up/Down. Saat mode Count Down (CPu HIGH) jika ^PL logika 0 maka ^TCd akan berlogika 0 saat input D0-D3 logika 0 dan CPd logika 0. Saat mode Count Up (CPd HIGH) jika ^PL logika 0 maka ^TCu akan berlogika 0 saat input D0 dan D3 logika 1 dan CPu logika 0.
  • D0-D3 berfungsi sebagai data input paralel.
  • Q0-Q3 Flip flop output.
  • ^TCd (Borrow) dan ^TCu (Carry) berfungsi sebagai output indikator yang menunjukkan bahwa counting telah mencapai 0 (^TCd) atau telah mencapai 9 (^TCu). Terminal ini bisa digunakan sebagai pemicu pin MR atau ^PL untuk mereset counting atau digunakan oleh Flip-flop lainnya sebagai sumber Clock.
Asynchronous / asinkron pada input MR dan ^PL maksudnya adalah jika logika input MR ataupun ^PL berubah maka akan langsung mempengaruhi logika pin output tanpa menunggu sinyal Clock (sinyal peng-sinkron) dari Input CPd maupun CPu.

Contoh mode Parallel Load input :
Misal anda merancang alat Count Down dan nilai awal adalah 9 (BCD = 1001) maka :
  • Berikan nilai konstan/tetap yaitu D3 = 1, D2 = 0, D1 = 0, D0 = 1.
  • Saat ^PL berlogika 0 dan MR logika 1 maka Q0-Q3 = D0-D3.
  • Lalu ^PL berlogika 1 dan MR logika 1 kemudian berikan sinyal Clock pada CPd.
  • maka akan Count Down 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.
  • Saat nilai 0 (BCD = 0000), terminal ^TCd berlogika 0.
Met Mencoba ;)

IC Digital : 74LS47 BCD to 7-Segmen Decoder

.
DataSheet IC 74LS47.

IC ini berfungsi untuk mengubah data BCD sehingga dapat ditampilkan ke 7-Segmen dan 7-Segmen yang digunakan untuk IC 74LS47 adalah 7-Segmen Common Anoda. BCD adalah data digital terdiri dari 4 digit dan nilai desimalnya antara 0-9 sedangkan nilai di atas 9 digunakan sebagai tanda atau indikator lainnya.







Konfigurasi Pin IC 74LS47 sebagai berikut :
Pin input yaitu :
A0-A3, ^RBI, ^BI, ^LT.
Pin Output :
^a-^g, ^RBO.

Pin yang membingunkan adalah pin ^BI/^RBO karena pada 1 pin tertulis Blank Input dan Riple Blank Output, dan agar tidak bingung harus di lihat juga tabel kebenaran penggunaan pin setiap IC.













  • A0-A3 input data BCD terdiri dari 4 digit.
  • ^a-^g adalah output ke 7-Segmen yang merupakan open kolektor sehingga memiliki arus cukup besar (24 mA) dan merupakan rendah aktif yaitu ON jika berlogika 0.
  • ^LT (Lamp Test) berfungsi untuk mengecek lampu/LED setiap segmen (segmen a-g), jika pin ^LT berlogika 0, ^BI berlogika 1, dan input lainnya don't care maka output ^a-^g berlogika 0 yaitu lampu segmen akan ON.
  • ^RBI (Riple Blank Input), Jika input ^RBI, A0-A3 , dan ^LT berlogika 0 maka output ^a-^g berlogika 1 yang berarti segmen OFF. Ketika menggunakan mode ini pin ^BI/^RBO digunakan sebagai indikator (output) yaitu pin ^RBO akan memiliki logika yang sama dengan ^RBI. Jika input ^RBI logika 0 maka output ^RBO logika 0 jika input ^RBI logika 1 maka output ^RBO logika 1.
  • ^BI (Blank Input) Jika pin ini berlogika 0, apapun logika pada input yang lain maka output ^a-^g akan berlogika 1. Dengan menggunakan pin ini misalkan menggunakan timer atau PWM, tampilan 7-Segmen akan berkedap-kedip (On-Off).
Dari gambar tersebut juga terlihat bahwa data BCD yang dapat ditampilkan yaitu angka 0-9 saja sedangkan data 10, 11, 12, 13, 14, dan 15 tidak dapat ditampilkan.
Anda harus mengubah data 10, 11, 12, 13, 14, dan 15 atau heksadesimal A, B, C, D, E, dan F ke data BCD 0-9 sebelum di tampilkan ke seven segmen dengan IC 74LS47.

Sabtu, 24 Oktober 2009

Ask : Operasi per-bit Bahasa C

.
Asker : Abi
About :
Perintah akses per-bit pada sebuah register USART.
Question :



Too PayZ:

Ada pepatah dulu yang kira-kira seperti ini:
"Jika tidak ingin dibodohi orang Inggris belajarlah bahasa Inggris, tidak ingin dibodohi orang Belanda belajarlah bahasa Belanda, tidak ingin dibodohi orang Indonesia belajarlah bahasa Indonesia." dsb. Oleh sebab itu jika ingin memahami pemrograman mikrokontroller Bahasa C maka pelajarilah Bahasa C.

Jangan salah, CoViAVR ataupun compiler lain bisa "membodohi" anda jika kurang paham penggunaannya, secara penulisan dan aturan benar bahkan tidak ada warning ataupun error tetapi program tidak jalan atau tidak sesuai sehingga anda "pusing" dan bertanya-tanya "dimana salahnya program ini?".

Contoh yang mudah : PORTB.3 = 1234 ;
tidak akan error padahal nilai yang mungkin hanya 1 atau 0.

Baca dulu : USART : Inisialisasi USART pada AVR

UCSRA adalah data 1 byte atau terdiri dari 8 bit seperti pada gambar berikut (datasheet hal 165) :




bit RXC berada pada posisi bit 7 dan TXC berada pada posisi 6, untuk mengaksesnya ada 2 cara yaitu dengan cara byte atau manipulasi bit.

Klik gambar untuk memperbesar.
Biar jelaaaaasssss...
semoga membantu

Met Mencoba ;)

Ask : ADC dan karekter LCD 16x2 pada AVR

.
Asker : Dhani_Wae
System :
Sensor garis dengan ADC atau DVM (Digital Voltmeter), dll
Question :
mas payz mau tanya neh, gimana caranya buat baca input ADC di atmega8535 lalu dihitung & hasil hitungannya ditampilkan di LCD?
Jumlah input ADC yang saya pake 6 input, semua akan dihitung dan ditampilkan hasilnya pada LCD 2x16.
saya menggunakan software "flowcode v3.3.5.45 for AVR", jadi saya harus membuat flowchartnya dulu. terima kasih sebelumnya...

Too PayZ :
Saya akan mencoba menjelaskan pembacaan ADC dan menampilkannya pada LCD.
Aplikasi ini bisa digunakan pada sensor garis pada robot line tracing, DVM (Digital Voltmeter) 8 channel lalu ditampilkan ke komputer, dan sebagainya.
Saya akan membahas menggunakan CodeVisionAVR dan tidak menggunakan flowcode.

Silahkan lihat blog berikut : Sensor Garis ADC : Membaca Data

Met Mencoba ;)

Ask : Membuat Help pada Mikrokontroller

.
Asker : NewBie
System :
Semua sistem secara umum.
Question :
Saya ingin membuat cara penggunaan alat saya atau langkah-langkah pengoperasian alat saya (Help) yang ditampilkan LCD 16x2 sehingga tanpa perlu petunjuk manual ataupun tidak perlu saya beri tahu orang awam pun bisa mengetahui cara penggunaan alat tersebut.

Masalahnya, saya ingin tampilan Help-nya berganti-ganti setiap 1,5 detik dan selalu ditampilkan tanpa henti-henti tetapi ketika Keypad ditekan langsung menuju operasi yang diinginkan dan keluar dari Help saat itu juga tanpa menunggu 1,5 detik selesai.
Saya menggunakan Delay_ms(1500) dan masalahnya jika pakai delay maka harus menunggu delay selesai dulu.
Gmana mas ?

Too PayZ :
Memang rata-rata tugas akhir yang pernah saya lihat atau alat lainnya selalu menggunakan Manual Book sebagai petunjuk. Apabila manual booknya hilang dan saat pameran dilakukan oleh juniornya atau orang awam ingin mengetahui penggunaan alat, menjadi kesulitan.
Jika ada tampilan Perancang Alat, Judul Alat, Link Website, Help, dll, itu merupakan nilai tambah dan siapapun tertarik mencoba alat anda.

Jika menggunakan perintah delay_ms(1500) maka tetap menunggu 1,5 detik sebelum pindah ke perintah selanjutnya. Oleh sebab itu triknya yaitu dengan mengganti delay_ms(1500) dengan program Scanning Keypad dan looping terus menerus hingga kira-kira 1500mS.

Silahkan lihat blog berikut : HELP Pada Aplikasi Mikrokontroller

Met Mencoba ;)

Kamis, 22 Oktober 2009

Ask : Up Down Counter dgn IC Digital

.
Asker : Dady
System :
Up Down Counter dgn IC 74HC192 tampilan Seven Segmen
Question :
mo nanya rangkaian 7 segment menggunakan 7447 dan decadenya 74192 gimana ya rangkaiannya tolong bantu dong ko aku dah rangkai tapi ga jalan mohon pencerahannya thank's

Too PayZ :
Lagi sibuk n bingung mo bahas apa, Dady tanya tentang Up Down Counter, Jadi ingat masa lalu ketika pertama kali merancang alat dengan IC digital.
"Ok lah kalo begitu"

Silahkan ke posting tentang IC Digital Project : Up/Down Counter

Selasa, 20 Oktober 2009

Ask : Delay untuk Scan Keypad, baca sensor, dan USART.

.
Asker : DanZDev
System :
Pengukuran kadar alkohol dengan sensor TGS2620
Pengukuran kadar alkohol dan menampilkannya pada LCD16x2 dan memberikan data pembacaan ADC(0) ke komputer secara serial USART.
Question :
Pembacaan data ADC setiap 1000 ms dan menampilkannya pada LCD16x2 sebagai informasi ke user, sedangkan data diberikan ke komputer dan ditampilkan setiap 30 detik (30000 ms) karena karakteristik sistemnya baru memiliki perubahan yang signifikan setelah kira-kira 30 detik. Selain itu sistem harus selalu scanning tombol, dan jika saya menekan 'A' maka saat itu pula harus melakukan suatu pengiriman data USART.

Bagaimana menggabungkan Pembacaan ADC, display data ADC ke LCD setiap 1 detik, mengirim secara serial ke PC setiap 30 detik dan sekaligus Scanning keypad tersebut.

Too PayZ :
Saya akan menunjukkan dua cara yaitu sistem polling dengan pengaturan waktu (scheduling) dan pemicuan melalui komputer.
Untuk kedua cara tersebut langkah pertama yaitu menentukan daftar timing-nya dulu biar jelas :
  • ADC(0) = 1000 ms / 1 detik
  • Refresh Display LCD = ADC (0) = 1 detik
  • UART komputer = 30 detik
  • Keypad = 100 mS : nilai ini anda tentukan sendiri (bisa saja 50 mS atau 200 mS) karena penekanan keypad berdasarkan kecepatan jari menekannya.
Dari daftar diatas terlihat bahwa waktu terkecil adalah Scanning Keypad dengan waktu 100 mS selain itu 30 detik dan 1 detik merupakan kelipatan 100 mS, sehingga waktu 100 mS menjadi waktu acuan.
Silahkan lihat dulu blog sebelumnya :
- Keypad Matriks
- Keypad Matriks : Konsep Dasar
- Keypad Matriks : Scanning Keypad
- LCD Karakter
- Tips n Trik Coding LCD Karakter
- USART : Inisialisasi USART pada AVR
- USART : Kirim dan Terima Data (Perhatikan fungsi terima data)

Sistem Polling

Dengan menggunakan waktu acuan yaitu Polling setiap 100 mS dan global variable time_count sebagai indikatornya maka Scanning Keypad dilakukan setiap time_count bertambah nilainya atau setiap 100 mS, baca ADC(0) dan menampilkannya di LCD jika time_count berkelipatan10 (100mS x 10 = 1000mS), dan komunikasi UART setiap time_count berkelipatan 300 (100mS x 300 = 30000 mS).
Setelah mencapai waktu maksimal dari sistem (yaitu 30 detik) maka jangan lupa mereset nilai pada variabel time_count = 0.

Kelemahan cara ini adalah jika pewaktuannya berubah maka mikrokontrollernya harus diprogram kembali.

Pemicuan Oleh Komputer
Cara kedua yang bisa dilakukan dan lebih fleksibel yaitu dengan pemicuan melalui komputer yaitu komputer yang menentukan suatu event pada mikrokontroller.
Fleksibel karena timing-nya bisa dilakukan dengan mengubah nilai timer secara software (tinggal klik saja). Tapi kelemahannya yaitu sistem harus selalu terkoneksi dengan komputer dan tentunya harus membuat software di komputer.
Tapi masalah "harus terkoneksi dengan komputer" dapat diatasi dengan menambahkan saklar toggle yang berfungsi memilih apakah sistem dipicu oleh komputer atau berdiri sendiri dengan program asalnya (default).

Langkah dan cara kerjanya :
  • Buat Hardware dan Software (AVR dan Komputer).
  • Pada Software komputer untuk Timer Scanning Keypad, Timer baca ADC(0) + display LCD, dan Timer Komunikasi USART harus fleksibel atau dapat diubah nilainya (di klik-klik saja) seperti menggunakan komponen Tedit atau TCombobox (Delphi).
  • Setelah aplikasi di RUN dan dengan perintah if then selanjutnya membandingkan pewaktuannya (timingnya) yaitu jika Timer Sekarang = Timer Scanning Keypad maka kirim karakter 'K' ke mikrokontroller berarti pemicuan perintah Scanning Keypad dilakukan.
  • Jika Timer Sekarang = Timer ADC+LCD maka kirim karakter 'A' ke mikrokontroller berarti pemicuan perintah Pembacaan ADC(0) dan menampilkannya ke LCD dilakukan.
  • Jika Timer Sekarang = Timer Komunikasi UART maka kirim karakter 'U' ke mikrokontroller berarti pemicuan perintah kirim data dari mikrokontroller ke kompuetr dilakukan.
Met Mencoba ;)

Minggu, 18 Oktober 2009

Ask : Pengukuran Tinggi Badan Otomatis

.
Asker : Adrianus Wahyudi(E-mail)
System :
Pengukuran tinggi badan otomatis menggunakan sensor PING tampilan seven segmen.
nb : Dari salah satu alat yang pernah di kerjakan Too_PayZ (Baca blog-nya)
Question :
Bagaimana menentukan tinggi seseorang yang diukur?
Bagaimana cara menampilkannya di Seven segmen?


Too PayZ :
Range pembacaan sensor PING adalah 3 - 300 cm, dengan mengambil rata-rata tinggi manusia (Indonesia) maka maksimal 200 (atau 255). Dari gambar plant tersebut maka tinggi orang adalah
A = C - B, dengan C = 200 cm.
Saya yakin untuk pengukuran tinggi manusia Adrianus tidak kesulitan tetapi yang masalah adalah menampilkannya pada seven segmen.

Fungsi pembacaan tinggi dengan sensor PING tidak saya bahas.
Pada topik posting Mobil Robot & Sensor PING, hasil pengukuran PING-nya berupa bilangan bulat jadi tidak saya sarankan untuk digunakan di sistem ini, tentu saja ada caranya pengukuran sensor PING dengan hasil pecahan baik menggunakan Timer ataupun Looping. Silahkan searching (maaf belum diposting).

Untuk hardware Seven Segmen dan Codingnya sudah saya posting, silahkan baca :
Display : 7 Segmen dan 16 Segmen
Scanning 8 Digit Seven Segmen

Good Luck ;)

Rabu, 26 Agustus 2009

USART : Kirim dan Terima Data

.
Setelah membahas mengenai Inisialisasi USART untuk komunikasi Serial Asinkron, selanjutnya mengenai kirim dan terima komunikasi data secara USART.
Kirim dan terima data untuk komunikasi secara USART, anda bisa membuat fungsi sendiri tetapi pada CoViAVR, telah ada library yang bisa digunakan untuk input dan output data yaitu library stdio.h. Akan saya bahas keduanya.

Library stdio.h
Coba anda buka Help CoViAVR (versi 2.03.9 dengan windows XP) dengan kata kunci stdio, maka akan ditampilkan daftar fungsi-fungsi yang terdapat pada stdio.h yang dapat anda gunakan.
  • dataRX = getchar() : menunggu karakter yang diterima dari port serial, menggunakan polling. Masalah penggunaan fungsi ini adalah jika tidak ada data serial yang diterima maka selalu looping dalam fungsi ini hingga mendapatkan data serial.
  • putchar(dataTX) : mengirimkan data serial berupa karakter C (data 8 bit), menggunakan polling.
  • puts(buffer_char) : mengirim data berupa kata atau kalimat yang tersimpan dalam buffer (disimpan dalam memori SRAM) hingga bernilai null (karakter dengan nilai 0x00).
  • putsf("kata") : mengirim data berupa kata atau kalimat yang ditulis diantara tanda " petik dua (disimpan dalam Memori FLASH).

Fungsi Read Write
Umumnya ada 2 fungsi yaitu mengirim dan menerima data, gambar berikut menunjukkan cara pengiriman dan penerimaan data secara umum :
Program Read dan Write menggunakan type data unsigned char (char tidak bertanda 0-255) karena data karakter yang digunakan tidak mungkin benilai negatif.
char pada CoViAVR, default-nya secara otomatis akan diubah menjadi unsigned char tetapi untuk membiasakan diri maka gunakan data sesuai dengan range-nya karena suatu saat anda akan menggunakan data bernilai negatif.

Coding pada gambar, untuk program pengiriman data (USART_WRITE) tidak masalah tetapi untuk fungsi menerima data (USART_READ) akan mengalami kasus yang sama dengan fungsi getchar() yaitu program akan menunggu atau looping dalam perintah while(!(UCSRA & ..... hingga 1 byte data serial diterima.
Hal ini akan sangat mengganggu apabila fungsi USART_READ digunakan hanya untuk mengecek "apakah ada data serial yang diterima ?". Yaitu jika ada data, ambil lalu proses dan jika tidak ada data, lanjut ke perintah selanjutnya dan bukannya menunggu terus-menerus.

Gambar disamping ada adalah solusi untuk masalah tersebut, yaitu mengecek flag RXC dengan menggunakan counting. Jika setelah i hitungan (100 hitungan) tidak ada data yang diterima maka lanjut ke baris program selanjutnya.

Hal inilah yang membuat saya pribadi lebih suka menggunakan sistem polling dan tidak menggunakan interupsi serial, karena programmer bisa mengetahui kapan USART akan dicek dan digunakan selain itu bisa merancang RTOS dengan sistem penjadwalan waktu (timer scheduling).


Yang perlu menjadi catatan penting adalah kapan anda memilih, apakah menggunakan fungsi yang tersedia pada stdio.h atau anda menggunakan fungsi sendiri, karena kedua penggunaan ini penting untuk kasus-kasus tertentu.

Senin, 24 Agustus 2009

USART : Inisialisasi USART pada AVR

.
Baca dulu posting :
- Komunikasi USART Mode Asinkron.
- Komunikasi USART : TTL - RS232.

Setelah membuat hardwarenya, sekarang tinggal Codingnya.
Saya hanya akan membahas penggunaan USART secara umum dengan protokol 9600,8N1 : Baud Rate 9600 bps (bit per second), 8 data bits, No Parity, 1 Stop bits.
Untuk penggunaan USART pada mikrokontroller AVR ATmega8535 diperlukan inisialisasi. Ada 2 cara inisialisasi yang dapat digunakan yaitu dengan menggunakan CodeWizardAVR dan dengan membuat fungsi sendiri.

Inisialisasi CodeWizardAVR
Konfigurasi gambar disamping adalah konfigurasi dasarnya tanpa interupsi dan single speed. Yang perlu diperhatikan yaitu nilai persentase Baud Rate Error-nya. Nilai-nilai kristal (Xtall) tertentu akan menghasilkan error yang cukup besar pada nilai baudrate tertentu, dan batas maksimal error yang diperbolehkan adalah 1 %.

Dengan penggunaan CodeWizardAVR, jika melebihi batas masimal huruf-nya akan berwarna merah seperti ini : Baud Rate Error: 1,4%.

Langkah-langkah Coding USART Asinkron pada AVR ada di Memulai CoViAVR (CodeVisionAVR).

Inisialisasi dengan CodeWizardAVR baik digunakan jika komunikasi yang anda inginkan hanya menggunakan 1 Baud Rate saja dan tidak berubah-ubah. Bagaimana jika ingin mengganti Baud Rate sedangkan programnya sudah panjang dan tidak ingin memulai dari awal lagi ? yaitu cukup dengan mengubah nilai-nilai inisialisasi USART seperti berikut :
  • Klik Toolbar CodeWizardAVR.
  • Rubah nilai Baud Rate yang diinginkan atau nilai lainnya.
  • Klik File - Program Preview dan copy paste nilai-nilai untuk inisialisasi USART-nya.





Inisialisasi Dengan Fungsi
Inisialisasi dengan fungsi lebih fleksibel dibandingkan inisialisasi dengan CodeWizardAVR karena Fungsi ini dapat digunakan untuk mengubah nilai Baudrate disaat yang anda inginkan tanpa perlu mengubah coding yang telah ada.
Misalkan dengan menekan keypad A maka baudrate yang digunakan 4800 kbps, keypad B 9600 kbps, atau pada event-event tertentu sehingga baudrate berubah secara otomatis, dst.

Akan tetapi untuk cara ini, programmer setidaknya harus memahami beberapa register-register penting yang akan digunakan untuk komunikasi serial USART. Pada setiap register saya hanya akan bahas beberapa bit pada register tersebut.
Beberapa register yaitu :

http://extremeelectronics.co.in
- UDR : USART Data Register
Register 8 bit terdiri dari 2 buah register dan bukan 1 register, 1 register untuk proses membaca data USART yang diterima (reciever buffer) dan 1 register untuk menyimpan data yang akan dikirimkan (transmit buffer). Hal inilah yang menyebabkan mengapa USART pada AVR adalah full duplex yaitu dapat melakukan pengiriman dan penerimaan data secara bersamaan.

- UBRR : Baud rate register.
Register 16 bit sehingga dibagi menjadi 2 yaitu bit0 - bit7 UBRRL dan bit8 - bit15 UBRRH. Register ini digunakan untuk menyimpan nilai kecepatan transmisi data. Nilai Baud rate pada UBRR didapatkan dengan rumus UBRR=(fosc/16xBaudrate) - 1 (asinkron kecepatan normal). Hal yang harus diingat adalah UBRR bernilai 16 bit sehingga menggunakan tipe data unsigned integer bukannya float dan juga hasil perhitungan dengan pembulatan kebawah bukan keatas (jika float), hal ini untuk mencegah error pada komunikasi data.

- UCSRA : USART Control dan Status Register A.
  • Bit 7 RXC : sebagai flag (tanda) bahwa penerimaan data1 byte telah selesai dan data bisa dibaca pada register UDR.
  • Bit 6 TXC : sebagai flag (tanda) bahwa pengiriman data1 byte telah selesai dan data selanjutnya bisa diberikan pada register UDR.
- UCSRB : USART Control dan Status Register B.
  • Bit 7 RXCIE : mengatur interupsi penerimaan data serial. Nilai awal 0 dan akan bernilai 1 jika RXC = 1.
  • Bit 6 TXCIE : mengatur interupsi pengiriman data serial. Nilai awal 0 dan akan bernilai 1 jika TXC = 1.
  • Bit 4 RXEN : mengaktifkan penerimaan RX.
  • Bit 3 TXEN : mengaktifkan pengiriman TX.
  • Bit 2 UCSZ2 : menentukan panjang karakter yang akan dikirimkan. Register ini digunakan bersamaan dengan register UCSZ0 dan UCSZ1 yang terdapat pada register UCSRC. Akan dibahas dibawah.
- UCSRC : USART Control dan Status Register C.
  • Bit 7 URSEL : karena UCSRC dan UBRRH memakai alamat yang sama maka fungsi bit ini adalah memutuskan register mana yang akan "ditulis". Jika bernilai 1 maka data akan ditulis ke UCSRC dan jika bernilai 0 maka data akan ditulis di UBRRH.
  • Bit 6 UMSEL : menentukan apakah komunikasi sinkron atau asinkron. Bernilai 0 maka komunikasi asinkron dan jika bernilai 1 maka komunikasi sinkron.
  • Bit 3 USBS : Usart Stop Bit Select jika bernilai 0 maka stop bit-nya 1 dan jika bernilai 1 stop bit-nya 2.
  • Bit 2 UCSZ1 dan bit 1 UCSZ0 : bersamaan dengan UCSZ2 menentukan panjang bit yang akan digunakan. Umumnya 8 bit tetapi anda bisa memilih 5,6,7,8, atau 9 bit.









Gambar di samping adalah fungsi untuk komunikasi USART.
Selamat mencoba.
;)

Minggu, 23 Agustus 2009

Komunikasi USART : TTL - RS232

.
Beberapa aplikasi atau sistem yang akan dibuat mungkin membutuhkan suatu sistem monitoring, pengendalian, penyimpanan data, pembuatan database, metode, atau hal-hal lain yang lebih kompleks dan mikrokontroller tidak dapat atau tidak mampu untuk menangani hal tersebut.
Bagaimana menangani hal ini ? Tentu saja dengan komputer.

Untuk meng-komunikasikan komputer dengan mikrokontroler adalah dengan interface (antar muka) antara komputer dengan mikro. Beberapa interface yang biasa digunakan antara lain melalui port serial (port COM) , port paralel (LPT), dan port USB pada komputer.
Saya hanya akan membahas port serial komputer saja (Port COM).

Level Comverter Port COM
Port serial COM pada komputer menggunakan level tegangan RS232 yaitu saat berlogika 0 nilai tegangannya antara +3 hingga +25 volt dan saat berlogika 1 tegangannya antara -3 hingga -25 volt sedangkan pada port mikrokontroler menggunakan level TTL yaitu logika 0 bernilai 0 volt (pendekatan) dan saat logika 1 bernilai 5 volt (pendekatan).









Perbedaan level tegangan ini menyebabkan dibutuhkannya level konverter agar tegangan antar perangkat yang berkomunikasi sama, sehingga komunikasi dapat dilakukan dan tidak terjadi data error.
Konverter RS232 - TTL digunakan untuk menyesuaikan level tegangan port COM komputer dengan port UART pada mikrokontroler. Ada beberapa rangkaian yang bisa digunakan sebagai konverter RS232 -TTL antara lain :
  • Menggunakan IC konverter RS232 - TTL seperti MAX232, ICL232, dsb. Penggunaan IC ini disarankan jika komunikasi yang dilakukan untuk jarak cukup jauh.
  • Menggunakan rangkaian transistor. Sebaiknya kabel tidak lebih panjang dari 1 meter.
  • Menggunakan IC gerbang Logika. Sebaiknya kabel tidak lebih panjang dari 1 meter.
Link-linknya:
- freecircuitdiagram.com
- www.scienceprog.com
- benybee.wordpress.com

Menggunakan IC konverter.













Menggunakan Transistor.













Menggunakan IC Gerbang logika.





















Beberapa hal penting lainnya pada komunikasi UART dengan RS232 menggunakan Port COM komputer yaitu :
  • RS232 HandShaking dengan RTS, CTS, dan DTR.
  • Kecepatan transfer data (Baud Rate) pada komunikasi mempengaruhi panjang kabel.
  • Nilai kapasitansi antar kabel yang mempengaruhi Noise saat transfer data dan mempengaruhi panjang kabel yang akan digunakan.
Link bacaan :
- www.radio-electronics.com
- www.lammertbies.nl

Selasa, 18 Agustus 2009

Komunikasi USART Mode Asinkron.

.
Jika pada Komunikasi USART AVR Mode Sinkron menggunakan 3 buah jalur maka komunikasi USART AVR mode asinkron menggunakan 2 buah jalur untuk komunikasi data yaitu RxD (PORTD.0) untuk menerima data dan TxD (PORTD.1) untuk mengirim data dan konfigurasi ini adalah konfigurasi secara umum untuk komunikasi UART (Serial asinkron).







Komunikasi serial asinkron berbeda dengan serial sinkron yaitu tidak adanya sinyal Clock yang mensinkronkan komunikasi data, hal yang mensinkronkannya adalah protokol komunikasi data dan kecepatan transfer yang dinyatakan dengan bit per second (bps) atau dikenal dengan nama baud rate. Kedua hal tersebut harus sama untuk setiap perangkat yang akan berkomunikasi secara serial asinkron, jika tidak maka kesalahan data akan terjadi bahkan komunikasi data tidak dapat dilakukan.

Kecepatan Transfer Data (Baud Rate)
Beberapa perangkat telah memiliki baudrate standar atau baudrate tertentu yang tetap (tidak dapat diubah) sehingga perangkat yang lebih fleksibel harus mengikuti-nya.
Contohnya adalah komputer memiliki nilai-nilai baudrate tertentu sehingga mikrokontroller sebagai perangkat yang fleksibel mengikuti nilai baudrate yang dimiliki komputer.

Apabila akan dilakukan komunikasi serial asinkron antar perangkat yang fleksibel, misal mikro dengan mikro maka kecepatan transfer data dapat diberikan pada nilai berapapun asalkan kedua mikro memiliki baudrate yang sama.
Beberapa nilai standar baudrate antara lain :
  • 1200
  • 2400
  • 4800
  • 9600
  • 19200
  • 38400
  • 57600
  • 115200
  • .. dst
Jika kecepatan transfer data 9600 bit per second maka 1 bit membutuhkan 1/9600 detik atau 0,000104 detik atau 104 uS (microsecond= 10^-6 detik).

Protokol Komunikasi Data
Komunikasi asinkron antar perangkat harus memiliki protokol yang sama antara perangkat 1 dengan perangkat yang lain, apabila protokolnya berbeda maka akan terjadi kesalahan komunikasi data.

Protokol komunikasi data antara lain :
  • Start Bit Selalu bernilai 0 : Ketika komunkasi UART (serial asinkron) akan diberikan, terlebih dahulu dimulai dengan pemberian Start Bit. Fungsinya sebagai pemicu (tanda) kepada penerima (RxD) bahwa akan ada data yang diberikan oleh pemancar (TxD) dan juga akan memicu clock pada reciever sehingga disinkronkan dengan clock pada transmitter. Clock penerima dan pemancar haruslah akurasi dengan toleransi 10% sehingga tidak terjadi kesalahan data.
  • Data Bits : adalah data yang akan dikirimkan secara UART dimulai dari LSB (bit ke 0) hingga MSB (bit terakhir). Jangan lupa menentukan banyaknya bit tersebut haruslah sama antara pemancar dengan penerima. Banyaknya data bits pada AVR bisa bernilai 7,8, atau 9 data bits.
  • Parity(keseimbangan) : berfungsi sebagai pengecekan error data yang ditransfer. Parity bisa bernilai ODD (ganjil), EVEN (Genap), dan NONE selain itu pemancar dan penerima harus menggunakan parity yang sama. Jika ODD parity maka jumlah total nilai 1 pada data bits + parity berjumlah ganjil, contoh ODD, jika data bits 00110101 maka parity bernilai 1. Sedangkan jika EVEN parity maka jumlah total nilai 1 pada data bits + parity berjumlah genap. Contoh even, jika data bits 00110101 maka parity bernilai 0.
  • Stop Bit Selalu bernilai 1 : berfungsi sebagai akhir dari komunikasi data dan kamudian masuk pada IDLE state. Pengiriman data selanjutnya dapat dilakukan setelah stop bit diberikan.
  • IDLE state : adalah kondisi tidak terjadinya komunikasi data dan jalur data berlogika 1 secara terus menerus (marking).
Silahkan lihat link Tutorial lengkap mengenai Serial and UART Tutorial.

Level Tegangan Komunikasi UART
Komunikasi data serial asinkron (UART) dapat dilakukan dengan 3 level tegangan yaitu level tegangan TTL, RS232, dan RS485. Gambar dibawah ini memperlihatkan perbedaan level tegangan tersebut.

Gambar disamping hanya menunjukkan perbedaan level tegangan untuk logika 1 dan logika 0 sehingga pada level RS232 tidak ditunjukkan starbit, parity, dan stopbit.
Level konverter TTL - RS232 pada
Komunikasi USART : TTL - RS232

Link Bacaan:
- www.lammertbie.nl
- www.rs485.com
- www.bb-elec.com

Tabel perbandingan UART pada level tegangan yang berbeda.

Senin, 17 Agustus 2009

Komunikasi USART AVR Mode Sinkron.

.
Komunikasi data antar perangkat seperti mikro-mikro, mikro-PC, atau antar perangkat lain merupakan hal yang selalu digunakan. Apalagi jika memiliki sistem monitoring, Analisis, ataupun kontrol interface yang user friendly yaitu menggunakan komputer sebagai input ataupun output data.
Hampir semua perangkat telah memiliki interface untuk saling berkomunikasi data, baik berupa I2C, TWI, USART, SPI, dll. Oleh sebab itu, pengetahuan komunikasi data suatu hal yang wajib.
NB: ada banyak istilah-istilah tentang komunikasi data yang penting memahami prinsip dan konsepnya

Pada topik ini akan dibahas mengenai SCI(Serial Communication Inteface) yaitu USART(Universal Synchronous Asynchronous Receiver Transmitter).

Mikrokontroller ATmega8535 memiliki USART yang dapat berfungsi sebagai serial sinkron ataupun serial asinkron dengan operasi Full Duplex yaitu penerima dan pengirim memiliki register tersendiri. Artinya dalam satu waktu dapat melakukan pengiriman data sekaligus menerima data.

Serial Sinkron (Synchronous ) :
Komunikasi serial sinkron menggunakan Clock dan data line (jalur data) untuk berkomunikasi. Pengiriman setiap datanya selalu disertai pemberian sinyal clock, Artinya suatu nilai (logika 1 ataupun 0) tidak akan dianggap suatu data jika belum diberikan sinyal Clock.

Oleh sebab itu pada komunikasi serial sinkron harus ada Master dan Slave, yaitu Master sebagai pemberi Clock dan Slave sebagai penerima Clock, bahkan jika komunikasi hanya 2 mikro atau kasus tertentu bisa saja master dan slavenya berganti-gantian tergantung siapa terlebih dahulu yang akan memulai komunikasi data baik menerima ataupun memberi data.






Pada gambar tersebut terlihat bahwa pada komunikasi secara Serial sinkron yang diberikan data terlebih dahulu kemudian disertai Clock, Hal ini agar data yang diterima valid dan tidak error, gambar selanjutnya akan menjelaskan hal ini.







Pada gambar terlihat adanya pergeseran saat pengiriman data. Mengapa pada bit ke-3 datanya sesuai sedangkan pada bit ke-5 terjadi kesalahan yang seharusnya bernilai 1 tetapi yang diterima 0 ?

Hal ini tergantung dari komunikasi yang anda gunakan yaitu saat pengambilan data (sampling), apakah anda mengambil data saat clock low-high (rising edge) atau saat clock high-low (falling edge), dan pada gambar tersebut pengambilan data saat rising edge oleh sebab itu bit ke-3 datanya sesuai meskipun terjadi pergeseran data.

USART mode Sinkron :
Pada USART AVR mode sinkron, komunikasi data dan clock telah diatur secara internal oleh AVR. Komunikasi USART mode Sinkron pada AVR, RxD (PORTD.0) dan TxD (PORTD.1) berfungsi sebagai pemberi dan penerima data sedangkan XCK (PORTB.0) sebagai pembangkit Clock-nya.

Beberapa hal mengenai USART mode serial sinkron pada AVR, antara lain :
  • Sebagai Master atau sebagai Slave.
  • Nilai Clock kristal (XTALL) antara master dan slave minimal sama dan jika tidak sama maka Clock kristal Slave harus lebih cepat dari Master agar Slave bisa mengikuti Clock Master.
  • UCPOL diatur set (logika 1) atau low (logika 0).
  • Format komunikasi datanya.
  • Saat IDLE logika pada RxD dan TxD haruslah berlogika 1 (High).






Gambar tersebut menjelaskan penggunaan UCPOL, yaitu :
  • UCPOL = 0 maka data yang dikirim pada TxD akan berubah saat clock rising edge sedangkan data akan diterima pada RxD saat clock falling edge.
  • UCPOL = 1 kebalikan yaitu data yang dikirim pada TxD akan berubah saat clock falling edge sedangkan data akan diterima pada RxD saat clock rising edge.
Baca posting tentang : Komunikasi USART Mode Asinkron.

Sabtu, 08 Agustus 2009

Scanning 8 Digit Seven Segmen

.
Sebelum memulai coding 8 Digit Seven Segmen dan untuk meminimalkan kesalahan program, maka sebaiknya dikerjakan "diatas kertas" terlebih untuk pengaturan tampilannya.











Konfigurasi seven segmen memungkinkan untuk menampilkan semua angka dari 0 - 9 dan beberapa karakter antara lain :
A,a,b,C,c,d,E,e,F,H,h,I,J,L,n,o,P,q,r,t,U,u,Y,-,_.
Beberapa huruf tetapi bisa menimbukkan kerancuan yaitu :
G dgn 6, g dgn 9, O dgn 0 (nol), dan S dgn 5.

Untuk huruf M dan W bisa diakali dengan menggabungkan 2 buah tampilan segmen sehingga untuk tampilan M adalah 2 buah segmen dgn tampilan n dan untuk tampilan W adalah 2 buah segmen dgn tampilan u atau mengubah posisi segmen dari vertikal menjadi horizontal (untuk kasus tertentu).

Tabel disamping adalah nilai biner yang akan diberikan kepada segmen untuk menampilkan angka-angka tertentu.

Saya hanya akan membahas tampilan angka saja dengan konfigurasi common anode dan kondisi awal segmen DOT (titik) adalah mati.


Lihat dulu rangkaian Schematik 8 Digit 7 Segmen.
Dari gambar schematic di dapatkan konfigurasi yang diinginkan yaitu:
PORTB.0 - PORTB.7 adalah A,B,C,D,E,F,G,DOT
PORTC.0 - PORTC.7 adalah DRV0 - DRV7
Port DRV atau driver adalah port yang digunakan untuk mengaktifkan segmen yang akan menampilkan suatu angka.
PORTA tidak dipilih karena memiliki ADC sedangkan PORTD karena ada PWM dan USART yang mungkin bisa digunakan nantinya.

Coding disamping berfungsi untuk menampilkan angka pada Seven Segmen dan tidak termasuk mengatur segmen mana yang menampilkan angka tersebut.


Angka yang akan ditampilkan berada pada variable nilai yang nilainya bisa berupa nilai 0 - 9 atau berupa karakter ASCII '0' - '9', karena jika anda memberikan nilai 0 - 9, pada fungsi ini akan di konversi-nya menjadi nilai ASCII '0' - '9' yaitu ditambahkan dengan 0x30 (48 desimal).

Coding ini untuk menguji apakah program menampilkan angka pada semua segmen berhasil atau tidak.

Mula-mula semua segmen akan menampilkan angka 0 - 9 dengan tundaan selama 1 detik kemudian semua segman akan menampilkan angka 0, 8, 5, lalu 6 secara bergantian dengan waktu tunda 1 detik.

Ini menunjukkan penggunaan nilai berupa angka dan karakter ASCII.

Scanning 8 DIGIT
Coding ini akan menampilkan suatu nilai dengan type data float pada seven segmen.

Oleh sebab itu fungsi ini hanya untuk menampilkan bilangan pecahan saja (ada komanya).

Coba anda buat sendiri menampilkan bilangan bulat saja atau bahkan berupa huruf.

Penggunaannya fungsi diatas cukup sederhana sebagai contoh :
...............
while(1)
{
DISPLAY_SEGMEN(1234.5678);
}
Selamat mencoba.

Topik yang Populer