Selasa, 20 Oktober 2009

Ask : Delay untuk Scan Keypad, baca sensor, dan USART.

.
Asker : DanZDev
System :
Pengukuran kadar alkohol dengan sensor TGS2620
Pengukuran kadar alkohol dan menampilkannya pada LCD16x2 dan memberikan data pembacaan ADC(0) ke komputer secara serial USART.
Question :
Pembacaan data ADC setiap 1000 ms dan menampilkannya pada LCD16x2 sebagai informasi ke user, sedangkan data diberikan ke komputer dan ditampilkan setiap 30 detik (30000 ms) karena karakteristik sistemnya baru memiliki perubahan yang signifikan setelah kira-kira 30 detik. Selain itu sistem harus selalu scanning tombol, dan jika saya menekan 'A' maka saat itu pula harus melakukan suatu pengiriman data USART.

Bagaimana menggabungkan Pembacaan ADC, display data ADC ke LCD setiap 1 detik, mengirim secara serial ke PC setiap 30 detik dan sekaligus Scanning keypad tersebut.

Too PayZ :
Saya akan menunjukkan dua cara yaitu sistem polling dengan pengaturan waktu (scheduling) dan pemicuan melalui komputer.
Untuk kedua cara tersebut langkah pertama yaitu menentukan daftar timing-nya dulu biar jelas :
  • ADC(0) = 1000 ms / 1 detik
  • Refresh Display LCD = ADC (0) = 1 detik
  • UART komputer = 30 detik
  • Keypad = 100 mS : nilai ini anda tentukan sendiri (bisa saja 50 mS atau 200 mS) karena penekanan keypad berdasarkan kecepatan jari menekannya.
Dari daftar diatas terlihat bahwa waktu terkecil adalah Scanning Keypad dengan waktu 100 mS selain itu 30 detik dan 1 detik merupakan kelipatan 100 mS, sehingga waktu 100 mS menjadi waktu acuan.
Silahkan lihat dulu blog sebelumnya :
- Keypad Matriks
- Keypad Matriks : Konsep Dasar
- Keypad Matriks : Scanning Keypad
- LCD Karakter
- Tips n Trik Coding LCD Karakter
- USART : Inisialisasi USART pada AVR
- USART : Kirim dan Terima Data (Perhatikan fungsi terima data)

Sistem Polling

Dengan menggunakan waktu acuan yaitu Polling setiap 100 mS dan global variable time_count sebagai indikatornya maka Scanning Keypad dilakukan setiap time_count bertambah nilainya atau setiap 100 mS, baca ADC(0) dan menampilkannya di LCD jika time_count berkelipatan10 (100mS x 10 = 1000mS), dan komunikasi UART setiap time_count berkelipatan 300 (100mS x 300 = 30000 mS).
Setelah mencapai waktu maksimal dari sistem (yaitu 30 detik) maka jangan lupa mereset nilai pada variabel time_count = 0.

Kelemahan cara ini adalah jika pewaktuannya berubah maka mikrokontrollernya harus diprogram kembali.

Pemicuan Oleh Komputer
Cara kedua yang bisa dilakukan dan lebih fleksibel yaitu dengan pemicuan melalui komputer yaitu komputer yang menentukan suatu event pada mikrokontroller.
Fleksibel karena timing-nya bisa dilakukan dengan mengubah nilai timer secara software (tinggal klik saja). Tapi kelemahannya yaitu sistem harus selalu terkoneksi dengan komputer dan tentunya harus membuat software di komputer.
Tapi masalah "harus terkoneksi dengan komputer" dapat diatasi dengan menambahkan saklar toggle yang berfungsi memilih apakah sistem dipicu oleh komputer atau berdiri sendiri dengan program asalnya (default).

Langkah dan cara kerjanya :
  • Buat Hardware dan Software (AVR dan Komputer).
  • Pada Software komputer untuk Timer Scanning Keypad, Timer baca ADC(0) + display LCD, dan Timer Komunikasi USART harus fleksibel atau dapat diubah nilainya (di klik-klik saja) seperti menggunakan komponen Tedit atau TCombobox (Delphi).
  • Setelah aplikasi di RUN dan dengan perintah if then selanjutnya membandingkan pewaktuannya (timingnya) yaitu jika Timer Sekarang = Timer Scanning Keypad maka kirim karakter 'K' ke mikrokontroller berarti pemicuan perintah Scanning Keypad dilakukan.
  • Jika Timer Sekarang = Timer ADC+LCD maka kirim karakter 'A' ke mikrokontroller berarti pemicuan perintah Pembacaan ADC(0) dan menampilkannya ke LCD dilakukan.
  • Jika Timer Sekarang = Timer Komunikasi UART maka kirim karakter 'U' ke mikrokontroller berarti pemicuan perintah kirim data dari mikrokontroller ke kompuetr dilakukan.
Met Mencoba ;)

Topik yang Populer