jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

PICその5

MPLAB X IDE XC8を使っていて気のついた事が2つある。大した事ではないかもしれないが、私にはとっても重大な事です。
 1つは、XC8のコーディングでは、後々自分用のコード理解の為コメントを書いています。漢字を使うように初期の設定でISO-2022-JPを設定し、日本語でずらずらとコメントを書いていて起きたことです。ふとコードの後に”//PICkit3では・・・・”などと書いていたのです。下記のような状態でした。それで私のバランス感覚がコメントがコードにくっ付きすぎだと思い、コードとコメントを離そうとスペースを入れたんです。そうしたら突然エラーマークがあちらこちらに出始めました。一瞬ビックリしてしまいました。

《以下コードの実例》
ADCON0bits.GO_DONE = 1;//PICkit3ではこちらで通る。SIMULATORではエラー

《全角スペースでNG》
ADCON0bits.GO_DONE = 1; //PICkit3ではこちらで通る。SIMULATORではエラー
                                  ↑
                  ここの全角スペース
《半角英数字スペースでOK》
ADCON0bits.GO_DONE = 1; //PICkit3ではこちらで通る。SIMULATORではエラー
                 ↑
                  ここの半角スペース
あら やだ!A/Dコンバータのプログラミングしているのがわかってしまいました。

結局、漢字のモード時のスペースキーでの空白挿入はエラーを発生します。くれぐれも漢字コメント使用時は注意しましょう。どこに全角スペースがあるかわからないエラーのデバッグは大変です。安全なのは全て半角英数字でのコメントにすれば面倒なエラーのデバッグは必要なくなるのですが...やはり後々コードを見たときの理解の為には必要かなというところです。とにかく気をつけないといけない事の一つです。Warningでもエラー行を指してillegal characterなどどメッセージがでますので、この種のエラーだと分かります。

 2つ目は、コード入力支援機能による間違いが起きうることです。
ヘッダーファイルなんぞをみて構造体にあるコードを打ち込んでみたところコード支援が同じように出てくるのです。これはあまりにも単純なコード入力支援機能です。以下例です。
《例》
ADCON0bitsとタイピングして次にドット"."を打ち込むと選択子がでてきます。
ADFM
ADON
CHS
CHS0
CHS1
GO
GO_DONE
GO_nDONE
VCFG
nDONE
このケースではGO_DONEを選択

《ヘッダーに書いてあるコードを打ち込んでみたNGケース》
ADCON0bits_tとタイピングして次にドット"."を打ち込んでも同じ選択子がでてきます。
ADFM
ADON
CHS
CHS0
CHS1
GO
GO_DONE
GO_nDONE
VCFG
nDONE
同様に選択しコンパイルすると、このコードではエラーになります。が、しかしエラーの内容からしておかしいのが分かるので何とかなります。以下エラー内容
error: no identifier in declaration
以上が使ってて気になった事です。
 もう一つ気になる候補があったのですがボツにしました。確認をしていたらPCの不安定な状況で起きていたような内容でしたので、取り上げませんでした。

PICその4

今日はPIC18F45K20のLesson1のプログラムのヘッダーについて確認してみた。
(01 Hello LED.cのLED点灯 XC8 Cプログラムのコンパイルが通るヘッダーがどれかをシラミつぶしにやってみた。)
《エラー画像の一部を載せました。》
イメージ 1
 エラーは:0: error: undefined symbols: シンボルの_TRISDが定義されないエラーのようだ。

全て一個ずつのヘッダーを有効にしてコンパイルしてゆくやり方です。やってみた結果は 下記の通りでした。
/** I N C L U D E S **************************************************/
//#include "p18f45k20.h"//NG このLesson1でのオリジナルのヘッダーはNG
//#include <p18f45k20.h>//ok
//#include <xc.h>//ok
//#include "xc.h"//ok
//#include <pic18f45k20.h>//ok
//#include "pic18f45k20.h"//ok
//#include <pic.h>//NG
//#include <pic18.h>//ok
//#include "pic18.h"//ok
//#include <htc.h>//ok
//#include "htc.h"//ok
// 上記のokはコンパイルエラーなし Warning※1があるが問題なし

《コンパイルが通った時のOutput表示》
イメージ 2

(※1:画像は省略したのでありませんが出ているWarningはコンフィグの不足でのWarningなので後から先のConfig Bits Sourceの吐き出しをコピペし全部準そろえればWarningはなくなるので、問題はありません。フリーモードでのエラーはバージョンアップしないとなくなりません。)ちなみ最新のMPLAB X IDEとXC8コンパイラ処理系でのコピペしたconfigのなかでのインクルードは#include <xc.h>でした。なお、1個一行ずつのコンフィグ表記なのでやたらと長いのでマルチに書かないとプログラムが長くなりそうだ。)

 インクルードの表記での””<>の違いがあまり無いかもしれない。通常のC言語の場合と、このMPLAB X IDE XC8コンパイルを比較するとXC8が区別がないように見える。IDE設定上の処理なのかはわからない。<>は標準で処理系が準備したプリプロセッサでのファイル読み込みで、””はユーザー作成のプリプロセッサのファイル読み込みの違いがあるが、XC8のIDE上結果は上記のとおりなんでもOK的な感がある。ですが、上記の結果よりインクルードは#include <xc.h>にしておくのが無難ではないか思います。
 xc.hのヘッダーを開いてみると処理系がXC8の場合は#include<htc.h>を読み込み追加している。なので上記の#include<htc.h>単独でもOKなのだ。なおこのhtc.hでは使用するコンパイラ毎のインクルードファイルの定義を行っている。表記をみるとコンパイラの種類はHI-TECH PICC/PICC-Lite compiler,HI-TECH PICC-18 Compiler,MPLAB C18 CompatibilityHeader,HI-TECH dsPICC compiler,HI-TECH C for PIC32 などが表記されている。
 内容が先になってしまったが、ヘッダーファイルを見るためのMPLAB X IDEの便利な機能を使って簡単にヘッダーファイルをナビゲートし閲覧できるのです。やり方は以下の通りです。

 ナビゲートしたいコードを選択し右クリックのNavigateを選び出てきたメニューのGo to Declarationをクリックするだけで、対象のファイルが存在すれば読み込まれ表示されます。

以上がヘッダーについてでした。オリジナルのインクルードではコンパイルエラーで動かないようになっている理由のひとつが少しわかったということでしょうか?
 プログラミングも大事だが、確認作業はもっと大事だぁー!


PICその3

イメージ 1

イメージ 2

イメージ 3

イメージ 4

イメージ 5

イメージ 6

イメージ 7

今日は、ブログが忙しい日となっている。というか、押しているというか連休第2の注文品が届いたので開梱包、写真撮り、写真編集、ブログ書きということです。暖かなうちにブロぐらなければということなのですが、今日はとにかく寒い日だ。部屋の温度制御が出来ないので、暑いか、寒いかになってしまう。ストーブをつけているのだが、つけるとすぐ真夏なみに30℃になる。がしかし、暑くてストーブの火を消すとアッという間に20℃ぐらいに気温が下がってしまう。外の温度をみると10℃である。あすもなんか寒いらしい。
 第2の注文品も丁寧な梱包である。注文のリストとの確認を無事すませた。今回の品は何なのかというと、PICkit3のDemoBoardで使用されているPIC18F45K20の練習をしているので何かしらDIPのもので試してみたいがためと、参考書として買ったPIC16F1ファミリ活用ガイドブックのなかで取り上げられているPIC16F1937の練習のためだ。またキャラクター液晶ディスプレーも練習用として購入した。特にC言語での液晶表示はサンプルプログラムがあったので後で試す予定だ。他は今回、PICの電源の種類が異なることが232Cインターフェースのレベル変換のところでわかったので、通常の5V用と3.3V用の2種類の液晶ディスプレーを購入してある。使うPICの電源にあわせるということです。Hi! また、電源用の三端子レギュレータも3.3V用を用意(PIC18F45K20用)他232CのインターフェースICも3.3Vでも5Vでも使えるということで、DM3202ANの2個入りを購入した。1個買うより2個のほうが単価が安くなります。単価200円ですが2個では単価150円なので通常400円のところ300円とお得のようです。他出力確認用にLED、また回路でよくつかう一般のスイッチングダイオード(50本入)、他コネクタ類を購入しました。後から思い出したのですが、注文し忘れたものが1点だけあった。液晶表示部と回路間の延長ケーブルだ。これは何かで代用して作ろうと思う。以上が注文品に関してでした。
 箱を開けるだけの内容では、今日やったPIC確認の内容がもったいないので、PIC12F675のXC8プログラムの検討について書いてみようと思う。PIC12F675の8PINのDIPなので見た目はたいして難しそうではないが、結構プログラムの中身はボリュームがあるように思える。これはサンプルの書いてある参考書の中身が詳しいのでそう思ってしまった。LEDの点灯、それから点滅、SW入力でのLED点灯、それもSWを押してオンになっているときだけの点灯、とSWを押すとトグル動作でLEDが点灯、消灯するという基本的な内容がとても大事だ。つまりSWを押したら何かをするという事をするための必須習得事項であると思う。
 プログラムはシミュレータで検討可能だが、回路がないので、買ってある小型のブレッドボードに回路を組んでみた。回路を組む上での注意というか失敗談として、配線の確認は必ずすることだ。ブレッドボードなので意外と線材が交錯してわかりづらいので間違いが結構起きうる。私も線材の接続ミスをしてしまって、気づかずにソフトがなんでもないのに思考錯誤してPICを何回も焼き直したり、無駄な時間を費やしてしまった。プログラムのミスが無くても配線のミスで動かないことの方がどちらかというと辛い内容だと思うので配線確認は是非とも行いましょう。プログラムのミス以上に重大なミスとなりえます。
 PICをプログラミングしてみて、いやサンプル確認してみてだが、やはり同じ系列もしくは改良を除いてPIC個別の仕様となるので他の仕様のPICについて同じ動作のプログラミングを組むには、PICの個別のデータシートを見て内容を確認する必要がある。そういう内容に対応するのがMAPLAB X IDEの startPageのDatasheetだ。クリックするだけでMicrochipのデータシートが探せて便利だ。
 プログラミング中のインクルードファイルに関してはコンパイラXC8については、現在<pic.h>と<xc.h>のみで問題なく動作するようだが、もう少しヘッダーの種類で確認してみたいと思っている。特にインクルードの<pic12f675.h>は使えないのか?ということがある。PIC18F45K20のサンプルでは<p18f45k20.h>のヘッダー種類で読み込んでいる。<p12f675.h>がどうかということだ。XC8コンパイラのときは<htc.h>は<xc.h>に変えてくださいとの事は確認できているので問題は無い。
 あと気づかなかったのが、回路を組んだブレッドボードに挿した中継用のワイヤの接触不良だ。これも厄介で差込端子が絶縁状態にあるものがある(何かビニールが付いたようなものがあった)これが原因か?とにかく線材の差込部端子もよく見て問題が無いことを確認する必要がある。
 PIC12F675のXC8コードに関してはのコンフィグ記述と各レジスタの初期化の設定が大切です。従来のコンフィグ設定(__CONFIG(....));ではなく #pragma config FOSC = INTRCIO などの形式にて記述する必要があるようだ。この各レジスタのコンフィグ設定は、MPLAB X IDEの中のメニュー中のWindow->PIC Memory Views->Configuration Bitsをプログラムコンパイル後に開いて、右下の方にあるGenerate Source Code to Outputボタンを押すと自動でOutputの小窓に書き出されます。これをコピーしてプログラムに貼り付けることもできます。プログラムで設定した内用も反映して書き出してくれるので案外と便利でした。他にも操作がいろいろあると思うが、MicroChip社の動画でのIDEの説明なんぞもあるようだったので、また見て操作も勉強したいと思う。

PICその2

今日は既にPICkit3デバッグエクスプレスのデモボードのLessonサンプル確認が終わったので、確認後印刷しておいたXC8のCプログラムリストを見て思い出しながら作成時のことを記そうと思う。

1.Lesson1のサンプルプログラムについて
初心者としてサンプルプログラムは単純に読み込み、コンパイルという作業ではじまる。私もこの初心者ルーチンを行い、PICの世界へ飛び込んだわけだが、何もエラーが起きませんようにと薄い期待をしながコンパイルする。ところが、予想を裏切ってエラーがでる。ここではなんでデモボードのサンプルプログラムが動かないんだ。とまず、恒例のぼやきを発せざるをえない状態でした。レッスン1ではDelay1KTCYx(50);でエラーが出る。mainルーチンではつかわれているがエラーが出るのです。これはDECLARATIONS にこのDelay1KTCYxの宣言がないので、次のように付け足して問題クリアだ。インターネット上でもこのディレーでエラーが結構出ている質問があったように思う。宣言は
void Delay1KTCYx(unsigned char); を付け足す。
思い出しながらなので、前後する内容もあるがあまり気にしないでもらいたい。とにかくコンパイルするまでの道のりがあったことを思い出した。サンプルプログラムをハードディスクにダウンロードして圧縮ファイルを展開した。最初は気にせずにMPLAB X IDEでLessonサンプルを読み込んでソースにインポートしてコンパイルする。だが問題があった。保存しているLessonプログラムの階層の文字に漢字やスペースがあっては動かないのです。特にスペースには参る。通常のパソコンのハードディスク上の階層には既にスペースが入っているDocuments and Settingsなどの階層が標準で構築されているからその下の階層にXC8のCプログラムデータをインストールしてしまうと、さあ大変、どうあがいてもエラーがでる。と言うことで、サンプルのLessonデータ群の引越しをしなければならない。私は単純にC:\上にMPLAB_Projectと階層を新たに作りここにLessonデータを全て移動しました。階層のみならずLessonサンプルのファイル名は同様に(01 Hello LED.c)スペースが2箇所入っているので、スペースをアンダーバーとかに変更するかファイル名をスペースのないものに変えるとかする必要があります。
なおLesson1をやるまえに全部のLessonを一通り読み込み単純にコンパイルできるかの確認を行った。エラーが出ないのは、確かLesson2のみだったと思う。それでこのLesson2をコピーし、Lesson1のプログラムに書き換えてみる事なんぞもやったと思う。特に最初にPICkit3のDEMO BoardのLessonサンプルはコンパイラがC18を使っているために新しいMPLAB X IDEとPIC18対応のコンパイラXC8では動かないことが多いということだ。諸氏もXC8をあきらめて旧C18のコンパイラでMPLAB IDEは旧バージョンに戻した方も多いと思います。 こうすれば各Lessonも問題なく動作するのだろう。しかし最新版(もう古いようだが)コンパイラのXC8、MPLAB X IDEがあるのにということで、何とかしたいのが心情なのです。試練の道がはじまったのか?といいますが意外と資料はMicroChip社のダウンロードにありました。XC8のコンパイラのユーザーズガイドの中にはXC8でのCのプログラム手法が詳しく書いてありました。ぜひともXC8のコンパイラのユーザーズガイドは見るべきです。おかげで各Lessonが全てコンパイル可能でエラー無しになりました。何時見るの?今でしょ!私のような初心者は是非ともダウンロードして、ながめて下さい。いつダウンロードするの?今でしょ! 少ない情報のなかでは、動くものにすがるのは至極当然です。Hi! PICの道のりは長いと思いましたが、なんとか調べてサンプルがようやく動いたら、何で動かないんだろうと悩んでいたことが、単純なことで、もっと早く気づかなかったのかと思うことがとにかく多い。しかしながら最新のコンパイラのXC8 MPLAB X IDEでのDemoBoardのLessonサンプルは最初から対応してもらいたいのが本音だ。ところで、他のPICの動作確認も行っているが、ソフトウェア作成だけでなく回路も作らなければならないので結構ハードに手間がかかる。ソフトだけで確認できるデモボードは配線しなくてもいいので超楽チンだ!

PICその1

イメージ 1

イメージ 2

イメージ 3

イメージ 4

イメージ 5

イメージ 6

イメージ 7

イメージ 8

イメージ 9

イメージ 10

イメージ 11

ブログの久々の投稿になります。なんだかんだでブログがごぶさたでした。5月病かなんなのか急に思い立ったのがPICなのです。なんでか?って言われましても何がなんでもPICなのです。以前から興味がありましたが、USB-IOなどの簡易ハードで十分にパソコン上のソフトウェアからの入出力制御が可能でした。しかしよく考えてみると、そこには必ず重たい箱、いやノートPCが必ずハードウェアとつながっているのです。すなわちハードがスタンドアローンではないのです。ハードが電池や別電源のみで単独で動かせなかったこれがPICでは簡単に言えばハード単独で動作可能なのです。すばらしい!と前置きはこれぐらいにして、5月連休に入る前にPICを使うための準備をしたわけです。まず第一に以前に買ってあるPIC関連の本を見て、解説で使われているPIC、ならびにインターネットでダウンロードしてシミュレーションで練習していたMPLAB X IDE 及び新規にフリーで提供されたコンパイラーxc8、xc16、xc32を使用できるMICROCHIPのPICkit3とDemo boardのDEBUG EXPRESS、それとPICkit対応ICSP書き込みアダプターキット、回路をつくるときのミニブレッドボード、ほかセラミック発振子(10MHz)をインターネット通販で注文しました。な、なんと注文した次の日に佐川急便にて届きました。通販センターは埼玉県八潮市からここまで夜通し走ってきたのか?びっくりした。当然2,3日はかかると思っていたが、現在の物流関連のスピード化のすばらしいこと、この上ない喜びが味わえた。通販に病み付きになりそうです。財布の紐を締めないといけません。hi!
 upした写真の説明、佐川急便の荷物と梱包を開いたときの状態(とても丁寧に新聞紙で包んである)、中身を並べて不足がないかチェック、と注文リストです。それと最近購入した本(PIC16F1活用ガイドブック)と参考にしている過去購入のPIC参考書籍です。どうでもいいことだが、最近買った本は初版が未来の日付であるから驚いた。今日は5月1日、この本の初版は2013年5月15日 初版 第1印刷発行となっている。ちなみにこの本はXC8用のMPLAB X IDEの使い方も書いてあるので、とても役に立つと思う。ダウンロードしてから思考錯誤しながらこれはどうするのかと時間をかけていたことが、この本をみれば操作を考えずにプログラミングに専念できること間違いない。特にXC8関連のことがインターネットでも極わずかしかないので、この本があるとホットすると思う。内容についての感想としては例題のサンプルが載っているが、他の必要なプログラム(ヘッダーとか他のcのプログラム)も全て載せているわけではなく、読者の向上を促すべく、ポイントをまとめて自分で作成させるように仕向けてある。いわゆるコピペで終わらせない。本の中の話ではコピペで簡単に使用できます。だが、実際はここに作成例があるから、他のものも同様に自分で作成してください。なんとありがたい必要な不親切なのです。とはいっても今時インターネットをぐぐると答えになるサンプルが、でてくるわけですが、ととにかく考えたり、調べたり、探したりとコピペのみでは終わらないということです。
 もう5月1日になったので、デモボードでのソフトウェアのサンプルの動作確認を全て終えて、注文していたPICkit対応ICSP書き込みアダプターキットを作製してみた。これはキットといえ、主にソケット類の半田付けだけです。RCパーツも2点ありましたが。完成したという喜びは余り感じないキットです。がしかし実際に使い始めると喜びが沸くものだと思っています。、
 またPICにのめり込んだついでに、特にやって行きたいこと、知りたいことは、A/Dコンバータ、232Cなどの通信、SWの検出、液晶ディスプレーの制御などがある。またソフトウェアで使うC言語コンパイラーのxc8の使い方などである。
次回は既に動作確認を終えたつもりのデバッグエクスプレス用PIC PIC18F45K20のソフトウェアLesson1からLesson12までのxc8コンパイラでの四苦八苦談か何かを書きたいと思います。
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
  • ライブドアブログ