ラジコンなどに使うサーボ(SG92R)の動作チェック用に作ったソフトです。
サーボはタイマー1のPWM(OC1B)につなぎ、ADに接続したボリュームを回して180°動くことが確認できました。
(関係するところだけの抜粋です。)
$regfile "m328pdef.DAT" $crystal = 16000000 Config Portb.2 = Output '駆動用PWM OUT Dim Vin As Word 'ADC ch1 Dim I As Word 'ループ変数 Dim Adch1 As Word 'AD ch1の測定データ Dim V As Word Dim V_int As Integer Config Adc = Single , Prescaler = Auto , Reference = Avcc 'A/Dコンバータの設定。 10bit=1024 '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Config Timer1 = Pwm , Prescale = 8 , Clear Timer = 1 , Compare B Pwm = Clear Up '16MHz-->2MHz-->50Hz Set Tccr1a.wgm11 'fast PWM Set Tccr1b.wgm13 'top=ocr1A Compare1a = 39999 '分周値設定 Compare1b = 2899 ' Enable Interrupts 'すべての割り込みを許可。 Start Adc 'A/Dコンバータに電源を供給。 'main Do Gosub Adc_sub V_int = Adch1 * 3.71 V = V_int + 1000 Compare1b = V - 1 Waitms 10 Loop Adc_sub: Vin = 0 For I = 1 To 5 Vin = Vin + Getadc(0) ' アナログ入力0の変換値を変数へ代入。 Waitus 100 Next I Adch1 = Vin / 5 '5回サンプリングなので5で割る Return