«

»

May 17

SoftwareSerial pada Arduino

Software Arduino sebelum versi 1.0, SoftwareSerial tidak menangani interupsi dengan baik. Setiap interupsi yang terjadi, dari timer0 (yang digunakan untuk fungsi millis, delay, micros) hingga pustaka lain yang menggunakannya, dapat menyebabkan data corrupt. SoftwareSerial memiliki timing yang buruk, yakni menggunakan asumsi waktu eksekusi dari digitalWrite. SoftwareSerial tidak mendukung available(), dan hanya dapat menerima data ketika read() dipanggil, yang tentunya akan membatasi kemampuan dari aplikasi. Bila kita menggunakan SoftwareSerial, pin transmit tidak di-set sebagai output secara otomatis. Kita harus menggunakan pinMode untuk mengaturnya.

NewSoftSerial mengoreksi masalah-masalah yang ada di SoftwareSerial. Namun demikian, gunakan NewSoftSerial bila tidak ada lagi pilihan UART Serial.

NewSoftSerial memerlukan Pin Change Interrupt untuk menerima data, yang mana hanya terdapat pada pin tertentu saja. Untuk menerima, kita harus menggunakan pin tersebut, sementara untuk mengirim data, bisa menggunakan pin manapun. Tidak semua chip AVR memiliki fitur Pin Change Interrupt.

NewSoftSerial memerlukan hampir 100% waktu CPU ketika mengirim atau menerima data. Low interrupt latency dibutuhkan untuk penerimaan yang baik, yang mana akan membatasi semua library lain dan kode yang menggunakan interupsi. Untuk alasan ini, UART Serial tetap menjadi pilihan utama.

NewSoftSerial tidak boleh digunakan untuk baud rate yang rendah, karena interupsi di-disable untuk sekiar 9.5 bit. Baud rate yang lambat akan menimbulkan interrupt latency yang berlebihan pada kode lain. Baud rate di bawah 4800 akan mempengaruhi fungsi dasar time keeping yang mendukung fungsi millis(), micros() dan delay().

Baud rate yang cepat menjadi tidak handal untuk penerimaan bila pustaka interrupt-based lainnya, menimbulkan latency, interupsi terlalu panjang atau men-disable interupsi beberapa saat. Sebagai contoh, pustaka OneWire harus men-disable interupsi sekitar 80 us untuk beberapa operasi.

Beberapa pustaka lain yang peka terhadap latency, seperti Servo, tidak akan bekerja dengan baik ketika NewSoftSerial menghalangi interupsi ketika kode lain memerlukan respons low latency.

Menggunakan UART Serial adalah yang terbaik, namun bila NewSoftSerial harus digunakan, baud rate antara 9600 – 38400 mungkin yang paling kompatibel.