LED計測制御 | LED双方向通信 | LEDグループ学習 | メロディのプログラム | RCサーボの制御 | モーターのPWM制御 MYUロボ-II | MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラ|MYUUSB-1基板 | MYUUSB命令一覧 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■MYU-520 MYU-USB基本セット 4,235円(10%税込) ■MYU-521 MYU-USBベルト基本セット 4,235円(10%税込) ■MYU-522 3軸MYU-USB基本セット 5,390円(10%税込) ■MYU-524 MYU-USB制御基板(2モーター用) 2,860円(10%税込) ■MYU-526 MYU-USB制御基板(4モーター用) 3,080円(10%税込) ●MYUライター (myuwriter.exe) ※MYUライター (myuwriter.exe) はここからダウンロード(40K V1.151 2017/1/20版)できます。(64bitOS対応)
●起動方法
●プログラム
Openボタン
●MicroChip社提供の開発ツール MPLAB IDE と MPLAB-C18(Cコパイラ) MPLAB IDEはPICの統合開発環境を提供するフリーソフトウェアです。MPLAB IDEはここからダウンロードしてインストールします。 MPLAB-C18は、MPLAB IDEの中に統合するPIC18シリーズ用の「Cコンパイラ」です。MPLAB-C18はここからダウンロード(PIC18 in LITE mode)してインストールします。 MYUUSB基板で使っているPIC18F14K50のデーターシートはこちら 参考書籍、改訂版 電子工作のためのPIC18F本格活用ガイドはこちら PIC開発の参考HPはこちら、C18の参考HPはこちら
(MYUUSB-1基板の回路図)
《PIC18F14K50設定情報》 ;---------------------------------------- ; タクトスイッチ(IN1)を押すとLEDが消え離すと点灯する ;---------------------------------------- INCLUDE "P18F14K50.inc" ORG 2800h ;MYU用に2800Hからcodeを展開 movlw B'1000' movwf TRISA ;ポートAのBIT3(RA3)を入力にセット movwf WPUA ;RA3をソフトプルアップ clrf TRISB ;ポートBを出力にセット loop btfsc PORTA,3 ;RA3がLow(IN1が押された)なら次の命令をスキップする bra loop1 ;loop1にジャンプ bsf PORTB,7 ;RB7をHigh(LED消灯) bra loop ;loopにジャンプ loop1 bcf PORTB,7 ;RB7をLow(LED点灯) bra loop ;loopにジャンプ ENDMYUUSB基板のPIC18F14K50は右図のように0000Hから27FFHまでファームウェアが書き込まれています。スイッチONとともにファームウェアが実行されクロック(48M)やIOポートなどの設定を行います。※上右の《PIC18F14K50設定情報》参照 このためユーザーのプログラムは2800HからHEXファイルを作る必要があります。転送後、タクトスイッチを押すと2800Hからネイティブ実行されます。 またファームウェアで設定されるものは、ユーザープログラムでは省略することができます。
【プログラムの説明】 //---------------------------------------- // タクトスイッチ(IN1)を押すとLEDが消え離すと点灯する //---------------------------------------- #include <p18f14k50.h> #pragma code myu_start=0x2800 //MYU用に2800Hからcodeを展開 void main (void) { TRISA = 0b1000; //ポートAのBIT3(RA3)を入力にセット WPUA = 0b1000; //RA3をソフトプルアップ TRISB = 0; //ポートBを出力にセット while(1) { if(PORTAbits.RA3 == 0) //RA3がLow(IN1が押された)なら PORTBbits.RB7 = 1; //RB7をHigh(LED消灯) else PORTBbits.RB7 = 0; //RB7をLow(LED点灯) } } ◆タイマー0を使ったモーター制御 上の回路図のとおりポートCはモータードライバICに接続されています。下の表を参考に値をポートCに出力すると4個のモーターを自由にコントロールできます。 下のプログラムはタイマー0を使いモーターを一定時間動かすものです。 ※タイマー0は16ビットタイマーです。TMR0Hが上位8ビット、TMR0Lが下位8ビットですが下位のTMR0Lの読み書きを行わないと上位のTMR0Hが更新されませんので注意が必要です。 //---------------- // 前進を1秒 //---------------- #include <p18f14k50.h> #pragma code myu_start=0x2800 //MYU用に2800Hからcodeを展開 void wait1m (int t); void main (void) { TRISC = 0; //ポートCを出力にセット T0CON = 0x80; //タイマ0を6Mにセット:(48M/4)/2 prescale value PORTC = 0b101; //前進の信号をポートCに出力 wait1m(1000); //1秒の待ち PORTC = 0; //停止 } void wait1m(int t) { //1msecのウエイト char t0l; while (t > 0) { TMR0H = 0; //タイマー0をクリア TMR0L = 0; while (TMR0H < 23){ t0l = TMR0L; //TMR0HはTMR0Lを読まないと更新されない } while (TMR0L < 112) { } t--; } }
◆MYU-USB基本セットを使った迷路脱出ロボット //---------------- // 迷路脱出ロボット //---------------- #include <p18f14k50.h> #pragma code myu_start=0x2800 //MYU用に2800Hからcodeを展開 void wait1m (int t); void main (void) { TRISB = 0b1100000; //RB5,RB6を入力にセット WPUB = 0b1100000; //RB5,RB6をソフトプルアップ TRISC = 0; //ポートCを出力にセット T0CON = 0x80; //タイマ0を6Mにセット:(48M/4)/2 prescale value while (1) { //PWM制御(左大回り) PORTC = 0b101; //前進の信号をポートCに出力 wait1m(10); //()内の数を多くすると大回りになる PORTC = 0b100; //右前の信号をポートCに出力 wait1m(4); //()内の数を多くすると小回りになる if(PORTBbits.RB6 == 0 || PORTBbits.RB5 == 0) //In2(RB6),In3(RB5)が壁に接触したら { PORTC = 0b10000010; //後退の信号をポートCに出力 wait1m(500); //0.5秒の待ち PORTC = 0b10000001; //右回りの信号をポートCに出力 wait1m(500); //0.5秒の待ち } } } void wait1m(int t) { //1msecのウエイト char t0l; while (t > 0) { TMR0H = 0; //タイマー0をクリア TMR0L = 0; while (TMR0H < 23){ t0l = TMR0L; //TMR0HはTMR0Lを読まないと更新されない } while (TMR0L < 112) { } t--; } }◆タイマー0を使ったLED制御 MYUUSB-1A基板を右図のようにLEDを配線してポートCに値を出力ことでLEDを光らせることができます。 下記の製品は、C18を使ってLED制御できます。
■MYU-532 LED計測制御キット(LEDハンダ付けタイプ)2,052円(8%税込)
LEDはポートCのビットを1にすると点灯、0にすると消灯します。 //------------------------ // 0.1秒ごとLEDを順に点灯する //------------------------ #include <p18f14k50.h> #pragma code myu_start=0x2800 //MYU用に2800Hからcodeを展開 void wait1m (int t); void main (void) { TRISC = 0; //ポートCを出力にセット T0CON = 0x80; //タイマ0を6Mにセット:(48M/4)/2 prescale value PORTC = 0; //ポートCをクリア while (1) { wait1m(100); //0.1秒の待ち PORTC++; //ポートCを+1する } } void wait1m(int t) { //1msecのウエイト char t0l; while (t > 0) { TMR0H = 0; //タイマー0をクリア TMR0L = 0; while (TMR0H < 23){ t0l = TMR0L; //TMR0HはTMR0Lを読まないと更新されない } while (TMR0L < 112) { } t--; } }◆リーモート操作(LED制御) 基板とPCを転送ケーブルで接続しRemoteボタンを押すと右図のダイヤログが現れて各種の操作ができます。
◆RC0-RC7のチェックボックス
2808H 高位レベル割り込み 下のプログラムはメインプログラムの無限ループではなんの処理もしていませんが1秒ごとのタイマー0割り込みではポートCを1つづ増やしています。
//------------------------------------------- //1秒ごとのタイマ0割り込 USBケーブルを抜いてから実行すること //------------------------------------------- #include <p18f14k50.h> void main (void) { TRISC = 0; //PORTCをすべて出力 PORTC = 0; // LED消灯 T0CON = 0x87; //タイマ0を46.875Kにセット:(48M/4)/256 prescale value INTCONbits.TMR0IE = 1; // タイマ0割り込み許可 INTCONbits.GIE = 1; // グローバル割り込み許可 /// 割り込み待ちアイドルループ while(1) //無限ループ { } } // タイマ0割り込み処理 void isr0(void) { INTCONbits.TMR0IF = 0; // 割り込みフラグクリア TMR0H = 0x48; //タイマー0が1秒後に0(割り込み発生)になるようセット TMR0L = 0xe5; ++PORTC; //1秒ごとにインクリメント } #pragma code myu_start=0x2800 //MYU用に2800Hから展開 void myu_main(void) { _asm goto main _endasm } // 最初にmainにジャンプ //割り込み定義(優先レベルなし) #pragma interrupt isr0 //割り込みベクタセット #pragma code isrcode = 0x2808 //MYUの割り込アドレス void isr_direct(void) // 割り込み関数へ { _asm goto isr0 _endasm } // 割り込発生でisr0にジャンプ |