Saya bikin proyek ini karena ada permintaan dr seorang sahabat. Sekalian di-sharing aja buat belajar sama2, sapa tau ada Suhu yg bersedia ngasih masukan.
Sebetulnya ini sama aja dengan servo tester, cuma yg ini ada 3 channel. Kenapa cuma 3 channel? soalnya beliau mintanya cuma 3 channel, sebetulnya dibuat lebih juga bisa hehehe...
Penampakannya seperti ini: sangat sederhana bukan? Total ada 3 trimpot, masing2 1 trimpot untuk mengontrol 1 servo
Terlihat di oscilloscope, sinyal yg masuk ke servo. Yg paling atas untuk SERVO1, berikutnya untuk SERVO2 & SERVO3 Sesuai dengan posisi trimpot: VR1 => minimal; VR2 => tengah; VR3 => maksimal
Kekurangannya: signal servo3 menunggu signal servo2, signal servo2 menunggu signal servo1, seperti terlihat di layar oscilloscope
$regfile = "m48def.dat" 'MCU yg dipakai ATMEGA48 $crystal = 8000000 'Frekuensi 8MHz (internal clock, tanpa kristal) $hwstack = 32 'default use 32 for the hardware stack $swstack = 10 'default use 10 for the SW stack $framesize = 40 'default use 40 for the frame space
Config Pind.5 = Output ' PD5 (Pin 11) sebagai output Config Pind.6 = Output ' PD6 (Pin 12) sebagai output Config Pind.7 = Output ' PD7 (Pin 13) sebagai output
' Untuk clock 4MHz satuan dalam 1uS (microdetik), ' jadi untuk 8 MHz harus dikalian 2 Const Servomax = 4000 ' = 2000uS * 2 Const Servocen = 3000 ' = 1500uS * 2 Const Servomin = 2000 ' = 1000uS * 2
' Nilainya dari GETADC berkisar antara 0~1023 ' Sedangkan pulsa yg akan dihasilkan berkisar 2000~4000 ' Pengali = (servo max-servomin)/1024) = 1.95 dibulatkan jadi 2 ' Penambah = Servocen - 1024 Const Pengali = 2 Const Penambah = 1976
' Definisikan variable yg dipakai Dim A As Word Dim B As Word Dim C As Word
' Konfigurasi ADC (Analog to Digital Converter) Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc
Do A = Getadc(0) ' baca nilai Trimpot 1 B = Getadc(1) ' baca nilai Trimpot 2 C = Getadc(2) ' baca nilai Trimpot 3
A = A * Pengali A = A + Penambah B = B * Pengali B = B + Penambah C = C * Pengali C = C + Penambah Pulseout Portd , 5 , A ' kirim sinyal ke Servo 1 Pulseout Portd , 6 , B ' kirim sinyal ke Servo 2 Pulseout Portd , 7 , C ' kirim sinyal ke Servo 3 Waitms 13 ' tunggu selama 13 milidetik Loop ' ulangi terus sampai bosen End
$regfile = "m48def.dat" ' MCU yg dipakai ATMEGA48 $crystal = 8000000 ' Frekuensi 8MHz (internal clock, tanpa kristal) $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space
Config Pind.5 = Output ' PD5 (Pin 11) sebagai output Config Pind.6 = Output ' PD6 (Pin 12) sebagai output Config Pind.7 = Output ' PD7 (Pin 13) sebagai output
' Definisikan variable yg dipakai Dim A(3) As Word Dim I As Byte Dim J As Byte Dim Pengali As Single Dim Hitung As Single
Pengali = Jangkah / 1024
' Konfigurasi ADC (Analog to Digital Converter) Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc
Enable Interrupts ' perintah servo memerlukan Interrupts Do For I = 1 To 3 Step 1 J = I - 1 ' I = 1~3 (untuk no.servo), J = 0~2(untuk getADC) A(i) = Getadc(j) ' baca nilai Trimpot Hitung = A(i) * Pengali A(i) = Hitung + Servomin Servo(i) = A(i) ' kirim sinyal ke Servo Next Waitms 100 ' tunggu selama 100 milidetik Loop ' ulangi terus sampai bosen End