FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PIC 複数サーボ駆動成功 いや、ちょっとまてよ・・・»

コメント

コメントの投稿













管理者にだけ表示を許可する

複数サーボ駆動 テスト1


とりあえず、サーボの制御信号の分岐はハードウェアでやる方針にしたので

16F877Aからは2.5ms周期のサーボ制御信号と
デマルチプレクサのセレクター信号を出力するようにしました。

プログラムは
追記:↓のプログラムはミスあり 訂正は次の記事にて


#include<16F877A.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
#use delay(CLOCK = 20000000)
#use rs232(BAUD = 9600,XMIT = PIN_C6, RCV = PIN_C7)
#define ZERO_P 53036
#define CENTER 60536
unsigned int select=0;
unsigned long data[8] = {CENTER,CENTER,CENTER,CENTER,CENTER,CENTER,CENTER,CENTER};

#int_timer1
void isr1(){
   
    set_timer1(0xCFC2);
    output_high(PIN_B0);
    CCP_1 = data[select];

    switch(select){
        case 0: output_b(0x00 | (input_b() & 0xE3));break;
        case 1: output_b(0x04 | (input_b() & 0xE3));break;
        case 2: output_b(0x08 | (input_b() & 0xE3));break;
        case 3: output_b(0x0C | (input_b() & 0xE3));break;
        case 4: output_b(0x10 | (input_b() & 0xE3));break;
        case 5: output_b(0x14 | (input_b() & 0xE3));break;
        case 6: output_b(0x18 | (input_b() & 0xE3));break;
        case 7: output_b(0x1c | (input_b() & 0xE3));break;
        default : output_b(0x00 | (input_b() & 0xE3));
    }
    select++;
    if(select >=8) select = 0;
}

#int_ccp1
void ccp1_isr(){
    output_low(PIN_B0);
}


void main(){
    set_tris_b(0);
   
    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
    set_timer1(0xCF2C);

    setup_ccp1(CCP_COMPARE_INT);
   
    enable_interrupts(INT_CCP1);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
    CCP_1 = CENTER;
    output_b(0x00);
    while(1){
       
    }
}

追記:↑のプログラムはミスあり。信号立ち上げのタイミングが悪く、他のパルスに干渉 訂正は次の記事にて
最終的にはCCPを二つつかって16本個分のサーボ信号を作る予定ですが、

とりあえずCCP1だけをつかって8本に挑戦

CPLDのデマルチプレクサのプログラムは試験段階でスイッチ入力用の信号反転を行ってたので
それを解除

PICと信号線をつないで LEDで確認してみると

servotest1.jpg

PICからはサーボの制御信号は1本しか出てないけど、
マルチプレクサをつかって8つのLEDに信号が届いているのがわかります。

分岐効果は確認できたので、次はサーボにつないで見ます。


スポンサーサイト

PIC 複数サーボ駆動成功 いや、ちょっとまてよ・・・»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。