Sabtu, 30 Januari 2010

Matematika pd Bilangan Pecahan (float)

.
Baca dulu : Menampilkan Bilangan Float (pecahan)

Setelah bisa menampilkan bilangan pecahan seperti link diatas sekarang mencoba rumus matematika dan menampilkannya pada LCD ataupun komputer.

Suatu saat saya sedang bingung dan bertanya-tanya,
"Rumusnya sudah benar, tapi kok tampilannya salah ya ?"
"jangan-jangan di mikronya juga proses perkaliannya juga salah nih.."
Coret-coret... baca datasheet... lihat tutorial diinternet... atur konfigurasi di CoViAVR... coba Coding lagi... tampilkan di LCD... tampilkan di komputer... lha salah lagi.... Apanya niiih..???

Waktu itu buat Voltmeter Digital, proses yang diinginkan adalah membaca data ADC, menampilkan dalam miliVolt dan Volt pada LCD karakter 16x2, kemudian mengirimkan data ADC ke komputer secara serial.
ADC mode 10 bit jadi menggunakan bilangan unsigned integer dengan range 0-1023 dan frekuensi sampling yang paling rendah agar pembacaan ADC menjadi lebih akurat.

Potongan program :
Setelah diprogram ke chip dan dijalankan, tampilannya aneh.
Pada milivolt tampilan sesuai pengukuran dan perhitungan tetapi pada tampilan volt, hanya maksimal 2.00 Volt dan tidak bisa lebih padahal milivolt 4995.10 milivolt seharusnya 4.995 Volt.

Kok bisa begitu ya....???




Setelah mengutak-atik sedikit, ternyata ini kesalahan sama yg dulu pernah kuperbuat tapi lupa dan memang agak sulit dideteksi. Perhatikan pada coding tambahan yang ditandai seperti gambar berikut.

Hasil setelah diperbaiki...
Agak aneh, kok pembulatannya ke bawah bukannya ke atas...
Terserah Compiler dah.. Ikut aja..
Lha tinggal pakai doank..

Saran untuk persamaan matematika :
  • Pada persamaan, gunakan tanda kurung agar proses perhitungan tidak salah meskipun pada bahasa C telah ada urutan prioritas operator. misal : hasil = ((a+b)*c) / (d+e) ;
  • Jika menggunakan persamaan matematika (apalagi panjang persamaannya) usahakan dengan proses matematika sesederhana mungkin. Misal : hasil = dataadc * (1000 + 263) / 100; lebih baik ditulis hasil = dataadc * 12,63;
  • Untuk persamaan yang cukup atau sangat panjang, sebaiknya persamaan tersebut dipecah-pecah dan hasil dari setiap persamaan digabungkan kembali.
  • Untuk menghindari kesalahan yang lebih besar / mengecek benar tidaknya hasil persamaan, maka sebaiknya setiap hasil (yg penting saja) ditampilkan pada komputer atau LCD sebagai umpan balik ke programmer.
  • Perhatikan penggunaan bilangan misal persamaan Y = A + B maka
  1. Jika Y ada kemungkinan bernilai negatif maka gunakan signed int (-32768 hingga +32767) atau signed char (-128 hingga + 127) untuk Y, A, dan B.
  2. Jika Y bilangan bulat unsigned char dgn range 0-255 maka A dan B harus unsigned char juga jika pecahan maka harus dibulatkan dan dipindahkan ke variabel unsigned char. Jika unsigned int (2 Byte) maka harus dipindahkan ke variabel unigned char (1 Byte).
  3. Jika Y bilangan bulat unsigned int dgn range 0-65535 maka A dan B harus unsigned int juga, jika pecahan maka harus dibulatkan dan dipindahkan ke variabel unsigned int, sedangkan unsigned char tidak masalah.
  4. Jika Y bilangan bulat float maka A dan B sebaiknya dipindahkan ke variable float agar perhitungan tidak terjadi error.
Mungkin ini saja yang bisa saya tambahkan, kurang lebih mohon maaf karena masih belajar..
Met mencoba ;)

Topik yang Populer