Sunday 14 December 2014

Source Code Face Detection and Tracking Using CAMShift


Introduction



Object detection and tracking are important in many computer vision applications including activity recognition, automotive safety, and surveillance. In this example, you will develop a simple face tracking system by dividing the tracking problem into three separate problems:
  1. Detect a face to track
  2. Identify facial features to track
  3. Track the face
Step 1: Detect a Face To Track
Before you begin tracking a face, you need to first detect it. Use the vision.CascadeObjectDetector to detect the location of a face in a video frame. The cascade object detector uses the Viola-Jones detection algorithm and a trained classification model for detection. By default, the detector is configured to detect faces, but it can be configured for other object types.
% Create a cascade detector object.
faceDetector = vision.CascadeObjectDetector();

% Read a video frame and run the detector.
videoFileReader = vision.VideoFileReader('visionface.avi');
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);

% Draw the returned bounding box around the detected face.
videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
figure, imshow(videoOut), title('Detected face');
You can use the cascade object detector to track a face across successive video frames. However, when the face tilts or the person turns their head, you may lose tracking. This limitation is due to the type of trained classification model used for detection. To avoid this issue, and because performing face detection for every video frame is computationally intensive, this example uses a simple facial feature for tracking.
Step 2: Identify Facial Features To Track
Once the face is located in the video, the next step is to identify a feature that will help you track the face. For example, you can use the shape, texture, or color. Choose a feature that is unique to the object and remains invariant even when the object moves.
In this example, you use skin tone as the feature to track. The skin tone provides a good deal of contrast between the face and the background and does not change as the face rotates or moves.
% Get the skin tone information by extracting the Hue from the video frame
% converted to the HSV color space.
[hueChannel,~,~] = rgb2hsv(videoFrame);

% Display the Hue Channel data and draw the bounding box around the face.
figure, imshow(hueChannel), title('Hue channel data');
rectangle('Position',bbox(1,:),'LineWidth',2,'EdgeColor',[1 1 0])
Step 3: Track the Face
With the skin tone selected as the feature to track, you can now use the vision.HistogramBasedTracker for tracking. The histogram based tracker uses the CAMShift algorithm, which provides the capability to track an object using a histogram of pixel values. In this example, the Hue channel pixels are extracted from the nose region of the detected face. These pixels are used to initialize the histogram for the tracker. The example tracks the object over successive video frames using this histogram.
% Detect the nose within the face region. The nose provides a more accurate
% measure of the skin tone because it does not contain any background
% pixels.
noseDetector = vision.CascadeObjectDetector('Nose');
faceImage = imcrop(videoFrame,bbox(1,:));
noseBBox = step(noseDetector,faceImage);

% The nose bounding box is defined relative to the cropped face image.
% Adjust the nose bounding box so that it is relative to the original video
% frame.
noseBBox(1,1:2) = noseBBox(1,1:2) + bbox(1,1:2);

% Create a tracker object.
tracker = vision.HistogramBasedTracker;

% Initialize the tracker histogram using the Hue channel pixels from the
% nose.
initializeObject(tracker, hueChannel, noseBBox(1,:));

% Create a video player object for displaying video frames.
videoInfo = info(videoFileReader);
videoPlayer = vision.VideoPlayer('Position',[300 300 videoInfo.VideoSize+30]);

% Track the face over successive video frames until the video is finished.
while ~isDone(videoFileReader)

% Extract the next video frame
videoFrame = step(videoFileReader);

% RGB -> HSV
[hueChannel,~,~] = rgb2hsv(videoFrame);

% Track using the Hue channel data
bbox = step(tracker, hueChannel);

% Insert a bounding box around the object being tracked
videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');

% Display the annotated video frame using the video player object
step(videoPlayer, videoOut);

end

% Release resources
release(videoFileReader);
release(videoPlayer);
Summary
In this example, you created a simple face tracking system that automatically detects and tracks a single face. Try changing the input video and see if you are able to track a face. If you notice poor tracking results, check the Hue channel data to see if there is enough contrast between the face region and the background.
Reference
[1] G.R. Bradski "Real Time Face and Object Tracking as a Component of a Perceptual User Interface", Proceedings of the 4th IEEE Workshop on Applications of Computer Vision, 1998.
[2] Viola, Paul A. and Jones, Michael J. "Rapid Object Detection using a Boosted Cascade of Simple Features", IEEE CVPR, 2001.

sumber : http://www.mathworks.com/help/vision/examples/face-detection-and-tracking-using-camshift.html

Friday 12 December 2014

MICROCONTROLLER :: BELAJAR INTERFACE MODEM WAVECOM DENGAN AT89S52



Setelah lihat2 tutorial kebanyakan modemnya masih yang serial, kemudian saya membeli konverter usb ke rs232 dengan berharap bisa langsung dikomunikasikan… tetapi apa yang terjadi malah tidak bisaaaaaa…
Proses I.
Kemudian tetap semangat search di google ternyata ada salah satu web yang memperlihatkan cara koneksi modem ini secara langsung (TTL) yaitu tidak melewati konverter/konektor seperti usb dan rs 232 tetapi harus membongkar modem wavecom. kemudian saya bongkar modemnya dan saya contoh tutorialnya dengan cara menjumper titik konektor tx dan rx (TTL) modem. Hasilnya waow hebat saya dapat menjumpernya dengan kabel, saya sangan senang sekali akhirnya dapat dengan mudah mengkoneksikan modem ini dengan mikrokontroler tanpa melalui konektor db9, pakai usbpun bisa. eh malah jumperannya coplok gara2 kesenggol dan pin konektor TTLnya pun rusakkkk…..
contoh koneksi TTL nyontoh di web orang
Koneksi Modem ke komputer
cara setting baudrate:
1. hubungkan usb modem ke cpu
2. cari com yang terdeteksi pada komputer misal com 8
3. setting default wavecom 115200
4. ketik AT kemudian enter jika balasan ok berarti sudah konek
5. untuk bisa komunikasi dengan mikro baudrate harus dirubah ke 19200/ lainnya.
6. ketik at+ipr=19200 kemudian enter
tutup hyperterminal kemudian buka kembali dari awal setting baudrate 19200….
7. balasan ok kemudian menghilangkan echo ketik ATE0 enter
8. Settingan harus disimpan ke eeprom wavecom dengan cara ketik AT&W kemudian enter.
9. Modem siap dikomunikasikan dengan mikro
Untuk rangkaiannya bikin sendiri cm konek ke tx dan rx mikrokontroler
contoh listing program assembly kirim at command ke modem melalui mikro at89s52
;#########################################################################;
; Program SMS controler 2 titik lampu menggunakan 2 buah relai
; Mikrokontroler at89s52
; modem wavecom1206b
;#########################################################################;
LED bit P1.2
Relai_1 bit p2.0
Relai_2 bit p2.1
data_pesan equ 30h
;#########################################################################;
ORG 00H
clr led
call tunda_long
setb led
call tunda_long
clr led
call tunda_long
call initial
;#########################################################################;
; program_utama loop
;#########################################################################;
Program_utama: call kirim_ate0
call tunda_long
call Kirim_at
tunggu_1: jnb ri,$
clr ri
mov A,sbuf
cjne A,#’O’,tunggu_1
jnb ri,$
clr ri
mov A,sbuf
tunggu_2: cjne A,#’K’,tunggu_2
call tunda_long
jmp kirim_pesan
Kirim_pesan: call kirim_sms
tunggu_sms_1: jnb ri,$
clr ri
mov A,sbuf
cjne A,#’>’,tunggu_sms_1
call tunda_long
call Kirim_isi_sms
tunggu_sms_2: jnb ri,$
clr ri
mov A,sbuf
cjne A,#’>’,tunggu_sms_2
call tunda_long
call Kirim_ctrlz
setb led
jmp $
Looping: jnb ri,$
clr ri
mov A,sbuf
mov @R0,a
cjne A,#’K’,tunggu_2
ret
;#########################################################################;
Print_At: db ‘at’,13,10,0
Print_Ate0: db ‘ate0′,13,10,0
Print_sms: db ‘at+cmgs=083840377711′,13,10,0
Print_isi_sms: db ‘Tes sms nganggo modem wavecom’,13,10,0
;#########################################################################;
; INISIALISASI BAUT RATE 19200
;#########################################################################;
INITIAL: MOV SCON,#50H ;INISIALISASI BAUD RATE 19200
MOV TMOD,#20H
Mov 87h,#80h
MOV TH1,#0FdH
SETB TR1
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>HAPUS SMS DI LOKASI INBOX INDEX 1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Kirim_at: MOV DPTR,#print_at ;KIRIM PRINTAH ‘AT+CMGD=1′
jmp tunggu_at
Kirim_ate0: MOV DPTR,#print_ate0
jmp tunggu_at
Kirim_sms: MOV DPTR,#Print_sms
jmp tunggu_at
Kirim_isi_sms: MOV DPTR,#Print_isi_sms
jmp tunggu_at
Kirim_ctrlz: mov A,#26
clr ti
mov sbuf,a
ret
Tunggu_at: CLR A ;KOSONGKAN ACC
MOVC A,@A+DPTR ;AMBIL DATA TABEL YANG DITUNJUK DPTR
CLR TI ;AKTIVASI KIRIM SERIAL
MOV SBUF,A ;KIRIMKAN DATA
JNB TI,$ ;TUNGGU SELESAI DIKIRIM
INC DPTR ;NAIKKAN PENUNJUK TABEL
CJNE A,#00,Tunggu_at ;TUNGGU SEMUA KARAKTER DIKIRIM
ret
;#########################################################################;
; TUNDA WAKTU
;#########################################################################;
TUNDA_LONG: MOV R5,#010H
JJz: CALL TUNDA
DJNZ R5,JJz
RET
TUNDA: MOV R7,#100
LD1: DJNZ R6,$
DJNZ R7,LD1
RET
end

MICROCONTROLLER :: Belajar Microcontroller 8051 dengan Simulator



Buat para pemula alangkah lebih baik selain mempelajari teori juga mempraktekan teori  dengan modul/rangkaian yang sebenarnya. Tapi jika anda belum memiliki modul ,  anda  bisa latihan dengan simulator . Pada kesempatan ini saya akan memperkenalkan simulator yang cocok untuk pemula yaitu UVI51 , simulator untuk micon jenis MCS-51 (8051, At89s51,At89c4051). software ini bisa di download di : ftp://ftp.dte.uvigo.es/uvi51/
simulator microcontroller
Tampilan Simulator microcontroller untuk 8051, 89s51 , 89c4051 dan sejenisnya
Simulator  ini   sangat membatu saya dalam memahami microcontroller untuk pertama kalinya , kususnya MCS-51 ( 8051 ,89s51 , 89c4051 dst) karena simulator ini selain mudah digunakan juga sangat jelas menggambarkan cara kerja sebuah microcontroller.  Sekarang saya sudah tidak lagi menggunakan MCS-51 , saya lebih suka  AVR  :-).  Simulator ini berjalan di windows XP, windows versi  yang lain saya belum pernah coba. Fungsi Microcontroller yang disimulasikan:
  • Input : switch
  • output : LED, seven sement, LCD 2×16
  • Timer
  • Serial komunikasi (Uvi51 bisa mensimulasikan 2 micon sekaligus)
  •  Interupsi
  • Bisa melihat isi Ram dan register
Langkah langkah  menggunakan Simulator Uvi51:
  1. Download  simulator dan contoh file di: ftp://ftp.dte.uvigo.es/uvi51/
  2. extract file hasil download
  3. klik file uvi51.exe.
    uvi51_exe
    uvi51_exe
  4. klik Open
    uvi51_1
    uvi51_1
  5. klik salah satu contoh  misal EX1A.CNX
    uvi51_2
    uvi51_2
  6. klik   menu “A”
    klik_A
    klik_A
  7. klik enter.
    klik enter
    setelah muncul tulisan "Assembly complete no error" lalu tekan enter
  8. klik Simulate.
    klik simulate2
    klik simulate judul
  9. klik run atau step
Membuat  simulasi  baru
Untuk  mejalankan simulator UVI51 kita membutuhkan 2 file :
  1.  file ber extension *.cnx ,   file ini berisi konfigurasi hardware misal switch ,LCD 2×6, PushButton , Led , rs232  dll.
  2. file berextension *.src  source code
Contoh :
buka notepad buat 2 buah file berikut.
file test1.src ber isi:
; Data transfers using MOV
;
org 0
; Port 0 contents are copied into several targets
mov a,p0
mov b,p0
mov 20h,p0
; P0 contents are copied into RAM address pointed by P1
mov r0,p1
mov @r0,p0
jmp 0
end
file test1.cnx berisi:
* clock 12 mega , ram 256 byte memory program 1024 byte
Utest1.src 12 256 1024

P00=2 ; PORT0.0 diberi beri tanda sebagai node 2
P01=3 ; PORT0.1 diberi beri tanda sebagai node 3

* Switches dgn nama B0 di hubungkan ke node 2 (PORT0.0) ,lokasi switch dikotak no 4
SB0 2 0 1 4

* Pushbutton dgn nama P0 dihubungkan ke node 3 (PORT0.1) , lokasi pushbuton di kotak no 9
KP0 3 0 9
Beberapa ilustrasi penjelasan  isi file cnx ,(  konfigurasi hardware)  : 

lebih detainya bisa baca manualnya: ftp://ftp.dte.uvigo.es/uvi51/UVI51_50_MANUAL.ZI
P

MICROCONTROLLER :: Komunikasi serial menggunakan uC AT89


Kita tahu port serial masih digunakan hingga saat ini, walaupun beberapa peralatan komputer sudah menghilangkan port ini, namun kita masih bisa membeli (atau pinjem juga boleh, he he he) alat dan/atau perangkat lunak usb2serial, sehingga komunikasi via port serial masih tetap bisa kita lakukan.
Selain untuk kebutuhan komunikasi, port serial atau port RS232 bisa digunakan untuk kebutuhan pengontrolan, nah artikel kali ini saya akan membahas tentang rangkaian dan contoh program dalam BASIC (BASCOM51) port serial untuk kontrol lampu LED, dan tentunya bisa Anda kembangkan untuk aplikasi-aplikasi lainnya, seperti komunikasi dengan HP, sehingga bisa digunakan untuk kontrol jarak jauh dan lain sebagainya…
Baiklah, berikut ini adalah gambar rangkaian minimal yang akan kita gunakan untuk eksperimen, cukup sederhana, tapi khasiatnya… he he he…
Okey, ceritanya begini… Port serial akan kita gunakan untuk mengontrol pola hidup 8 LED yang kita hubungkan ke PORT1 dan pemantauan tombol-tekan di PORT3, perintah-perintah yang digunakan sebagai berikut:
  • 01 : menghidupkan LED di Port1.0
  • 11 : menghidupkan LED di Port1.1
  • 21 : menghidupkan LED di Port1.2
  • 31 : menghidupkan LED di Port1.3
  • 41 : menghidupkan LED di Port1.4
  • 51 : menghidupkan LED di Port1.5
  • 61 : menghidupkan LED di Port1.6
  • 71 : menghidupkan LED di Port1.7
  • 00 : mematikan LED di Port1.0
  • 10 : mematikan LED di Port1.1
  • 20 : mematikan LED di Port1.2
  • 30 : mematikan LED di Port1.3
  • 40 : mematikan LED di Port1.4
  • 50 : mematikan LED di Port1.5
  • 60 : mematikan LED di Port1.6
  • 70 : mematikan LED di Port1.7
  • id : menampilkan kalimat “Made by A.E.P 2008″
  • ba : baca status semua tombol pushbutton di P3
  • b2 : baca status tombol pushbutton di P3.2
  • b2 : baca status tombol pushbutton di P3.3
  • b2 : baca status tombol pushbutton di P3.4
  • b2 : baca status tombol pushbutton di P3.5
  • b2 : baca status tombol pushbutton di P3.6
  • b2 : baca status tombol pushbutton di P3.7
Catatan:
  • Tombol di P3.0 dan P3.1 tidak digunakan karena sebagai jalur komunikasi serial, jika tetap dibaca akan menimbulkan kesalahan atau error…
Kemudian listing program menggunakan BASIC-nya BASCOM51 sebagai berikut…
$regfile = "89c55wd.dat"     ' pustaka untuk AT89c55
$crystal = 11059200 ' gunakan kristal 12 MHz
$baud = 9600

Dim S As String * 2
Do
Input S
Select Case S
Case "01" : P1.0 = 0
Case "11" : P1.1 = 0
Case "21" : P1.2 = 0
Case "31" : P1.3 = 0
Case "41" : P1.4 = 0
Case "51" : P1.5 = 0
Case "61" : P1.6 = 0
Case "71" : P1.7 = 0
Case "00" : P1.0 = 1
Case "10" : P1.1 = 1
Case "20" : P1.2 = 1
Case "30" : P1.3 = 1
Case "40" : P1.4 = 1
Case "50" : P1.5 = 1
Case "60" : P1.6 = 1
Case "70" : P1.7 = 1
Case "b2" : Print P3.2
Case "b3" : Print P3.3
Case "b4" : Print P3.4
Case "b5" : Print P3.5
Case "b6" : Print P3.6
Case "b7" : Print P3.7
Case "ba" : Print P3
Case "id" : Print "Made by A.E.P 2008"
Case Else
Print "er"
End Select
Loop
Keterangan:
  • Program diawali dengan pernyataan “$regfile” yang digunakan untuk mendefinisikan uC yang digunakan, dilanjutkan dengan “$crystal” yang menyatakan frekuensi kristal yang digunakan, $baud untuk menentukan kecepatan komunikasi serial dalam bit per second atau bps;
  • inti dari program ini ada dua, penerimaan data dan pemrosesan data yang diterima. Yang pertama dilakukan melalui pernyataan “Input s” (kondisi menunggu masukan dari terminal komputer - komunikasi serial) dan yang Kedua melalui pernyataan “Select Case S” hingga “End Select“;
  • Penerjemahan protokol atau aturan komunikasi melalui pernyataan “Select Case S“, misalnya untuk perintah “01” diterjemahkan sebagai “Case “01″ : P1.0=1” dan seterusnya, selain itu (dengan pernyataan “else case” akan dikirimkan pesan “er”, artinya ada error atau perintah tidak dikenal;
  • Percobaan dapat dilakukan dengan menghubungkan board uC ke port serial menggunakan kabel serial bersilang, maksudnya dilakukan pasangan antara uC dan PC sebagai berikut: Gnd - Gnd, Tx(komputer) - Rx(mikrokontroler) dan Tx(komputer) - Rx(mikrokontroler);
  • Keterangan dan penjelasan lengkap mengenai komunikasi serial ini bisa Anda baca di buku saya “Belajar Mikrokontroler AT89C51/52/55: Teori dan Aplikasi“, Edisi 2.
Bagaimana mudah khan? kalo sudah begini, Anda bisa mengembangkan aplikasi ini untuk pembuatan program kontrol atau pemantauan menggunakan Visual Basic atau Delphi - Teknik Antarmuka PC.
Terima kasih, semoga bermanfaat… Komentar/pertanyaan silahkan…

VB6.0 :: Serial Port Komputer Dengan VB6.0


Ada 2 macam cara komunikasi data serial yaitu Sinkron dan Asinkron. Pada komunikasi data serial sinkron, clock dikirimkan bersama sama dengan data serial,  tetapi clock tersebut dibangkitkan sendiri – sendiri baik pada sisi pengirim maupun  penerima.Sedangkan pada komunikasi serial asinkron tidak diperlukan clock karena data  dikirimkan dengan kecepatan tertentu yang sama baik pada pengirim / penerima.

Pada IBM PC kompatibel port serialnya termasuk jenis asinkron. Komunikasi data serial ini dikerjakan oleh UART (Universal Asynchronous Receiver Transmitter). IC UART dibuat khusus untuk mengubah data parallel menjadi data serial dan menerima data serial yang kemudian dirubah lagi menjadi data parallel.IC UART 8250 merupakan salah satunya. Selain berbentuk IC mandiri berbagai macam mikrokontroller juga ada yang dilengkapi dengan UART, misalnya AT89S51/52/53 atau PIC16F877.
Pada UART, kecepatan pengiriman data ( atau yang sering disebut dengan Baud Rate ) dan fase clock pada sisi transmitter dan sisi receiver harus sinkron.
Untuk itu diperlukan sinkronisasi antara Transmitter dan Receiver. Hal ini dilakukan oleh bit “Start” dan bit “Stop”. Ketika saluran transmisi dalam keadaan idle, output UART adalah dalam keadaan logika “1”.
Ketika Transmitter ingin mengirimkan data, output UART akan diset dulu ke logika “0” untuk waktu satu bit. Sinyal ini pada receiver akan dikenali sebagai sinyal “Start” yang digunakan untuk menyinkronkan fase clocknya sehingga sinkron dengan fase clock transmitter.
Selanjutnya data akan dikirimkan secara serial dari bit yang paling rendah (bit0) sampai bit tertinggi.Selanjutnya akan dikirimkan sinyal “Stop” sebagai akhir dari pengiriman data serial.
Sebagai contoh misalnya akan dikirimkan data huruf “A” dalam format ASCII (atau sama dengan 41 heksa atau 0100 0001.
PENGIRIMAN HURUF “A” TANPA BIT PARITAS
PENGIRIMAN HURUF “A” TANPA BIT PARITAS
Kecepatan transmisi (baud rate) dapat dipilih bebas dalam rentang tertentu.Baud rate yang umum dipakai adalah 110, 135, 150, 300, 600, 1200, 2400, dan 9600 (bit/perdertik).Dalam komunikasi data serial, baud rate dari kedua alat yang berhubungan harus diatur pada kecepatan yang sama. Selanjutnya harus ditentukan panjang data (6,7 atau 8 bit), paritas (genap, ganjil, atau tanpa paritas), dan jumlah bit “Stop” (1, 1 ½ , atau 2 bit).
Karakteristik Sinyal Port Serial
Standar sinyal komunikasi serial yang banyak digunakan adalah Standar RS232 yang dikembangkan oleh Electronic Industri Association (EIA/TIA) yang pertama kali dipublikasikan pada tahun 1962.Ini terjadi jauh sebelum IC TTL populer sehingga sinyal ini tidak ada hubungan sama sekali dengan level tegangan IC TTL. Standar ini hanya menyangkut komunikasi antara (Data Terminal Equipment – DTE) dengan alat – alat pelengkap komputer (Data Circuit Terminating Equipment – DCE).
Standar sinyal RS232 memiliki ketentuan level tegangan sebagai berikut :
  • Logika 1 disebut ‘Mark’ terletak antara -3 Volt sampai -25 Volt
  • Logika ‘0’ disebut ‘space’ terletak antara +3 Volt samapai +25 Volt.
  • Daerah tegangan antara -3 Volt sampai +3 Volt adalah invalid level, yaitu daerah tegangan yang tidak memiliki level logika pasti sehingga harus dihindari. Demikian juga level tegangan dibawah -25 Volt dan diatas +25 Volt juga harus dihindari karena bisa merusak line driver pada saluran RS232
Gambar dibawah adalah contoh level tegangan RS232 pada pengiriman huruf “A” dalam format ASCII tanpa bit paritas.
Level Tegangan RS232 pada pengiriman huruf “A” Tanpa Bit Paritas.
Level Tegangan RS232 pada pengiriman huruf “A” Tanpa Bit Paritas.
Flow Control
Jika kecepatan transfer data dari DTE ke DCE (misal dari komputer / modem) lebih cepat dari pada transfer data dari DCE ke DCE (modem ke modem) maka cepat atau lambat kehilangan data akan terjadi karena buffer pada DCE akan mengalami overflow. Untuk itu diperlukan sistem flow control untuk mengatasi masalah tersebut.Ada 2 macam flow control yaitu secara hardware dan secara software.
Flow control secara software atau yang sering disebut dengan Xon (karakter ASCII 17) dan Xoff (karakter ASCII 19).DCE akan mengirimkan Xoff ke komputer untuk memberitahukan agar komputer menghentikan pengiriman data jika buffer pada DCE telah penuh.Jika buffer telah kembali siap menerima data DCE akan mengirimkan karakter Xon ke komputer dan komputer akan melanjutkan pengiriman data sampai data terkirim semua.Keuntungan Flow Control ini adalah hanya diperlukan kabel sedikit karena karakter kontrol dikirim lewat saluran TX RX.
Flow Control secara hardware atau sering disebut RTS / CTS menggunkan dua kabel untuk melakukan pengontrolan.Komputer akan men-set saluran Request to Send (RTS) jika akan mengirimkan data ke DCE. Jika buffer di DCE siap menerima data, maka DCE akan membalas dengan men-set saluran Clear to Send (CTS) dan komputer akan mulai mengirimkan data.Jika buffer telah penuh, maka saluran akan di reset dan komputer akan menghentikan pengiriman data sampai saluran ini di-set kembali.
Konfigurasi Port Serial
Konektor DB-9 pada bagian belakang komputer adalah port serial RS232 yang biasa dinamai dengan COM1 dan COM2.
Keterangan mengenai fungsi saluran RS232 pada konektor DB-9 adalah sebagai berikut :
  1. Received Line Signal Detect, dengan saluran ini DCE memberitahukan ke DTE bahwa pada terminal masukan ada data masuk.
  2. Receive Data, digunakan DTE menerima data dari DCE.
  3. Transmit Data, digunakan DTE mengirimkan data ke DCE.
  4. Data Terminal Ready, pada saluran ini DTE memberitahukan kesiapan terminalnya.
  5. Signal Ground, saluran ground
  6. DCE ready, sinyal aktif pada saluran ini menunjukkan bahwa DCE sudah siap.
  7. Request to Send, dengan saluran ini DCE diminta mengirim data oleh DTE.
  8. Clear to Send, dengan saluran ini DCE memberitahukan bahwa DTE boleh mulai mengirim data.
  9. Ring Indicator, pada saluran ini DCE memberitahukan ke DTE bahwa sebuah stasiun menghendaki hubungan dengannya.
Untuk dapat menggunakan port serial harus diketahui dahulu alamat dari port serial tersebut. Biasanya tersedia dua port serial pada CPU, yaitu COM1 dan COM2. Base Address COM1 biasanya 1016 (3F8h) dan COM2 biasanya 760 (2F8h). Alamat tersebut adalah alamat yang biasa digunakan, tergantung komputer yang digunakan.Tepatnya kita bisa melihat pada peta memori tempat menyimpan alamat tersebut, yaitu memori 0000.0400h untuk COM1 dan 0000.0402h untuk COM2.
Berikut adalah nama – nama register yang digunakan beserta alamatnya.
Keterangan Register
  • RX Buffer , digunakan untuk menampung dan menyimpan data dari DCE.
  • TX Buffer , digunakan untuk menampung dan menyimpan data yang akan dikirim ke port serial.
  • Baud Rate Divisor Latch LSB , digunakan untuk menampung byte bobot rendah untuk pembagi clock pada IC UART agar didapat baud rate yang tepat.
  • Baud Rate Divisor Latch MSB , digunakan untuk menampung byte bobot tinggi untuk pembagi clock pada IC UART sehingga total angka pembagi adalah 4 byte yang dapat dipilih dari 0001h sampai FFFFh.
Berikut adalah tabel angka pembagi yang sering digunakan :
Sebagai catatan, register Baud Rate Divisor Latch ini bisa diisi jika bit 7 pada register Line Control Register diisi 1.
Alasan Penggunaan Port Serial
Dibandingkan dengan menggunakan port parallel penggunaan port serial terkesan lebih rumit. Berikut adalah keuntungan penggunaan port serial dibandingkan penggunaan port parallel.
  1. Pada komunikasi dengan kabel yang panjang, masalah cable loss tidak akan menjadi masalah besar daripada menggunakan kabel parallel. Port serial mentransmisikan “1” pada level tegangan   -3 Volt sampai -25 Volt dan “0” pada level tegangan +3 Volt sampai +25 Volt, sedangkan port parallel mentransmisikan “0” pada level tegangan 0 Volt dan “1” pada level tegangan 5 Volt.
  2. Dubutuhkan jumlah kabel yang sedikit, bisa hanya menggunakan 3 kabel yaitu saluran Transmit Data, saluran Receive Data, dan saluran Ground (Konfigurasi Null Modem)
  3. Saat ini penggunaan mikrokontroller semakin populer. Kebanyakan mikrokontroller sudah dilengkapi dengan SCI (Serial Communication Interface) yang dapat digunakan untuk komunikasi dengan port serial komputer.
Pengaksesan Port Serial Pada Visual Basic
Untuk pengaksesan port serial kita dapat mengaksesnya secara langsung menggunakan kontrol MSComm yang telah disediakan Visual basic.Kontrol MSComm menyediakan fisilitas komunikasi antara program aplikasi yang kita buat dengan port serial untuk mengirim atau menerima data melalui port serial.Setiap MSComm hanya menangani satu port serial sehingga jika kita ingin menggunakan lebih dari satu port serial harus digunakan MSComm lain.
Properti MSComm
Jumlah properti pada MSComm sangat banyak, dan hanya beberapa properti yang perlu kita ketahui. Properti yang sering digunakan adalah :
CommPort
Digunakan untuk menentukan nomor port serial yang akan dipakai.
Setting
Digunakan untuk menset nilai baud rate, pariti, jumlah bit data, dan jumlah bit stop.
PortOpen
Digunakan untuk membuka ataupun menutup port serial yang dihubungkan dengan MSComm ini.
Input
Digunakan untuk mengambil data string yang ada pada buffer penerima.
Output
Digunakan untuk menulis data string pada buffer kirim.
Berikut adalah contoh penggunaan properti tersebut
‘==============================================
Private Sub Form_Load ()
MSComm1.ComPort = 1
MSComm1.Setting = “9600,N,8,1”
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = “ATV1Q0” & Chr$(13)
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr (Buffer$, “OK”
& vbCLRF)
MSComm1.PortOpen = False
End Sub
‘==============================================
Kode – kode program pada prosedur diatas akan melakukan aksi sebagai berikut :
  • Port serial yang digunakan adalah COM1
  • Setting MSComm adalah : Baud rate 9600, tanpa paritas, jumlah data 8 bit, dan jumlah bit stop adalah 1 bit
  • Memerintahkan kontrol MSComm membaca seluruh isi buffer ketika menggunakan perintah input (MSComm1.InputLen = 0)
  • Membaca port serial
  • Mengirim perintah “ATV1Q0” diikuti ASCII 13 (enter) ke modem
  • Menunggu modem mengirimkan jawaban “OK” ke komputer
  • Menutup port serial
Even Pada MSComm
MSComm hanya mempunyai satu even saja, yaitu even OnComm. Even OnComm dibangkitkan jika nilai properti dari CommEvent berubah yang mengindikasikan telah terjadi even pada port serial baik even komunikasi maupun even error.
Tabel berikut adalah tabel mengenai nilai – nilai dari properti CommEvent, nilai properti ini tidak tersedia pada saat design time, tetapi hanya dapat dibaca pada saat run time.
Berikut adalah contoh penggunaan even OnComm untuk komunikasi menggunakan mikrokontroller. Akan dibaca hanya even comEvReceive saja
‘==============================================
Private Static Sub MSComm1_OnComm ()
Dim Buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
If MSComm1.InVufferCount >= 3
then
buffer = CStr (MSComm1.Input)
If Mid (Buffer,1,1) = “0”
then
if Mid (Buffer,2,1)= “K”
then
StatusBar1.Panels
(“Value”).Text = “Value : “ &
Asc(Mid(Buffer,3,1))
StatusBar1.Panels
(“Status”).Text = “Status :
Connect”
End If
End If
End If
End Select
End Sub
‘==============================================
Kode – kode program pada prosedur diatas akan melakukan aksi sebagai berikut :
  • Mendeteksi even comEvenReceive, kemudian menentukan apakah sudah diterima tiga buah karakter pada buffer penerima .
  • Menentukan apakah karakter yang diterima adalah karakter “OK”. Jika karakter yang diterima adalah “OK” maka akan diubah nilai “Value” dan nilai “Status” pada properti panel kontrol StatusBar1.
Hem, mungkin penjelasan diatas masih ada kurangnya mohon di beri saran dan kritik yaa :D . selamat mencoba, semoga sukses.