Thursday, 28 June 2012

Belajar AVR – Kontrol Motor DC, Stepper dan Servo – 12



Salam ngOOprekers !! Kali ini kita bertemu kembali pada tutorial belajar AVR. Materi yang akan disampaikan pada kali ini adalah pemrograman kendali motor. Motor merupakan perangkat aktuator yang paling banyak digunakan pada aplikasi robot ataupun mesin industri. Kali ini kita akan membahas tentang pengontrolan tiga jenis motor yaitu motor DC, motor servo, dan motor stepper.
1. Motor DC
Ada yang tidak tahu dengan motor DC ? saya rasa semua pembaca ngooprek sudah tahu tentang motor DC, jadi saya tidak perlu lagi menjelaskan secara panjang lebar :D . Kali ini yang akan kita bahas adalah cara pengontrolannya dengan menggunakan mikrokontroler ATMega8. Untuk mengendalikan motor DC, kita tidak bisa menghubungkan langsung ke mikrokontroler. Kita membutuhkan sebuah “supir” atau bahasa kerennya adalah driver. Driver ini yang nantinya bertugas meneruskan perintah dari mikrokontroler menjadi sebuah gerakan motor DC yang memiliki arah putaran dan kecepatan tertentu. Rangkaian driver motor yang akan kita gunakan kali ini dibentuk oleh sebuah H-bridge mosfet. Skematik rangkaiannya dapat dilihat pada gambar di bawah ini.
Seperti terlihat pada gambar diatas, driver motor terbuhung ke pin PORTB.0 dan PORTB.1 pada mikrokontroler ATMega8. Diman pin PORTB.1 ini merupakan jalur pwm yang nantinya dapat digunakan untuk mengatur kecepatan putar dari motor DC yang dikendalikan.
Untuk memulai pemrograman terlebih dahulu buat sebuah project baru. Pada code wizard anda perlu mengatur pin PORTB.0 dan PORTB.1 agar dapat berfungsi sebagai input. Kemudian kita perlu mengatur konfigurasi dari timer 1 agar PORTB.1 dapat berfungsi untuk mengeluarkan PWM. Pengaturan pada Timer1 dapat dilihat pada gambar di bawah ini.

Selanjutnya kita akan membuat fungsi untuk mengontrol driver motor tersebut. Anda dapat menulis source code di bawah ini.
#include <mega8.h>
#include <delay.h>
void kontrolMotor(unsigned char direction, unsigned char pwm) {
if (pwm==0) {  // Program untuk ngerem/break
PORTB.0 = 0;
OCR1A = 0;
}
else {
if (direction==1) {
PORTB.0 = 0;
OCR1A = pwm;
}
else {
PORTB.0 = 1;
OCR1A = 255 – pwm;
}
}
}
// Declare your global variables here
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0
PORTB=0×00;
DDRB=0×07;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Ph. correct PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0×05;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
while (1) {
// Place your code here
kontrolMotor(1, 150);
delay_ms(5000);
kontrolMotor(0, 0);
delay_ms(5000);
kontrolMotor(0, 50);
delay_ms(5000);
kontrolMotor(0, 0);
delay_ms(5000);
kontrolMotor(1,255);
delay_ms(5000);
}
}
Fungsi kontrolMotor memiliki dua buah parameter input yaitu direction dan kecepatan, direction menunjukkan arah putaran, sedangkan kecepatan menunjukkan nilai dari kecepatan motor. Nilai direction dapat diisi dengan nilai “0″ atau “1″ dimana 1 menunjukkan bahwa arah putaran motor adalah “CW” sedangkan “0″ menunjukkan bahwa arah putaran motor adalah “CCW”. Parameter kecepatan dapat diisi dengan nilai 0-255, dimana nilai tersebut merupakan representasi dari kecepatan motor dari berhenti, lambat, hingga cepat.
Pada fungsi kontrolMotor sudah terdapat perintah untuk melakukan pengereman/break. Jika dilihat pada potongan program, pada saat pwm bernilai 0 maka PORTB.0 akan berlogika low dan OCR1A bernilai 0, berarti juga berlogika low. Sehingga jika dilihat dari gambar rangkaian driver, kondisi ini akan membuat kedua transistor 2n2222 akan menjadi off dan kedua mosfet IRF9640 akan menjadi on dan membuat kedua kutub motor terhubung ke +12V. Hal ini akan membuat  motor akan sedikit seret untuk diputar, sehingga dapat dimanfaatkan untuk pengereman.
Pada program diatas pengaturan kecepatan motor dilakukan melalui pin OCR1A/PORTB.1. Jika direction bernilai “1″, pin pengatur direction (PORTB.0) akan low, sehingga untuk pengaturan kecepatannya dapat dilakukan dengan mengatur lebar pulsa positif pada pin OCR1A. Sedangkan jika direction bernilai “0″, pin PORTB.0 akan high, sehingga untuk pengaturan kecepetannya dapat dilakukan dengan mengatur lebar pulsa low pada pin OCR1A. Oleh karena itu pada kondisi ini OCR1A bernilai 255 – pwm.
Sekarang saatnya kita panggil fungsi diatas dari blok while(1) selanjutnya jalankan program pada minimum system anda. Amati arah dan kecepatan putaran motor tesebut.
2. Motor Stepper
Satu lagi motor yang akan kita bahas pada kali ini adalah motor stepper. Motor ini banyak ditemukan pada printer, jadi kalau punya printer rusak dibongkar saja kemudian motornya diambil untuk bahan praktek kita kali ini :D . Sama seperti motor DC, motor stepper juga memerlukan rangkaian driver tersendiri untuk pengontrolannya. Rangkaian driver stepper dapat dilihat pada gambar di bawah ini.
Motor stepper yang saya gunakan pada praktek kali ini adalah motor stepper yang mempunyai step angle sebesar 1.8 derajat. Anda juga dapat menggunakan motor stepper yang memiliki step angle lain, tidak perlu sama dengan punya saya. Untuk mengontrol putaran dari motor stepper kita harus mengaktifkan kumparan motor stepper secara bergantian. Buatlah sebuah project baru dengan pengaturan PORTB sebagai output semua. Selanjutnya perhatikan dan tuliskan program di bawah ini.
#include <mega8.h>
#include <delay.h>
unsigned char dataStepper[]={0b0011,0b0110,0b1100,0b1001};
int i=0;
void putarKanan(int step) {
int j=0;
while (j<step) {
j++;
i++;
if (i>=4) {
i=0;
}
PORTB = dataStepper[i];
delay_ms(3);
}
}
void putarKiri(int step) {
int j=0;
while (j<step) {
j++;
i–;
if (i<=-1) {
i=3;
}
PORTB = dataStepper[i];
delay_ms(3);
}
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTB=0×00;
DDRB=0x0F;
while (1) {
// Place your code here
putarKanan(100);
putarKiri(200);
putarKanan(200);
putarKiri(100);
}
}
Pada program diatas saya sudah definisikan urutan pengaktifan kumparan pada sebuah array, sehingga untuk melakukan proses pemanggilan secara berulang gampang. Seperti dilihat pada program diatas, untuk menggerakkan motor stepper kita membutuhkan 4 buah step, dimana 1 stepnya dapat menggerakkan motor sebesar 1.8 derajat atau sesuai resolusi motor stepper anda. Jika nilai step angle telah diketahui, kita dapat dengan mudah menggerakkan motor ke arah sudut tertentu dengan perhitungan
Jumlah step = sudut / step angle
Arah putaran dapat anda atur melalui program, tingga memanggil fungsi putarKiri maka arah putaran motor akan berubah.
3. Motor Servo
Motor servo merupaan motor yang sudah dilengkapi dengan rangkaian kontrol dan sensor posisi. Sehingga kita tidak perlu direpotkan lagi untuk membuat rangkaian drivernya.  Motor servo ini dirangcang khusus agar dapat berputar pada posisi tertentu.Motor servo ini banyak diaplikasikan pada bidang aeromodeling ataupun robot berkaki. Jika anda ingin membeli motor servo maka carilah di toko aeromodeling ataupun mainna RC. Hal yang perlu kita ketahui pada motor servo adalah besarnya pulsa minimum dan maksimum untuk mengontrol posisinya. Untuk servo motor hitech biasanya lebar pulsa berkisar antara 600uS – 2400uS ,, 600us menunjukkan nilai untuk sudut minimal (-90 derajat) dan 2400us menunjukkan nilai untuk sudut maksimal (90 derajat). Hubungan motor servo dengan mikrokontroler depat dilihat pada gambar berikut. Kita akan menggunakan pin OC1A untuk mengeluarkan sinyal PWM pada servo. Untuk power ke servo sebaiknya anda menggunakan sumber tegangan yang terpisah, atau menggunakan baterai tersendiri.
Untuk pengontrolan motor servo ini kita juga menggunakan metode PWM, namun besarnya PWM harus sesuai dengan spesifikasi motor yaitu pulsa highnya berkisar dari 600us – 2400us dan besarnya frekuensi sekitar 50Hz. Untuk mencoba pemrograman, sekarang buatlah project baru dengan pengaturan pada timer 1 seperti berikut ini.
Program lengkapnya seperti di bawah ini, Sebelum blok while(1) tambahkan baris ICP1 = 4999. Pada program diatas saya sudah membuatkan fungsi yang memudahkan anda untuk mengendalikan motor pada posisi tertentu. Dengan memanggil fungsi tersebut anda tinggal memasukkan parameter sudut yang akan dituju. Besarnya sudut adalah -90 s/d 90 dimana nilai 0 berarti posisi horn motor servo berada pada tengah-tengah.
#include <mega8.h>
#include <delay.h>
// Declare your global variables here
void servo(int derajat) {
OCR1A=((derajat+90)*10+600)/4;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T
PORTB=0×00;
DDRB=0×06;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA2;
TCCR1B=0x1B;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
ICR1=4999;
while (1) {
// Place your code here
int i;
servo(-90);
delay_ms(1000);
servo(0);
delay_ms(1000);
servo(90);
delay_ms(1000);
servo(-90);
delay_ms(1000);
for (i=-90; i<90; i++) {
servo(i);
delay_ms(50);
}
for (i=90; i>-90; i–) {
servo(i);
delay_ms(50);
}
}
}
Semoga tulisan ini bermanfaat bagi anda sekalian
TERIMA KASIH

Kesehatan mental



Kesehatan Mental
Prof. Dr. Zakiah Daradjat


Tidak seorangpun yang tidak ingin menikmati ketenangan hidup, dan semua orang akan berusaha mencarinya, meskipun tidak semuanya dapat mencapai yang diinginkannya itu. Bermacam sebab dan rintangan yang mungkin terjadi sehingga banyak orang yang mengalami kegelisahan, kecemasan dan ketidak puasan.

Keadaan yang tidak menyenangkan itu tidak terbatas kepada golongan tertentu saja, tetapi tergantung pada cara orang menghadapi sesuatu persoalan. Misalnya ada orang miskin yang gelisah karena banyak keinginannya yang tidak tercapai, bahkan orang kaya  yang juga gelisah, cemas dan merasa tidak tentram dalam hidupnya yang diakibatkan faktor lain seperti kebosanan atau ingin menambah hartanya lebih banyak lagi.

Setiap orang, baik yang berpangkat tinggi atau tidak berpangkat bahkan seorang pesuruh, menemui kesukaran dalam berbagai bentuk. Hanya satu hal yang sama-sama dirasakan yaitu ketidaktenangan jiwa. Sesungguhnya ketenangan hidup, ketentraman jiwa atau kebahagiaan batin, tidak tergantung kepada faktor-faktor luar seperti keadaan sosial, ekonomi, politik, adat kebiasaan dsb. Akan tetapi lebih tergantung dari cara dan sikap menghadapi faktor-faktor tersebut.

Jadi yang menentukan ketenangan dan kebahagiaan hidup adalah kesehatan mental. Kesehatan mental itulah yang menentukan tanggapan seseorang terhadap suatu persoalan, dan kemampuannya menyesuaikan diri. Kesehatan mental pulalah yang  yang menentukan apakah orang akan menpunyai kegairahan untuk hidup, atau akan pasif atau tidak bersemangat.

Orang yang sehat mentalnya tidak akan lekas merasa putus asa, pesimis atau apatis, karena ia dapat mengahadapi semua rintangan  atau kegagalan hidupnya dengan tenang. Apabila kegagalan itu dihadapi dengan tenang, akan dapatlah dianalisa, dicari sebab-sebab yang dimenimbulkannya, atau ditemukan faktor-faktor yang tidak pada tempatnya. Dengan demikian akan dapat dijadikan pelajaran yaitu menghindari semua hal-hal yang membawa kegagalan pada waktu yang lain.

Untuk mengetahui apakah seseorang sehat atau terganggu mentalnya, tidaklah mudah. Biasanya yang dijadikan bahan penyelidikan atau tanda-tanda dari kesehatan mental adalah tindakan, tingkah laku atau perasaan. Karenanya seseorang yang terganggu kesehatan mentalnya bila terjadi kegoncangan emosi, kelainan tingkah laku atau tindakannya.

Dari hasil penelitian yang dilakukan terhadap pasien-pasien yang terganggu kesehatan mentalnya, dapat disimpulkan bahwa kesehatan mental yang terganggu dapat mempengaruhi keseluruhan hidup seseorang. Pengaruh itu dibagi dalam empat kelompok yaitu ; perasaan, pikiran/kecerdasan, kelakuan dan kesehatan badan. Hal ini semua tergolong kepada gangguan jiwa, sedangkan sakit jiwa adalah jauh lebih berat.



Perasaan
Diantara gangguan perasaan yang disebabkan oleh kesehatan mental ialah rasa cemas, iri hati, sedih, merasa rendah diri, pemarah, ragu dsb. Untuk jelasnya marilah kita tinjau tiap-tiap persoalan dengan contohnya.

Rasa Cemas
Perasaan tidak menentu, panik, takut tanpa mengetahui ada yang ditakutkan dan tidak dapat menghilangkan perasan gelisah dan mencemaskan itu. Terlalu banyak hal-hal yang banyak menyebabkan gelisah yang tidak pada tempatnya.

Iri Hati
Seringkali orang mrrasa iri hati atas kebahagiaan orang lain. Perasan ini bukan karena kebusukan hatinya seprti biasa di sangka orang, akan tetapi karena ia sendiri tidak merasakan bahagia dalam hidupnya.

Rasa Sedih
Rasa sedih yang tidak beralasan, atau terlalu banyak hal-hal yang menyedihkannya sehingga air mukannya selalu membanyangkan kesedihan, kendatipun ia seorang yang mampu, berpangkat, dihargai orang dan sebagainya.

Sesungguhnya perasaan sedih ini banyak sekali terjadi. Banyak kita melihat orang yang tidak pernah gembira dalam hidupnya. Sebabnya bermacam-macam, ada ibu yang merasa kesepian karena anak-anaknya sudah, tidak memerlukannya lagi, sedang bapak tidak lagi seperti dulu. Sebaliknya ada bapak yang merasa sedih karena istrinya yang dulu selalu memperhatikan makanan dan minumannya, sekarang telah sibuk mengurus rumah tangga dan anaknya. Kesedihan-kesedihan seperti itu, tidak disebabkan oleh sesuatu hal atau persoalan secara langsung, akan tetapi oleh kesehatan mental yang terganggu.

Rasa rendah Diri
Rasa rendah diri dan tidak percaya diri banyak sekali terjadi pada remaja. Hal ini disebabkan oleh banyaknya problem yang mereka hadapi dan tidak mendapat penyelesaian dan pengertian dari orang tua. Disamping itu mungkin pula akibat pengaruh pendidikan dan perlakuan yang diterimanya waktu masih kecil.

Rasa rendah diri ini menyebabkan orang lekas tersinggung. Karena itu ia mungkin akan menjauhi pergaulan dengan orang banyak, menyendiri, tidak berani mengemukakan pendapat (karena takut salah), tidak berani bertindak atau mengambil suatu inisiatif (takut tidak diterima orang). Lama kelamaan akan hilang kepercayaan pada dirinya, dan selanjutnya ia juga kurnag percaya kepada orang. Ia akan lekas marah atau sedih hati, menjadi apatis dan pesimis.

Bahkan rasa rendah diri itu mungkin akan menyebabkan ia suka mengeritik orang lain, dan tingkah lakunya mungkin akan terlihat sombong. Dalam pergaulan ia menjadi kaku, kurang disenangi oleh kawan-kawannya, karena mudah tersinggung dan tidak banyak ikut aktif dalam pergaulan atau pekerjaan.

Pemarah

Sesungguhnya orang dalam suasana tertentu kadang-kadang perlu marah, akan tetapi kalau ia sering-sering marah yang tidak pada tempatnya atau tidak seimbang dengan sebab yang menimbulkan marah itu, maka yang demikian ada hubungannya dengan kesehatan mental. Marah sebenarnya adalah ungkapan dari perasan hati yang tidak enak, biasanya akibat kekecewaan, ketidakpuasan, tidak tercapai yang diinginkannya. Apabila orang yang sedang merasa tidak enak, tidak puas terhadap dirinya, maka sedikit saja suasana luar mengganggu ia akan menjadi marah. Mungkin anak, istri atau siapapun akan menjadi sasaran kemarahannya yang telah lama ditumpuknya itu.(Bersambung….)


Sinopsis Cara Mudah Berbicara Bahasa Inggris Gak Pake Mikir !


Sinopsis Cara Mudah Berbicara Bahasa Inggris Gak Pake Mikir !


Judul                          Ngomong Inggris Gak Pake Mikir…!
No. ISBN                  9789796103621
Penulis                        Nina.A.R
Penerbit                      Pustaka Widyatama
Tanggal terbit             2009
Jumlah Halaman         140
Berat Buku                   -
Jenis Cover                 Soft Cover
Dimensi(L x P)           130x190mm
Kategori                     Belajar Bahasa

Tentu saja, dengan adanya buku Ngomong Inggris Gak Pake Mikir…!  buatan Nina.A.R, Anda akan dibuat semakin mahir dalam soal ngomong atau bercakap-cakap dalam bahasa Inggris, dengan materi super lengkap Anda akan menemukan cara mudah berbicara Bahasa Inggris, di antaranya:

Everyday English Conversations (Percakapan Bahasa Inggris Sehari-Hari)
Introductions (Perkenalan)
Greetings (Ucapan Salam/Tegur Sapa)
Parting (Salam perpisahan)
Thanking (ucapan Terima Kasih)
Excuse and Apologizes (Permohonan Maaf)
Congratulating (Ucapan Selamat)
Invitations (Undangan)
Telling the Time (Memberitahu Waktu)
Telling the Date (Memberitahu Hari dan Tanggal)
Asking and Giving Directions (Menanyakan dan Memberi Arah/Jalan)
Visiting (Berkunjung)
Making Telephone Calls (Berbicara Melalui Telepon)
Shopping (Berbelanja)
Eating (Makan)
Request (Permintaan/Permohonan)
Suggestions (Memberikan Saran)
Hobbies and Interests (Hobi dan Minat)
Dicussions (Diskusi)
Profession and Employment (Profesi dan Pekerjaan)
Speaking English (Berbicara Bahasa Inggris)
Meeting Friends (Berjumpa dengan Teman-Teman)
Likes and Dislikes (Kesukaan dan Ketidaksukaan)
Making about Daily Activities (Menanyakan Aktivitas Sehari-hari)
Making Decisions (Membuat Keputusan)
Job Interview (Wawancara Kerja)
Selain itu, dalam buku pintar ini kalian juga bisa belajar beberapa materi dan teknik pembelajaran bahasa Inggris lainnya, seperti:

Cara Menguasai Bahasa Inggris Secara Otodidak
Teknik Cepat Menguasai Percakapan Bahasa Inggris
Cas Cis Cus Bahasa Inggris: Ngomong Inggris Gak Pake Mikir
Kunci Pengucapan Kata-kata
Cara Gampang Hafal Tenses
Everday Proverb (Proverb Sehari-hari)
Idiom yang Harus Kamu Tahu

Secara keseluruhan, buku ini sangat lengkap bagi Anda yang ingin mengetahui cara mudah berbicara Bahasa Inggris sekaligus mempraktikannya dalam kehidupan sehari-hari.

Tuesday, 26 June 2012

Lelaki Tak Solat Jumaat sebab Uzur 18

Solat Jumaat
Assalamualaikum.. Untuk pengetahuan semua, kat office aku ni setiap pagi Jumaat akan ada seorang ustaz yang dijemput khas memberi tazkirah. Antara pengisian daripada tazkirah pagi tadi adalah berkenaan lelaki tak solat Jumaat sebab uzur. Walaupun solat Jumaat tu wajib bagi kaum lelaki, tetapi ada sebab-sebab tertentu yang dibolehkan bagi seseorang lelaki itu tak pergi ke masjid untuk solat Jumaat. Dia dibolehkan ‘cuti’ daripada solat Jumaat, TAPI haruslah digantikannya dengan solat Zohor.
Dibolehkan bagi lelaki untuk tidak menunaikan solat Jumaat disebabkan uzur. Uzur lelaki bukan sebab ‘datang bulan’ macam perempuan. Uzur bagi lelaki yang dimaksudkan adalah:

  • dalam keadaan sakit yang amat sangat sampai tak mampu untuk mengerjakan solat
  • tertidur atau pengsan
  • terpaksa menjaga orang yang sakit tenat
  • urusan kerja yang amat kritikal membabitkan keselamatan nyawa dan negara
  • hujan yang sangat lebat atau ribut taufan yang besar menjadi penghalang untuk ke masjid
  • dalam keadaan bermusafir
     
Tapi lelaki zaman sekarang ni bukan boleh percaya sangat. Kadang-kadang ada je yang berlakon kononnya tak boleh pergi solat Jumaat sebab uzur. Dalam hal ni, kita tak boleh menipu. Kalau menipu, Allah itu Maha Mengetahui. Nabi Muhammad SAW juga ada memberitahu jika 3 kali berturut-turut seseorang lelaki itu tidak mengerjakan solat Jumaat, maka lelaki itu adalah munafik atau bukanlah seorang Islam. Allah SWT juga akan tutup pintu hati mereka.
Wallahu a’lam…

Monday, 21 May 2012

HUKUM BERJILBAB



Para ulama’ bersepakat bahwa jilbab hukumnya adalah wajib berdasarkan Al-Quran dan sunnah,

A. Berdasarkan dalil-dalil dari al-Qur’an:

1. Surat A1-Ahzab: 59.

Hendaklah mereka menjulurkan jilbabnya ke seluruh tubuh mereka.



2. Surat A1-Ahzab: 33.

Dan hendaklah kamu tetap di rumahmu dan janganlah kamu berhias dan bertingkah laku seperti orang-orang Jahiliyah yang dahulu.



Perintah wanita agar menetap di rumah menunjukkan keharusan berjilbab tatkala keluar darinya.



3. Surat An-Nur: 31

Dan hendaklah mereka menutupkan kain kerudung ke dadanya.

Apabila menampakkan perhiasan saja dilarang bagi wanita, lantas bagaimana lagi kalau bersolek dan menampakkan keindahan tubuh mereka?!!.



B. Adapun dalil-dalil dari Sunnah:

1. Hadits yang mengancam wanita tidak masuk surga karena tidak berjilbab. Rasulullah r bersabda: Ada dua kelompok termasuk ahli neraka, aku belum pernah melihatnya: Suatu kaum yang memiliki cambuk seperti ekor sapl, mereka memukul manusia dengan cambuknya, dan wanita yang kasiyat (berpakain tapi telanjang baik karena tipis, atau pendek yang tidak menutup semua auratnya), Mailat mumilat (bergaya ketika berjalan, ingin diperhatikan orang) kepala mereka seperti punuk onta yang berpunuk dua. Mereka tidak masuk surga dan tidak mendapatkan baunya padahal bau surga itu akan didapati dari sekian dan sekian (perjalanan 500 th).. (HR. Muslim 3971, Ahmad 8311 dan Imam Malik 1421).

Syaikh Bakr bin Abdullah Abu Zaid berkata: “Hadits ini menunjukkan bahwa tabarruj (bersoleknya kaum wanita) termasuk dosa besar”.



2. Wanita adalah aurat, dia wajib berjilbab. Rasulullah r bersabda:

“Wanita itu adalah aurat, apabila dia keluar akan dibuat indah oleh syetan.”(Shahih. HR Tirmidzi 1093, Ibnu Hibban dan At-Thabrani dalam kitab Mu’jmu1 Kabir.Lihat A1-Irwa’: 273).



3. Ummu Salamah berkata: Wahai Rasulullah, bagaimana wanita berbuat dengan pakaiannya yang menjulur ke bawah? Beliau rbersabda: Hendaklah mereka memanjangkan satu jengkäl, lalu ia bertanya lagi: Bagaimana bila masih terbuka kakinya? Beliau menjawab: “Hendaknya menambah satu hasta, dan tidak boleh lebih”. (HR. Tirmidzi 653 dan berkata:“Hadits hasan shahih”).



4. Kisah wanita yang akan berangkat menunaikan shalat ‘ied, ia tidak memiliki jilbab, maka diperintah oleh Rasulullah SAW: “Hendaknya Saudarinya meminjaminya Jilbab untuknya “. (HR. Bukhari No. 318).



Tiada akan berhenti blog ini menyerui kamu wahai ukhti, sebelum ALLAH Ta’ala yang meneguri kamu dengan adjabnya..Mashya ALLAH. Oleh karena.. demikianlah kamu, sebahagian kamu ingkar dengan ayat-ayat ALLAH dan tiadalah seorang juapun diantara kamu pada jalan yang lurus malainkan sedikit sekali. maka ketahuilah olehmu Firman ALLAH Ta’ala dalam surah Al-Ahjab :59 diatas yang berbunyi:



“Yang demikian itu supaya mereka lebih mudah untuk dikenal,”



artinya : Niscaya demikianlah yang membedakan kamu dengan wanita kafir, jika kamu berkumpul ditengah keramaian tampaklah orang -orang diantara kamu yang berhijab menurut syari’at islam. sedang bagi tiada berjilbab dan tidak pula dengan hidjab niscaya kamulah yang menjadikan dirimu sama dengan wanita-wanita kafir itu.

ketahuilah..bahwasanya islam itu amatlah keras kepada kekafiran,kekufuran, kemudharatan, keingkaran dengan sekalian gerangan dosa itu sekaliannya. jika engkau merasa berat dengan syari’at islam yang diwajibkan atas kamu, maka ambillah olehmu agama selain daripada islam karena engkau akan dapat bersuka ria dengan sesamamu. tapi ukhti..ingatlah..bahwa sesungguhnya hanya islam yang menyanjung-nyanjung kesucianmu lagi meninggikan derajatmu dari yang lain. Islam begitu mencintaimu, memperhatikanmu, menyayangimu, memuliakanmu, memberi kebaikan yang tiada henti-hentinya padamu, melainkan sebahagian kamulah yang berpaling.



Jika terdapat perkataan yang salah dalam artikel ini, maka atas kamu sekalian aku memohon maaf..sedang kepada ALLAH aku memohon ampun..Wallahu A’lam

Friday, 20 January 2012

PC Interfacing Pengenalan Komunikasi Serial



 PC Interfacing


Pengenalan Komunikasi Serial
Pada prinsipnya, komunikasi serial ialah komunikasi dimana pengiriman data dilakukan per bit, sehingga lebih lambat dibandingkan komunikasi parallel seperti pada port printer yang mampu mengirim 8 bit sekaligus dalam sekali detak.  Beberapa contoh komunikasi serial ialah mouse, scanner dan system akuisisi data yang terhubung ke port COM1/COM2.

Peralatan Komunikasi Serial

Devais pada komunikasi serial port dibagi menjadi 2 (dua ) kelompok yaitu  Data Communication Equipment (DCE) dan Data Terminal Equipment (DTE). Contoh dari DCE ialah modem, plotter, scanner dan lain lain sedangkan contoh dari DTE ialah terminal  di komputer. Spesifikasi elektronik dari serial port merujuk pada Electronic Industry Association (EIA) :
  1. “Space” (logika 0) ialah tegangan antara + 3 hingga +25 V.
  2. “Mark” (logika 1) ialah tegangan antara –3 hingga –25 V.
  3. Daerah antara + 3V hingga –3V tidak didefinisikan /tidak terpakai
  4. Tegangan open circuit tidak boleh melebihi 25 V.
  5. Arus hubungan singkat tidak boleh melebihi 500mA.

Komunikasi serial membutuhkan port sebagai saluran data.  Berikut tampilan port serial DB9 yang umum digunakan sebagai port serial
                                      9 pin.jpg (13906 bytes)
Gambar  Port DB9 jantan
9 PIN PIN OUT.GIF (33246 bytes)
                                                Gambar Port DB9 betina


Konektor port serial  terdiri dari 2 jenis, yaitu konektor 25 pin (DB25  dan 9 pin (DB9) yang berpasangan (jantan dan betina).  Bentuk dari konektor DB-25 sama persis dengan port paralel. Umumnyua COM1 berada dialamat 3F8H, sedangkan COM2 dialamat 2F8H.

Tabel Jenis SInyal RS232 yang umum  digunakan



 
Konverter Logika RS-232
Jika peralatan yang kita gunakan menggunakan logika TTL maka sinyal serial port harus kita konversikan dahulu ke pulsa TTL sebelum kita gunakan, dan sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum di-inputkan ke serial port. Konverter yang paling mudah digunakan adalah MAX-232. Di dalam IC ini terdapat Charge Pump yang akan membangkitkan +10 Volt dan -10 Volt dari sumber +5 Volt tunggal. Dalam IC DIP (Dual In-line Package) 16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiter dan 2 receiver. Sering juga sebagai buffer serial digunakan chip DS275.
Untuk menghubungkan antara 2 buah PC, biasanya digunakan format null mode, dimana pin TxD dihubungkan dengan RxD pasangan, pin Sinyal ground (5) dihubungkandengan SG di pasangan,  dan masing masing  pin DTR, DSR dan CD dihubung singkat, dan pin RTS dan CTS dihubung singkat di setiap devais.
 

Pemrograman Port Serial Komputer
Port serial sering digunakan untuk interfacing komputer dan mikrokontroler, karena kemampuan jarak pengiriman data dibandingkan port paralel. Berikut contoh  program assembly untuk komunikasi serial antara 2 PC. Untuk komunikasi ini, anda cukup menghubungkan :
  1. Pin TxD ke pin RxD computer lain
  2. Pin RXD dihubungkan ke pin TxD komputer lain
  3. RTS dan CTS dihubung singkat
  4. DSR dan DTR dihubung singkat
  5. GND dihubungkan ke GND komputer lain

Program  Komunikasi Serial antara 2 PC (SerialPC.asm)
TITLE Komunikasi data serial antara 2 PC
                .model small
                .stack
                .data
Message  db ‘Komunikasi serial melalui Com2,4800,tanpa parity, 1 stop, 8 bit
        data.’,0ah,0dh
                  db ‘key apa saja ditekan akan dikirim ke komputer lain ‘,0ah,0dh
                  db ‘Tekan ESC untuk keluar’,’$’
                .code
main        proc
                mov ax,@data
                mov,ds,ax
                mov ah,09
                mov dx, offset message
                int 21h
                ;inisialisasi com2
                mov ah,0                ;inisialisasi port com
                mov dx,1                ;com2
                mov al,0c3h           ;4800,tanpa parity,1 stop, 8 bit data
                int 14h
                ;mengcek key yang ditekan dan dikirim ke com2 untuk transfer data
again:     mov ah,01              ;cek key yang ditekan menggunakan int 16h, ah=01
                int 16h                    ;jika ZF=1, tidak ada key yang ditekan
                jz next                     ;jika tidak ada key cek port port
                mov ah,0                ;ya, ada key yang ditekan, ambil !
                int 16h                    ;kita harus menggunakan int 16h 2 kali, untuk keuda kalinya
                ;dengan ah=0 untuk mengambil karakter. al=ascii karakter  yang ditekan
                cmp al,1bh             ;apakah key ESC?
                Je exit                     ;ya exit
                Mov ah,1               ;tidak, kirim karakter ke com2
                Mov dx,01
                Int 14h
                ;cek com2 untuk melihat apakah ada karater, jika ada ambil dan tampilkan
next:        mov ah,03              ;ambil status com2
                mov dx,01
                int 14h
                and ah,01               ;ah mempunyai status com, mask seluruh bit kecuali D0
                cmp ah,01              ;cek D0 untuk melihat jika ada sebuah karakter
                jne again                ;tidak ada data, untuk memonitor  keyboard
                mov ah,02              ;ya, com2 mempunyai data, ambil!
                Mov dx,01
                Int 14h                    ;ambil
                Mov dl,al               ;dan tampilkan menggunakan int 21h
                Mov ah,02             ;dl mempunyai karakter yang akan ditampilkan
                Int 21h
                Jmp again              ;terus memonitor keyboard
Exit:         mov ah, 4ch           ;keluar ke DOS
                Int 21h
Main       endp
                End

Anda juga dapat memprogram komunikasi serial antara 2 PC menggunakan C dengan lebih mudah . Berikut program komunikasi data serial menggunakan fungsi BIOSCOM.

 Program   Komunikasi serial menggunakan C (SerialC.c)
//Program komunikasi serial menggunakan fungsi bioscom
//Dibuat oleh Widodo Budiharto
//nilai port  0 untuk COM1, 1 untuk COM2 dan seterusnya.
//8 bit teratas dari return value ialah untuk status
//8 bit terendeah tergantung pada perintah yang telah ditentukan
//perintah dapat berisi :
//   0   |Sets the communications parameters to the value in abyte.
//   1   | Sends the character in abyte out over the communications line
//   2   | Receives a character from the communications line.
//   3   | Returns the current status of the communications port.

//abyte ialah kombinasi dari bit berikut

//    0x02 |  7 data bits    0x00     110 baud
//    0x03 |  8 data bits    0x20     150 baud
//                                                0x40     300 baud
//    0x00 |  1 stop bit     0x60     600 baud
//    0x04 |  2 stop bits    0x80    1200 baud
//    0x00 |  No parity      0xA0    2400 baud
//    0x08 |  Odd parity     0xC0    4800 baud
//    0x18 |  Even parity    0xE0    9600 baud

//Sebagai contoh, 0xEB
//(0xE0|0x08|0x00|0x03) untuk abyte akan menset
//port komunikasi ke 9600 baud, odd parity,1 stop bit, dan 8 bit data
//bioscom menggunakan  BIOS 0x14 interrupt.

//Menyertakan header file yang dibutuhkan
#include <bios.h>
#include <conio.h>
//definisi port
#define COM1       0
#define DATA_READY 0x100
#define TRUE       1
#define FALSE      0
//definisi settings
#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)

int main(void)
{
   int in, out, status, DONE = FALSE;
   bioscom(0, SETTINGS, COM1);//3 parameter dari bioscom
   cprintf("Komunikasi serial menggunakan  BIOSCOM, tekan  [ESC] untuk keluar  \n");
   while (!DONE)
   {
      status = bioscom(3, 0, COM1);
      if (status & DATA_READY)
         if ((out = bioscom(2, 0, COM1) & 0x7F) != 0)
            putch(out);
         if (kbhit())
         {
            if ((in = getch()) == '\x1B')
               DONE = TRUE;
            bioscom(1, in, COM1);
         }
   }
   return 0;
}

Jika Anda ingin membuat aplikasi menggunakan bahasa Visual Basic .NET,  menggunakan kelas Rs232, berikut contohnya :
 
‘ Program Inisialisasi  dan membuka port komunikasi 
Private Sub btnOpenCom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenCom.Click
moRS232 = New Rs232() ‘buat ojek serial
                Try
                '// setup parameter koneksi
With moRS232
                .Port = miComPort
                .BaudRate = CInt(txtBaudrate.Text)
                .DataBit = 8
                .StopBit = Rs232.DataStopBit.StopBit_1
                .Parity = Rs232.DataParity.Parity_None
                .Timeout = CInt(txtTimeout.Text)
.WorkingMode = CType(IIf(chkOl.Checked, Rs232.Mode.Overlapped, Rs232.Mode.NonOverlapped), Rs232.Mode)
                btnAsyncTx.Enabled = (.WorkingMode = Rs232.Mode.Overlapped)
                btnAsync.Enabled = (.WorkingMode = Rs232.Mode.Overlapped)
                chkOl.Enabled = False
End With
'// inisialisasi port serial
                moRS232.Open()
                '// Set state of RTS / DTS
                moRS232.Dtr = (chkDTR.CheckState = CheckState.Checked)
                moRS232.Rts = (chkRTS.CheckState = CheckState.Checked)
                Catch Ex As Exception
                MessageBox.Show(Ex.Message, "Error koneksi ", MessageBoxButtons.OK)
                Finally
                                btnCloseCom.Enabled = moRS232.IsOpen
                                btnOpenCom.Enabled = Not moRS232.IsOpen
                                btnTx.Enabled = moRS232.IsOpen
                                btnRx.Enabled = moRS232.IsOpen
                                btnCheck.Enabled = moRS232.IsOpen
                End Try
End Sub

Untuk menulis data, gunakan fungsi-fungsi berikut ini :
Private Sub Kirim_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTx.Click
     ‘gunakan fungsi write()
      moRS232.Write(txtTx.Text)
      'moRS232.Write(Chr() & Chr(3) & Chr(0) & Chr(0) & Chr(0) & Chr(16) & Chr(68) & Chr(83))
                                ' Bersihkan textbox
                                txtRx.Text = String.Empty
                                txtRx.Refresh()
                                lbHex.Items.Clear()
                                If chkAutorx.Checked Then Button1_Click(Nothing, Nothing)
End Sub
Untuk membaca data gunakan fungsi-fungsi  Read dan InputStreamString seperti berikut :

Try
                ‘gunakan fungsi Read()
                moRS232.Read(CInt(txtBytes2Read.Text))
                txtRx.Text = moRS232.InputStreamString
                txtRx.ForeColor = Color.Black
                txtRx.BackColor = Color.White
                '// Fills listbox with hex values
                Dim aBytes As Byte() = moRS232.InputStream
                Dim iPnt As Int32
                For iPnt = 0 To aBytes.Length - 1
                lbHex.Items.Add(iPnt.ToString & ControlChars.Tab & String.Format("0x{0}",
aBytes(iPnt).ToString("X")))
                Next
Catch Ex As Exception
                txtRx.BackColor = Color.Red
                txtRx.ForeColor = Color.White
                txtRx.Text = "Terjadi error " & Ex.Message & "  data fetched: " & moRS232.InputStreamString
End Try


Gambar Program Komunikasi Serial VB .NET


Kita juga dapat menggunakan komponen yang sudah dibuat oleh suatu perusahaan, misalnya PortController.Net yang terdapat pada CD Program, sehingga pemrograman menjadi lebih mudah seperti contoh mebuka dan menulis ke suatu port serial  berikut :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myPortController.Open("COM1")
    End Sub
Private Sub SendButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click
        myPortController.Write(SendText.Text)
        SendText.Clear()
    End Sub
Private Sub myPortController_OnDataReceived(ByVal sender As Object, ByVal e As System.EventArgs) Handles myPortController.OnDataReceived
        ReceiveText.AppendText(myPortController.Read())
    End Sub



Jika hanya menggunakan bahasa Visual Basic 6, tempelkan kontrol MSComm1, dan masukkan kode untuk menset MSComm1 dimana memperoleh input dari suatu combobox berikut :

MsComm1.commPort=cmbPort.ListIndex +1
MsComm1.Settings=cmbbitspersecond.text
MSComm1.Handshaking=cmbFlowControl.LinstIndex

Interfacing Port Paralel

Pengenalan  Port Paralel
Port paralel ialah port data  di komputer untuk mentransmisi 8 bit data dalam sekali detak. Standar port paralel  yang baru ialah IEEE 1284 dimana dikeluarkan tahun 1994.  Standar ini mendefinisikan 5 mode operasi sebagai berikut :
1.       Mode kompatibilitas
2.       mode nibble
3.       mode byte
4.       mode EPP (enhanced parallel port)
5.       mode ECP (Extended capability port)
Tujuan dari standar yang baru tersebut ialah untuk mendesain driver dan peralatan yang baru yang kompatibel dengan peralatan lainnya serta standar paralel port sebelumnya (SPP) yangn diluncurkan tahun 1981. Mode  Compatibilitas, nibble dan byte  digunakan sebagai standar perangkat keras yang tersedia di port paralel  orisinal dimana EPP dan ECP membutuhkan tambahan hardware dimana dapat berjalan dengan kecepatan yang lebih tinggi. Mode kompatibilitas atau (“Mode Centronics” ) hanya dapat mengirimkan data pada arah maju pada kecepatan 50 KBytes per detik hingga 150 KBytes per detik. Untuk menerima data, anda harus mengubah mode menjadi mode nibble atau byte. Mode nibble dapat menerima  4 bit (nibble) pada arah yang mundur, misalnya dari alat ke computer. Mode byte  menggunakan fitur bi-directional parallel untuk menerima 1 byte (8 bit) data pada arah mundur. IRQ (Interrupt Request ) pada port paralel  biasanya pada IRQ5 atau IRQ7.
Port paralel Extend dan Enhanced menggunakan  hardware tambahan untuk membangkitkan dan mengatur handshaking. Untuk mengeluarkan 1 byte ke printer menggunakan mode kompatibilitas, software harus :
1.       menulis byte ke data port
2.       cek untuk melihat apakah printer sibuk, jika sibuk, ia tidak akan menerima data, sehingga data yang telah ditulis akan hilang.
3.       buat strobe (pin 1) rendah. Ini memberitahukan printer bahwa data yang benar telah berada di line data
4.       buat strobe tinggi lagi setelah menunggu sekitar 5 mikrodetik setelah membuat strobe low.
Hal ini membatasi kecepatan data. Sedangkan  EPP dan ECP mengizinkan hardware mengecek jika printer sibuk dan mengeluarkan sinyal strobe  atau handshaking lainnya. Ini berate hanya 1 instruksi I/O yang harus dilakukan yang akan meningkatkan kecepatan Port ECP juga mempunyai kelebihan menggunakan saluran DMA dan buffer FIFO, jadi data dapat digeser tanpa menggunakan instruksi I/O.
Protokol  EPP mempunyai 4 macam siklus transfer data yang berbeda yaitu :
  1. Siklus baca data (Data read)
  2. Siklus baca alamat (Address Read)
  3. Siklus tulis data (data write)
  4. siklus tulis alamat (address write)

Siklus data digunakan untuk mentrasfer data antara host dan peripheral.  Siklus alamat digunakan untuk mengirimkan alamat, saluran (channel) atau informasi perintah dan control.
Berikut ialah tabel nama pin dari konekter DB25 dan Centronics dengan jumlah konektor 34.  DB25 ialah konektor yang umum digunakan di computer sebagai port paralel , sedangkan konektor Centronics umum ditemukan di printer.  IEEE 1284 ialah standar yang menentukan 3 konektor berbeda yang dapat digunakan dengan port paralel, yaitu 1284 tipe A ialah konektor DB25 yang dapat ditemukan di hampir semua komputer, 1284 tipe B ialah konektor Centronics 36 pin yang umum ditemukan di printer, IEEE 1284 type C ialah konektor 36 pin seperti Centronics, tetapi ukurannya lebih kecil dan lebih memuaskan.
 pinout diagram

  Tabel  Nama pin dari konektor parallel port  DB 25 dan Centronics
Pin DB25
Pin Centronics
Sinyal
SPP
Arah  In/out
Register
Hardware di invert
1
1
nStrobe
In/Out
Control
Ya
2
2
Data 0
Out
Data

3
3
Data 1
Out
Data

4
4
Data 2
Out
Data

5
5
Data 3
Out
Data

6
6
Data 4
Out
Data

7
7
Data 5
Out
Data

8
8
Data 6
Out
Data

9
9
Data 7
Out
Data

10
10
nAck
In
Status

11
11
Busy
In
Status
Ya
12
12
Paper-Out / Paper-End
In
Status

13
13
Select
In
Status

14
14
nAuto-Linefeed
In/Out
Control
Ya
15
32
nError / nFault
In
Status

16
31
nInitialize
In/Out
Control

17
36
nSelect-Printer / nSelect-In
In/Out
Control
Ya
18 - 25
19-30
Ground
Gnd




Untuk mengeluluarkan data di port parallel, anda gunakan fungsi outport (8 bit ) dan outportb(16 bit)   sebagai berikut :

Program  pengendali lampu led di port paralel(iopar.c)
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
outport(0x378,0);//lampu led mati
sleep(5); //tunda 5 detik
outport(0x378,1); //lampu led hidup
sleep(5);
return 0;
}

Program Visual  C++ untuk pengendali lampu led di port paralel
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
_outp(0x378,0); // model visual C++ untuk outport
_sleep(1000);
_outp(0x378,1);
_sleep(1000);
return 0;
}

Jika anda ingin menggunakan Bahasa Visual Basic, maka Anda harus mengimport file inpout32.dll ke direktori  c:\windows, c:\windows\system dan default direktori program anda untuk memastikan file ini dapat ditemukan, file .dll ini dapat Anda temukan di widodo.com/downloads/downloads.html. Pada Sistem Operasi Berbasis Windows 2000 keatas, biasanya tidak bisa mengakses hardware secara langsung, anda membutuhkan program pendukung misalnya Userport.

 Gambar 9.1  Contoh aplikasi VB
Berikut contoh kodenya :
Private Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)Dim Port1 As Integer
Private Sub Command1_Click()
Port1 = 888
Out Port1, 1
End Sub
Private Sub Command2_Click()
Port1 = 888
Out Port1, 0
End Sub
 
                  Gambar Rangkaian LED ke port parallel

Gambar berikut contoh penggunakan port paralel untuk mengendalikan 5 buah 7 segment menggunakan IC 74LS244 dan 75492, anda juga dapat kembangkan menggunakan dot matrix 5x7. Perlu diketahui bahwa port control di port paralel menggunakan jenis open kolektor, dimana jika diukur dnegan voltmeter, maka output port control akan selalu bernilai tinggi (5V). Yang dibutuhkan di sini ialah kecerdikan anda di dalam membuat program , jika dilihat dari gambar, 7 segment membutuhkan 7 input yang berasal dari 74LS244. Sedangkan untuk memilih 7 segment mana yang aktif Anda cukup memberikan pulsa ke pin  IC 75492 yang sesuai.
Alamat port paralel umumnya  378H, Jika anda menggunakan bahasa Pascal untuk mengeluarkan data ke port paralel berikut contoh kodenya :
Prosedure lampu_hidup_naik;
Begin
I:=1;
repeat
Port[$378]:=I;
I:=I*2;
until I>255;
End;
Jika anda ingin menggunakan bahasa C, akan lebih baik alamat port anda definisikan  sebagai berikut

#define PORT 0x378


                        Gambar Contoh aplikasi port paralel
Alamat Port
Port Paralel  mempunyai 3 alamat seperti pada tabel 9.2. 3BCH ialah alamat dasar yang diperkenalkan sejak munculnya port Paralel  pada kartu video yang kemudian tidak digunakan lagi . LPT1 ialah line printer dengan alamat 378h, lalu  LPT2 dengan alamat 278H meskipun alamat ini dapat dirubah. Saat ini, alamat 378H dan 278H umumnya digunakan sebagai alamat port Paralel .
                       Tabel Alamat port paralel
Alamat
Penjelasan
3BCH - 3BFH
Digunakan untuk paralel port di kartu video,  tidak mendukung alamat ECP
378H - 37FH
Alamat untuk  LPT 1
278H - 27FH
Alamat untuk  LPT 2




Ketika komputer dihidupkan, BIOS (Basic Input/Output System) akan menentukan jumlah port yang anda miliki dan mengeset nama LPT1, LPT2 & LPT3 ke masing-masing port tersebut. BIOS pertama kali mencari alamat 3BCH. Jika parallel port ditemukan di sana,BIOS akan mengeset dengan nama LPT1, lalu mencari alamat lainnya yaitu 378H.Berikut contoh program menerima data dari port paralel , dimana base alamatnya ialah 379H.:
Program penerima data port paralel (paralel.c)
#include <stdio.h>
#include <dos.h>
#include <conio.h>
/*****************************************/
/*membaca input data dari port paralel */
/*****************************************/

int Read_Input()
{
int Byte;
Byte=inportb(0x378);
return Byte;
}
void main (void)
{
int PP_Input;
clrscr();
PP_Input = Read_Input();
printf("%d",PP_Input);
getch();}
Ketika BIOS mengeset alamat ke peralatan printer Anda, ia menyimpan alamat pada lokasi tertentu di memory, seperti pada Tabel 9.3. Alamat 0000:040E pada BIOS Data Area mungkin digunakan sebagai Extended Bios Data Area di  PS/2 dan BIOS yang lebih baru .
               Tabel Alamat LPT di  BIOS Data Area

Alamat Awal
Fungsi
0000:0408
LPT1's Base Address
0000:040A
LPT2's Base Address
0000:040C
LPT3's Base Address
0000:040E
LPT4's Base Address

Tabel diatas menampilkan alamat dimana kita dapat mencari alamat port printer  pada BIOS Data Area. Tiap alamat membutuhkan 2 byte. Kode berikut ialah  contoh program pencarian alamat port printer di komputer Anda.

Program mencari alamat port paralel(Caripar.c)
#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr;  /* Pointer ke lokasi alamat port */
unsigned int address;       /* alamart Port */
int a;
ptraddr=(unsigned int far *)0x00000408;
for (a = 0; a < 3; a++)
{
address = *ptraddr;
if (address == 0)
               printf(" port tidak ditemukan di LPT%d \n",a+1);
else
               printf("Alamat yang diset di LPT %d ialah %Xh\n",a+1,address);
               *ptraddr++;
}


Aplikasi Port Paralel 
Berikut contoh program C untuk mengontrol 8 buah alat melalui penekanan tombol keyboard :

Program pengontrol menggunakan  port parallel (Kontrolpar.c)
/*
Program untuk mengontrol peralatan menggunakan port paralel .
Alat dikontrol dengan menekan tombol 1-8 di keyboard.
*/
#include<dos.h>
#include<stdio.h>
#include<conio.h>
#define PORT 0x378 /* alamat port paralel  */
main()
{
char val=0,key=0;
char str1[]="ON ";
char str2[]="OFF";
char *str;
clrscr();
printf("Tekan key yang sesuai untuk menghidupkan /mematikan alat \n\n");
printf("Alat ke 1 terhubung ke D0 port paralel , begitu seterusnya \n\n");
printf("Tekan  \"x\" untuk  keluar\n\n");
gotoxy(1,8);
printf("Device1:OFF Device2:OFF Device3:OFF Device4:OFF\n");
printf("Device5:OFF Device6:OFF Device7:OFF Device8:OFF");

while(key!='x' && key!='X') //Jika yang ditekan bukan X
{
gotoxy(1,12);
printf("Nilai dalam format hex telah dikirim ke port:");
key=getch();
switch(key){
case '1': //jika kita menekan 1 di keyboard
               gotoxy(9,8);
               val=(val&0x01)?(val&(~0x01)):val|0x01;
               str=(val&0x01)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '2':
               gotoxy(21,8);
               val=(val&0x02)?(val&(~0x02)):val|0x02;
               str=(val&0x02)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '3':
               gotoxy(33,8);
               val=(val&0x04)?(val&(~0x04)):val|0x04;
               str=(val&0x04)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '4':
               gotoxy(45,8);
               val=(val&0x08)?(val&(~0x08)):val|0x08;
               str=(val&0x08)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '5':
               gotoxy(9,9);
               val=(val&0x10)?(val&(~0x10)):val|0x10;
               str=(val&0x10)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '6':
               gotoxy(21,9);
               val=(val&0x20)?(val&(~0x20)):val|0x20;
               str=(val&0x20)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '7':
               gotoxy(33,9);
               val=(val&0x40)?(val&(~0x40)):val|0x40;
               str=(val&0x40)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;
case '8':
               gotoxy(45,9);
               val=(val&0x80)?(val&(~0x80)):val|0x80;
               str=(val&0x80)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",(unsigned char)val);
               break;
               }
}
}

Program diatas segera akan mengeluarkan data ke port paralel ketika user menekan tombol keyboard  menggunakan fungsi case, dan menggunakan fungsi outportb  untuk mengendalikan port . Fungsi gotoxy untuk menempatkan string pada posisi x dan y yang telah ditentukan, serta fungsi break untuk berhenti, berikut potongoan kodenya :

case '1': //jika kita menekan 1 di keyboard
               gotoxy(9,8);
               val=(val&0x01)?(val&(~0x01)):val|0x01;
               str=(val&0x01)?str1:str2;
               printf("%s",str);
               outportb(PORT,val);
               gotoxy(1,13);
               printf("%x",val);
               break;

Untuk mendeteksi  alamat port printer apa saja yang telah diset pada port parallel, gunakan perintah debug sebagai berikut :

  Gambar Menggunakan perintah debug untuk melihat alamat LPT1

Dari gambar diatas terlihat LPT1 diset dialamat 378H dan ada alamat lainnya yang telah diset juga. 
Contoh aplikasi berikut akan mengukur suhu melalui port parallel dan sensor DS1722. Pin SERMODE ialah Serial interface mode, sedangkan CE ialah Chip Enable seperti penjelasan pada Tabel

Tabel No Pin dan Fungsi DS1722

No. Pin
Nama Pin
Keterangan
7
SERMODE
Serial Interface Mode
2
CE
Chip Enable
3
SCLK
Serial Clock
5
SDO
Serial Data Out
6
SDI
Serial Data In
8
VDDA
Analog supply voltage



            

            Gambar Rangkaian sensor temperatur

Terlihat pada gambar, yang dibutuhkan hanya sinyal SCK, SDI dan SD0 untuk mengirim data ke port parallel. An3315.pdf merupakan tutorial menulis program bahasa C untuk 2 wire di port parallel.



Program Sensor Temperatur  DS1722 (Ds1722.c)
// Sensor berbasis DS1722 di port Paralel
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <process.h>
#include <alloc.h>

#define VDD_ON  0x01  /* power to PIC through VDD_ON on pin 2 (D0) */
#define SCK          0x02  /* serial clock for SPI provided by PC       */
#define PCSDO    0x04  /* serial data out from PC on Data bit 2     */
#define PCSDI      0x20  /* note this is on Status register (bit 1)   */
#define SSOUT    0x40  /* =CE, active high, not low as for PIC SPI  */
#define MCLR_HI 0x80  /* MCLR* on pin 9 (Data bit 7) normally high */
#define OPERATE VDD_ON | MCLR_HI  /* normal operation of DS1722    */
/* adjust these to match the CPU speed */
#define DELTIME 10000             /* settling time after transfers */
#define SECDELA 10000000          /* to get about 1 s sampling     */

void dodelay(long);
void outportd(unsigned char);
int dport,sport;

void main(void)
{
unsigned char LSB,transfer(unsigned char,unsigned char);
char MSB; /* note this is signed */
void outportd(unsigned char outbyte);
int i,j,it;
float T;

/* LPT1 port addresses */
if(!(dport = peek(0x40,0x08)))
 { printf("\n\n\nLPT1 not available... aborting\n\n\n"); exit(1); }
sport = dport + 1;           /* status port address */
/* Initialize the Printer DATA Port for PIC operation */
/* includes putting SCK in the neutral 0 position: ~ is bitwise negation */
outportd(OPERATE&~SSOUT);

printf("hit key to stop list\n");
transfer(0x80,0xE8);   /* initialize DS1722 */
for(j=0;j<20;j++)
 { if(kbhit()) break;
   printf(" config %X: ",transfer(00,0));    dodelay(SECDELA);
   printf(" LSB %X: ",LSB=transfer(0x01,0)); dodelay(SECDELA);
   printf(" MSB %X: ",MSB=transfer(0x02,0)); dodelay(SECDELA);
   printf("T=%10.4f\n",T=MSB+(float)LSB/256.);
 } /* for loop */
}
unsigned char transfer(unsigned char outbyte,unsigned char outdata)
{ /* output address byte on Data2, data byte, getting inbyte on Status5 */
  unsigned char outmask,inbyte,statusmask;
  int ibit;
  inbyte=0x00;
/* raise SSOUT for 2 byte transfer, SCK also in lowered neutral position */
  outportd(OPERATE|SSOUT);
  for(ibit=0;ibit<8;ibit++)                          
   { outportd(OPERATE|SCK|SSOUT);                    
     outmask=outbyte&0x80; outbyte=outbyte<<1;
     if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or  */
       else outportd(OPERATE|SCK|SSOUT);        /* of 0 on PCSDO   */
     if(outmask)outportd(OPERATE|PCSDO|SSOUT);    /* lower clock SCK */
       else outportd(OPERATE|SSOUT);            /* retaining data  */
   }
  for(ibit=0;ibit<8;ibit++)                           /* output outdata  */
   {                                                  /* & input inbyte  */
     outportd(OPERATE|SCK|SSOUT);              /* raise clock SCK */
     outmask=outdata&0x80; outdata=outdata<<1;
     if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or  */
       else outportd(OPERATE|SCK|SSOUT);        /* of 0 on PCSDO   */
     if(outmask)outportd(OPERATE|PCSDO|SSOUT);     /* lower clock SCK */
       else outportd(OPERATE|SSOUT);                  /* retaining data  */
     statusmask=inportb(sport);                       /* read status port*/
     statusmask=statusmask&PCSDI;                     /* mask input line */
     inbyte=inbyte<<1; inbyte=inbyte&0xFE; inbyte|=statusmask>>5;
   }
/* lower SSOUT at end of 2 byte transfer, lower SCK to neutral position  */
  outportd(OPERATE&~SSOUT);
  return inbyte;
}
void outportd(unsigned char outbyte)
{  dodelay(DELTIME); outportb(dport,outbyte); dodelay(DELTIME); }
void dodelay(long deltime)
{ long i; for(i=0; i<deltime; i++) ; }


Pada program diatas, program  melakukan pendeteksian Port LPT1, lalu melakukan inisialisasi DS1722 untuk membaca temperatur dan dikirim ke port LPTI1 dengan delay tertentu.



Interfacing Port ISA
Gambar berikut merupakan format DAC yang umum, dimana input berupa 8 bit atau lebih, dan outputnya berupa sinyal analog, yang biasanya diperoleh dari suatu rangkaian op-amp


                  Gambar Blok diagram DAC standar

Ada 3 modus operasi pada PIO 8255 yang dapat dipilih melalui software yaitu :
  • Mode 0 : basic input/output
  • Mode 1 : strobed input/output
  • Mode 2:  bidirectional bus
Jika reset input mendapat input high, semua port akan diset ke mode input dimana semua 24  jalur ditahan pada logika 1 oleh bus internal.  PPI 8255 dapat dibuat sebagai antarmuka DAC atau ADC.  Untuk mencoba DAC yang terprogram paling mudah menggunakan PPI 8255 dalam mode 0.  Langkah-langkah:
  • Pasang Card PPI 8255 ISA, anda juga dapat menggunakan Card PPI 8255 berbasiskan PCI
  • Hubungkan DAC ke port A
  • Hubungkan keluaran DAC ke Osiloskop
  • Buat program berikut :

//Program Pembangkit sinyal Sinus berbasis 8255
#include <conio.h>
#include <stdio.h>
#include <math.h>
main()
{
printf (“======================”);
printf (“ Pembangkit sinyal sinus\n”);
outp (0x303, 0x80); //konfigurasi 8255
printf (“======================”);
unsigned char v1;
float Vout, magnitude; int a;
printf (“\n Tekan sembarang tombol untuk keluar\n”)
do
{
for (a=0;a<360;a++)
{
Vout =5.0 +5.0* sin ((3.14*a)/180));
magnitude=Vout*25.6;
v1=(char)magnitude;
delay(1);
outp(0x300,v1)
}
}
while (!kbhit());
return (0);
}

Program diatas akan membangkitkan sinyal sinus karena terdapat pembangkitan nilai sinus pada rumus Vout =5.0 +5.0* sin ((3.14*a)/180)). Alamat yang digunakan ialah 300H, yang merupakan alamat standar port ISA untuk eksperimen.


Contoh berikut menerapkan PPI 8255 dengan V B 6.


Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
End Sub
Out &H303, &H90
'End Sub

Private Sub Timer1_Timer()
Label3.Caption = Format(Date, "dd-mmm-yyyy")
Label4.Caption = Format(Time, "hh:mm:ss")
End Sub

Private Sub Timer2_Timer()
Label2.Text = Inp(&H300)
If x = 50 Then
    Out &H301, &H1
End If
End Sub



USB (Universal Serial Bus)

Mengenal USB
USB ialah port yang sangat diandalkan saat ini dengan bentuknya yang kecil dan kecepatan datanya yang tinggi. Anda dapat menghubungkan hingga 127 produk usb dalam 1 komputer. USB versi 1.1 mendukung 2 kecepatan yaitu mode kecepatan penuh 12Mbits/s dan kecepatan rendah 1.5 Mbits/s. USB 2.0 mempunyai kecepatan 480Mbits/s yang dikenal sebagai mode kecepatan tinggi.
Saat ini transfer data menggunakan port USB sudah semakin marak, port USB menjadi pilihan utama karena ukuran yang ringkas dan kecepatan transfer data yang cukup besar.  Sebagai perbandingan, Bus  PCI saat ini mendukung transfer data hingga 132 MB/s, dimana AGP (pada 66MHz) mendukung hingga 533 MB/s. AGP  dapat melakukan ini karena kemampuannya untuk mentransfer data pada ujung naik dan turun detak 66MHz.
Ada dua macam konektor USB : konektor A untuk hubungan ke host dan konektor B untuk hubungan ke peranti USB . Secara fisik dapat dibedakan dengan mudah  untuk menghindari kesalahan pemasangan.
   
                                      
Konektor jenis A     Konektor jenis B

Gambar Konektor USB


Untuk  menghubungkan lebih luas seperti menghubungkan ke piranti berukuran kecil layaknya seperti handphone, PDA, dan sebagainya. Dibuat untuk konektor mini-A dan mini-AB. Semua jenis konektor USB di hubungkan dengan empat kabel sebagaimana tabel   berikut di bawah ini

     Tabel Pengkabelan USB.
Pin
Warna Kabel
Fungsi
1
Merah
VBus ( 5 volt )
2
Putih
D-
3
Hijau
D+
4
Hitam
Ground

Fungsi USB
Suatu piranti USB dapat dikatakan sebagai sebuah  alat transceiver( pengirim sekaligus penerima ) Baik host maupun USB itu sendiri. Sebuah istilah baru di perkenalkan, yakni USB function yang maksudnya adalah peralatan USB yang memilki kemampuan khusus. Seperti printer, scanner, modem, dan lain-lainnya.

Data dikirim secara serial, maka piranti USB harus mampu menangani gelombang kontinyu. Gelombang ini di hubungkan langsung ke pin data USB dari sebuah sumber tegangan dengan impedansi output 39W. Sumber tegangan rangkaian terbuka untuk keperluan ini ada pada kemungkinan terburuk dari adanya overshoot dan undershoot.
Pada  koneksi USB dengan kecepatan 12 MHz digunakan kabel twisted-pair yang terlindung dengan impedansi 90W  kurang lebih 15% dan delay maksimumnya 26ns.Sedang impedansi pada drivernya harus antara 28W hingga 44W. Jika di ukur, arus yang masuk dan keluar piranti USB V1.1 tidak boleh melebihi 10,71 VOH mA. Tegangan logika yang di masukan ke D+ dan D- tidak boleh melebihi 0.3 VOH untuk logika rendah dan juga harus turun sebesar 0.7 VOH untuk logika tinggi.
Karena ada piranti USB yang berkomunikasi pada kecepatan rendah 1.5 MHz, maka kombinasi kabel dan piranti USB harus mengandung kapasitas tunggal dengan nilai 200pF hingga 450pF di pin D+ dan D-. Perambatan delay pada kabel kecepatan rendah harus kurang dari 18 ns. Data sinyal yang naik turun diukur dari 10% hingga 90% dari sinyal,dengan toleransi 10%. Waktu untuk ini dari 4ns hingga 20ns, tergantung kecepatan USB yang digunakan. 
Sudah saatnya anda membangun aplikasi menggunakan port USB.  Jika anda ingin membangun sistem elektronika berbasis port USB, dapat menggunakan chip FTDI atau modul FTDI, antara lain :
·   FT2232C , IC USB UART/FIFO

 FT2232L - 

   Gambar Chip FT2232C


IC ini mempunyai fitur :
·         Single chip USB <=> asynchronous serial data transfer
·         Full handshaking & modem interface signals
·         UART interface mendukung  7/8 data bits, 1/2 stop bits dan Odd/Even/Mark/Space/No Parity
·         Data transfer rate 300 Baud => 3M Baud (TTL)
·         Data transfer rate 300 Baud => 1M Baud (RS232)
·         Data transfer rate 300 Baud => 3M Baud (RS422/RS485)
·         384 Byte Rx buffer/128 Byte Tx buffer for high data throughput
·         Rx buffer timeout  dapat disesuaikan
·         Dukungan built-in untuk  event characters dan kondisi  line break
·         Auto transmit buffer control untuk  RS485
·         Mendukung USB suspend/resume through SLEEP# and RI# pins
·         Mendukung daya tinggi USB bus powered devices melalui pin  PWREN#
·         Integrated level converter dan UART dan sinyal control untuk  interfacing ke logika 5V dan  3.3V
·         Kompatibel USB 1.1 dan USB 2.0
·         EEPROM programmable on-board melalui USB

·         FT245BM, IC USB FIFO  kecepatan tinggi
IC ini memiliki fitur yang mirip dengan IC TF2232C, untuk aplikasi Modem, PC, instrumentasi dan lain 0lainnya berbasis USB.


Selain dapat membeli chip tersebut, kita dapat juga membeli modul-modul DIP menggunakan chip FTDI, antara lain   DLP-2232M, yaitu modul menggunakan FT2232C3rd generation Dual USB UART/FIFO

                               
   Gambar DLP-2232M

Versi lainnya seperti DLP-USB245M ialah modul ekonomis menggunakan chip FT245BM sebagai USB FIFO. Modul ini memiliki chip pendukung antara lain 93C46 EEPROM untuk kustomisasi OEM. Beberapa chip dan model lainnya dapat anda miliki dari produk FTDI.





Gambar DLP-USB245M

Demikianlah penjabaran dari sistem bus dan penerapannya. Semoga Anda dapat mengembangkan berbagai aplikasi yang berhubungan dengan Bus Komputer.



LATIHAN :



1.       Buat rangkaian pengendali relay dari port paralel dan PPI 8255 menggunakan transistor 2N3904 dan 2N3053. Input berlogika tinggi dari keluaran port paralel akan mengaktifkan transistor 2N3904 dan arus diperkuat oleh 2N3053. Rangkaiannya sebagai berikut:

         Gambar Rangkaian driver relay