Tampilkan postingan dengan label Komunikasi Data. Tampilkan semua postingan
Tampilkan postingan dengan label Komunikasi Data. Tampilkan semua postingan

Rabu, 18 April 2012

Hyperterminal pada Windows 7

.
Ketika saya membeli laptop baru dan masih berisi program standar (Windows, MSoffice, dll.) langsung saja saya coba untuk install AVR Studio v5.1.
Sebelumnya saya memakai laptop jadul (jaman dulu) dengan processor intel celeron dan OS win XP SP 2 sehingga tidak bisa diinstall AVR Studio (minimal OS XP SP 3).

Setelah selesai install, selanjutnya memprogram mikrokontroller seri ATxmega128A1. Untuk program pertama, tentu saja program "Hello World" dengan cara mengirim kalimat "Test Uart" dari mikrokontroller ke komputer.
Ternyata sudah tidak ada Hyperterminal untuk mengakses port COM atau port serial. Hyper Terminal adalah program yang digunakan untuk komunikasi data melalui serial com port atau TCP/IP winsock.

Klo CVAVR sudah ada program terminalnya dan setelah searching diinternet memang Windows 7 sudah tidak terdapat aplikasi Hyperterminal, padahal masih banyak diantara kita yang masih membutuhkannya,  bukanlah sebuah solusi kalau  sampai harus men_downgrade lagi komputer ke Windows XP.

Solusinya tentu saja bisa dengan menginstall CodeVisionAVR atau tetap menggunakan Hyperterminal. Saya akan membahas cara Instalasi dan menggunakan Hyperterminal pada Win 7

Instalasi Hyperterminal di Win7
Langkah-langkah instalasi Hyperterminal di Win 7, yaitu :
  • Buat folder dengan nama Hyperterminal, dan usahakan tidak berada di drive C, agar tidak ikut terhapus bila harus diformat (Instal ulang).
  • Copy-Paste ke folder Hyperterminal, file-file yang digunakan oleh aplikasi Hyperterminal yaitu :
  1. C:\Program Files\Windows NT\hypertrm.exe
  2. C:\WINDOWS\system32\hypertrm.dll
  3. C:\WINDOWS\Help\hypertrm.chm
  4. C:\WINDOWS\system32\hticons.dll
Link Download :
http://toolbox.davisnet.com/downloads/Weather/Misc/Hyperterminal/
http://www.dlldll.com/hticons.dll_download.html
  • Agar mudah digunakan ikuti langkah-langkah berikut:

Proses instalasi Hyperterminal telah selesai.

Menggunakan Hyperterminal di Win7
Langkah-langkah menggunakan Hyperterminal :
  • Klik shortcut Hyperterminal atau klik 2 kali hypertrm.exe.
  • Untuk penggunaan pertama kali, masukkan data-data tertentu (terserah).
  • Hingga akhirnya muncul sebagai berikut :

  • Masukkan "Name" lalu OK lalu pilih port untuk komunikasi, dan atur Port Settings.
  • Lalu atur seperti gambar berikut.

Pengaturan "append lines feed to incoming line ends" berfungsi untuk perpindah baris (enter) apabila diterima karakter akhir baris (return), dalam bahasa pemrograman "Hello World" yang saya buat misalnya UARTputsf("Test Uart.\r").
Jika tidak melakukan pengaturan ini maka kalimat atau karakter yang ditampilkan akan bertumpukan di baris pertama pada hyperterminal.

Selamat mencoba dan semoga membantu.

...^_^...

Kamis, 17 Februari 2011

EEPROM : Penjelasan EEPROM dan Error Data

.
Sebelum menjelaskan mengapa pada post EEPROM : Error data saat penyimpanan kok bisa terjadi error saat penyimpanan data padahal coding-nya tidak jauh berbeda dan justru coding yang tepat malah terkesan lebih panjang dibanding coding yang tidak tepat.

Coding Tidak Tepat (kiri) dan Coding yang Tepat (kanan)







Memang pada posting EEPROM : Mengakses EEPROM AVR menggunakan EEPROM sangatlah mudah, sama seperti menentukan variabel biasa yang hanya ditambahkan kata eeprom atau _eeprom di depan variabel tersebut.
Tapi mengakses EEPROM tidaklah semudah seperti membuat variabel untuk EEPROM. Oleh sebab itu perlu diketahui apa itu EEPROM di mikrokontroller AVR.

EEPROM pada AVR
Sumber : en.wikibooks.org
Hampir semua mikrokontroller AVR memiliki EEPROM internal kecuali ATtiny11 dan ATtiny28. EEPROM pada AVR adalah penyimpanan data yang bersifat semi-permanent dan non-volatile yaitu mampu menyimpan data meskipun tidak diberikan power supply.

Alamat memory EEPROM tidak terpetakan (mapped) didalam memori program maupun memori data sehingga meskipun EEPROM AVR adalah internal EEPROM tetapi mengaksesnya seperti mengakses external EEPROM yang menggunakan register IO, register pointer spesial, dan instruksi read/write yang menyebabkan mengakses EEPROM lebih lambat dibanding mengakses internal RAM.

EEPROM AVR dapat ditulis hingga minimal 100.000 kali dan agar batas limit ini dapat dicapai, sebaiknya anda menggunakan skema wear-leveling ketika menulis di internal EEPROM AVR. Ketika mikrokontroller dipabrikasi dan dijual oleh Atmel, kondisi EEPROM telah terhapus dengan nilai semua EEPROM adalah 0xFF (logika 1 semua bukan logika 0).

Beberapa AVR memiliki errata (koreksi) tentang menulis/write di EEPROM pada alamat 0 ketika kondisi daya tertentu (biasanya ketika brownout), sehingga Atmel merkomondasikan untuk tidak menulis EEPROM pada alamat 0. Contohnya : Errata AT90S1200

Penjelasan Error Data
Dari penjelasan EEPROM pada AVR maka jelaslah bahwa menulis di internal EEPROM lebih lambat dibanding menulis data di internal RAM, karena meskipun internal EEPROM tetapi mengaksesnya seperti mengakses eksternal EEPROM.

Pada contoh aplikasi di post : EEPROM : Error data saat penyimpanan, ketika data UART dari komputer dikirim terus-menerus ke mikrokontroller yang kemudian mikrokontroller menyimpan data tersebut langsung ke EEPROM, maka saat mikrokontroller sedang "sibuk menulis" data ke EEPROM ternyata komputer masih terus-menerus memberikan data ke MCU sehingga menghasilkan data error di alamat tertentu pada memori EEPROM AVR.

Hal inilah yang menyebabkan:
  • Semakin panjang data yang dikirim dari komputer ke MCU maka semakin besar pula error yang dihasilkan.
  • Semakin cepat komunikasi komputer dengan MCU (baudratenya cepat) errornya juga semakin besar.






Solusinya yaitu : Ketika komunikasi / transfer data sedang berlangsung, data yang diterima dari komputer disimpan dulu di internal RAM, dan ketika komunikasi / transfer data selesai barulah data dari internal RAM dipindahkan ke Internal EEPROM.

Oiya coba cari referensi / literatur tentang skema wear-leveling, itu sangat menarik untuk mengetahui teknik penyimpanan data ke EEPROM agar umur EEPROM bisa panjang / bisa mencapai batas maksimum penulisan EEPROM.

Semoga membantu ...^^v...

EEPROM : Error data saat penyimpanan

.
Cara menggunakan / mengakses EEPROM sudah saya bahas di post
EEPROM : Mengakses EEPROM AVR.

Yang ingin saya bahas pada post ini adalah beberapa masalah yang biasa terjadi atau bahkan sering anda alami tetapi tidak anda sadari.
Dan lebih berbahayanya adalah anda tidak menyadari masalah ini yang mungkin bikin pusing anda ketika memprogram mikrokontroller / hardware anda.

Masalahnya yang ingin saya bahas yaitu data yang disimpan di EEPROM tidak sesuai dengan data yang kemudian dibaca dari EEPROM tersebut.
Saat anda ingin menulis data di EEPROM misalnya :
"SAYA MENULIS KALIMAT INI DAN TERSIMPAN DI EEPROM."
tetapi ketika mencoba membaca data tersebut untuk ditampilkan di LCD atau dikirim ke komputer, ternyata datanya tidak sesuai atau bahkan kacau balau.

Contoh Kasus
Anda ingin merancang suatu sistem yang pengontrollan berdasarkan waktu atau Time Scheduling Control misalnya seperti ingin mematikan atau menyalakan beberapa lampu di beberapa ruangan yang dikendalikan oleh mikrokontroller.

Transfer data melalui port USB atau port COM.
Sesuai keinginan anda.


Data Bulan, Hari, Tanggal, Jam, dan Menit ditentukan oleh User melalui software komputer yang kemudian software mentransfer data tersebut ke MCU (Microcontroller Unit). Oleh MCU data tersebut disimpan di dalam EEPROM agar dapat disimpan secara (semi) permanen dan data dapat digunakan ketika sistem / perangkat dinyalakan setelah power supplynya Off (dicabut).

Data yang dikirim oleh komputer misalnya protokolnya seperti berikut : #02,16,04,08,00;ON;01,02,03,04,05~
Artinya :
  • # : Karakter awal / Start Byte berfungsi untuk informasi ke MCU bahwa Komputer akan mengirimkan serangkaian data ke MCU.
  • , (koma) : Karakter pemisah antar data.
  • 02,16,04, : Bulan ke 2 (Februari), tanggal 16, hari ke-4 (rabu, minggu hari ke-1)
  • 08,00 : Jam 8 menit ke 00 (tepat jam 8 pagi).
  • ; (titik koma) : Karakter pemisah Perintah
  • ON : Perintah On untuk menyalakan lampu dan OF (2 karakter dan bukan OFF) untuk mematikan lampu.
  • 01,02,03,04,05 : Ruangan yang di On-kan adalah ruang 1, 2, 3, 4, dan 5.
  • ~ : Karakter akhir data / Stop Byte berfungsi untuk informasi ke MCU bahwa data telah selesai di kirimkan.

Coding yang Tidak Tepat dan Coding yang Tepat








Jika anda memprogram seperti coding di atas maka data yang tersimpan di EEPROM kemungkinan ERROR-nya mencapai 40-80 % (Xixixixixi... survey asal-asalan) tergantung panjang data yang ditransfer lalu disimpan di EEPROM. Artinya semakin panjang data yang di transfer terus-menerus ke MCU dan kemudian di simpan di EEPROM maka semakin besar pula kesalahan data-data yang tersimpan di EEPROM. Oleh sebab itu saya sarankan untuk memprogram seperti Coding berikut :




Penjelasannya di Post :
EEPROM : Penjelasan EEPROM dan Error Data

Panjaaaang nih..
Semoga membantu ...^^v...

Rabu, 02 Februari 2011

ATmega128 / 1280 : Multi USART / UART

.
Anda mungkin pernah mengakses ATmega128 yang memiliki 2 USART (Universal Synchronous Asynchronous serial Receiver and Transmitter) atau bahkan 4 USART seperti yang dimiliki ATmega1280.

Bagaimana cara mengakses setiap USART tersebut dan bagaimana menentukan proses pengiriman data / karakter pada setiap USART tersebut ?
Jika belum pernah mencoba multi USART maka anda tidak akan tahu masalah-masalahnya dan kesulitan yang akan dihadapi.
Jadi klo ada waktu dan dana sebaiknya dicoba deh..
Bermanfaat kok n ga bakal rugi...
Aplikasinya pasti luaaaaassss banget..

Perbedaan USART dan UART ?
Baca topik : Komunikasi Data.
Beberapa rekan-rekan masih menanyakan apa itu USART dan apa bedanya dengan UART ?
Klo saya misalkan seperti bertanya apa perbedaan sepeda biasa dengan sepeda bermotor listrik seperti pada gambar.






Sepeda bermotor listrik adalah sepeda biasa yg memiliki motor listrik, artinya bisa digunakan seperti sepeda biasa atau menggunakan motor listriknya sesuai keinginan.
Sumber gambar : Sepeda Listrik dan Sepeda Onthel

Dari kepanjangannya saja sudah menjelaskan perbedaannya,
UART : Universal Asynchronous serial Receiver and Transmitter
USART : Universal Synchronous Asynchronous serial Receiver and Transmitter

Mikrokontroller yang memiliki fitur UART berarti hanya tersedia fungsi untuk komunikasi serial asinkron sedangkan untuk komunikasi lainnya anda harus membuat program sendiri.

Sedangkan USART selain tersedia fitur / fungsi komunikasi serial asinkron (UART) juga bisa digunakan serial sinkron (USRT) dan PIN / PORT yang digunakan adalah sama.
Oiya USART pada mikrokontroller AVR semuanya adalah FullDuplex.

Langkah Coding pada CVAVR
Saya akan membahas untuk mikrokontroller ATmega1280 karena sudah saya coba dan cukup mewakili untuk multi USART mikro AVR lainnya.
Langkah-langkah :





  • Jalankan CoViAVR, buat Project baru, dan gunakan CodeWizzard. Pilih chip : ATmega1280, clock 11.0592 MHz.
  • Secara otomatis akan tampil tab USART0, USART1, USART2, dan USART3, lakukan pengaturan sesuai keinginan dan kebutuhan anda.
  • Pada gambar di atas, baudratenya saya buat berbeda-beda silahkan anda pilih baudrate-nya sama semua (agar mudah pengujiannya) yaitu Protokol : Baudrate :9600,8N1.
  • Jika telah selesai kemudian File-Generate, Save and Exit.
  • Secara otomatis akan muncul beberapa fungsi antara lain : getchar1(void), getchar2(void), getchar3(void), putchar1(void), putchar2(void), dan putchar3(void).
  • Buat fungsi untuk mengirim "kata" / "kalimat" yaitu putsf1(), putsf2(), dan putsf3().
Klik gambar untuk melihatnya.
Ketika anda meng-Compile-nya akan muncul 3 buah pesan Warning untuk fungsi putsf1, putsf2, dan putsf3 yang bisa diabaikan.

Wahh... ternyata tidak jelas gambarnya... Mungkin kebesaaran kali ya. Saya pecah jadi 4 gambar deh..














Penjelasan Singkat

Coding tersebut akan mengirim kata "test USART0" atau "test USART1" atau "test USART2" atau "test USART3" setiap 500 mS untuk semua USART atau setiap 2000 mS untuk salah satu USART.

Saya memberikan nilai Baudrate yang berbeda-beda untuk setiap USART sehingga ketika dicoba menggunakan Hyperterminal atau program terminal yang tersedia pada CoViAVR jangan lupa untuk mengubah baudratenya sesuai dengan PORT USART yang dihubungkan.
Hal ini untuk menunjukkan bahwa mikrokontroller AVR yang memiliki banyak USART mampu untuk transfer data dengan protokol yang berbeda-beda untuk setiap port USART-nya karena secara internal, setiap USART memiliki register dan rangkaian tersendiri yang independen.
Selain itu setiap USART juga mampu untuk mengirim data (hampir) secara bersamaan.

CMIWW.. aj deh...
Semoga membantu ...^^v...

Selasa, 12 Oktober 2010

TPA81 : Mengakses dgn Protokol I2C

.
Seperti telah dijelaskan pada posting sebelumnya bahwa sensor TPA81 menggunakan protokol I2C dan memiliki koneksi interface seperti gambar disamping.
Jangan lupa menambahkan Resistor Pull Up di sisi master (Mikrokontroller) dengan nilai yang direkomondasikan 1k8 ohm.
Pastikan semua interface / hubungan antara mikrokontroller dengan sensor TPA81 telah sempurna, dan modul mikrokontroller anda juga berfungsi dengan baik.

Modul sensor TPA81 juga dilengkapi dengan pin motor Servo serta fungsi tambahan untuk mengatur sudut pergerakan motor servo tersebut. Sehingga anda cukup memberikan data sudut dalam heksadesimal dan modul TPA81 secara otomatis akan mengendalikan motor servo tersebut. Fungsi ini sangat berguna jika anda meletakkan modul sensor TPA81 pada motor servo lalu menggunakan metode scanning untuk pendeteksian / pengukuran suhu.

TPA81 Register
Sebelum ke coding, beberapa register harus di ketahui terlebih dahulu, seperti terlihat pada gambar di samping.
Hanya Register 0, 1, 2, dan 3 yang dapat di baca/tulis sedangkan register lainnya dapat di baca saja.




Register 0 memiliki 2 fungsi, jika di Tulis maka akan berfungsi sebagai register Command yang memberikan perintah data mengatur posisi motor servo. Sedangkan jika di Baca akan memberikan infomasi versi refisi software / firmware modul TPA81.

Register 1, 2, 3 digunakan untuk melakukan proses kalibrasi pada sensor TPA81 dan disarankan untuk tidak menulis pada register ini karena dapat merusak data kalibrasi yang telah di program oleh manufakturnya. Tapi tidak perlu khawatir karena terdapat proteksi untuk proses penghapusan dan penulisan kalibrasi pada register-register ini yaitu penulisan perintah sebanyak 3 byte secara berurutan yang dapat mencegah penghapusan data kalibrasi secara tidak sengaja.

Register 1 jika di Baca akan memberikan data Temperatur Ambient.
Register 2 - 9 jika di Baca akan memberikan data Temperatur Pixel 1 - Pixel 8.

Coding TPA81
Program berikut mengunakan CodeVisionAVR v2.03.9
Langkah-langkah :
  • Jalankan CoViAVR, buat project baru, dan gunakan CodeWizzard, Chip misal : ATmega8535, Clock : 11.0592 MHz.
  • Tampilan menggunakan komputer komunikasi UART, Protokol : Baudrate :9600,8N1.
  • Tampilan LCD 16 x 2 padaPortB.
  • Modul sensor TPA81 SDA : PORTC.0 dan SCL : PORTC.1

Program sebagai berikut :

Wah terlanjur Upload..
Ada yang lupa tuh..
Berikan waktu kira-kira (minimal) 40 mS sebelum membaca kembali data suhu terukur pada modul TPA81 agar datanya valid.

Ada sedikit kerancuan yang saya lihat pada beberapa Coding dan akan saya bahas di posting selanjutnya.

Semoga manfaat ... ^^v...
CMIIW..

Kamis, 25 Maret 2010

KAuC : Komunikasi dgn Parallel

.
Silahkan baca posting sebelumnya.

Setelah KAuC dengan UART selanjutnya dengan parallel.
KAuC dengan parallel lebih mudah dan lebih cepat dibandingkan dengan UART tetapi cukup rumit untuk dijelaskan sehingga tampak lebih sulit. Hal ini karena KAuC dgn parallel bisa menggunakan data ASCII, heksadesimal, data 1 byte, 2 byte, 1 bit, 2 bit, 3 bit, 4 bit, 5 bit, 6 bit, 7 bit, 8 bit, dst dan tergantung programmer sehingga bisa banyak cara yang berbeda.

Beberapa contoh :
  • 2 Byte (16 pin) : anda ingin KAuC untuk pembacaan suhu sistem mencapai 6500° C (Bah serem..^^) yaitu hingga 13 bit, karena 1 Byte (8 bit) maksimum bernilai 255 sehingga ditambahkan bit lain hingga memakan 13 pin MCU, jika ditambahkan Handshake RD, WR, dan CS maka memakan 16 pin (2 byte).
  • 1 Byte (8 pin) : Seperti pada karakter LCD 16x2.
  • 3 pin : anda ingin MCU Master mengolah arah jalan mobil robot dan MCU Slave menerima data dan menggerakkan motor DC. Master hanya mengirim dan Slave hanya menerima, Data komunikasi sbb : 000 = stop, 010 = Maju Lurus, 001 = belok kanan, 100 = belok kiri, 111 = mundur, dst.
Seperti biasa, pastikan Hardware yang dibuat telah benar dan tidak error lagi sehingga hanya fokus masalah Coding saja, Langkah ini adalah langkah awal dan penting untuk memperkecil kesalahan.
Karena mode parallel, pengecekan MCU cukup dengan memprogram Running LED atau Led kedap-kedip bergantian dan untuk cek input menggunakan dip switch atau saklar togle.

Jangan lanjut sebelum proses pengecekan Parallel benar-benar berhasil.

Protokol dan Komunikasi Data ASCII atau Heksadesimal
Jika menggunakan interface Parallel komunikasi data bisa menggunakan data Heksadesimal ataupun karakter ASCII akan tetapi (relatif) lebih mudah dan lebih cepat menggunakan komunikasi bit dan Heksadesimal.
Menentukan protokol komunikasi data bisa sesuai keinginan anda berdasarkan sistem yang dikendalikan dan juga jangan lupa pada Master dan Slave terdapat kesesuaian protokol-nya. Oleh sebab itu beda kepala bisa berbeda protokol yang diinginkan.

Berikut protokol dengan contoh kasus pengendalian motor servo oleh Slave dengan data sudut pergerakan setiap servo ditentukan oleh Master.

Dari gambar, Master sebagai Main Processor yaitu "pemikir" yang berfungsi membaca sensor mengolah dan mengatur nilai sudut-sudut pergerakan setiap motor Servo, sedangkan Slave hanya sebagai penggerak motor servo pada tujuan sudut yang telah diberikan oleh Master.
Master hanya pemberi data sedangkan Slave hanya penerima data. Komunikasi data yang digunakan adalah 4 bit dengan 3 pin sebagai alamat motor Servo dan 1 pin untuk nibble atas dan nibble bawah. Pengertian sederhana nibble adalah setengahnya dari byte, jika byte 8 bit maka nibble 4 bit. Bit 0-3 disebut nibble bawah dan bit 4-7 disebut nibble atas.
Beberapa link tentang penjelasan Nibble dalam byte.
http://memo.tv/bits_bytes_nibbles_binary_and_hex
http://en.wikipedia.org/wiki/Nibble

Komunikasi Data.
Berdasarkan gambar atau rancangan diatas dan penggunaan pin pada port mikrokontroller maka :
Pin 0-2 = Alamat motor Servo.
Pin 3 = Nible bawah (0) / Nible atas (1)
pin 4-7 = Nilai sudut motor Servo

Cara kerja coding Master adalah sebagai berikut :
  • Kondisi default PORT_servo = 0x00 = 0b00000000, yang berarti tidak ada data dan tidak terjadi komunikasi.
  • Seluruh data sudut servo berada pada variabel master_sudut yaitu sebanyak 7 servo.
  • Semua data sudut motor servo, baik yang nilai sudutnya berubah maupun tetap akan diberikan kepada slave melalui perintah perulangan for loop.
  • Data yang pertama dipersiapkan (tapi belum diberikan) adalah alamat motor servo yaitu dimulai dari motor servo 1 (terakhir motor servo 7).
  • PORT_nibble (PORTC.3) berlogika 1 yang berarti nibble atas dulu yang diberikan, bit 7 - bit 4.
  • Berikan data nibble atas + alamat dan tunggu 50 ms (bisa diubah sesuai keinginan, semakin cepat semakin baik).
  • PORT_nibble (PORTC.3) berlogika 0 yang berarti nibble bawah diberikan, bit 3 - bit 0.
  • Berikan data nibble bawah + alamat dan tunggu 50 ms (bisa diubah sesuai keinginan, semakin cepat semakin baik).
  • Jika semua data sudut servo sudah diberikan kondisi PORT_servo = 0x00 = 0b00000000.
Cara kerja coding Slave adalah sebagai berikut :
  • Kondisi default PIN_servo = 0xff = 0b11111111, yang berarti aktif low.
  • Jika PIN_servo tidak sama dengan 0x00 berarti Master memberikan data servo dan terjadi komunikasi.
  • Data yang bertama diolah adalah alamat servo yang akan diberikan nilai sudut dan disimpan pada variabel add_srv.
  • Deteksi PIN_nible jika LOW (0) maka data yang diterima adalah nibble bawah dan jika HIGH (1) data yang diterima adalah nibble atas, simpan di variable nible_high dan nible_low.
  • Alamat servo sudah diterima nible atas dan nible bawah sudah diterima, selanjutnya menggabungkan setiap data.
  • Data tersebut olah dan berikan ke setiap motor servo yang ada.
Wow...terlihat rumit...
Memang terlihat rumit karena "maksa" 1 port, jika menggunakan 2 PORT (Misal PORTB dan PORTC) dengan PORTB handshake atau alamat kemudian PORTC sebagai data, akan lebih sederhana lagi programnya.
Bayangkan, anda bisa mengendalikan 255 motor servo tanpa mengubah protokol program untuk komunikasi data.
Jika menggunakan UART semakin banyak motor servo, protokolnya semakin banyak dan panjang serta semakin ribet.
Sebenarnya tetap tergantung codingnya... Xixixixixixiixii... ^^v

Semoga Manfaat ;)

Senin, 22 Maret 2010

KAuC : Komunikasi dgn UART

.
Silahkan baca posting sebelumnya.

Sebelum membahas jenis komunikasi antar MCU yang lebih sulit, maka saya bahas yang paling mudah dulu yaitu Komunikasi antar MCU menggunakan UART. Pastikan Hardware yang dibuat telah benar dan tidak error lagi sehingga hanya fokus masalah Coding saja, Langkah ini adalah langkah awal dan penting untuk memperkecil kesalahan.
Berikut saya bahas singkat pengecekan hardware untuk KAuC dengan UART.

Perancangan dan Pengecekan Hardware
1. Buat 2 buah rangkaian MCU (Microcontroller Unit).
Buat 2 buah rangkaian MCU ATmega8535. MCU pertama dijadikan Master dan MCU kedua dijadikan Slave.

2. Buat 1 buah rangkaian konverter TTL-RS232 jika pada MCU belum tersedia.
Rangkaian Konverter TTL-RS232 ini digunakan hanya untuk pengecekan dengan komputer dan jika anda baru membuat, sebaiknya modular (dapat dipisahkan) dari MCU tetapi beberapa jenis produk yang ada dipasaran telah mencakup konverter TTL-RS232 pada board PCB-nya.
Jika modular, jangan lupa modul TTL-RS232 butuh supply 5 Vdc.

3. Buat 2 buah rangkaian Power supply untuk setiap MCU.
Sebaiknya dibuat 2 Supply sehingga 1 MCU mendapatkan 1 supply. Penggunaan 1 buah Power supply yang di share memang menghemat biaya dan waktu tetapi kadang bisa menyebabkan kurang pahamnya mengenai KAuC. Dengan 2 buah supply maka Master dan Slave dapat dipisahkan cukup jauh sehingga mengetahui konsep KAuC untuk jarak jauh.

4. Cek komunikasi UART MCU Master dan Slave.
Jadikan MCU pertama sebagai Master dan program Master tersebut untuk terus menerus mengirim kata "MASTER" lihat hasilnya pada komputer dengan menggunakan konverter TTL-RS232. Program juga agar Master dapat menerima data dari komputer lalu menampilkannya misalnya ke LCD atau ditampilkan kembali ke komputer.

Jadikan MCU kedua sebagai Slave dan program Slave tersebut untuk terus menerus mengirim kata "SLAVE" lihat hasilnya pada komputer dengan menggunakan konverter TTL-RS232. Program juga agar Slave dapat menerima data dari komputer lalu menampilkannya misalnya ke LCD atau ditampilkan kembali ke komputer.

Jangan lanjut sebelum proses tersebut benar-benar berhasil.

Komunikasi Data ASCII atau Data Heksadesimal
Jika menggunakan interface UART komunikasi data bisa menggunakan data Heksadesimal ataupun karakter ASCII akan tetapi untuk fleksibilitas yang tinggi sebaiknya menggunakan data karakter ASCII.
Dengan komunikasi data menggunakan karakter ASCII anda dapat memperoleh beberapa keuntungan, antara lain :
  • Komunikasi dengan karakter ASCII mudah untuk dipahami karena telah dalam bentuk karakter huruf dan angka bukannya data heksadesimal yang perlu di konversi lagi.
  • Karakter ASCII telah dikenali oleh komputer sehingga dapat langsung ditampilkan menggunakan Hyperterminal sebagai koreksi.
  • Penggunaan karakter ASCII bisa mempermudah jika dihubungkan dengan software seperti Delphi, VB, C++, Visual C, dll.
  • Modifikasi maupun pengembangan komunikasi data selanjutnya mudah dilakukan dengan cepat.
  • Pengguna atau programmer lainnya akan dengan mudah memahami cara penggunaan perangkat / hardware yang anda buat.
Protokol Komunikasi Data
Menentukan protokol komunikasi data bisa sesuai keinginan anda berdasarkan sistem yang dikendalikan dan juga jangan lupa pada Master dan Slave terdapat kesesuaian protokol-nya. Oleh sebab itu beda kepala bisa berbeda protokol yang diinginkan.
Berikut protokol dengan contoh kasus pengendalian motor servo oleh Slave dengan data sudut pergerakan setiap servo ditentukan oleh Master.

Dari gambar, Master sebagai Main Processor yaitu "pemikir" yang berfungsi membaca sensor mengolah dan mengatur nilai sudut-sudut pergerakan setiap motor Servo, sedangkan Slave hanya sebagai penggerak motor servo pada tujuan sudut yang telah diberikan oleh Master.
Beberapa protokol bisa dirancang untuk sistem tersebut. Tapi kali ini hanya transfer data Streaming saja yang akan saya bahas.

Transfer data Streaming.
Protokol ini yang paling sederhana serta paling cepat (untuk format ASCII). Cara ini yaitu Master mengirim data sudut pergerakan untuk seluruh motor servo secara sekaligus dalam satu waktu, sehingga Slave hanya sebagai penerima data.

Motor servo pada Slave diberi nama yang unik dan berbeda-beda. Jika pada Slave tidak diketahui berapa motor servo yang akan dipasang tetapi yang pasti jumlah maksimum motor servo pada Slave adalah sebanyak total pin I/O Slave dikurangi pin Rx dan Tx.
Karena MCU ATmega8535 maka maksimum motor servo adalah 32 pin - 2 pin = 30 pin atau 30 Motor Servo.

Selanjutnya setiap motor servo diberi alamat berupa huruf yang berbeda, Misal motor servo 1 = 'A', motor servo 2 = 'B', motor servo 3 = 'C', motor servo 4 = 'D', motor servo 5 = 'E' .... , dst (Lihat Tabel ASCII). Dan komunikasi sudutnya berupa angka dengan digit bersesuaian seperti '120', '85', '9', ' 155', dst. Tambahkan karakter akhir data untuk mempermudah misalkan karakter ';'.
Dari alamat dan komunikasi sudut serta karakter akhir maka format Protokol Streaming yang dikirim Master ke Slave tampak seperti gambar disamping.


Semoga Manfaat ;)

Jumat, 19 Maret 2010

KAuC : Syarat-syarat Interface Perangkat

.
Silahkan Baca :
KAuC : Introduction Part I
KAuC : Introduction Part II

Agar komunikasi antar perangkat dapat terjadi maka beberapa persyaratan harus terpenuhi. Jika tidak maka komunikasi data bisa rusak atau komunikasi tidak terjadi bahkan perangkat yang berkomunikasi bisa saling merusak.
Kali ini hanya fokus komunikasi antar mikrokontroller.

Syarat-Syarat KAuC
Beberapa syarat KAuC dapat terjadi antar lain :
  1. Level tegangan antar MCU yang berkomunikasi harus sama.
  2. Kecepatan transfer data (Baudrate) sama, untuk komunikasi TWI atau SPI maka kecepatan SCK Master tidak boleh cepat dari kecepatan SCK Slave.
  3. Salah satu mengirim saja dan yang lainnya menerima saja, untuk Full Duplex bisa mengirim dan menerima sekaligus.
  4. Protokol komunikasi data yang bersesuaian antar MCU.
  5. Terdapat Handshake (Jabat Tangan) sebagai indikator komunikasi data, bisa berupa pin atau karakter HandShake.
  6. (Optional) terdapat CRC (Cyclic Redundancy Check) setiap akhir komunikasi data.
1. Level tegangan antar MCU yang berkomunikasi.
Jika 2 buah MCU atau antar perangkat terhubung untuk komunikasi data maka level tegangannya harus sama, apakah menggunakan level TTL(Transistor Transistor Logic), Level RS232, RS485, dll.

Baca : www.allaboutcircuits.com
Jika level tegangan dan jenis yang digunakan berbeda maka data yang dikomunikasikan bisa berubah (data error) bahkan bisa merusak perangkat yang berkomunikasi.




Data Error, Misal :
MCU Master berkomunikasi dengan level TTL yang memiliki range 0 - 5 Vdc sedangkan Slave dengan level TTL range 0 - 3,3 Vdc, data bisa saja error karena Slave tidak mampu memberikan logika 1 (hingga 5 Vdc) karena level maksimumnya 3,3 Vdc.
Tapi tampak pada gambar bahwa level TTL untuk Vih (V Input High Level) yang mendeteksi logika 1 minimal pada level 2,0 Vdc. (Jadi error-nya mungkin jarang).

Merusak MCU, Misal :
MCU Master berkomunikasi dengan level TTL yang memiliki range 0 - 5 Vdc sedangkan Slave dengan level RS232 dengan range ±25 Vdc maka Slave dapat merusak Master karena level tegangan mencapai +25 Vdc hingga -25 Vdc.

2. Kecepatan Transfer Data.
Untuk komunikasi data UART tentu saja Baudrate Master dan Slave harus sama jika tidak, data yang dikomunikasikan akan mengalami error. Sedangkan untuk SPI atau TWI maka kecepatan sinyal SCK (Serial Clock) Master maksimal sama (tidak boleh lebih besar) dengan kecepatan Clock MCU Slave. Selain itu komunikasi parallel juga kecepatan Clock Master tidak boleh lebih besar dari kecepatan Clock Slave.

3. Salah Satu Mengirim dan Lainnya Menerima.
Agar komunikasi data tidak membingungkan maka sebaiknya salah satu mengirim dan yang lainnya menerima pada satu waktu, jika diinginkan sebaliknya maka harus ada sinyal atau data HandShake yang memicu pertukaran fungsi yaitu yang semula mengirim jadi penerima dan yang semula penerima jadi pengirim.

Apabila mendukung fungsi Full Duplex dan dalam hal tertentu mewajibkan komunikasi input output bersamaan maka Mengirim dan Menerima dapat dilakukan bersamaan.

4. Protokol Komunikasi Data.
Jika anda mengkases perangkat yang tinggal pakai, maka programmer mau tidak mau harus mengikuti protokol yang telah dibuat oleh perancang produk, tetapi untuk KAuC protokol dapat anda rancang sesuka anda selama anda memahami protokol tersebut dan antar Master dan Slave telah terjadi kesepakatan Protokol komunikasi data.
Protokol bisa mencakup panjang data, jenis transfer data, Command-command komunikasi, Operational Code, dll.
Link : www.freescale.com, www.microchip.com

5. HandShake (Jabat Tangan)
HandShake atau Jabat tangan berfungsi sebagai tanda serah terima data dan pergantian fungsi. Handshake bisa berupa pin (data 1 bit) maupun data heksa desimal / ASCII (data 8 bit).
HandShake digunakan sebagai indikator bahwa 1 data telah diberikan atau diterima dan siap melanjutkan proses selanjutnya.

HandShake Pin CS, RD, dan WR :
Jika Master mengaktifkan pin CS kemudian diikuti WR berarti memberitahu ke Slave bahwa Master mengirim 1 data dan Slave harus menerima 1 data.
Jika Master mengaktifkan pin CS kemudian diikuti RD berarti memberitahu ke Slave bahwa Master Meminta 1 data dan Slave harus mengirim 1 data.
Pin CS diaktifkan saat komunikasi 1 data akan dimulai dan dimatikan saat komunikasi 1 data telah selesai.

Misal HandShake data 1 Byte ASCII / Heksadesimal :
Data 2 Byte = 1 Byte awal sebagai command dan 1 byte akhir sebagai data.
Jika Master mengirim data heksadesimal 0x57 atau karakter 'W' (Write) maka Slave siap menerima 1 data yang mengikuti karakter 'W' tersebut.
Jika Master mengirim data heksadesimal 0x52 atau karakter 'R' (Read) maka Slave siap memberikan 1 data setelahnya.
Link : Tabel ASCII.

6. Pengecekan Data Error atau CRC
Ini adalah optional atau pilihan yang berarti bisa digunakan atau tidak, tapi beberapa kondisi wajib digunakan seperti pada transfer data pada VCD, FlashDisk, dll.
Lebih lengkap baca di wikipedia atau search di google.


Syarat Interface KAuC selesai.
Semoga Manfaat ;)

Rabu, 17 Maret 2010

KAuC : Memilih Interface antar MCU

.
Silahkan Baca :
KAuC : Introduction Part I
KAuC : Introduction Part II

Menurutku komunikasi data antar MCU, Multi MCU, dan Multi Device, memiliki beberapa perbedaan tetapi kali ini akan saya bahas hanya antar MCU saja.

Memilih Interface KAuC
Menurut anda jika ingin 2 buah MCU saling berkomunikasi maka jenis interface mana yang anda pilih : Parallel 8 bit atau 4 bit, SPI / TWI, I2C, UART, atau USRT. pilih yang mana?
Jawaban bijak dan klise biasanya, "Sesuaikan dengan kebutuhan dan sistemnya ?" meskipun kurang memberikan jawaban (cape deee...) tetapi memang seperti itu jawabannya.

Tentukan dahulu kebutuhan sistem anda dengan berbagai pertanyaan seperti berikut :
  • Mau menggunakan mikrokontroller apa ? Berdasarkan memori, Kecepatan eksekusi, atau banyak Port.
  • Apakah komunikasi / interface dengan komputer ? atau nantinya bisa interface dgn komputer ?
  • Membutuhkan transfer data yang sangat cepat, cepat, lambat, sangat lambat, atau tidak tahu ?
  • Jenis transfer Byte atau Bit, berapa Byte atau bit ?
  • Komunikasi berupa data Heksadesimal atau berupa data ASCII ?
  • Apakah Interface dengan Sensor atau IC lain dengan tipe I2C, SPI, 1-Wire, 2-Wire ?
  • Fleksibilitas hardware kedepannya apakah diperlukan ?
  • dsb.. (cari n catat yang banyak).
Dari berbagai pertanyaan dapat dirancang dengan tepat seperti apa hardware yang akan dibuat, jenis interface yang digunakan, dan rancangan kedepannya seperti apa, dan agar mudah dipahami sebaiknya diberikan contoh kasus.
Misalkan sistem rancangan membutuhkan + pembagian PORT-nya:
  • PORTA =>> Keypad matriks 4x4
  • PORTB =>> LCD karakter 16x2
  • PORTD.0 + D.1 =>> Interface UART dgn komputer.
  • PORTD.2 = >> Sensor Encoder.
  • PORTD.4 =>> Motor DC (1 arah saja) + Driver
  • PORTD.5 + D.6 + D.7 =>> IC digital RTC DS1302 dan IC Serial EEPROm AT93C66
Nah dari pembagian rancangan Port tersebut maka penjelasannya :

Pin Rx dan Tx sebenarnya sangat baik untuk komunikasi antar MCU karena sangat mudah tetapi pin ini juga WAJIB digunakan untuk komunikasi dengan komputer secara serial maupun USB (dengan konverter). Dan saat ini merupakan hal umum dan nilai tambah jika hardware-nya dapat berkomunikasi dengan komputer. Oleh sebab itu gunakan pin ini jika terpaksa.
Pilihan "sedikit tepat" dan "kurang bijak" adalah dengan menggunakan mikrokontroller yang memiliki 2 buah pin Rx dan Tx (Rx0, Tx0 dan Rx1, Tx1) seperti pada ATmega128. Untuk beberapa aplikasi sederhana jika anda menggunakan ATmega128 diumpamakan memberikan Mobil ke anak SD yaitu terlalu berlebihan (kalo kaya si serah aja) padahal fungsi yang digunakan hanya sederhana.

Untuk Mikrokontroller gunakan ATmega8535 (mikrokontroller 8 bit) , mikro ini lebih dari cukup untuk banyak aplikasi. SPI pada ATmega8535 menggunakan Pin MOSI, MISO, SCK dan SS pada PORTB sehingga SPI tidak bisa digunakan.

Dari pemetaan port terhadap perangkat diatas maka PORTC belum digunakan, sehingga ada beberapa pilihan : Parallel 4 bit (8 bit tidak bisa karena pin handshake dibutuhkan), TWI (ada pin SDA dan SCL), dan I2C.
Karena hanya antar MCU dan bukan multi MCU maka I2C tidak dipilih selain itu I2C sebaiknya digunakan hanya untuk mengakses Chip IC yang memang dikhususkan I2C saja untuk antar MCU agak repot. Tinggal TWI dan Parallel 4 bit.

Jika memilih antara TWI dan Parallel 4 bit dan untuk komunikasi MCU-MCU maka saya memilih komunikasi parallel 4 bit karena tidak ingin belajar (malas) mengenai TWI lagi.
Tetapi sebenarnya masih ada pilihan lainnya yang biasa saya pakai yaitu dengan SPI (Serial Peripheral Interface) menggunakan Coding sendiri dan Pin yang didefinisikan sendiri yaitu tidak menggunakan MOSI, MISO, SCK dan SS. Memang pusing Codingnya tetapi sangat berguna untuk Komunikasi data antar MCU maupun Multi MCU bahkan beberapa perangkat, Selain itu panjang data yang dikomunikasikan terserah programmer bisa 1 byte, 2 byte, 3 byte, atau lebih.

Pilihan jatuh pada Interface Parallel 4 bit dan SPI user defined.

Setelah mengetahui jenis interface apa yang sesuai dengan perangkat yang dirancang selanjutnya adalah mengetahui apa saja yang dibutuhkan agar sistem dapat berkomunikasi dengan benar dan tepat.

Lanjut ke post berikutnya..
Semoga Manfaat ;)

Senin, 15 Maret 2010

KAuC (Komunikasi Antar Mikrokontroller) : Introduction Part II

.
Silahkan Baca :
Komunikasi USART AVR Mode Sinkron.
Komunikasi USART Mode Asinkron.
Komunikasi USART : TTL - RS232

Serial Sinkron
Seperti pada USRT (pada AVR), TWI, SPI, I2C.
SPI dan TWI memiliki 3 buah pin untuk berkomunikasi yaitu SCK (Serial Clock), SDI (Serial Data Input), dan SDO (Serial Data Output) .
SDI dan SDO bisa juga disebut MOSI (Master Output Slave Input) dan MISO (Master Input Slave Output).
SPI atau TWI biasanya memiliki pin tambahan seperti CS (Chip Select) atau CE (Chip Enable) atau SS (Slave Select) yang akan berguna untuk mengaktifkan chip yang akan diajak "berkomunikasi".

I2C memiliki 2 buah pin untuk berkomunikasi yaitu SCK (serial Clock) dan SDA (Serial Data). Berbeda dengan TWI atau SPI, I2C tidak membutuhkan pin ke-3 untuk mengaktifkan chip yang akan diajak "berkomunikasi", Jika banyak perangkat I2C yang terhubung maka setiap chip I2C tersebut memiliki alamat yang berbeda-beda dan unik (unique Address) seperti halnya sidik jari manusia.
Chip yang di "panggil" oleh master-nya yang hanya akan menjawab dan berkomunikasi sedangkan yang lainnya akan berrada pada kondisi tri-state (High Impedance).

Tentang Interface Serial Sinkron :
  • Menggunakan Wire yang sedikit dibandingkan parallel.
  • Perancangan PCB sederhana dan mudah.
  • Kecepatan transfer data tidak secepat interface parallel tetapi lebih cepat dibandingkan UART (Serial Asinkron).
  • Sangat mudah digunakan untuk komunikasi multi perangkat dibanding UART karena pin CS atau alamat unik.
  • Komunikasi Full Duplex (mengirim dan menerima data bersamaan).
  • Coding cukup sulit antar Master dan Slave harus sejalan.
  • Kecepatan Clock antar Master maupun Slave minimal sama, Clock master tidak boleh lebih cepat dari Clock Slave karena Sinyal SCK dikendalikan oleh Master sehingga Clock Slave bersifat fleksibel sedangkan Clock Master tidak fleksibel.
Serial Asinkron
Komunikasi data serial asinkron (UART) merupakan jenis komunikasi yang umum, banyak serta mudah digunakan dibandingkan dengan jenis komunikasi lainnya. Mulai banyak modul yang siap pakai menggunakan jenis komunikasi ini agar user (pengguna) bisa menggunakan modulnya dengan mudah.
UART membutuhkan hanya 2 buah jalur interface Rx (receiver / penerima) dan Tx (Transmitter / pemancar), tanpa memperdulikan Clock Master-Slave karena memilik Baudrate yang standar dan umum, serta Fullduplex (Menerima dan memberikan data secara bersamaan).
Jika digunakan untuk komunikasi banyak perangkat maka setiap perangkat (Slave) diberikan alamat unik sendiri (unique Address) dengan protokol tertentu yang ditentukan secara program oleh programmer.

Tentang Interface Serial Asinkron :
  • Menggunakan hanya 2 jalur interface Rx dan Tx.
  • Menggunakan kecepatan transfer data yang umum dan standard.
  • Tidak terpengaruh besar kecilnya Clock Master-Slave karena menggunakan baudrate.
  • Sangat mudah untuk Coding dan komunikasi data.
  • Sangat baik digunakan untuk komunikasi jarak jauh (dengan konverter).
  • Full Duplex (mengirim dan menerima data bersamaan).
  • Karena menggunakan Baudrate maka kecepatan komunikasi data tidak maksimal bahkan relatif lambat dibanding yang lainnya.
One Wire Interface
Komunikasi data dengan interface 1 jalur saja. Sangat sederhana tetapi protokol yang cukup rumit. Memang jenis ini masih belum umum karena cukup rumit pada protokol komunikasi datanya.

Tentang 1-Wire Interface :
  • Hanya menggunakan 1 buah jalur untuk komunikasi data sehingga sangat sederhana.
  • Merupakan bit-oriented atau berorientasi bit dengan bit LSB yang pertama kali dikirim.
  • Master dan Slave dapat saling mengirim maupun menerima tetapi dalam satu waktu yang berbeda (Half Duplex).
  • Kecepatan transfer data yang rendah dibandingkan dengan jenis interface lainnya.
  • Sekali berkomunikasi maka tidak boleh di-interupsi.
  • Coding yang rumit dan menggunakan delay time yang akurat dengan error yang minimal.
  • Protokol Komunikasi yang cukup rumit.
Sekian perkenalan Komunikas antar perangkat.
Semoga Manfaat ;)

Jumat, 12 Maret 2010

KAuC (Komunikasi Antar Mikrokontroller) : Introduction Part I

.
Silahkan Baca :
Komunikasi USART AVR Mode Sinkron.
Komunikasi USART Mode Asinkron.
Komunikasi USART : TTL - RS232

KAuC (Komunikasi Antar Mikrokontroller => saya singkat biar nantinya mudah) merupakan salah satu hal wajib yang harus diketahui perancang hardware dan software. Tanpa mengetahui hal ini perancang akan kesulitan untuk membuat perangkat kompleks yang modular / terpisah-pisah.
Sebenarnya KAuC tidak hanya berlaku untuk komunikasi sesama MCU (Microcontroller Unit) tetapi bisa juga antar MCU-Komputer, MCU-MCu yang berbeda tipe (misal AVR dan PIC), MCU-IC Digital, MCU-Barcode, dll.

Sebelum jauh pada perancangan komunikasi data maka sebaiknya diketahui dulu konsep KAuC atau komunikasi antar perangkat sehingga bisa dirancang komunikasi seperti apapun yang diinginkan. Oleh sebab itu saya mencoba untuk membagi-bagi KAuC menjadi beberapa bagian.

Introduction
Komunikasi data ada 2 cara yaitu komunikasi data secara parallel dan komunikasi data secara serial. Komunikasi data secara parallel yaitu Komunikasi banyak data (64 bit, 32 bit, 16 bit, 8 bit, 4 bit) yang dilakukan secara langsung dalam waktu bersamaan melalui banyak jalur (kabel, PCB, fiber optical, dll). Komunikasi data secara serial yaitu komunikasi 1 buah data (1 bit) pada satu waktu.
Tidak banyak yang bisa dibahas untuk komunikasi data secara parallel sedangkan komunikasi secara serial telah mengalami berbagai perkembangan dan telah banyak jenisnya.

KAuC atau komunikasi antar perangkat dapat sudah banyak jenis-nya seperti : Komunikasi parallel, UART (Universal Asynchronous Receiver Transmitter), USRT (Universal Synchronous Reciever Transmitter), I2C (Inter-Integrated Circuit), USB, TWI (Two Wire Interface), 1 Wire Interface, SPI (Serial Peripheral Interface), dll..
(apa lagi yak..?).

Untuk RS232 dan RS485 hanyalah level tegangan saja yaitu konversi level tegangan TTL (0 Vdc - 5Vdc) menjadi level RS232 (±25 Vdc) maupun RS485 (Differensial ±25 Vdc) dan bukannya jenis komunikasi.

Interface Parallel
Paralel 32 bit, 16 bit, 8 bit, ataupun 4 bit, baik digunakan jika membutuhkan kecepatan transfer data yang tinggi seperti pada motherboard komputer karena membutuhkan kecepatan tinggi. Contoh lain seperti pada LCD karakter yang dapat diprogram untuk komunikasi paralel 8 bit maupun 4 bit.

Tentang Interface parallel :
  • Kecepatan transfer data dengan kecepatan maksimum.
  • Coding mudah dan sederhana.
  • Menggunakan jalur (wire) yang tidak sedikit (banyak).
  • Selain pin data dibutuhkan pin tambahan sebagai Handshake seperti : pin CS (Chip Select, RD (Read), WR (Write), ACK (acknowledgment ), dll.
  • Perancangan PCB menjadi rumit dan lebih besar.
  • Tidak efektif digunakan untuk komunikasi jarak jauh karena bisa mengalami penurunan level tegangan sehingga merusak data dan menggunakan kabel yang (sangat) banyak.
Lanjut ke :
KAuC (Komunikasi Antar Mikrokontroller) : Introduction Part II

Rabu, 26 Agustus 2009

USART : Kirim dan Terima Data

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

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

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

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

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

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


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

Senin, 24 Agustus 2009

USART : Inisialisasi USART pada AVR

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

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

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

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

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

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





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

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

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

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

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









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

Minggu, 23 Agustus 2009

Komunikasi USART : TTL - RS232

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

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

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









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

Menggunakan IC konverter.













Menggunakan Transistor.













Menggunakan IC Gerbang logika.





















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

Topik yang Populer