FC2ブログ
2019-01-28 20:12 | カテゴリ:PIC応用回路

白黒モード用のOLEDの使い方が大体わかったところで、もう一つのカラーOLEDもついでに使い方を検討しておきました。

このSSD1331の基本スペックは、

96ドットX64ドット、カラーは、256色から65K色に対応しています。
前回のSH1106と異なり、描画コマンドとして、直線、四角形の描画、左右上下のスクロールなどがサポートされています。


(OL0501)
OL0501.jpg


続きは、、、、
2019-01-24 14:54 | カテゴリ:PIC応用回路

ケースを含めたハードが完成しましたので、ソフトを最終調整していきます。


デバッグには、二台のPICを使用します。
ブレッドボードにもう一台のPICをセットし、シリアルデータ(テスト文字)をprintf()関数で出力するようにプログラミングしました。
それを今回のデバッグツールに接続し、テストを進めました。

(OL0400)
OL0400.jpg


続きは、、、、
2019-01-20 22:29 | カテゴリ:PIC応用回路
今回は、ケースを加工してハードを製作していきます。

前回までに、大体のソフトの動作が確認できました。
今回は使用部品もPICOLED以外には動作確認用のLEDとコネクターくらいですので、実体配線図をちょこっと作成して、配線も済ませたいともくろんでいます。

まず、ケースですが、デバッグ用のツールと言う事も考慮すると、小型で、かつ電源もターゲットの回路から受電するようにしたいと考えています。
そんなわけで、ケースには、「口腔リフレッシュのタブレット菓子」の空きケースを利用します。

(OL0301)

続きは、、、、OL0301.jpg
2019-01-18 21:10 | カテゴリ:PIC応用回路

このOLEDディスプレイの制作に取り掛かった理由は、デバッグに使いたかったからです。


PICの電子工作でプログラミングしていると、途中経過で変数などの内容を知りたいことがあります。
その際は、これまではLEDの点滅などで代用させていましたが、もう少しスマートにしたかったので理由です。

XC8には、printf( )文などが用意されていて、スタンダード出に文字や数値を送り出すことができます。
Arduinoのシリアルという機能と同じようなものかと思います。(想像ですが)

このprintf( )は、PICにシリアル機能をセットアップしておくと、TXピンからシリアル通信でデータが出力され、PCに接続しておけば、ターミナルソフトでデータ内容を確認できます。
しかし、ブレッドボード上でこの機能を使用するためには、

1)PC上のターミナルソフトのセットアップ

2)USB-シリアル変換ケーブル

3)PICのTX信号をシリアルの信号レベルに変換する専用RS232用IC

が必要になります。

(OL0201)
OL0201.jpg







私は、この様な場合に便利な様に専用ICを小さな基板に乗せて、ジャンパーピンを付けたツールを用意しています。
しかし、ケーブルをつないだり、PC側の設定をしたりで、面倒なので、簡単にブレッドボード上にデータを確認できるディスプレイが欲しかった、というわけです。
今回も、いざ、接続しようとしたら、コネクターのピンのビニル線の半田が取れていました。(笑)

(OL0202)
OL0202.jpg




続きは、、、、

2019-01-15 23:23 | カテゴリ:PIC応用回路
2019年初の工作は、これです。

ちょっと前にAMAZONで購入していましたこのOLEDですが、以前にはRaspberryPiで動作させててWEBから天気やニュースを取り込んで表示させていました。
RasPiには関連するドライバーなどがそろっていて、WEBを参考にしてプログラミングしました。
今回は、PICでこのOLEDを動作させることにトライしてみたいと思います。

目的としては、このOLEDの制御を勉強したかったことと、結果を活かして、PIC回路のデバッグ(途中の変数などの確認)に使いたいという目論見です。


(OL0100)
例によって綺麗に箱に収まって届いています。
ちゃんと日本語で、サポートしまっせ! の文章まで。
OL0100.jpg





(OL01-01)
これがOLEDです。
OL0101.jpg




1.3" SPI 128x64 OLED LCD ディスプレイ 1.3インチ 液晶ディスプレイモジュール




インターフェスは、SPIとi2cがあるのですが、私はSPIを購入しました。
通信速度が速くできるようです。


(OL0102)
基板を見ると、表面側に各信号線の意味が印刷されています。
OL0102.jpg

i2cとSPIの双方のインターフェスがサポートされているようです。





SPIのクロックとデータ端子以外に、チップセレクト(CS)とデータ・コマンド(DC)、そしてリセットがあります。


続きは、、、、
2019-01-10 11:53 | カテゴリ:1/8モデル
足掛け、半時余りで、やっと完成しました。
途中。ライントレーサーで横道にそれていましたが、課題のクルクル回転赤色灯や、じわっと点滅ウインカーなども、なんとか予定して様に動作して、ほっとしています。

しかし、最終段階でちょっとはまりました。
ご参考までに白状します(笑)

mp3Playerの制御です。

(1)アナログスイッチピンの怪

今回は、1曲(サウンド)のみの再生なので、アナログスイッチピンに33KΩを半田して、それをPICのポートで制御(Lレベルにする)するつもりでした。
しかし、何度テストしてもmp3Playerが反応しません。手動でGNDに接続するとちゃんと動作します。
原因は、簡単でした。mp3Playerのアナログポートだからです。
ここをLレベルに落としても当然ですが、GNDにつないだことにはなりません。
仕方がないので、TXポートからシリアルコマンドを送信する事で対応しました。

(2)シリアルコマンドの怪

ネットで調べたマニュアルに従って、再生や、停止、リセット、などのコマンドを確認しました。
これらのコマンドは、8バイトのブロック(開始コマンド、終了コマンドなどいろいろなデータとともに)で送信します。
また2バイトのチェックサムを加えた10バイトの仕様もあります。
その場合は、既定の計算式で求めたチェックサムを2バイト加えるのですが、この計算式通りに計算しても、例題のチェックサムに合いません。

いろいろネットで調べましたが、Int形式の計算とその16進表記の問題のようで、結論は、

マニュアルの計算式
Checksum (2 bytes) = 0xFFFF - (CMD + Feedback + Para_MSB + Para_LSB) + 1



Win10の電卓をHEXモードにして、以下の計算方法で求める。

0 - 6 - cmd - P1 - P2 - 0xFF

の下4桁をとりチェックサムにする、でした。




さてさて、前置きが長くなりました。
これから新年の街にパトロールに出かける雄姿をご笑覧ください。

HDF01.jpg



HDF04.jpg







そして、動画です。







やっと完成しましたので、次は何をするか??
じっくり検討します。

2019-01-08 13:41 | カテゴリ:ヘリコプター
いつものRCクラブの初飛行会がありました。

おおよそ10人が集合。
RC001.jpg
RC002.jpg

続きは、、、、
2019-01-04 23:42 | カテゴリ:1/8モデル
電飾点滅ソフトの調整を行いました。


ソフトPWMの点滅(じわっとON、じわっとOFF)を行っているつもりですが、単純な動作ならOKなのですが、点滅をさせたり、消灯させたりするうちに、動作が怪しくなっています。
その徐々に怪しくなる原因を探っていました。


どうやら、点滅動作をONにしたりOFFにしたりする処理がうまくないようです。
ソフトPWMで処理していますので、連続点滅ならよいのですが、途中でOFFした場合、各種のカウンター(ソフトPWMのDUTYやカウント回数の途中経過)をちゃんとリセットしてやらないと、点滅を再開した場合に異常になることがわかりました。

(HD1501)
HD1501.jpg


int LED_Para[22][12] = 0;


//--------- 変数に定数セット LED点滅制御用データ設定-----------
// 以下、配列アクセスを変数で分かりやすく定義する
#define Ptrn 0
#define Port 1
#define Freq 2
#define LED_ON_sts 3
#define LED_TGT 4
#define LED_DTY 5
#define DTY_cnt 6
#define Status 7
#define Syc_cnt 8
#define Syc_SPD 9
#define DTY_max 10
#define OnOff_counter 11





そこで、下記のように点滅を停止した場合に、その辺のカウンターなどをちゃんとリセットしてやる様に修正したところ、うまくいくようになりました。


//*********************** ポートの出力を変化させる関数 *************************

//--------------------------------------------------------------------
// 指定ポート出力の反転(配列の最大数を超えない様に)
// // port_noが0-10でコールされなければERROR(それ以外はサーボ処理の為)
//-------------------------------------------------------------------

void Status_Reset(int LED) {
LED_Para[LED][Ptrn] = 15;
//LED_Para[LED][Port] = 0;
//LED_Para[LED][Freq] = 0;
LED_Para[LED][LED_ON_sts] = 0;
LED_Para[LED][LED_TGT] = 0;
//LED_Para[LED][LED_DTY] = 0;
LED_Para[LED][DTY_cnt] = 0;
LED_Para[LED][Status] = 0;
//LED_Para[LED][Syc_cnt] = 0;
//LED_Para[LED][Syc_SPD] = 0;
//LED_Para[LED][DTY_max] = 0;
LED_Para[LED][OnOff_counter] = 0;
LED_off(LED);
}


ここだけご覧になってもわけがわからないと思いますが、自分のメモとして書いておきます。(笑)


(HD1502)
点滅の時間間隔を実際のデモ画面に合わせていますので、動作が緩慢な点はご容赦ください。





再度ブレッドボードテストです。
LEDの意味は前回と同じです。
左の6個の赤色LEDは、パトライト。
右の最上部の2個の緑LEDは、それぞれ、ヘッドライト、テールライト。
その右下の赤色LEDは、赤色スポットライト。更にその下の4個の緑LEDは、前後左右のウインカーです。
ちゃんとウインクしています。



続きは、、、、
2019-01-01 00:00 | カテゴリ:番外編
年賀2019

ブログに訪問いただいた皆様へ

いつもお世話になります

おかげさまで、この4月で開設5年目をむかえることができます

これもひとえに皆様の心優しい励ましのおかげです

今後もできる限り続けていければと思いますので、何卒宜しくお願い致します