#freeze
 閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)~
 ~
 *サーボモータを動かす [#vbb42053]
 
 PIC 16F628A内臓のTimer0割込み機能を利用し、サーボモータを制御する20ミリ秒
 周期のパルス信号を発生させて、サーボモータを動かしてみよう。  06/10/29
 
 サーボモータ:ミニスタジオ社製 MiniS RB-50 @1,300円
 http://www.ministudio.co.jp/Japanese/Goods-RB50-1.htm
 
 06/11/15追記
 下記同一プログラムで大きいサーボモータを動かしてみました。
 写真右:ミニスタジオ社製 RCサーボRB303c @1,300円
 http://www.ministudio.co.jp/Cgi-bin/Order-JP/DetailJp.asp?GoodsNum=97
 サーボの機種が変わっても同じ動きをする事を確認しました。
 
 |&attachref(P1010189.JPG,zoom,150x150,button){新しい写真添付};|&attachref(P1010204.JPG,zoom,150x150,button){新しい写真添付};|
 
  /**
  * RCサーボモータ制御
  *
  * PIC16F628A   @4MHz
  * RB3: servo MiniS RB50
  * http://www.ministudio.co.jp/Japanese/Goods-RB50-1.htm
  * 電源:乾電池3本
  *
  * Device Flags: _BODEN_OFF _BOREN_OFF _CP_OFF _PWRTE_ON _WDT_OFF
  *        _LVP_OFF _MCLRE_OFF _INTRC_OSC_NOCLKOUT
  * MikroC 6.2
  */
  
  // Global変数定義
  signed short int deg = 0; // deg: -85 ~ +85
  
  void interrupt() { //割込み関数
      // Timer0 Interval 20mS
      if (INTCON.T0IF) { //割込み種がTimer0割込みの場合
          TMR0 = -(20000 / 128); // Timer0 Interval 20mS (@4MHz)
          INTCON.T0IF = 0;
          
          PORTB.F3 = 1; // PWM RB3 on
          Delay_Cyc(150 + deg); // delay(150 + deg) * 10uS
          PORTB.F3 = 0; // PWM RB3 off
      }
  }
  
  void main() {
      PORTB = 0b00000000; //PORTBの中身をきれいにする
      TRISB = 0b00000000; //PORTB 8個全て0:出力設定
      
      OPTION_REG = 0x86; // TMR0プリスケーラ: 1/128
      TMR0 = -(20000 / 128); // Timer0 Interval 20mS (@4MHz)
      //TMR0割込み許可
      INTCON.T0IE = 1;
      INTCON.GIE = 1;
      
      do {
          //基準角度確認
          deg = 0; Delay_ms(1000);
          deg = -85; Delay_ms(1000);
          deg = 0; Delay_ms(1000);
          deg = 85; Delay_ms(1000);
          deg = 0; Delay_ms(1000);
          
          //-85度〜+85度までゆっくり首を振る
          for(deg = -85; deg <= 85; deg++)
              Delay_ms(50);
          for(deg = 85; deg >= -85; deg--)
              Delay_ms(50);
              
      } while(1);
  }
 
 ★この情報は役に立ちましたか?
 #vote(はい[70],いいえ[41])
 #vote(はい[71],いいえ[41])