2016-07-29 17:00 | カテゴリ:PIC応用回路
気候センサーやLCD表示器をi2cで通信するプロジェクトとして、最終的には市販の工作時計キットに組み込みました。

時刻合わせの為に、スイッチ(時間のカウントアップと分のカウントアップを兼ねたスイッチ:黄色)と時報と共に時分秒を合わせるボタン(黒)を取り付けて、その部分のソフトを組み入れました。
長期間使用して、秒がずれてきた場合でも、ワンタッチで修正できます。

SW.jpg

続きはこちらで、、、
2016-07-28 00:00 | カテゴリ:PIC応用回路
蜘蛛の巣配線をなんとか乗り切って、プログラムを組んでいました。


これまでにLCD表示器で、気候センサーのデータ取得と表示まではできていましたので、それを7セグメントLEDに表示するように、セグメント分割部分を製作し、ドッキングしました。
温度、湿度、気圧、時刻を順次4桁(1999)で表示します。

また、温度の℃の記号や、湿度の%も7セグメントLEDの一部と、追加した赤色LEDでそれらしく表示するように工夫してみました。

動作状況は、こんな感じです。
まだ、LED表示テストルーチンが組み込まれたままです。(時刻、気温、湿度、気圧のデモデータを少し表示します)
その後、実際の気候データと時刻(0:00から)を表示します。


現状では、起動時に時刻を設定する部分は組み込んでいませんので、時刻は0:00からカウントアップとなります。
時刻を4秒表示したのちに、温度、湿度、気圧を順次2秒弱表示し、また、時刻表示に戻ります。
データの切り替え時には、約0.2秒間のブランクを入れて、それがわかりやすくなるようにしていますが。ちょっとチカチカして、目障りです。
この辺りは、後日、調整します。
また、時間表示の期間が4秒(10秒のうち)なのも、みじかいのかなぁ、と思いますが、このあたりも後日検討します。

あとは、時刻合わせの為のSWを取り付けて、配線をし、プログラミングするだけです。



2016-07-25 14:36 | カテゴリ:PIC応用回路

i2cの気候センサーの動作が確認できました。
そこで、これらを大型LED表示のデジタル時計のケースに組み込むことに挑戦します。

Clock01.jpg

続きは、、、

2016-07-19 19:09 | カテゴリ:番外編

土用の丑の日ではないですが、久しぶりに鰻を食べてきました。

KIMG0049.jpg


神戸の三ノ宮の大衆店(鰻の青葉)ですが、結構混雑していました。

「うな重」、金3,200円なり。

十分満足でした。

鰻では、「竹葉亭」も有名です。

近場では西宮市にあります。

以前に訪問したことがあります。

そちらもおいしかったです。

2016-07-18 11:12 | カテゴリ:PIC応用回路
LCD表示器に文字を表示するところまでなんとかできるようになりましたので、今度はメインのセンサーです。

今回使用するのは、BME280というセンサーです。

BME280.jpg

Sensors.jpg

プログラミングを進めます、、、
2016-07-15 18:20 | カテゴリ:PIC応用回路


LCD表示器に文字を表示するところの追加説明です。



前回、文字の表示までこぎつけました。
一文字ずつ、i2cの書き込み関数に渡して、それを一文字ずつ表示するわけですが、毎回このような手順は面倒で、一気に文字列を手渡して表示したいですよね。
そのために、下記の文字列表示関数を導入しました。

Put.jpg

//-----------------------------------------------
// LCD文字表示(連続)
// 現在のカーソル位置から連続して文字を書き込む
// 1行目、2行目の終端を越えた文字は無視される
//------------------------------------------------

void LCD_puts(const char *p) {  //文字配列をポインターとして受け取る(内容は変更しない)
while (*p != '\0') {     //受け取った文字配列にヌルデータ(\0)が来るまで文字データを
LCD_DW(*p); // LCD_DW関数にセットして表示する
p++; //ポインターを+1する
}
}


この関数は、呼び出し側から、表示したい文字そのもののデータを受け取るのではなく、表示したい文字の格納されている「場所」の住所、つまりアドレスを受け取ります。
そのアドレスを示すものが、ポインターと言われるもので、例えば、

LCD_puts("ABCDEFG");

こういう形で、この関数が呼ばれると仮定すると、この文字列 "ABCDEFG" という文字データが格納されているメモリー上の場所をポインターとして、受け取ります。
その表記として、文字表示関数側では、const char *p として、*p となります。

この*がポインターとして受け取る印です。pはこの関数内で使用するバイト型の文字変数名(なんでもかまいません)です。
また、constとは、呼び出されたこの文字表示関数の中で、受け取ったデータは、変更しない(できない)という印です。

この、"ABCDEFG"という直接的な指定の代わりに、文字配列変数としても指定でき、例えば

int suuji;//整数変数を定義
char moji[10];//文字配列、10文字を定義


suuji = 1234;//数字の1234代入
itoa(moji, suuji, 10);// suujiの数字(1234)を文字に変換して、moji配列に代入する関数
LCD_puts(moji);//文字配列をそのまま渡して、表示。


ここで、注意事項があります。
--------------

LCD文字表示関数は、表示する文字列の「終わり」をどのように判断しているかを知る必要があります。

それが、

while (*p != '\0')

の部分です。
つまり、表示しようと読み込んだ文字データが'\0’なら、終了、と判断しているわけです。
この'\0'はNULデータと言って、文字列の終わりの印と決められています。

例えば、上記の例の

itoa(moji, suuji, 10);// suujiの数字(1234)を文字に変換して、moji配列に代入する関数

では、itoa()関数は自動的に最後に'\0'を書き込んでくれますから、問題ないのですが、自分で文字配列にデータを書き込む際は、最後に必ず、'\0'を書き込みます。

例えば、

moji[0] = 'A';
moji[1] = 'B';
moji[2] = 'C';
moji[3] = '\0';

とします。

そうしないと、文字表示関数は、終わりを見つけられなくて、永久に文字を勝手に表示し続けて、プログラムは「暴走」となります。

以上を踏まえて、LCD表示の関数として、表示文字位置を指定する「カーソルポジション」コマンドと、「行消去」コマンドを作ってみました。

Cursor.jpg

Clear.jpg

【ジャンル】:趣味・実用 【テーマ】:電子工作
コメント(4)
2016-07-12 18:17 | カテゴリ:PIC応用回路


LCD表示器に文字を表示するところまでトライしていきます。


前回、i2C通信に関して、スタートコマンド。書き込みコマンド。ストップコマンドなどをご紹介しましたが、今回はこれらのコマンドを組み合わせて、LCDデバイスに指示を出す事を検討します。
i2cの通信手順に基づいて、LCDデバイスに指示を出すには、LCDデバイスの仕様に合わせて手順を踏まなければなりません。

デバイスの説明書を見ると、その手順がちゃんと書いてあります。
PICのC言語を使用したサンプルが出ています。

まず、このLCDにコマンドを与えるのか、表示するデータを送るのかを区別するための手順があります。

続きは、、、
2016-07-09 13:53 | カテゴリ:PIC応用回路

通信するための関数を作ります。

これから使用していくデバイスは、このLCD表示器です。

LCD.jpg

前回は、i2C通信の簡単な仕組みをお話ししました。
芋ずる式に接続したi2Cデバイスを個別に自由に制御するためには、ある種の手順に従う必要があります。
それほど複雑な手順ではありませんが、ちょっとコツがありますので、そのあたりをわかりやすく書いていきたいと思います。

続きは、、、、
2016-07-06 20:05 | カテゴリ:PIC応用回路
もう、お腹一杯!と言わずに、、、

模型の製作を進めたいのですが、「これを組みたい!」というモデルが見つかりません。
その間、PICのプログラミングを勉強して、「ボケ防止」を兼ねたいと狙っています。

手持ちの部品に、バックライト付き液晶表示器と気温、湿度気圧計測できるセンサーがありましたので、これを使った電子工作をしていました。

Bred.jpg

続きは、、、
2016-07-02 23:07 | カテゴリ:コンピュータ

あれほど、うっとうしく、嫌っていた、WIN10のアップグレードをしました。


きっかけは、ニュースで、この8月に、WIN10がさらにバージョンアップされて、それも無料らしい、という事を知ったからです。
まー、いやしい根性ですが。

PCは、デスクトップとノートの2機あります。いずれもMOUSEコンピュータの製品です。
特に高級でもなく、かといって、低級でもなく、普通のPCです。
デスクトップは、5年ほど前にVISTAの時代に、XPで購入し、その後、WIN7にしています。
ノートは、3年前の購入時からWIN7です。
まずは、ノートPCから。

無線LAN経由ですが、夜寝る前にアップグレードするように指定して、朝には、「無事完了」していました。
気になっていた使用中のプログラムも今のところちゃんと動いています。
体感的には、速度や、レスポンスは、当然ですが、変わりません。
起動時の画面が変わった程度で、通常のデスクトップはほとんど変化なく、今まで通り使用できますが、メインメニューが変わったので、慣れるまでは戸惑います。

立ち上げ画面がこちら

Win01.jpg

今のところ、問題なく使えています。
通常のデスクトップがこんな感じ

Win02.jpg

そこで、デスクトップの方をアップグレード。
で、問題が。

* 例のPICのプログラムを書き込む際に使用していた、シリアル=USB変換アダプターが認識されません。
* PC内蔵のDVDドライブが認識されません。

まずは、ネットでチェック。

シリアルUSBケーブルは、ドライバーをマニュアルで最新のものではなく、最古の2005年ころの物にしたら、動作しました。
古いほうが良いなんて、変ですね。

続いて、DVDドライブの認識ですが、これもネットで調べると、MOUSEコンピュータで同様の問題が発生している方の対策で、PC内部のシリアルATA(SATA)の接続ポートを変更するとOKというのがあり、その通りしたら、解決しました。(ラッキー)

という事で、PICのプログラムの作成をして、PICライターを繋いでみましたが、「おや?」例のシリアルUSB変換ケーブルを認識しません。
また、ドライバーを確認していると、それどころか、PCが問題検出で、再起動に。

やはり、古いソフトはダメみたいです。

仕方がないので、ネットで、WIN10対応のシリアルUSB変換ケーブルを注文しました。
これです。
Ugreen USB シリアル変換ケーブル USB-RS232 DB9ピン変換アダプタこれは、1000円もしません。

001.jpg

先ほど、ケーブルが届きました。
WIN10のドライバーが付属するかと思いましたが、WIN8の小さなCDがついていました。
まずは、何もしなくてどうかなぁ?とおもいつつ、USBに差し込み、RS232機器(PICライターですが)に繋いだら、あっさり動作しました。
私のWIN10の環境では、ドライバーをインストールする必要はありませんでした。

というわけで、一気にWIN10の環境になりました。
WIN7との比較ですが、PCの起動時間やプログラムの立ち上げ時間が、気持ち若干早くなった気がします。

そうこうしていたら、ノートPCの内蔵WiFiモジュールの調子がよくありません。
半年くらい前から、時々、ネット接続が切断されることがあり、その都度、LANのルーター(親機)の方を再立ち上げして、事なきを得ていましたが、どうもノートPC側の受信機能に問題があったようです。
完全に故障する前に対応しようと、ネットで調べたら、最近ではUSBに差し込むWiFiモジュールがありました。

しかも、なんと900円以下!
エレコム ELECOM
WDC-150SU2MBK [無線LAN子機 11n/g/b 150Mbps USB2.0用 ブラック]

002.jpg

早速、ヨドバシカメラさんの通販で申し込みました。
驚くべき時代になりました。
【ジャンル】:趣味・実用 【テーマ】:ホビー・おもちゃ
コメント(4)