● 実験テーマ64
「PIC18F14K50による、ベーシック実験+AD9834 DDSモジュールの実験」
(Vdd=1.8〜5.5V仕様の、PIC18(初体験)を動かしてみました。DDSモジュールの実験もしました。)
・以下、この実験の顛末記です。
■ 2015.2.1
・この前のテーマ63の実験では、DDSモジュール(5V動作)を、Vdd=
3.3V系の、PIC24Fで動かしたが
本来なら、同じ、5Vで動作する、PICを使うのが素直だと思う。
たまたま使い慣れた、PIC24Fトレーニング基板を使ったまでの話だが・・・・
結果的には、モジュールに搭載の、67.108864MHzの水晶発振器では未だ動いてない。
そこで、初めてではあるが、Vdd=1.8〜5.5V仕様の、PIC18F14K50を、5V電源で動かしてみることにした。
DDS専用基板でなく、汎用(トレーニング)基板として回路を検討することにした。
ベーシック機能として、Lチカテスト(LED点滅テスト)と、16文字*2行のキャラクタ液晶表示器のテスト
プログラムを考え、動作確認をやった後、DDSモジュールの動作確認をやる予定にした。
■ 2015.2.2
・水魚堂にて回路図作成を済ませる。
また部品手配もした。
・ところで、PIC18での開発環境を整備しないといけない。
現状の、MPLAB IDE V8.60には、C18コンパイラは含まれてない。
HEX書込みは、PICkit2でもだいじょうぶそう。(デバイスカテゴリの中に、PIC18_K_シリーズも含まれる)
MPLAB C18のインストールだけでよさそうである。
このインストールの手順が、トラ技の、2012年6月号に載っていたので、それに従い、
「MPLAB C18 Standard-Eval Version」(スタンダード評価版)をインストールした。
■ 2015.2.4
・Lチカテスト(LED点滅テスト)と、16文字*2行のキャラクタ液晶表示器のテストの、プログラムを
作成し、コンパイル〜HEX書込みまでOKになった。
尚、液晶ライブラリは、後閑さん作成の、PIC24F用のものを基に、PIC18用に修正してみました。
・午後より、部品が揃っているので、PIC18F14K50トレーニング基板の製作に入った。
■ 2015.2.8
・トレーニング基板が上がったので、まずは、Lチカテストをしたが、まずは駄目。
どうも、PICkit2はデバイスを正しく認識していて、HEXもエラー無し(ただワーニングは出る)
でインポート出来ているが動作がおかしい。
プログラムミスもあったが、1度、SWに関係なくLEDが点滅動作することがあった。
プルアップ設定に誤りがあったので直したが駄目。
■ 2015.2.9
・どうも、Config記述が駄目だったようで、修正でワーニング無しのエラー無しになった。
これで、HEXを書込んだら、Lチカは、正常動作となった。
(PIC1814K50 Vdd=5V動作、PICkit2使用)
・ただ、液晶テストはこれでやっても駄目。
固定メッセージ表示せず。
2行目に表示しない?
さらに様子を見ると、時々ではあるが、液晶の初期化に成功し、その後タイトルメッセージ
〜キャラクタ表示を繰返してすことがある。
少し動きだしたところで、液晶内のRAM領域の内、CGRAM(ユーザーキャラクタ登録エリア)領域に
新規キャラクタを登録して、DDRAM領域(20Hから始まるASCII文字エリア)の表示チェックの後に
CGRAM領域の表示チェックを追加してみた。
上手く行くのだが、使う液晶によっては、初期化が上手く行かない液晶も出ているので
タイミング調整に入れている遅延時間の精度確認等をしてみることにした。
■ 2015.2.10
・遅延時間の実測(遅延関数の検証)を行ってみた。
以下に、その時に、まとめたメモをそのままアップしました。
まずは、自作オシロでチェックしてみました。
■ 2015.2.13〜 2015.2.14
<液晶によって初期化?が上手く行かない問題追及_1>
・これは、PIC18F1K50でやった場合の話で、以前作った、PIC24F多機能カウンタでは
どちらの液晶でも、100% OKになる。(またPIC24F活用本のテストプロでもOK)
これに使っているライブラリは、後閑氏作: LCD_Lib3.cをほぼそのまま使っている。
試した液晶は次の2種
@ OK(100% OKではなく時々NG)な液晶
「SC1602BS*B-SO-GS-A」(0708-153-01 N/L)淵がシルバーの古いタイプ
A NGな液晶
「SC1602BS*B-XA-GB-K」(1006-005-114 Q.C OK) 淵が黒の新しいタイプ
<調査開始>
・まず秋月の当該製品ページの情報では、Aの型番に変わっているが、仕様は同じと書いてある。
だけど動きを見ると、そうは思えない。
この液晶のメーカーは、SUNLIKE社であるが、そのHPにアップされているデータシートには
電気的特性のみで、タイミング規定まではアップされてなかった。(秋月からリンクされているが・・)
マルツのHPに、これと互換のある、Linkman社の「TE1602」が載っており
このデータシートには
タイミング規定が載っていたが、タイミングチャート図だけ何故かボケていてどこのファクターか理解
できない状態。
後閑本(PIC24F活用ハンドブック)にそれの関連情報が載っていた。
気にしなければいけないのは、データセットから、RS確定までの、20nS以上と、
RSをアクティブにしてから、STBを立ち上げるまでの、40nS以上
それからSTBパルス幅の、220nS以上、
STBを立ち下げてから、RSをノンアクティブにするまでの、10nS以上
であるが、後閑氏の値は十分すぎるマージンを取っており問題は無いと思われる。
ただ、気になるのはストローブパルスは一般には速くするような記憶があるので、
あまり長い時間はまずいのではないか?(規定では以上としか書かれてなく上限はうたわれてないが?)
・ちょっとここで、PIC24F活用本に載っていた、当該液晶のテストプログラム(後閑ライブラリ使用)
そのままで動かしてみて、タイミング調整用の遅延時間をそれぞれ実測してみることにした。
この後で、同じことをPIC18F14K50でもやれば、違いが分かるはずである。
<その結果>
<液晶によって初期化?が上手く行かない問題追及_2>
・現状の、PIC18F14K50でも同じことをやってみた。
<その結果>
※ こちらの方が、断然精度は良いことが再確認できた。
1uS(データ・コマンド書込み関数で使っている遅延)にしても、こちらの方が精度が良い。
他も問題ない。
なのに上手く行かない?
とこの時点では頭を抱えていたのだが・・・・
尚、最終行の、2.5uSは、後日、PIC24Fでの、1uS設定時の遅延実測値=
2.95uSに近ずけようと
思ってやってみたものだが結果的には必要なかった。
・150214
※ 問題が解決した。
どうも、RSをアクティブにしてから、STBを立ち上げるまでの、1uSと、STBパルス幅の、1uSが、
目立って長くなると、コマンドが正しく書込めないことがあるようである。
delay_uS(1);では、実測で、15uSになってしまって正しく動作しなくなる。
C18遅延ライブラリの、Delay1TCY();を、4つ並べる方法だと、実測で、1.5uS
(ポートアクセスの時間を無視すれば、1.0uSの精度は出ていると思ってよい。)
これでやると、100% OKになる。
尚、前日にこのことは、やったが、遅延時間実測のために修正したソースを通常動作のソース
に戻す時に、delay_uS(1);をコメントアウト(削除)するのを忘れていた!!
何というボンミス!!
まあ、不可解な現象が起きている時に、以前もこれと似たことがあったような・・・
あと、Init関数の頭の遅延値を、20mS→ 30mSに変更(低温対策で、これはREADY待ちの時間を長くしている訳だが・・・)
したが、これも、1uSの時間が正しく確保されていれば問題なさそうなので元に戻した。
※ 以下に、液晶テストの模様をアップしました。
■ 2015.2.17
・PIC18F14K50トレーニング基板で、ストリナ(ストロベリーリナックス)のAD9834
DDSモジュールをテスト
してみた。
PIC18F14K50トレーニング基板+6Mで動いた時のソフトの組合せで
、
初めて、67.108864MHzMHz水晶発振器で、ストリナのAD9834モジュールが動いた!!
※ ちなみに、SCLKに入れている遅延をコメントアウトしても問題なく動いた。
<その他、特記事項>
・中華オシロのFカウンタ精度は、周波数が高くなると悪さが目立つようだ。
後閑本の記事を参考にして作った、自作のFカウンタで測ると、全てのFで、-1Hzの誤差に留まった。
自作カウンタの12.8MHz水晶発振器(AKI KTXO-18Sの互換品で、YS-TCXO)の精度は
±1ppm/年(これはエージング特性で、温度特性は2.5ppm)で、
計測値精度は ±1Hz(経年変化を除く)となっている。
ちなみに、自作カウンタ入力は、3V仕様なので、
5Vを入れる時は、ATT が必要。
自作の抵抗ATTでもよいが、オシロプローブを、1:10にして、0.5V入力にしても問題なく測定できた。
・DDSリセットを使わなくても問題なく動いた。(パルス同時出力でもOK)
ただ、アナデバのデータシートに、RESETは必要と明記されているので
メイン頭の、RESETパルスON(0で初期化は省いてRESET
0N-OFFするだけ)と、F設定を変えた時の、
RESETパルスONは入れておくことにした。
<この実験で使った、ACアダプタと電源コンディション実測>
・トレーニング基板: 公称8V 500mA出力のもの(無負荷実測 約14Vからして非安定タイプと思われる。)
大昔のEPSONプリンタに付属してたもの
・中華オシロ:今迄使用していた安定タイプのもの 9V1.3A出力
※ トレーニング基板の電源コンディション実測結果は以下の通り。
レギュレータ入力: 12.68V(リップル:約0.3Vp-p)
レギュレータ出力(DVDD): 5.06V(リップル無し) AVDD: 5.01V(リップル無し)
※ 動作している模様は、このページTOPの写真をご覧ください。
<最終回路図>
・こちらから、どうぞ→ 「PIC18Fトレーニング基板回路」 (この基板で、Lチカ+液晶テスト+DDSテストを行いました。)
<最終ソース>
・こちらから、どうぞ
@ Lチカテスト→ Blink_LED.c
A 液晶テスト→
LCD_TEST.c
B DDSテスト→ AD9834_Test.c
※ A、Bには、次の液晶ライブラリ(ソースと、ヘッダーファイル)が必要です。
LCD_Lib_PIC18.c
LCD_Lib_PIC18.h