時間がたつのは早いものです。
今年ももう1/12が過ぎようとしています。
昨年から続けているATTiny2313を使ったI2Cインターフェースに
よる7SEG LEDのドライバですが、やっとのことでそれらしく
仕上がってきました。
結論から言うと、I2CではなくI2Cモドキです。
使用している言語であるBASCOM−AVRにはI2Cのマスター機能と
してのコマンドがあり、これを使ってスレーブ側のプログラム
を作って色々悩みながら進めてきましたが、どうしてもデータ
の取りこぼしがあり、約1ヶ月の試行錯誤の末の結論は、マス
ター側のコマンドには何かの癖があるようで、これも独自に
プログラムを作ってやることによって、無事動作を開始しまし
た。
マスターもスレーブも自分で作ったプログラムなので、正確に
I2Cの仕様に合わせる必要はなく、不必要で複雑な部分はカット
して、作り上げました。
これにより、ロータリーエンコーダーでカウントした値を、I2C
モドキで8桁の7SEG LEDドライバに送信して、目的の周波数表示
が行えるようになりました。
メインダイヤルノブを回転し、それ結果として周波数表示が
変化する様子を録画してみました。
あまり綺麗な映像ではありませんが。
MOV00516.MPG.AVI
2008年01月29日
2008年01月03日
謹賀新年 今年の自作品
遅ればせながら、明けましておめでとうございます。
自作品といっても完成品ではありません。
最近、検討を続けているI2CによるI/Fです。
今回は、秋月の青色7SEG LEDを使って周波数表示用に
ATTiny2313でのI2CスレーブI/Fを検討し、8桁のスタティック
表示基板を作りました。
Tiny2313 1個で2個の7SEG LEDを駆動していますので
8桁駆動で全部で4個の2313を使用しています。
4個といっても、1個¥120ですから、非常に安いI2C7SEG LED
ドライバーということになります。
将来の実装を考え、表示側とドライブ側(2313側)の2枚基板
構成としました。
とりあえず4PIN(Vdd、GND、SCK、SDA)で表示ができるよう
になりました。
いつものように、基板を作ってからプログラムを作ったのです
が、正月の酒のせいでプログラムを作るのに時間が掛かりまし
た。実装用には、これからの詰めが必要です。
MOV00402.MPG
2007年12月16日
BASICでI2C スレーブ実験U
久しぶりにBASICでの、I2Cスレーブ実験の続きをやりました。
前回、LCDはだいたい駆動できたので、次は7SEGLEDのダイナミック駆動に挑戦しましたが、やはり、割り込み無しのソフト処理だけでは取りこぼしがあります。
50回に一回くらいのミスまでは詰められたのですが、エラーはなくなりません。
ダイナミック駆動は別の方法をそのうち考えようと、スタティック駆動に挑戦しました。
こちらは、LCDも動いていますし、I2Cのデータ読み込みに専念できますので、当然のことながら簡単に仕上がりました。
ATTiny2313は、I2Cの制御用PINに2本使いますので、残りの使用できるポートは15本です。
Dotを除けば、7SEGLEDが2個制御できることになります。
残りのポート1個は、2桁に1個だけDot表示できるようにすれば良いでしょう。
とりあえず、ブレッドボードで動いている様子を、写真と動画で紹介します。
数字の0から9までのデータを10ms置きに送るところからスタートし、200ms置きに送るところまでを撮影しました。
これで、I2C制御できる 7SEGLEDスタティックドライバー(2個駆動)が¥120でできたことになります。
MOV00382.MPG
2007年12月09日
またまた、AVR USB ライター
BASCOM-AVRで使用するUSBライターとして、AVRaspを製作し、愛用してきましたが、kumanさんのサイトでATMELの提供する開発ツールであるAVRStudio4で使用できるUSB ライターの製作記事を見つけました。
名前がAVRISPMKUとなっており、もしかしてBASCOM−AVRでも使えるのではないかと期待して作ってみました。
kumanさんによれば、原典はATMega168でXTALが16MHzということで、kumanさんご自身でATMega8で12MHzXTALにプログラムを変更されており、お願いしてMega8用のプログラムを送っていただき、製作しました。
同時に、16MHzのXTALも大変お世話になっているOMさんに送っていただき、ATMega168 16MHzXTALも実験してみました。
いずれも快調に動いております。
しかし、肝心のBASCOM-AVRでは動きませんでした。
このライターは書き込みスピードではAVRaspを更に少しだけ上回っている感じです。
また、FUSE bitの設定がデバイス毎にチェックボックスでできるようになっており、視覚的で使いやすくなっています。
ライター部分のS/Wだけ独立させてBASCM-AVRのEXTERNAL Writerとして使用できないか検討してみましたが、残念ながらできないようでした。
AVRStudio4を使ってアセンブラでプログラムを作る方には、シンプルで安価な高速ライターとしてお奨めです。
今回も、FRISKケースで作りました。
今回は、基板パターンは書いたのですが、1台だけ蛇の目基板で作りました。
マイコンは、ソケットにしたため高さ方向で高くなり、FRISKの蓋は穴を開けてあります。
回路図
kumanさんのサイトの記事
http://www.geocities.jp/kuman2600/n6programmer.html#12
原典のサイトの記事
http://www.simonqian.com/en/AVRminiProg/index.html
2007年11月24日
BASICでI2C スレーブ実験
実験の様子
今日は、途中で投げ出していたI2Cのスレーブ側のプログラムを
再度挑戦していました。
これまで、割り込みやら、シフト命令やら、ポート入力やら、色々
な方法で試していたのですが、どれもうまく行っていませんでした。
今回は、本当にマスター側からちゃんとした信号が出ているかなど
を、PCでのロジックアナライザを駆使しながら、一歩ずつやって
みました。
結果として、使用しているBASICのマスター命令での信号の出方
にも癖があり、それらを認識した上でスレーブ側(受信側)の
プログラムを作ればいいことがわかりました。
今回のテストプログラムは、割り込みなど使用せず、データと
クロックのポートをメインルーチンで監視しながら1ビットずつ
取り込む方法でスレーブ機能を実現しました。
受信したデータはアドレスとデータのそれぞれ8ビットずつです
が、設定したアドレスを認識し、送られたデータをLCDに表示でき
ています。
1行目がアドレス、2行目がデータ
I2CのパラレルI/O ICであるPCA9555と並列接続し、PCA9555用の
アドレスとデータ、今回作ったATTiny2313スレーブのアドレスと
データを送り、きちんと識別してデータの取り込みを行っています。
今回は、旨く行ったようです。
ATTiny2313に送られたデータの様子
2007年10月14日
DDS直接駆動PSK31
最近、海外のサイトで、KD1JV Stevenさんが設計されたATS-3 マルチバンドCWTRXを使ってPSK31の運用を実現する記事を見つけ、非常に気になっていました。
それは、当局の自作するTRXのTX部分は、氏の設計がベースになっており、DDSも同じアナデバのAD9834、マイコンはAVRを使用しており、同じようにできるのではないかと思ったからです。
元々、ここ数年の自作の目的はPSK31の耳のいいTRXを作ることにありました。だいぶ遠回りしていますが.....。
しかし、具体的にどうしてるのか?、PSK31のS/Wとどうインターフェースしているかなど、具体的な記事は見つかりません。
ATS-3の回路図は、入手していましたので、これから察するに、H/Wは何も手を加えず、S/Wだけでやっているように思えました。
それならばと思い立ち、最近作った7MHz CW TRX「神護」をベースにPSK31対応のマイコンを検討してみました。
PSK31は、BPSKとQPSKがありますが、S/Wが簡単だろうとBPSKに絞って見ました。BPSKは、信号の位相が180°反転するだけです。つまり、DDSの位相レジスタを制御すれば何とかなると考えました。
PSK31に関する文献はそれほど多くなく、やっと見つけた日本語の文献から、32mS毎に"0"で位相反転、"1"で位相反転無しだということがわかりました。
次は、Varicodeというやつです。これは、海外のサイトで定義されたVaricode表が簡単に見つかりました。
後は力づくです。「神護」のマイコンはATTiny26で2KBしかありません。クロックも内蔵OSCを使用します。従って、仮に信号ができたとしても、受信側でちゃんと復調できるか?、クロックが悪いのか、S/Wが悪いのか判断が付くのか心配でした。
昨日の夜から、今日一日、あ〜でもない、こ〜でもないと試行錯誤を繰り返し、やっとの思いで復調できる信号が完成しました。
BASICで、内蔵OSCで、自分のコールサインが復調されるのをみて、久々に感激しました。AVRとDDSとBASICでのPSK31用送信エンジンの完成です。「神護」のH/Wは一切いじっていません。つまりバラモジもない単なるCWTXです。
あとは、PSK31用のPC S/Wとのインターフェースを考えれば、非常にシンプルなTXが出来上がりそうです。
StevenさんのATS-3も基本はCW TRXですので、同様のもののエンジンができたことになります。
最終的に、TRXに仕上げるにはまだ時間が掛かると思いますが、久しぶりに有益な検討ができました。
写真は、「神護」から送信されたPSK31の信号をIC706で受信し、PSK31用のS/Wである"PocketDigi”を使用して復調の様子を写したものです。
2007年10月07日
IFシフト付ローコスト周波数カウンタ
先週は、¥120のATTiny2313と10個¥100の7SegLEDを使用した6桁周波数カウンタを製作しましたが、今週は、これを発展させ自作のトランシーバー等に搭載して使えるようにIFシフト機能を追加してみました。
その結果は、だいぶ以前に製作した7MHz CW TRX「善峰」に接続して確認してみました。
「善峰」は、VXOやBFOの信号出力を取り出すようにできていませんでしたが、今回追加しました。
信号の取り出し口にはRCAのピンジャックを使用し、VXOとBFOの信号をSWで切り替えて出力できるようにしました。
また、ケーブルには、TRX側から周波数カウンタの電源が取り出せるように、Cカットして電源重畳としました。
IFシフト機能は、まずTRXの信号出力をBFO側にして周波数を計測します。
この状態で、周波数カウンターのIFシフトメモリーSWを押します。
これでシフトするIF周波数が記憶されます。
次に、TRXからの出力信号をVXO側に切り替えます。
これで、IFシフトした分の周波数が補正されて、周波数表示されるようになります。
補正前のVXO周波数 補正後のVXO周波数
この機能により、どんなIF周波数のTRXでも、周波数が測定できる範囲であれば補正をかけた周波数表示が可能になります。
「善峰」のようなVXOタイプのTRXで周波数表示をするには、非常に便利な周波数カウンターとして仕上がりました。
課題は、ATTiny2313のプログラムメモリーが2KBと小さく、基本機能しかプログラムできなかったことによる制限です。
VXOの周波数が受信周波数に対し、+IFなのか、−IFなのか、また、BFOがLSBかUSBかなのかについては、プログラムで書き換える必要があります。
最初に設定すれば、後は使わない機能ではありますが、プログラムメモリ容量が足りなくて汎用性は失われています。
4種類のプログラムを用意して選択して書き込めば用は足りますが。
ISPでプログラム書き込み中の様子
回路図
7segLedFrequencyCounterIFShift071007.pdf
プログラム(PDF)
2007年09月03日
AVR用ISP端子配列考
既に一部で公表してますが、こちらにも書いておきます。
AVRのISP端子を基板に実装しようとする時、標準の6Pinや10Pinはパターンを引くのに決して合理的な配列にはなっていません。
当局が、いくつかのTRXなどを作る時に何気なく配列していたものを整理すると、意外にも主要なAVRにはISP関連のポートに規則性があり、うまく行くことがわかりました。
主要AVRの端子配列と合わせて、ご参考になれば!
PDFファイルはこちらです。
ISP端子070814.pdf
こちらにも掲載してます。
http://qrp-homebrewers.net/AVR_ISP.aspx
2007年08月16日
USB AVR用 USBライターの製作 その2
昨日の製作編に回路図を掲載するのを忘れてしまいました。
また、ファームウェアの書き込みとか、ライターとして操作するためのソフトウェアとか、非常に長くなるので、HPの方に纏めました。
http://qrp-homebrewers.net/usbasp.aspx
こちらを参照ください。
また、ファームウェアの書き込みとか、ライターとして操作するためのソフトウェアとか、非常に長くなるので、HPの方に纏めました。
http://qrp-homebrewers.net/usbasp.aspx
こちらを参照ください。
2007年08月15日
USB AVR AVR用 USBライターの製作
AVRのプログラムは基本的にBASIC言語であるBASCOM=AVRを使って作ってきましたが、プログラムの書き込みにはこのBASOCM−AVRから直接制御できる、抵抗だけを使った「Sample Programmer」や「SK200」のパラレルポートを使用するものを使ってきました。
しかし、最近のPCはUSBポートしかないものや、これまでのライターでうまく行かないことが頻繁に起きるようになり悩んでいましたが、この夏休みを使って、AVRマイコンだけを使用してUSBライターが作れるというFischlさんの「USBasp - USB programmer for Atmel AVR controllers」作ってみることにしました。
このライターは大学の研究室や色々な方が、使いこなしの検討を行っておられ情報もたくさんあります。
大元は、下記のWebサイトです。
http://www.fischl.de/usbasp/
これをコントロールするライタープログラムはDOS窓のコマンドライン入力からスタートしているようですが、最近では、WindowsのGUIとしてコントロールできるものも作られており、色々見た中でとりあえず下記のサイトのものを使うことにし、まず、ハードウェアを製作しました。
http://yuki-lab.jp/hw/avrdude-GUI/
AVRのマイコン開発で日常使用するものですから、小型で使い易いものでなければならないと、ケースサイズをお菓子の「FRISK」に入る大きさとしました。
また、動かなくなった時にまた1から作るのは面倒なので、基板を作ることにしました。
あとは、手持ちの部品や、USBケーブルには\100ショップのものを使用するなど、できるだけ安く仕上げることを目標にしました。
後は、いつものような自作工程です。
基板図の生基板への焼付けです。アイロンを使用します。
焼付け完了です。
レーザープリンタの印刷ムラで発生するスをマジックで修正します。
エッチングを始める道具達です。
沸騰した湯にエッチング液を混ぜてエッチングします。
濃い紅茶色位です。(湯とエッチング液が半々)
エッチングが終わると、真っ黒になります。3,5分で終了です。ちんちんのお湯を混ぜるのがミソです。
焼きつけたパターンマスクを磨いて除去します。これで基板は完成です。
FRISKのケースに収まるように出来上がりました。
殆どの部品が実装できました。
ケーブルも接続し、ケースにも入りました。
でもどうしても水晶の厚み分がケースに入らず、蓋に穴を開けました。
蓋に、ラベルを貼って完成です。
今日はここまでです。
2007年06月10日
390円液晶
2007年05月24日
LCF Meter 続の3
LCFメーターの方も、出張やらで進んでおりませんでしたが、
とりあえず、1個の基準コンデサでどういう風に、未知のLとCを
測定するのか、計算式を纏めて見ました。
数式を記述する適当なソフトが無かったのでWORDで書いてPDF化
しました。
もし、興味があれば読んでみてください。
LCMeter.pdf
とりあえず、1個の基準コンデサでどういう風に、未知のLとCを
測定するのか、計算式を纏めて見ました。
数式を記述する適当なソフトが無かったのでWORDで書いてPDF化
しました。
もし、興味があれば読んでみてください。
LCMeter.pdf
2007年04月22日
LCF Meter 続の2
2007年04月15日
LCF Meter 続編
2006年08月18日
新連載 開始
ホームページの方で、最近滞っている きまぐれ連載 BASICでAVRしよう!のリニューアルとして、新たにブログを開設しました。
こちらの方が、アップデートがしやすいのでもう少し情報改定が進むかと考えております。
また、目的をはっきりした方が挑戦される方も増えるのではないかと勝手に考え、内容も少し変更しております。
今後ともよろしくお願いいたします。
なお、新ブログのアドレスは下記の通りです。また、このブログのトップにもリンクアドレスを掲載しております。
http://jn3xby-avr.sblo.jp
こちらの方が、アップデートがしやすいのでもう少し情報改定が進むかと考えております。
また、目的をはっきりした方が挑戦される方も増えるのではないかと勝手に考え、内容も少し変更しております。
今後ともよろしくお願いいたします。
なお、新ブログのアドレスは下記の通りです。また、このブログのトップにもリンクアドレスを掲載しております。
http://jn3xby-avr.sblo.jp
2006年05月07日
¥180グラフィックLCD U
2006年05月04日
¥180グラフィックLCD
2006年02月05日
LCFメーター
2006年01月29日
周波数カウンター2
LCメーターのつもりが周波数カウンターとしての性能アップに
向かってしまっています。
まず、周波数拡張手段としてマイコンの前段にプリカウンターを
接続しました。たまたま手持ちに74HC393が1個だけあったのでこ
れを使いました。これで1/16に分周しますので、測定周波数は、
16倍となり約24MHzまで測定できることになります。
しかし、このままでは表示最小分解周波数は16Hzとなりますので
プリカウンターの値(4bit)をマイコンに入力し読み取ることに
よって1Hzまで表示できるようにしました。(1Hzの必要性は?)
24MHzの信号を入れて表示している様子が上の写真です。
LCDにつながるリード線の下に見えるのが74HC393です。
次に、更なる測定周波数拡大のためにマイコンの基本クロックを
12.8MHz(秋月で\200で売っているTCXO)にしました。
これで計算上は70MHz位まで測定できるはずです。
データシートによれば74HC393も72MHzまで高速動作可能とかいて
あるので多分大丈夫でしょう。
残念ながら、信号源になるものがないので測定できていません。
次の写真はLC測定用に作った発振器の周波数を測定表示していま
す。
周波数カウンター
共振周波数を計算して測定するLCメーターを作ってみようと実験を
始めました。
そのためには、まず周波数が計測できなければいけないので周波数
カウンタがBASICで作れるかを実験してみました。
周波数カウンターの実現方法は色々あるようですが、最も考えやすい
ゲート時間に何カウントするかという方法でやってみました。
とりあえず1Hzまでは読むこととし、ゲート時間1秒を作りました。
次に、このゲート時間に外部からの信号をカウントするカウンター
を設定して、その値をLCDに表示するようにしました。
外部から1.5MHzの信号を入れて表示したのが上記の写真です。
使用したICは、マイコンとしてアトメルのAT90S2313 1個のみ
です。LCDにはとりあえず以前秋月で\300で仕入れていた16文字1行
の物を使いました。
BASICで大丈夫?と思っていたのですが、いとも簡単に出来上がり
ました。
色々調べてみた結果、外部信号をカウントする入力は、内部で
基本クロックと同期してあるので基本クロックの1/2位までしか
カウントできないということでした。
そこで、どの位まで測定できるか入力する信号の周波数を変えて
実験してみました。
マイコンの基本クロックには、4.194304MHzを使用しましたので
2MHz位までいけるかなと思っていましたが、実測では、1.67MHzが
限界でした。
LCメーターを作るのが目的なので、周波数の限界はこれで十分なの
ですが、あまりに簡単にできてしまったので周波数カウンターと
しても使えるものにしようかと考え始めています。
写真で基板の奥に見えるICは、LC測定のための発振回路用ロジック
ICです。

