ラジコンなどに使うサーボ(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