Pengantar Keterbatasan Jumlah Pin Bila anda mengikuti dan mencoba tutorial-tutorial sebelum ini, tentu anda sudah menyadari ketergantungan Arduino terhadap pin-pin yang dimilikinya untuk berinteraksi dengan dunia luar. Setiap perangkat yang ingin kita hubungkan akan menggunakan paling sedikit satu buah pin. Karena jumlah pin terbatas, seringkali kita kehabisan pin saat kita harus menghubungkan cukup banyak perangkat. Untuk ini kita harus bisa "menambah" pin ke Arduino untuk bisa menghubungkan. Terdapat Terdapat beberapa cara untuk menambahkan pin ke Arduino. Salah satunya adalah d engan menggunakan chip shift chip shift register register . Silahkan kunjungin laman ikipedia ini untuk ini untuk pembahasan lebih dalam mengenai shift mengenai shift register register . !alam tulisan ini kita akan membahas cara menambahkan pin output menggunakan shit register S#$% &Serial &Serial In Paralel Out '. '. Tentu saja ada keterbatasan dalam penambahan pin output menggunakan shift menggunakan shift register register ini. ini. Keterbatasan utama adalah pin output tambahan ini hanyalah pin digital. (anya bisa mengeluarkan nilai ) atau * &+% atau (#( )/ atau 0/'. 1adi jangan berharap bisa menggunakan $2.
Shift Register SIPO 74HC595 Sekilas Mengenai Shift Register Shit register S#$% &Serial &Serial In Paralel Out ' memiliki pin input serial, pin clock, dan clock, dan beberapa pin output. Setiap kali sinyal clock terdeteksi terdeteksi di pin clock , nilai-nilai pada pin-pin output akan digeser ke kiri &umumnya', dan nilai pin input inpu t akan diselipkan menjadi bit terendah &+SB'. Sinyal clock umumnya ditandai dengan perubahan tegangan naik &rising &rising up' up' atau turun &rising &rising down' down' tergantung dari spesiikasi shit register yang bersangkutan. Sebagai contoh, misalkan shift misalkan shift register register S#$% S#$% A memiliki 3 pin output, * pin input, dan * pin clock. $ada keadaan aal, seluruh pin output bernilai ), atau ))))b. !an kita hendak mengubah pin output 4) menjadi ), pin output 4* menjadi *, pin output 45 menjadi ), dan pin output 46 menjadi *, atau *)*)b. 2aka kita harus melakukan hal berikut. 7lock 4
#nput pin
%)
%*
%5
%6
%)8
%*8
%58
%68
)
*
)
)
)
)
*
)
)
)
*
)
*
)
)
)
)
*
)
)
7lock 4
#nput pin
%)
%*
%5
%6
%)8
%*8
%58
%68
5
*
)
*
)
)
*
)
*
)
6
)
*
)
*
)
)
*
)
*
Keterangan9 •
%) : nilai pin ) sebelum clocking
•
;* : nilai pin * sebelum clocking
•
;5 : nilai pin 5 sebelum clocking
•
;6 : nilai pin 6 sebelum clocking
•
;)8 : nilai pin ) setelah clocking
•
;*8 : nilai pin * setelah clocking
•
;58 : nilai pin 5 setelah clocking
•
;68 : nilai pin 6 setelah clocking
74HC595 !i pasaran terdapat beberapa pilihan shit register. Salah satu yang populer adalah <3(70=0. Datasheet-nya dapat dilihat di sini atau di sini &salinan lokal'. Berikut skematik dari <3(70=0.
+egenda9 $in
>ame
Keterangan
/77 >! !S
!ata Serial in
%?
%bject ?nabled
ST@7$
+atch 7lock
S(@7$ egister 7lock 2
2aster eset
;)-;<
%utput pins
;<8
7arry pin
>ilai ;< lama akan dikirim ke pin ini setelah proses geser &shift '.
Menggunakan 74HC595 Berikut ini inormasi cepat cara menghubungkan ch ip <3(70=0 ke sistem Arduino. *. (ubungkan pin /cc &pin 4*' ke sumber tegangan C0/. 5. (ubungkan pin >! &pin 4D' ke ground . 6. (ubungkan pin %? &pin 4*6' ke ground bila anda ingin chip <3(70=0 yang bersangkutan untuk selalu aktiEterpilih setiap saat, atau hubungkan ke pin digital Arduino
jika anda butuh untuk mengaktikan chip yang bersangkutan hanya pada saat-saat tertentu, dan tidak akti di saat lain. 3. (ubungkan pin 2 &pin 4*)' ke sumber tegangan 0/ bila anda tidak butuh iturmaster reset , atau ke salah satu pin digital Arduino bila anda butuh itur master reset . Bila anda gunakan pilihan terakhir, selalu set nilai pin Arduino yang bersangkutan ke (#(, kecuali saat anda ingin seluruh pin output <3(70=0 di-reset jadi ). 0. (ubungkan pin !S &pin 4*3' ke pin digital Arduino yang akan menyediakan data nilainilai yang harus dikeluarkan oleh pin ;) - ;<. . (ubungkan pin S(@7$ &pin 4**' ke pin digital Arduino yang akan menyediakan sinyal clock . <. (ubungkan pin ST@7$ &pin 4*5' ke pin Arduino yang akan mengatur pembukaanlatch register untuk memindahkan data serial yang sudah lengkap diberikan ke pin-pin output. D. $in ;) hingga ;< akan menjadi pin tambahan bagi sistem Arduino kita. 1adi hubungkan pin-pin ini ke perangkat yang anda ingin kontrol. $erlakukan pin-pin ini laFimnya pin digital biasa. Tentu saja kita tidak bisa langsung menggunakan ungsi digitalWrite() baaan Arduino. =. (ubungkan pin ;<8 ke pin !S chip <3(70=0 lain jika anda ingin menambahkan lebih banyak lagi pin output tambahan.
1adi pada kondisi paling minimal &tidak menggunakan pin 2 dan %?', dengan <3(70=0 kita dapat menambahkan D pin digital dengan hanya meng-"konsumsi" 6 buah pin Arduino. !an tidak sampai di sini saja, anda dapat menambahkan pin digital sebanyak-banyaknya dengan tetap hanya meng-"konsumsi" 6 pin digital yang sama, dengan menghubungkan beberapa chip <3(70=0 secara berantai dengan menghubungkan pin !S chip <3(70=0 yang satu dengan <3(70=0 berikutnya.
Proek !emo " !alam demo proyek ini kita akan membuat # buah +?! nyala dan padam sedemikian rupa sehingga terlihat seperti berlari dengan hana menggunakan $ buah %in &r'uino . #ngat baha bila proyek ini diselesaikan tanpa penambahan pin, kita terpaksa menggunakan D pin Arduino. Untuk kali ini mungkin terlihat penambahan ini tidak diperlukan, karena semua oard Arduino memiliki jumlah pin lebih dari D. Tapi tujuan utama proyek ini adalah un tuk memudahkan anda memahami cara menggunakan <3(70=0 untuk menambahkan pin output.
!alam demo proyek 5, kita akan melihat bagaimana membuat "( )*! "berlari" dengan teta% hana menggunakan $ %in &r'uino . Sampai saat ini hanya Arduino +eonardo, !ue, 2ega 50), dan 2ega A!K yang memiliki jumlah pin lebih dari *. 1adi bila menggunakan U>%, >ano, atau oard Arduino lain, proyek demo 5 mustahil diselesaikan tanpa penambahan pin.
Perangkat Keras Kom%onen ang 'ibutuhkan *. * buah oard Arduino U>%, atau oard lain yang kompatibel. 5. * buah readoard D6)ED3) titik. 6. Kabel-kabel readoard . 3. * buah chip <3(70=0. 0. D buah tahanan 55)G. . D buah +?! hijau. arna lain juga boleh digunakan. Untuk proyek ini kita akan menggunakan pendekatan minimal dengan tujuan menggunakan pin Arduino seminimal mungkin. Seperti telah dibahas sebelumnya, untuk ini kita hanya membutuhkan 6 buah pin Arduino. mari tentukan pin-pin mana yang akan kita gunakan dan dihubungkan ke pin <3(70=0 yang mana. *. $in Arduino 4< dihubungkan ke pin !S <3(70=0. $in ini selanjutnya kita namakan pinData! 5. $in Arduino 4D dihubungkan ke pin ST@7$ &latch' <3(70=0. $in ini selanjutnya kita namakan pin"atch! 6. $in Arduino 4= dihubungkan ke pin S(@7$ &clock ' <3(70=0. $in ini selanjutnya kita namakan pin#lock .
+ata )etak Breadboard Atur tata letak komponen-komponen di atas sesuai dengan gambar berikut.
Skema Rangkaian
Perangkat )unak
Inisialisasi $ertama-tama tentu kita harus mendeklarasikan konstanta pinData, pin"atch, dan pin#lock sesuai dengan pin-pin yang kita tentukan sebelumnya. 2emang sebenarnya tidak harus menggunakan konstanta, tapi ini akan sangat membantu sekali dalam me-maintain kode kita nantinya. 1:
// Constants for key pins used in shifting out
2:
int pinData = 7;
3:
int pinLatch = 8;
4:
int pinCock = !;
Kemudian di bagian setup() kita harus menetapkan modus pin-pin tersebut di atas. Semuanya bermodus O$%P$% , karena kita akan mengirimkan data melalui mereka. 1:
"oid setup#$
2:
%
3:
pin&ode#pinData' ()*+)*$;
4:
pin&ode#pinCock' ()*+)*$;
,:
pin&ode#pinLatch' ()*+)*$;
-: 7:
// .nitiay e ant to shut a the L0Ds don
8:
rite,!,#$;
!:
deay#,$;
1:
!ua baris kode terakhir di atas sebenarnya tidak terlalu penting. (anya saja kita ingin agar semua pin-pin tambahan bernilai ) pada saat sistem mulai berjalan. Hungsi write&'&() akan dibahas berikut ini.
Mengirim !ata ke Pin,%in +ambahan Seperti yang sebelumnya telah ditekankan, penulisan data ke pin-pin digital tambahan ini tidak bisa melalui ungsi digitalWrite(). Karena sesungguhnya pin-pin tersebut tidak langsung diatur oleh Arduino. Kita harus berkoordinasi dengan <3(70=0 untuk memperoleh output yang kita inginkan. Berikut langkah-langkah untuk mengirimkan data ke pin-pin tambahan.
*. "Kunci" register latch pada <3(70=0, agar proses penggeseran data tidak langsung mempengaruhi pin-pin output <3(70=0. !i sini kita akan mengirim data )E+% ke pin"atch. 5. Kirim bit pertama ke pinData. 6. Kirim sinyal clock ke pin#lock . 3. Ulangi langkah 5 dan 6 untuk semua sisa bit. 0. "Buka" register latch <3(70=0, agar data yang telah lengkap kita kirimkan dipindahkan ke pin-pin output <3(70=0. !alam hal ini kita akan mengirim data *E(#( ke pin"atch.
-ungsi ShiftOut()
Kita beruntung karena pustaka Arduino telah menyediakan ungsi untuk melakukan langkah 5 hingga 3 di atas, bila data berukuran D bit. Hungsi tersebut adalah shiftOut(). Silahkan kunjungi laman ini untuk inormasi resmi dan lengkap tentang ungsi shiftOut(). !an kita akan menggunakannya dalam kode kita
-ungsi write595()
Kode-kode yang akan kita tulis yang berkaitan langsung dengan mengirimkan data ke pin-pin tambahan kita akan disimpan dalam ungsi yang bernama write&'&(). (al ini agar mudah maintenance, dan untuk kemudahan membaca kode. Kita akan mengimplementasi langkahlangkah * sampai 0 di atas ke dalam ungsi ini, dengan menggunakan shiftOut() saat melakukan langkah 5 sampai 3. $enggunaan shiftOut() di sini sangat sempurna, selain karena merupakan pustaka baaan Arduino, dan mempermudah proses koding, juga karena data kita ukurannya tepat D bit. Berikut ini kode lengkap untuk ungsi write&'&(). 1:
"oid rite,!,#yte aData$
2:
%
3:
// atch the outputs so the shifting process i not affect
4:
// the outputs
,:
digitarite#pinLatch' L($;
-: 7:
// shift out the data its
8:
shift(ut#pinData' pinCock' &56.5*' aData$;
!:
1:
// open the atch to transfer the shifted data to output pins
11:
digitarite#pinLatch' 9.9$;
12:
+ubuh Sket.h !alam bagian loop() kita ingin menghidupkan hanya * buah led dalam satu saat, sesuai dengan indeI bit dalam satu byte. Sesuai skema rangkaian dan readoard kita, maka +?! paling kanan &+?!*' meakili bit ), +?! di sebelah kirinya meakili bit *, demikian seterusnya hingga +?! terakhir yang paling kiri meakili bit <. Untuk ini kita menggunakan perintah for untuk menghitung dari ) hingga <, dan di dalam loop tersebut kita melakukan operasi geser kiri & shift left ' terhadap nilai sejumlah counter for . !engan demikian kita akan memperoleh nilai byte di mana hanya satu bit tertentu yang bernilai * &sesuai dengan posisi counter for '. Berikut ini kode lengkap untuk bagian loop(). 1:
"oid oop#$
2:
%
3:
for #yte i=; i8; i<<$
4:
%
,:
rite,!,#1i$;
-:
deay#,$;
7: 8:
Sket.h )engka% Sketch lengkap dapat diperoleh di sini &ile teks ektensi .ino' atau di sini &terkompresi Fip'.
Hasil Kalau anda belum menghubungkan Arduino anda ke $7 tempat #!? Arduino anda, sekarang saatnya menghubungkannya dan pilih serial port yang tepat yang meakili oard Arduino tersebut. Klik tombol $pload untuk kompilasi sketch di atas dan mengunggahnya. Setelah selesai anda akan memperoleh hasil kurang lebih seperti berikut ini.
Proek !emo / !alam proyek ini kita akan mempelajari bagaimana menghubungkan beberapa chip <3(70=0 untuk memperoleh pin digital tambahan lebih dari D dengan tetap hanya menggunakan 6 buah pin Arduino. !alam proses penggeseran, bit yang sebelumnya berada pada posisi 2SB &ost Significant *it ' akan menjadi bit carry. $ada <3(70=0, bit carry akan dikirim ke pin ;<8 &pin 4='. 1adi, nilai bit yang sebelum clocking berada pada pin ;< &pin 4<' setelah clocking akan berada pada pin ;<8. Kita dapat menghubungkan pin ;<8 ini ke pin input &pin !S' <3(70=0 lain, memberikan sinyal clock dan latch yang sama dengan <3(70=0 pertama, dan akan kita dapati pin ;* pada chip <3(70=0 kedua akan berisikan nilai bit pin ;<8 dari chip <3(70=0 pertama. (al ini disebut cascading atau juga daisy wheel . Secara teori, tidak ada batasan jumlah chip <3(70=0 dapat dihubungkan berantai seperti ini.
Perangkat Keras Kom%onen ang 'ibutuhkan *. * buah oard Arduino U>%, atau oard lain yang kompatibel. 5. * buah readoard D6)ED3) titik. 6. Kabel-kabel readoard . 3. 5 buah chip <3(70=0. 0. * buah tahanan 55)G. . * buah +?! hijau. Tentu saja arna lain juga boleh digunakan.
+ata )etak Breadboard Atur tata letak komponen-komponen di atas sesuai dengan gambar berikut.
Skema Rangkaian
$erhatikan baha dari tata letak readoard dan skema rangkaian dapat disimpulkan hal-hal berikut ini. *. Kedua chip <3(70=0 menggunakan sinyal clock dan latch yang sama. 5. $in ;<8 pada chip <3(70=0 pertama dihubungkan ke pin !S chip <3(70=0 kedua. Koneksi ini yang membaa bit carry dari <3(70=0 pertama menjadi input <3(70=0 kedua.
Perangkat )unak Sebenarnya tidak ada perbedaan mencolok dari sketch $royek !emo 5 ini dengan yang sebelumnya. (anya saja dikarenakan ungsi shiftOut() hanya bisa mengirim D bit data, sementara kini dibutuhkan pengiriman * bit data, penggunaan shiftOut() harus dilakukan dua kali. 2asingmasing mengirimkan D bit. Karenanya, ungsi write&'&() dimodiikasi menjadi sebagai berikut.
1:
"oid rite,!,#int aData$
2:
%
3:
// atch the outputs so the shifting process i not affect
4:
// the outputs
,:
digitarite#pinLatch' L($;
-: 7:
// 5hift out the first yte
8:
int "*p = aData >> 8;
!:
shift(ut#pinData' pinCock' &56.5*' "*p$;
1: 11:
// shift out the second yte
12:
shift(ut#pinData' pinCock' &56.5*' aData$;
13: 14:
// open the atch to transfer the shifted data to output pins
1,:
digitarite#pinLatch' 9.9$;
1-:
17:
Sketch lengkap dapat diperoleh di sini &ile teks berekstensi .ino' dan di sini &ile terkompres, .Fip'.
Hasil
Proek !emo $ Sebenarnya tidak ada yang istimea dalam proyek demo ini. Tujuan proyek demo 6 ini untuk menekankan baha pada sistem mikrokontroller, perangkat keras yang sama dapat berperilaku berbeda bila diberi programEperangkat lunak yang berbeda. Karena dalam proyek demo 6 ini perangkat keras yang digunakan adalah perangkat keras dari proyek demo 5 &yang menggun akan 5 chip <3(70=0 untuk menghasilkan * pin tambahan', tetapi menggunakan sketch dari proyek demo * &yang hanya menggunakan * buah chip <3(70=0'. !ari kombinasi tersebut diperoleh hasil seperti ditunjukkan dalam Jideo berikut ini. $embaca dipersilahkan untuk menganalisa sendiri mengapa d iperoleh hasil seperti itu, sebagai bahan latihan. back to top
•
Sebelumnya
•
Berikutnya L
)anguage Sele.tion