PIC の水晶発振子入力で VXO を試してみる

ふっとした思いつきである
PICでマーカ発信器が出来れば、超安く出来るのでは? と妄想を抱いたのであった
冷静に色々と考えた所、クロック入力の補正はソフトウェアでの補正は無理なのである

例えば、周波数カウンタではゲートタイムの値を正確に補正すれば良い
ゲートタイムは1/100秒とか1/10秒の単位なので、正確な基準信号があれば補正も可能である
しかし、マーカ発信器として使うには、ソフトウェアでの補正は実行命令ステップ単位で4クロックなので、低い周波数であれば可能性はあるが周波数が高くなると実質的に不可能である

で、考えた結論はPICの水晶発振子の入力に、LとCを付けてVXOを構成してみる実験をしてみた
今回は部品箱に転がっている12F675で実験してみる
まずは素の水晶でPICと接続して発振させてみる
水晶も貰い物なので想定負荷容量などは不明である、発振周波数は2KHz程高く発振していたのである

IMGP5903

<必殺 空中配線で水晶を繋ぐ>

さてPIC + VXOの実験である
まずは発振コイルを作る 私は10Kボビンが転がっていたので、それに巻いてみた
一旦の想定インダンクタンスは10μHである
コイルが組み上がったところで、仮組みで実験してみる
素晴らしい…. 約19.999…MHz
発振周波数が3KHz低く発振出来たのである

IMGP5905

<このボビンを使用する>

IMGP5907

<分解して 元に巻いてある線をほどく>

IMGP5908

<今回は上段8T 中段8T 下段8T 計24Tを巻いた 9μH~14μHとなった>

気を良くして、基板に実装してみる
元々の発振周波数が高い水晶なので、コンデンサの容量は小さめに15pFとしてみた

IMGP5910

これで、発振周波数の変化範囲は、19.995MHz~20.004MHzと約10KHz程度の幅が確認出来た
PICは発信器としても使えるではないか…
但し、クロック発振周波数20MHzの数10Hz単位で安定しないのである 全体をシールドしてしまえば安定度は増すと思うが、そこまでする程のモノではない

また、データシートだと水晶の両端をコンデンサでグランドに落とすのが正当だと思うが、その部分にL・Cを付けても上手く変動しなかったのである 究極の力技でLCをぶち込んだが、回路的に水晶のグランドがフローティング状態なので、不安定の理由はそこらへんかも知れない

PIC_Marker

<回路は簡単であるが、発振コイルと水晶・C2の配線は最短かつ発振コイルと水晶の筐体はアースが必要である>

今回は、マーカのテストなので、500MHzのマーカをでっち上げてみた
発振コイルのコアで、20.000.000MHzにHz単位で合わせる
あとは、超簡単な手抜きファームを入れ込むだけである
(超短いので500KHz版のソースを掲載する 当然ノンサポートである)

好きな人は、ソースを変更して100KHzなり25KHzなりのマーカに仕上げれば良いと思う

ちなみに、PICでVXOなんてマイクロチップ社は想定もしていないと思うので、当然誰も動作保証なぞしてくれないのである

超手抜きであるがソースは以下のリンクで

PIC_MARKER

超基本 LED の点灯について考えてみる

電子回路超基本

LEDの点灯について考えてみる

回路設計の経験者の方はこの項は読み飛ばして欲しいのである

ここでは、あえて電子工作と言う単語は使わない「電子工作」と言うと単なる趣味で終わりそうな気がするからなのである
学んだことは、趣味でも良いと思う、けれどこの手の知識は決して趣味だけで終わることのない、自己啓発の一つだと私は信じているのである

さて、前置きは別として今回はLEDの点灯について考えてみる

IMGP5842
PICなどのマイクロコントローラ入門で、例題に良く出てくるのがLEDの点滅である

LEDの点灯は非常にポピュラーであるが、原理原則について改めて記載してみた

1・LEDは順方向(アノード→カソード)に規定電流を流す
2・LEDは順方向(アノード→カソード)に規定電圧以上を印加する
3・LEDは許容電流値を超えると壊れる
4・LEDは逆方向電圧に弱い

まずLEDを点灯させるためには、アノード→カソード間に一定以上の電圧(Vf)を加え、普通のLEDで10mA,高輝度タイプで20mA位の電流を流す必要がある (定格は使用するLEDのデータシートを参照のこと)
一般的な用語では、点灯開始の電圧をVf、電流値をIfと言う記号で表す

少し乱暴であるが、電流制限が出来る安定化電源で点灯実験をしてみる
(電流制限が無い電源では絶対に試してはいけない)
最初に最大電流値を10mAに設定する
+端子にアノード –端子にカソードを繋ぐ
5mA,15mAで試してみる

IMGP5843

<上記は5mAで点灯させた所>

IMGP5844

<上記は10mAで点灯させた所>

一般的なLEDに10mA以上流しても、LEDの明るさには殆ど差は無い

例として5VでLEDを点灯させるためには
直列に470Ωの電流制限抵抗を接続する
(一般的なLEDのVFは3V以下なのでVf以上の電圧を印加する場合はVfを無視する)
この場合だと最大電流値は 5V ÷ 470Ω = 10.06mA である

LEDは定格電流で動作させるのが基本である

マイクロコントローラ例えばPIC12F675を5V動作させた場合のLEDを点滅させるためには以下の条件で接続する

GP3(4pin)以外のIOピンにLEDのカソードを接続し、アノードに470Ωの電流制限抵抗を繋げて、5Vの電源に接続する

12F675のプログラムで、接続したIOピンを’0’に設定すればLEDは点灯し、’1’に設定すればLEDは消える これはポートが’0’の時にPIC全体に流し込める電流の方が多いためである

この辺りは別途説明したいのである

PIC の入門を考えてみた

初歩の組込みシステムについて

PICなどのマイクロコントローラを実際に動かしてみることは以外と敷居が高いことかもしれないと思ったのである
今回は比較的世の中に広まっているPIC(12,16シリーズ)で考えてみる

経験者であれば、クロックは内蔵のCR発振器を使って、入力は何のpinからどの様に信号を受けて、出力は何のpinにどの様のタイミングで何を出力 とかのシナリオが湧いて出て来るのである

IMGP5759

<写真は12F1822 新世代の8Pin PIC 単価100円>

されど、PICと言えど小規模ながら立派な独立したコンピュータである
PICを含めマイクロコントローラは、何かを実現するための部品であり、作るモノによってはメインコンピュータであるが、実際に「PICを使ってみたいのですが? 」 「PICを勉強したいのですが何から勉強すれば?」 等のことを聞かれることがある

その昔1980年頃のマイコンブームの際に、’マイコン’を勉強したいのですが何から勉強すれば? と同じ様な感じがした
当時は、’BASIC言語でプログムすれば何でも出来ます’って雰囲気が世の中に蔓延し、巷のマイコンスクールが大繁盛したのであった
あれはあれで、コンピュータのリテラシを世の中に広めることになり、多数の技術者も当時のブームから育ったはずである
当時のマイコンってPC-8001,MZ-80,APPLEⅡ,FM-8などのパソコン元祖達が当時の金額で10数万以上価格でバカスカ売れまくったのであった
当時と現在が大きく違う点は、当時はそれらが最新のテクノロジーであったことで、現在の組込み系の最新テクノロジーは携帯電話やクルマの内部,そしてテレビ等のデジタル家電である

さて、我々がPICを動かしてみる際の投資は僅かではある
(PCとネット環境は有るとして、PIC・評価基板・PICライタ位)
只、実際にPICを自力で動かすためには、いくら簡単になったとは言えどそれは、独立したコンピュータシステムをリセットから順を追って動作させるということである
なのでCPU(コンピュータの中心部分)の立ち振舞が理解出来ていないと何も出来ないことが多いと思う
そして、それなりに苦労してLEDの点滅をさせ配偶者や家族に見せたとしても、安易に想像出来るリアクションは、「ふーん それで...」となりがちではないだろうか

やっていることは、CPUの立ち振舞を理解して、電源投入時からの1ステップ1ステップを精魂込めて書いたハズなのであるが、そのことを理解してくれる人は実際に組込み系に携わったことのある人位であろう

話が逸れたが、これから始めるPICの勉強スタートには何から勉強すれば良いのであろうか?
私個人としては、PICの電源を入れてからの立ち振舞を理解するためにアセンブラの勉強は推奨したい
決してアセンブラで大きなソフトを書くのが目的では無く、CPUの立ち振舞を理解するためである
また、picのアセンブラ MPASMは過去の開発環境であるMPLABから現バージョンのMPLABXまでそのまま使えるのである
最低限の立ち振舞を理解した後に、C言語で取組むと良いのではと考えるのである

データシートを読める方はメーカのデータシートを読む事をお勧めする

下記のリンクも、アセンブラでのPIC動作を解説してあるので比較的わかりやすい
お勧めの本 

IMGP5762

<写真は12C509A 一度書込したら再書込出来ない @50円>

そして、PICを含むマイクロコントローラを動作させるためには、最低限のハードウェアの基礎知識も不可欠である

経験者にとっては安易であるが、初心者にとってPICの敷居は決して低くないと思う
是非敷居を超えて欲しい (私も精進が足らないのであるが..)

PICについては今後、超入門編を書いて行きたいと思っているのである (自分のためである)

 

12F675に書込みをしてみる

マイクロコントローラで何らかの事をするためには、マイクロコントローラ自体のプログラムメモリにプログラムの書込が必要である
PICの場合は様々な書込方法があるが、自分が良く使うのはPICKIT3ICSPからDIPソケットとの変換アダプタである

IMGP5639

(緑の基板がICSP-DIP変換アダプタ)

プログラムコードをアセンブルもしくはコンパイル後に、MPLABXの統合環境からそのまま書込が出来る
コードを書き込んだチップを目的の基板に挿して動作確認を行う事になる
12F675等の8pinチップの場合は、ISCPでポートを使用してしまうので、この方法による書込はリーズナブルと思う

IMGP5640

(8pinPIC用に作った、評価基板)

組込みソフトウェアは、プログラム作成→コンパイル(アセンブル)→目的チップへの書込のサイクルが確実に実施出来る環境を整える事が大切である

 

時代の変化

 

その昔、何らかの処理をコンピュータで動かすには、大変な作業が必要であった

CPUからのアドレスバスにデコーダを繋ぎ、指定したアドレスにラッチ回路を入れ

それらのハードウェアをデバッグしつつ、ソフトウェアを書いて行くって感じで、CPUを含んだ基板を設計するだけでも、手間がかかったのである

現在であれば、PICに代表されるマイクロコントローラがあれば、簡単に実現出来る

それもクロック精度が重要でなければ、クロックは発振器が内蔵され、プログラムを流して電源を投入するだけで動作してしまう

テクノロジーの恩恵は享受しなければ損である、仕事であれ趣味であれ、やりたい事が低コストで実現出来るのであれば、色々とチャレンジしてみたい

p1

(この写真は8pin 12F675 古めのチップであるが 1024Wordのプログラムエリアで64Byteのメモリ、4CHのA/D変換器と2つのタイマーを持つ)