PIC12F675で動くように変更
約5度に1ステップ変化する。
回路図
サーボパルスはRA3の入力し、
ピン変化割り込みでパルス幅を取得するようにした。
以下ソースコード
コンパイラはCCSのPCWH4
#include <12F675.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES BANDGAP_HIGH
#use delay(clock=4000000)
//メモリ位置指定
#byte WPUA = 0x95 //プルアップレジスタ
#byte IOC = 0x96 //ピン変化割り込みレジスタ
#byte PORTA = 0x05 //ポートレジスタ
//定数定義
#define CH1 PIN_A0//CH1~4定義
#define CH2 PIN_A1
#define CH3 PIN_A4
#define CH4 PIN_A5
#define INPUT_PIN PIN_A3//入力端子
#define LEVEL_HIGH 1 //入力がH
#define LEVEL_LOW 0 //入力がL
//グローバル変数定義
long CP;//キャプチャー値
#int_RA
void RA_isr(void)//ピン変化割り込み
{
if(input(INPUT_PIN)==LEVEL_LOW){//入力端子がL(立下りエッジ
CP=get_timer1();//キャプチャー値をコピー
}
set_timer1(0);//割り込みが発生した場合タイマクリア
}
#int_TIMER1
void TIMER1_isr(void) //65msタイマ(パルスが来ない場合
{
cp=0;//キャプチャー値をクリア
}
void main()
{
char a=0,b=0;//変数初期化
char i;//
unsigned long w;//
set_tris_a(0b00001000);//RA3をIN
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_comparator(NC_NC);
setup_vref(FALSE);
IOC=0x08; //A3でピン変化割り込みを使う
enable_interrupts(INT_RA); //ピン変化割り込み有効
enable_interrupts(INT_TIMER1); //Timer1割り込み有効
enable_interrupts(GLOBAL); //割り込み開始
cp=0;
delay_ms(100);//安定待ち
while(1){
delay_ms(25);//サーボパルスが一回以上来るのを待つ
w=cp;//キャプチャ値をWにコピー
if(w<1100){//1100us未満は全OFF
a=0;
}
else if(w>=1900){//1900us以上は全ON
a=0x0f;
}
else {
w=w-1100;//オフセット削除
w=w/50;//ステップを割り出す
w=w&0x000f;//いらないビットをマスク
a=w;//結果にコピー
}
if(a==b){//前回と一致なら値を設定
if(a&0x01){//1ビット目
output_high(CH1);
}
else{
output_low(CH1);
}
if(a&0x02){//2ビット目
output_high(CH2);
}
else{
output_low(CH2);
}
if(a&0x04){//3ビット目
output_high(CH3);
}
else{
output_low(CH3);
}
if(a&0x08){//4ビット目
output_high(CH4);
}
else{
output_low(CH4);
}
}
b=a;//今回の値を次回比較に使う
}
}
main文の処理をICS2.0サーボを動かすコードに変更し、クロック設定やソフトUARTを記述すれば、
PIC12F675でもICS変換機が作れます。
但し、ハードウェアによるタイマーキャプチャーではないので、
値のブレやズレが懸念されます。
このシステムではノイズ対策があまり考慮されていませんが、
実機で使う場合は環境に合わせて対策してください。
また、本ソフト・ハードの使用は、自己責任でお願いします。