投稿

4月, 2012の投稿を表示しています

International Letter & Petition to Asma al-Assad

イメージ
ドイツとイギリスの国連大使の奥さんが作成したという、シリア大統領夫人のASMAさんに、デモ弾圧を止めさせて!と宛てたビデオレター。 このメッセージがシリアの平和へのキッカケになる事を祈らずにはいられません。

PIC18F4550と18F2550用HIDBootloaderの改造

今夜は、USBコントローラ内蔵のPICマイコン用HIDブートローダーのお話 USB経由でアプリを書き換えられるという便利なファームウェアがMicrochip社からソースコード付きで公開されているのですが、純正評価ボード用なので、オリジナルボードで使うには手を入れる必要が出てきます。 以下の内容は、 18F4550と18F2550 でしか確認していませんので、それ以外のチップの場合は参考レベルとしてください。 ブートローダーは、以前にも紹介したMicrochip社提供のライブラリ集(microchip-application-libraries)に含まれています。 PICマイコンに書き込むファームウェアのソースコード一式は以下のパスにインストールされます。 C:\Microchip Solutions v2012-02-15\USB\Device - Bootloaders\HID\Firmware - PIC18 Non-J 1.問題となるのは、18F4550用評価ボード(PICDEM FS USB Demo Board)にはLEDが搭載されており、ブートローダーがこのLEDを点灯させる記述がある事です。 もし、自作基板においてこのLEDポートに信号を入力していた場合、衝突によって最悪は故障してしまいますので、回避できる様に改版が必要です。 ファームウェア改版1 io_cfg.h 'LED_NOT_USED' 定義でLED出力可否を切り替えできる様に改版します。 #define LED_NOT_USED // Avoid a collision of an output port. ファームウェア 改版2  BootPIC18NonJ.c mintAllLEDs()にてポートをLED用に出力モードに初期化しているので、スルーさせます。 void UserInit(void) { //change! see io_cfg.h  #if !defined(LED_NOT_USED)     mInitAllLEDs(); //Init them off. #endif ファームウェア 改版3  main.c

2.4GHz版プロポ作製-PPM信号制御編(改)

イメージ
送信モジュールTx1-Jのジョイスティックは実装不良の様で正常動作しませんでしたが、PPM信号を入力する事で無事に、受信モジュールRx31を制御できるになりました。 ※回転ボリュームがスロットル。スライドボリュームがステアリング。 イロイロと嵌った事柄があるのですが、PPM信号出力プログラムの改良点についてカキコします。 まずは、Txに入力するPPM信号のポラリティです。 当初はHパルスでしたが正常に動作せず、悩んだ挙句に反転したらあっさり動きました。 ラジコンの世界では常識なのかも? 次に、USBの通信でPPM信号が乱される問題。 USBケーブルでPCに繋いで、PC側からPPMの各チャンネルのパルス幅を制御してみたり、PICに繋いだボリューム値をPCでモニターしていると、PPMのパルス幅が時々乱れる。 で、受信モジュールに繋いだサーボも微妙に右へ左へとブレて止まらない。 PIC側のUSB処理を停止して、PCからのバスパワー供給だけならPPM信号も安定してる。 やはり、PCから常時死活チェックが飛んでくる為、PPM信号を生成している割り込み処理が遅れるのが問題の様です。 そこで、USB処理を低位優先割り込みに、PPM生成用のCCP割り込みを高位優先の割り込みに書き換え。 ●割り込み関数のUSBDeviceTasks()とPPM_int()を入れ替え。 //These are your actual interrupt handling routines. #pragma interrupt YourHighPriorityISRCode void YourHighPriorityISRCode() { //        USBDeviceTasks(); PPM_int(); } //This return will be a "retfie fast", since this is in a #pragma interrupt section #pragma interruptlow YourLowPriorityISRCode void YourLowPriorityISRCode() {         USBDeviceTasks