フォトアルバム

最近のトラックバック

Powered by Six Apart

2013年2月18日 (月)

【検討】気圧計について

反省は反省として、次の段階として、今後どうするのか?を考えてみます。

 

1.持ち運びのできるものを考えてみる

 

気圧計というよりも、高度計になるのかも?でも、登山とかはしないけど(汗;)。ねむいさんは、元気だなあ。

 

(1) おもいつくまま、ハードウェアの仕様を考えてみる

 

・ 最大1-2日程度単位での使用を想定します。

 

・ 電源は、Li-ion電池が、使い勝手が良かったので、使用します(1セル/3v7 - 500mAh)。ACアダプタ(5V)での併用可能にします。

 

・ 気圧計は、SCP1000を使用します。

 

・ 外で使用しますので、太陽光を通さないようなケースは必須になります(太陽光は、SCP1000のノイズになります)。

 

・ 簡易グラフィック機能。やはり、目で見られるのは、良いです(流石、がた老さん&それをぱくった私;;)。QVGAでは大きすぎますし、I/Oポートも一杯使用しますので、SPI制御の小型液晶(死蔵のカラーTFT使用予定)を使用します。尚、非常に電気を食いますので、通常は、オフにしておきます。

 

・ 記録は、外部のEEPROMかフラッシュメモリを使用します(巨大なリングバッファとして使用します)。

 

・ RTCは、無しにします。でも、あまりにも誤差が酷いのなら、もしかしたら、つけるかもしれません。

 

・ しゃべらないけど、ポートを利用した、簡易サウンド機能を付けた方がいいかも?

 

・ UARTでパソコンにデータを送れるようにします。デバッグにも使えますし・・。

 

・ 操作は、2~3個程度のボタン等で行います。場合によれば、ボリュームでグラフスケールの変更も行うかもしれません。

 

・ 周辺への電源オンオフは、マイコンで行います。外部メモリと気圧計と(とTRCと)で、1つ。TFTは、別にもう一つとします。

 

・ メイン基板に、全ての周辺装置を実装し、少しでも薄くします。

 

・ マイコンが未定です。作る時期も未定です(汗;)。

 

・ そういえば、GPSはどうするのだ?

 

 

 

(2) こんな感じのソフトにしたい

 

・ 電源のオフは、スリープで代用します。

 

・ 通常モードと連続測定モード(メニューで選択)。 + AC駆動、バッテリー駆動(電圧値で判断)。

 

・ 連続測定モードは、約1秒~1分間隔での測定を行います。マイコンのバッファが一杯になったら、外部メモリにバックアップします。

 

・ カラーTFTは、バッテリー駆動時は、ボタンを押下した時に、10秒程度つきます。その後は、オフにします。

 

・ 時計の整時機能。

 

・ パソコンへのデータ転送機能。

 

2

 

 

次回、 2.据え置きタイプの再々再々検討 に続くかも?

2013年2月15日 (金)

【AVR】未完だけど現状の気圧計を反省し、次につなげる

昨年秋に、完成度は、低いながらもハードウェアは一応できたものの、ソフトウェアとケースとが、まだできていない、「見せて、しゃべって、触れて、踊れない、気圧計」について、いちゃもんをつけたい。

 

ほんまに、あかんやろうと思っている部分。

 

(1) 自分ながらも恥ずかしくなるような大きさ。縦横は、仕方がないとしても、高さが、あまりにも高い。実際に計って見ると、60㎜もある!(高い理由は、後にも書きます)

 

→ でかずぎて、よさそうな市販ケースはない(自分のケーシング技術の無さは、おいておく~汗;)。

 

(2) 結構不安定。特に、TFTの配線関係とISPの端子部分のハンダ付けに問題が多い。ISPなんかは、0.5㎜のメッキ線部に問題があったりしました(笑;)

 

→ TFTへの配線もUEW線部分はOKなんですが、何故か、メッキ線が悪いです。ISPは、端子をL型にして、基板の内側に入れた結果、基板側がういてしまっているのが原因です。うかさないと、ライターとの接続ができないっていうのもありますが。

 

(3) 今回、周辺回路への電源供給の制御をマイコンで行っていますが、μSDカードへの電源オンオフが、うまくいっていません。因みに、TFTのバックLEDの制御(オンオフ並びにPWMでの制御)は、大きな問題はありません。また、μSDカードを除く、周辺全体(TFT with Touch panel用IC/ RTC / 音声合成用マイコン / 電波時計/気圧計) の制御も、問題無いので、悩ましいところです。

 

→ とは、いっても、周辺装置が無茶苦茶電気を食うので、リストラする必要があります。特に、カラーTFTと音声合成用マイコンは。

 

(4) 電波時計のアンテナの固定ができていないので、つけると、アンテナ線をきってしまうことがあった。ので、普段は外していますww。

 

(5) RTCとか気圧計が、勿体ないので、滅茶高いICソケットにとりつけている。更に、RTCのバックアップ電池が、立っているので、余計高くなっています。

 

(6) ACアダプタのメスソケットをマイコン基板の裏につけてしまい、これが、また,高い理由になっています(汗;)。

 

(7) TFTにタッチしてスライスをすると、過去のデータを見られるようにしていますが、その直後、SDへのデータ書き込みができなくなることがある。

 

→ 原因不明。対処方法は、ログデータをパソコンに取り込み、前のデータのファイル名を替えます。さらにパソコンに取り込んだデータを再度SDに書込めば、OKになります。

 

他に、思いついたら追記します。

 

すんさん掲示板に書かせて貰っている、youtubeの動画をこっちにもはっておきます。

 
 

 

 
 

 

 

現状のプログラムやデータや仕様(エクセル)や回路図

Mega128B_WR_a.zipをダウンロード

---------------------------------------

思いっきりタイトルがバグっていたので、修正しました。

2012年11月 5日 (月)

C言語に関わるささやかな疑問(1)

電子工作を趣味としてから、C言語をさわりだしましたが、まだまだ判らない事が多くて・・・。

自分で組んでいく上では、ググりながら、入門HPをみれば、ある程度は判るようになりましたが、人様のプログラムを読んでいると、「何?これ?」と疑問がでることが多多あります、

その中で、最近知ったもの2つだけ。知っている人は、当たり前のような話しだったりします(汗;)。

 

(1) sizeofにかっこは要らないの?

Cコンパイラの場合、intが使用するマイコン(というかそれを処理するC/C++言語というべきか)によって、16ビットだったり、32ビットだったりします。

意識しないで、uint16_tとか、uint32_tのように、明示的にビット数を定義すれば良いのですが、やはり、intが何バイトか知りたいときに、

sizeof(int)

で、しらべています。

文字列の長さを調べる時は、例えば、

sizeof str

sizeof(str)

と、かっこ()無しでも、ありでも、文字列長が分かります。

そこで、同じように、intの長さをかっこ無しで、

sizeof int <---ダメ!!

と、すると、コンパイルエラーになります。

だからなんなの?って思いぐぐってみたら、wikipedia(http://ja.wikipedia.org/wiki/Sizeof)に、書かれていました。

データ型の大きさを求める単項演算子」だそうです。関数じゃなかったんですね(汗;)。関数だと思っていたのが敗北原因でしたorz。

幸い、つい最近、部屋から、「プログラミング言語C 第2版」が、発掘されたので、調べてみました。

 sizeof  オブジェクト

 sizeof(型名)

と使うのが、一般的なようです。

 

(2)  …って何?
去年、STBee(ARM)を触っていた時に、困ったのが、printfでした。AVRやPICのGCCだと、問題なく、printf(やsprintf)が、使用できたのに、Sourcery CodeBench Lite
だと、定義されていないので、コンパイルエラーになってしまいます。色々な人にアドバイスを受けたのですが、やはり自前実装は、私には無理でしたので、人様の作成されたものを使わせていただいております。

ところで、組み込みで使う場合多くは、小数点演算を回避して、整数演算で流用できることが多いので、ChaNさんのxprintfを使用させていただくことが多かったです。その時に、xprintf.cを見ていると、例えば

void xfprintf (                               /* Put a formatted string to the specified device */
    void(*func)(unsigned char),   /* Pointer to the output function */
    const char*    fmt,                   /* Pointer to the format string */
    ...                                              /* Optional arguments */
)

と、最後の引数で、まるで、続き記号のような.”...”が使用されていました。どうやら、こういう書き方をしたら、引数を省略できる他、何個あるか判らない引数の関数でも作れるんだなあ・・と、感心しました。

実際に、プログラムを組むと、中身がほぼ同じでも、引数が2つのもの、3つのも、4つのもの・・・・と、色々出てきて、今までは、一々関数を作っていたのですが、この書き方だと,一つの関数で、できそうだな・・・っと思い、よく調べもせず、1年が過ぎました(汗;)。

ということで、今回気になって調べたら、K&Rに載っていました。「可変引数リスト」と呼ぶそうです。索引で”...”を検索すればでてきました。printfのミニ版を作るというサンプルがありますので、実際に使用する時の参考になりそうです。

2012年10月16日 (火)

【電子工作】雑多なメモ

小学校の運動会や区民体育祭も終わったのに、PTAの広報誌を作らないと駄目だったり、児童会の会計の雑用とかもあったり、子供の宿題のフォローが必要だったりと雑用が多くて手が回りません(涙)。

 

1.LCD関連

AITENDOで

4.3インチ液晶モジュール(TP/SSD1963付) [LCD043TP-SSD1963]

http://www.aitendo.com/product/5417

と、液晶コントローラモジュール [CB-SSD1963]

http://www.aitendo.com/product/5415

を購入しました。下のコントローラだけでも良かったのですが。QVGA以上の物を使いたかったという単純な理由の他、以前mbedでやって中途半端に終わっている、VGAモニタ用のLCDコントローラとして使いたいという理由もあります。

 

2.FPGAとかFTDIとか

秋月で、MACHXO2-1200ZE 評価ボード

http://akizukidenshi.com/catalog/g/gM-06174/

を購入しました。USBケーブルでPCと接続をすると、自動的に、Lチカを始めます(8個のLEDなので、豪華ww)。

FT_Progで、FT2232HLを見てみましたが、よくわかりませんでした(汗;)。元々、FT_Progを使うのも初めてでしたので・・・(汗;)。

尚、デバイスマネージャを見ると、「USB Serial Converter A」と「同 B」で、認識されています。

FTDI

 

ついでに、死蔵していたUM232HをUSBで接続しました。単品で接続したのですが、罠にはまってしまいました(汗;)。

USBからの+5vをチップに供給しないといけないのですが、されていませんので、うんともすんとも言いません。基板に搭載されている、POWER LEDも点灯しません。勿論PCにも認識されていません。あたりまえですが、USBコネクタをPCにつけただけという状態と同じなので、認識する方がおかしいですが(汗;)。詳細はデータシートに書かれていますが、5VD端子とUSB端子にジャンパーチップを入れれば、通電しますので、使用でき、FT_Progで使用できるようになりました・・・・って、今更の話しですね(汗;)。流石に、今回は、全然無反応すぎでしたので、初期不良だとは思わなかったですね(汗;)。

 

と、上の3つは、実験したいこともあり、触りたいのですが、とりあえず、今作っている気圧計&時計&音声合成をやってしまわないと、心が落ち着きませんので、こっちからやっていく予定です。

今のところ、RTOSは、使うのが難しいような感じですので、自前で、簡単なイベント・ドリブンのプログラムにする予定です。

詳細仕様はまだ無いですが、今回のものは、スピード的にはあまり問題はありませんが、割と多くのデバイスがつながっていますので、それをうまく処理していかないと、プログラムがぐちゃぐちゃになってしまう可能性が大です(汗;)。賭けても良いorz。

2012年10月14日 (日)

【AVR】気圧計・電波時計等の仕様作成と単体機能試験をする(3)

(承前)

元々今回のブログのエントリーは、最終仕様を決めるために、少しでも整理をしないと忘れてしまうので、書き出しているのですが、かなり時間がたってしまい、最後まで作る気力が消えかかっています(汗;)。

既知の問題点とか未実施項目とか

を書こうと思っていたのですが、あまり後ろ向きの事を書くと、ますます、作る気がなくなってしまいますので、今後の方針をだらだらと書いていきます(汗;)。

 

今後の方針

・ いくつかの問題はあるけど、ハードウェアは現状のままにしておきます

・ソフト\ウェアは。できれば、フリーのRTOSを導入したいのですが、ちょっと調べた限りでは、めんどくさそうなので、自前の簡易なタスクスイッチャーにするかも

・かなりでかい(特に高さが高い)のですが、簡単なケースにいれたいと思っています(SCP1000は太陽光に弱いってこともあります)。

・画面デザインとかフォントとかアイコンとかを作る予定です。今使っているフォントは、ADCレコーダで作ったものです。

・後になりますが、関連URLをまとめておきます。今回ペリフェラルが盛りだくさんで、かつ、色々な人のHP等を参考にさせて頂いておりますので、いくらGCCな人が多いとは言え、仁義にかいてしまいます。

あまり色々と書くとできなくなるので、この辺にしておきます(汗;)。

そうそう、現状のハードウェアの写真を撮っていませんので、後でこのページに貼っておきます。

 

関連URL

工事中です

2012年10月11日 (木)

【AVR】気圧計・電波時計等の仕様作成と単体機能試験をする(2)

(前回までのあらすじとか補足とか)

eo標準のブログ編集機能が、従来のテキストエディタ/フォームから、リッチーテキスト・フォームになりました。それはそれで良いのですが、保存をすると、空の改行を削除してしまい、それを修正するためには、HTMLエディタに切替をする必要があったりして、当該行を探すのも大変で、非常に効率が悪いものになってしまいました。さらに、カーソルが消えてしまったり、入力した文字が画面に出てくるのに異常な時間が、かかったり(ブラウザchromeの問題かも?)・・・そんな訳で(ry

と、いうことではなく。

気圧計については、USBに簡単に接続のできるタイプのものを作っていた(http://shuji009.blog.eonet.jp/default/2012/07/1-39da.html)のですが、スタンドアローンで使用できるものを作りたく、今回のプロジェクトを立ち上げ。色々な実験を進めていく中、どうせ作るのなら、「なんでもいり」のヘビー級のものを1つ作ろうと、始めたわけでした。

マイコンは、当初予定では、ATMega328Pだったのですが、流石にポートが足らないと、Mega644P(1224P)も考えて検討しましたが、それでも、ぎりぎり足らない・・・そこで、かつて最重要パーツとして購入し、ピッチ変換基板にハンダ付け済み(ただし、90°間違ってハンダ付けし、失意の内にパーツ箱の奥にしまっておき、購入したことすら忘却の彼方にいっていたATMega128(以下「M128」と記します)を使用することにしました。流石に64ピンもありますので、充分とはいえないまでも、ポート不足にはなりませんでした。それでも、問題はあります。M128は、5vでの動作を保証されたマイコンです。今回SDカードをはじめTFT、電波時計などは、3V3での動作の物が主体になります。

そこで、最初に簡単なプログラムを組み、M128に入れて、水晶を何種類か変えてみて、3vで動作するかどうかを調べてみました。結果的には、20MHzでも動作しますが、24MHzでは駄目でした。そんなわけで、今回は、16MHz/3Vでの実験になります。実際のところ、TFTへの表示以外は、高速性は不要なので、内蔵の8MHzでも良いとは思うのですが。

 

単体試験(続き)

表示速度を見てみました。バッファを経由して、いつものQVGAサイズの16bitベタファイルを表示させています。

SDアクセスがSPIで、SDからの読込み用のバッファも512バイトしかとっていないので、思いっきり遅いです。

(4)SDの電源コントールではまる(未解決)

ChaNさんのFatFsを移植された方ならご存じと思いますが、サンプルプロジェクトのAVR版(等)では、SDの電源供給コントロールをmmc.c内で行っています。今まで、やったことなかったので、私もやってみました。

そして、見事こけました(涙)。今回ブログを書いて気がつきましたが、この時の記録が全くありません(汗;)。いい加減な記憶しかないのですが、起った現象を記載しておきます。

① SDカードを入れておいたまま、マイコンへプログラムを書込もうとするとエラーになる。

これは、電源コントールをせず、かつ、マイコンとライターのISP接続が、MOSI、MISO、SCKを使用している時は、起っていました(最初SDがネイティブモードで動作するため)。今回は、MOSI、MISOは、未使用ですし、SDへの電源供給も止っています。SCKが共通で悪さをしているのは間違いないのですが、マイコンのSD電源オンオフに使っているポートが、リセット直後は入力モードかつオープンドレインのため不定?になっているので、どうもその対策がいるようです(よくわかっていませんの、間違っているかも)。

②オープンドレイン対策とSCKの配線をプルダウン(プルアップでない理由というか、ChaNさん推奨プルダウンの意味が、今回のケースでは判った気がします)にしました。これでISP書込はできるようでした。

③ところが、実際にプログラムを動作させると、SDカードによって認識できなくなってしまいました。東芝のSD(HC)カードは2枚ありましたが、駄目でした。Transcendは、OKでした。

調度、この頃(9月20日頃)子供の運動会がせまっていた次期でもあり、PTAの広報で、広報活動をする必要もあったりして公私ともに忙しかったので、SD電源のコントロールは、今回棚上げして、部品を取り外し、元に戻しました(完全敗北)。

後日、先人様の回路を参考にしなおして、やり直す予定です。

 

(5)RTC(DS3231)をI2Cで使う

ハードウェアI2Cを使用しますので、そら。さんのi2c.cを使用させて頂きました。

流石に大きなトラブルは無かったのですが、先に、電波時計をやっておかなかったので、二度手間になってしまいました。

また、C言語の理解不足から、ポインタ渡しと即値渡しを間違えてしまい、どんくさい失敗もしました(汗;)。

(追記 2012/11/22)実は、そら。さんのプログラムの本質を理解せずに、コンパイルエラーが無い程度の使い方をしていたため、後日はまりました。

 

(6)気圧センサ(SCP1000)の試験

これは、SPIですが、今回は、このセンサー専用ポートにしました。ハードSPIは、SDで使用しましたので、ソフトウェアSPIにしています。前回実験したときは、ハードウェアSPIでしたので、その部分の書換えを行いました。また、元々のプログラムが今一つわかりづらいので、リファクタリングしてやれ・・・と意気込んだのですが、CSBの取扱いで、見事はまってしまいました(汗;)。判っていたのに残念です>自分。

具体的には、初期化プログラムで、チェックサム照合があるのですが、

(a) コマンドを送る

(b) ステータスを読む

という一連の動作をするときに、(a)で、まずCSBをL(0)にしてからDATARD8コマンドを送る。CSBをH(1)にする。(b)でCSBをL(0)にしてから

STAUSレジスタを読む。CSBをH(1)にする。

としていました。

何が駄目かと言いますと、(a)の最後に「CSBをH(1)にする」にしていたことだったりします。レジスタ(データ)を読む動作をする場合は、レジスタ(ステータス)を読み終えるまでCSBを0にしたままでないと駄目でした。因みにこれは、今回のエンバグです。

そんな訳で、プログラムのリファクタリングはできていないどころか、改悪状態になっています(汗;)。

しかし、今回、プログラムを点検したお陰で、初期化プログラムに元々あったバグは、修正できました。

 

(7)電波時計の実装

予定では、60kHz/40kHzの切替版を使用し、JJYシミュレータ(使用)をデバッグ試験で使う予定でしたが、どうも、使用しているスピーカが調子が悪くて40kHzを出してくれないことが判ったので、結局、生のJJY60kHzを実際にうけるように、変更しました。

尚、真夏の時は、工作部屋での受信ができなかったのですが、現在は、部屋の真ん中でなら受信が可能になっています。

流石に、大きなトラブルはなかったのですが、C言語の演算子の優先順位を勘違いしたため偶数分なら時間があっているのに、奇数分だと時間が1分ずれるというバグを発見しました・・・前にやったときは。全然気がつかなかった元々のバグでした(汗;)。

こんな感じです

間違い #define BCD_MT    ( M40<<6 | M20<<5 | M10<<4 | M8<<3 | M4<<2 | M2<<1 + M1 )

正解 #define BCD_MT    ( M40<<6 | M20<<5 | M10<<4 | M8<<3 | M4<<2 | M2<<1 | M1 )

orz級のバグでした。

この時のデバッグ画面です。フォント等はPCMレコーダからのもので仮のものです。

Hi3g0106kkk

 

(8)音声合成ATP3010F4をI2Cで使う

当初予定では、UARTを使用する予定だったのですが、今回あまりにもトラブルが多かったので、新しいハードウェアの設定が面倒になり、I2Cにしました。

実際、U(S)ARTにすると、今回のM<128のISPがUSARTポートを使用しているので、この線を切り離しておかないと、ISP書込ができないこも確認しています・・・切り分け端子も付けたのですが、一々ISP書込の度に切り分けたり戻したりは面倒だったということもあります。

で、ここまで試験をしました。

音声合成は、実際に組み込むと、予想以上に面白いです(笑)。

 

2012年10月 9日 (火)

【AVR】気圧計・電波時計等の仕様作成と単体機能試験をする(1)

(承前)
死蔵していたATMega128(以下「M128」と記します)でありましたが、使い道が見つかった夏の日でした。
正直な話し、M128に、QVGAのバッファメモリ付TFTが、外部メモリーとして接続できるとは、全然知りませんでした(汗;)。直接的には、「妥協の電子工作」さんのTFTの実験記事で知りました。
後々考えたり、関連で読んだそら。さんのブログや以前SH-2Aでのバッファメモリ付QVGA接続でもやりとりをしていたのに、今の今まで気がつきませんでした・・・・更に、STBEEでは、FSMCで外部バスにTFTつなげていたのに・・・・orz。
とにかく、I-Oポートではなく、メモリとして扱えるM128は、なんて素敵!と思い、春先からやっている、気圧計、夏からやっている電波時計・・・・を組み合わせた、スタンドアローンの、ヘビー級の気圧計を作ることにしました。

仕様を決める

(1) 電源
携帯電話とか携帯ゲーム機とかは、昔から実現していますが、充電池を使用し、ACアダプタをつけていても使用も、充電もできる・・・ってやつを作りたい。ということで、この夏に実験していた、Li-Ion電池(1セル)用の充電専用IC「LTC4054ES5-4.2#TRPBF」を使用します。
また、持ち運びを考慮して、ペリフェラル電源のオンオフをマイコンでさせます。また、バッテリーは、発火するおそれがあるので、マイコン内蔵のADCで監視させます。
今のバージョンでは、個々の機器の電源供給のコントロールは、できていません。
SDを除くペリフェラル全部とTFTのバックライト用LEDのオンオフ(+PWM)位です。後述予定ですが、SDカードのオンオフは、今のところ、できていません(涙)。

(2)表示装置とタッチパネル
上に書いたように、今回の大きな目的の1つは、M128の外部バス利用ですので、表示装置は、QVGA(240w x 320 H/16bit color)を使用します。
実際には、Aitendoの「2.4インチ液晶モジュール(TP付き)[M024C9320TP] 」を使用しました。タッチパネルとSDカードがついています。内蔵コントローラチップILI9320です。デモコードは、STM用が公開されています。
ただし、SDカードは、当初使う予定でしたが、結局使っておらず、別にマイクロSDカードスロットを取り付けました。
タッチパネルは、タッチコントローラチップXPT2046をソフトウェアSPIで使用しています。このチップは、ADS7843の互換品(コピー?)とのことです。

(3)気圧計(温度計)
SCP1000にしました。ポートの関係で、ハードウェアSPIではなくて、ソフトウェアSPIを使用しています。
MPL115Aに比べて。精度はいいし、計算も簡単ですが、値段が高いです。

(4)時計関連
Aitendoの電波時計を使用して、別のRTCの整時を行います。
別のRTCは、MAXIMのDS3231を使用します。I2Cインターフェースです。温度補償水晶発振器(TCXO------Temperature Compensated  Crystal Oscillator)を内蔵した、とても精度の良いRTCで、2年以上前、すんさん掲示板で話題沸騰になっていたものです。
尚SPI版なら秋月で扱っています。
このRTCなら、特に電波時計で合わさなくてもいいような気もしますが・・・・(汗;)。

(5)SD
ログの記録としてSDを使用します。TFTについているSDスロットは、カード検出ができない(ライトプロテクトもできないのは、いまずもがな)、電源がTFTと共通、ラインにダンプ抵抗(?)のようなものが、入っている・・・と、使い勝手が悪いので、結局別にマイクロSDスロット(秋月の変換基板付)にしました。
ログを取る以外にも、漢字フォントやロゴ等のデータを収納して活用する予定です。
今回は、ファイラ(ChaNさんの「FDのようなもの」)は、実装するかどうかは未定です(汗;)。

(6)音声合成
音声合成チップTM3010F4(ATMEGA328P)を使用して、気圧や温度等を読み上げるようにしたい。
そいうえば、昔ガリレオ7さんに、お邪魔したときに、Arduinoで気圧などをしゃべっらせていたような・・・(汗;)。


単体試験

(1) TFTを試験して、はまる
基板を組む前に、実際にTFTが、表示をしてくれるかどうかの試験をおこないました。
恥ずかしながら、QVGA液晶は、今までに何回も使用していますが、全て16ビットモードでの使っており、今回8ビットモードを使うのは、初めてでした。
見事、一発で、こけましたorz。
全く、表示してくれません。試験は、M128の変換基板とTFTとをジャンパー線で直結する形でおこないました。
勿論TFTのIM0を仕様のように、グランドに落として(いるつもり?)の8ビットモードでの試験です。
尚この時点では、外部バス方式ができることを知らなかったので、通常のI/Oの接続で、試験を行っていました。
最初は、初期化プログラムを疑っていましたが、よく分らず。次にTFTの初期故障を疑ったり・・・。
仕方ないので、16ビットモードにして、ジャンパー線を追加したところ、動き出しました(汗;)。
とりあえず、TFTは、問題無かったので、次に進みます(いいのか!)。
この後、「妥協の電子工作」さんのページを改めて見ると、外部バスで使用できる等の情報を得たわけです。感謝です。回路図も見てみますと、未使用のバス(D0-D7)を、グランドに落とされておられましたので、ユニバーサル基板では、そのようにしました。またIM0もちゃんとショートさせましたところ、外部バス&8ビットモードでも、問題無く表示ができました。
尚、基板を作っての最初の試験は、TFTバックライトLEDのLチカです。ペリフェラルに電源を供給、LEDをチカチカさせました。これは、簡単でした(が、まさかの落とし穴が・・・)。
次に、いつもの画面クリアを実験しました。

(2)タッチパネルでも、はまる
タッチパネルは、今までに、mbedとSTBeeで使用したことがありますが、AVRでは、初めてで・・・(ry
はまったのは、キャリブレーションプログラムです。
簡単な3元の連立方程式を解けば、校正に必要なパラメータが、得られるのですが、それができなかったorz。C言語の理解不足ですねえ・・>私。
仕方ないので、現状は、パラメータを別途計算したものを使用しています。
Touch_afo
コミックも最終巻でました。
 
Touchusui
薄いなー
 
現状は、1ポイント10回読み取り、最大値と最小値をオミットして合計したものを8で割っています(実装は、10全て合計後、最小値と最大値を引き算した結果を、右3ビットシフト)。
今のバージョンだと処理(小数点計算と思います)が重いのでタッチペンをスライスしても点がつながってくれません(汗;)。

(3)SDでもはまる(あほうが-->orz)
今回、はまりすぎです。まさかのFatFs移植ではまりました。
これが、一番きつかったです。ロジアナつかいまくって、試験プログラム書きまくって・・・
でも中々判らず。
原点に帰るって訳で、main()を最初から追ってみたら、あっさり原因が判りました。
上で最初の試験でTFTバックライトLEDのLチカをやっていたのですが、そのルーチンの中で、PORTBの方向レジスタ(DDRB)をさわってしまっていたのが原因でした。
具体的には、IOを初期化ルーチンが最初に呼ばれ、SDのMOSI/SCK/CSを出力に設定していたのを、バックライトONにした瞬間に、方向レジスタをLED以外、0(入力)に再設定してしまったのが原因----->あほうが-->orzとなった訳です。
修正したら、嘘のようにすっきりしゃっきり動作しました(これが当たり前ですが)。

途中のデバッグで面白い?バグを出したので、その動画を貼っておきます。

(続く)

あまりにも、ブログエディタが使いにくい(怒!)。

そんなわけで、改訂しまくる予定です。

とりあえず、MicroSoftのWindows Live Writerを使用してみます。

2012年8月24日 (金)

【AVR】ありゃ?こりゃあ!?がっくり orz・・・でも復活(ATMEGA128の話)

AVRを触って、はや丸3年。途中、PIC、H8SX、SH-2A、FPGA、mbed、STM32F等への浮気もした(男の甲斐性だ・・・嘘;)が。

この数ヶ月は、再びAVRを触ってきているのですが、随分前に購入したATMEGA128が、死蔵されていました。
TQFP64ピン(0.8㎜ピッチ)のマイコンで、ハンダの練習を兼ねて、DAISENの変換基板につけていますが、おおぼけして、180°反転して取り付けていた・・・(涙)。技術力があれば、付け替えていたのですが、当時は、外す自信もなく放置していました。
今回、検討中のプロジェクトでは、一杯周辺がつくためMega644(1284)でも、ポートがたりないかも?っていう状況でしたので、死蔵&不良のMega128を使っての実験をしてみようとしたのでした。
大きめの基板をMCU基板ということで、何も考えずに、ハンダ付けをはじめました。

1.最初の失敗
通常、ユニバーサル基板にハンダ付けをする場合は、部品配置、配線について充分検討を行ってからする必要があります。今回していません。
更に、ハンダ付けの順番は、まず、グランド線、次に電源線のハンダ付けを行っていく必要があります。今回していません。
結果は、非常に時間が掛ってしまいました。1日半位。普通なら半日仕事です。
段取り八分といいますが、段取りほぼ0は、地獄への道だと思いました。でもまだまし。

2.導通の確認
導通の確認は、やはり必要なので、導通と短絡の確認をしましたところ、数箇所短絡していました。
今回のハンダ付け箇所かな?って思ってよくよく調べてみますと、変換基板につけた2年半くらい前にMega128側のピンをショートしていたのが原因でした。よくみると、MCUの1面のピンと変換基板のランドとが、少しずれていて、ハンダでショートしていましたorz。

3.ISPで読めないのです
ISPへの接続は完璧に行ったつもりでした。AVRISP mkIIのインジケータであるLEDは勿論グリーンです。
ISPは6ピンでMISO,MOSI,SCK,RESET,Vcc,GNDの6ピンです。データシートで確認して接続しました。でも全然駄目で、読もうとするとエラーになって、配線を確認しなさいと・・・。
困ったときのGoogleで、ググったところ、なんとか判りました。
SCKは、そのままでOKなんですが、MISOとMOSIは、シリアルのTXD0とRXD0を使う必要があったのでした・・・ちゃんちゃん。
実際、データシートを確認して判りました。これって常識だったんでしょうか・・・・orz。
配線を変更したところ、見事に読めました!
心のどこかで、万歳の声が(笑;;)。

4.何故か再び読めなくなった
で、調子よく・・・とは行かず、FUSEを触っていると、何故かFUSEとばしをやってしまいました(大泣;_;)。
何故か?正直わかりません。推測はできますが、推測しても治るわけでもないし。
はてさて、どうしようか?と思い、データシートをぼんやりと眺めていると・・・

「 え えええええ!」

Mega128って5Vなの?
3V3じゃないの!?
今回、3Vを予定していますので、こりゃだめじゃん。
ってことにして、この件はなかったことにしようかな?と思ったのが、昨日の昼過ぎでした。
しかーーし、この2日間をムダにするのもどうかなあ?と思って、昨夜、こどもが寝てから、再びデータシートをみていると、いわゆる、パラレルライタならなんとかなるってことに、今更ながら思い至った訳です。
幸い、Arduino用のHVRescue Shieldを作成していますので、それでFUSE復活ができないかな?と思い、ピン配置をデータシートやChaNさんのHPや、HVRescue ShieldのHPを見て、勉強しました。
結論からいえば、HVRescue Shieldの28pinとMega128のパラレルライトの信号線は、過不足なしで使用出来ることが判明しました。
昨夜は、エクセルで、簡単な結線図を作成するにとどまりました。流石に、夜中に作業をすると、ミスがでまくりますので、今日の午前中は時間がとれるので、さきほどまでやっていました。

んで、なんとか復活した次第です。
Haisendayo00
data線の一部は、未記入です。


Hi3g0080
ジャンパー線をとばしました。

Com12
やはりFUSEはとんでいました。

とりあえず、治ったので、実験するかなあ。
それとも、もう一つの本気のARMのほうが、無理がないかな??

2012年8月19日 (日)

【雑感】非電子工作

バキが終わったなあ。

正確には、メインテーマの父親の範馬勇次郎と親子喧嘩が終わったんだけど、サイドストーリーは、まだまだ未完状態。
取り分け、ボクサーになった(?)烈 海王と世界最速男でもあるボクシング4団体統一王者ウィルバー・ボルトとは、出会っただけで終わっていて、対戦をイメージさせつつ、親子喧嘩がはじまってしまったので、中途半端になっています{笑;}。 当該の今週号は、旅先の和歌山県のコンビニで購入したんだけど、次作は、自衛官時代の話しになるようで、正直ちょっと残念・・・というか、次号は購入予定だけど、それ以降はチャンピオン買うかなあって感じ。現在、唯一定期的に購入している週刊誌なんだけど(汗;)。
{2012年8月20日 追記} そういえば、梢江こずえとマホメド・アライJr.との青年誌向けのたいけつもあったと思うのだが・・。 まあ、個人的には、どうでもいいんだけど。

2012年8月 6日 (月)

【電子工作】雑感~4年目を迎えて

いつもこの時期になりますと、どこかで書いているような気がしますが・・・・
私にとって、8月6日は、電子工作を始めた日になります。まる3年前、2009年の8月6日になります。
これまたいつも書いていますが、ニコ動の「【AVR】電子工作のススメ 第一回「マイコンのススメ」」を見たのがきっかけです。

http://www.nicovideo.jp/watch/sm7775003

因みに、これを見たのは、Mixiの

http://mixi.jp/view_bbs.pl?id=44075526&comm_id=4390193 60番の書込を見てです。
この頃、少し前に大人の科学「4bitマイコン GMC-4」を買っていたのでした。
買って一応は作ったのですが、デモを走らせた位でした。後は、上記mixiのコミュで、まりすさん等が、ニコ動等で、動画を公開されていたので、面白そうだな・・・って思って、指をくわえてみていただけでした(汗;)。
マイコンのススメを見るまでは、自分でやるという、発想は正直無かったです(大汗;)。

実際にパーツを買ったりするのはもう少し後で、調べてみていると、秋月電子へのネットでの注文は、8月11日でした。
AVRISPmkIIの他に、AVRマイコン(Mega88P/tiny13A等マイコンの他抵抗。コンデンサ、ブレッドボード)を注文していました。
また、共立エレショップには、「AVRWRT用ブレッドボードISPケーブル」を注文していましたが、14日に注文して、発送が18日になっていました。
調度、盆休みだったので、実際、ブレッドボードで組みだしたのは、もう少し後だったようで、調べてみますと、8月20日に、AVRISPmkIIをPCにつないでLEDの点滅を実験し始めている動画を発見しました。興味を持ってから2週間かかっていますね・・・実際、その間に実家に帰ったり、嫁の実家に行ったりしていたと思いますが。

Avrispmk2led
AVRISPmkII自身の試験?

8bitbincounter
8ビットバイナリーカウント実験中

これが実質的な一歩だった訳ですなあ・・・・懐かしい。

4年目を迎えたけど、あまりレベル的には変わっていない気もしますが、当時は、C言語は完全にちんぷんかんぷんでしたが、最近ではなんとか判ってきましたって事くらいですが。

悪い意味で慣れてしまった部分もあったりしますし・・・(汗;)。

当面やりたいこととしては、電波時計と気圧計の合体です。バックボーンとしての充電池駆動も含みます。

ケース加工や基板製作が家の事情で簡単にできないのでこれは今後の課題です(涙)。エッジングもやりたいし、外注にも1回位は出したいもんです。

そら。さん掲示板に貼っているものと同じですが、電波時計の実験中動画です。