2008年01月29日

I2C もどき!

時間がたつのは早いものです。
今年ももう1/12が過ぎようとしています。
昨年から続けているATTiny2313を使ったI2Cインターフェースに
よる7SEG LEDのドライバですが、やっとのことでそれらしく
仕上がってきました。
結論から言うと、I2CではなくI2Cモドキです。
使用している言語であるBASCOM−AVRにはI2Cのマスター機能と
してのコマンドがあり、これを使ってスレーブ側のプログラム
を作って色々悩みながら進めてきましたが、どうしてもデータ
の取りこぼしがあり、約1ヶ月の試行錯誤の末の結論は、マス
ター側のコマンドには何かの癖があるようで、これも独自に
プログラムを作ってやることによって、無事動作を開始しまし
た。
マスターもスレーブも自分で作ったプログラムなので、正確に
I2Cの仕様に合わせる必要はなく、不必要で複雑な部分はカット
して、作り上げました。
これにより、ロータリーエンコーダーでカウントした値を、I2C
モドキで8桁の7SEG LEDドライバに送信して、目的の周波数表示
が行えるようになりました。
メインダイヤルノブを回転し、それ結果として周波数表示が
変化する様子を録画してみました。
あまり綺麗な映像ではありませんが。

MOV00516.MPG.AVI
posted by jn3xby at 23:07| Comment(0) | TrackBack(0) | AVR&BASIC

2008年01月03日

謹賀新年 今年の自作品

DSC00394.jpg    
遅ればせながら、明けましておめでとうございます。
自作品といっても完成品ではありません。
最近、検討を続けている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枚基板
構成としました。

DSC00397.jpg DSC00398.jpg


とりあえず4PIN(Vdd、GND、SCK、SDA)で表示ができるよう
になりました。
いつものように、基板を作ってからプログラムを作ったのです
が、正月の酒のせいでプログラムを作るのに時間が掛かりまし
た。実装用には、これからの詰めが必要です。

DSC00399.jpg DSC00400.jpg

MOV00402.MPG
posted by jn3xby at 23:07| Comment(0) | TrackBack(0) | AVR&BASIC

2007年12月16日

BASICでI2C スレーブ実験U

DSC00383.jpg

久しぶりに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
posted by jn3xby at 22:50| Comment(0) | TrackBack(0) | AVR&BASIC

2007年12月09日

またまた、AVR USB ライター

DSC00376.jpg

BASCOM-AVRで使用するUSBライターとして、AVRaspを製作し、愛用してきましたが、kumanさんのサイトでATMELの提供する開発ツールであるAVRStudio4で使用できるUSB ライターの製作記事を見つけました。
名前がAVRISPMKUとなっており、もしかしてBASCOM−AVRでも使えるのではないかと期待して作ってみました。
kumanさんによれば、原典はATMega168でXTALが16MHzということで、kumanさんご自身でATMega8で12MHzXTALにプログラムを変更されており、お願いしてMega8用のプログラムを送っていただき、製作しました。
同時に、16MHzのXTALも大変お世話になっているOMさんに送っていただき、ATMega168 16MHzXTALも実験してみました。

DSC00372.jpg

いずれも快調に動いております。
しかし、肝心のBASCOM-AVRでは動きませんでした。
このライターは書き込みスピードではAVRaspを更に少しだけ上回っている感じです。
また、FUSE bitの設定がデバイス毎にチェックボックスでできるようになっており、視覚的で使いやすくなっています。
ライター部分のS/Wだけ独立させてBASCM-AVRのEXTERNAL Writerとして使用できないか検討してみましたが、残念ながらできないようでした。
AVRStudio4を使ってアセンブラでプログラムを作る方には、シンプルで安価な高速ライターとしてお奨めです。
今回も、FRISKケースで作りました。
今回は、基板パターンは書いたのですが、1台だけ蛇の目基板で作りました。
マイコンは、ソケットにしたため高さ方向で高くなり、FRISKの蓋は穴を開けてあります。

DSC00375.jpg

USBAVRminiProg.BMP
回路図

kumanさんのサイトの記事
http://www.geocities.jp/kuman2600/n6programmer.html#12

原典のサイトの記事
http://www.simonqian.com/en/AVRminiProg/index.html
posted by jn3xby at 15:30| Comment(0) | TrackBack(0) | AVR&BASIC

2007年11月24日

BASICでI2C スレーブ実験

DSC00346.jpg
実験の様子

今日は、途中で投げ出していたI2Cのスレーブ側のプログラムを
再度挑戦していました。
これまで、割り込みやら、シフト命令やら、ポート入力やら、色々
な方法で試していたのですが、どれもうまく行っていませんでした。
今回は、本当にマスター側からちゃんとした信号が出ているかなど
を、PCでのロジックアナライザを駆使しながら、一歩ずつやって
みました。
結果として、使用しているBASICのマスター命令での信号の出方
にも癖があり、それらを認識した上でスレーブ側(受信側)の
プログラムを作ればいいことがわかりました。
今回のテストプログラムは、割り込みなど使用せず、データと
クロックのポートをメインルーチンで監視しながら1ビットずつ
取り込む方法でスレーブ機能を実現しました。
受信したデータはアドレスとデータのそれぞれ8ビットずつです
が、設定したアドレスを認識し、送られたデータをLCDに表示でき
ています。

DSC00344.jpg
1行目がアドレス、2行目がデータ

I2CのパラレルI/O ICであるPCA9555と並列接続し、PCA9555用の
アドレスとデータ、今回作ったATTiny2313スレーブのアドレスと
データを送り、きちんと識別してデータの取り込みを行っています。
今回は、旨く行ったようです。

DSC00341.jpg
ATTiny2313に送られたデータの様子
posted by jn3xby at 19:31| Comment(0) | TrackBack(0) | AVR&BASIC

2007年10月14日

DDS直接駆動PSK31

PSK31TEST.JPG

 最近、海外のサイトで、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”を使用して復調の様子を写したものです。
posted by jn3xby at 22:39| Comment(2) | TrackBack(0) | AVR&BASIC

2007年10月07日

IFシフト付ローコスト周波数カウンタ

DSC00267.jpg

先週は、¥120のATTiny2313と10個¥100の7SegLEDを使用した6桁周波数カウンタを製作しましたが、今週は、これを発展させ自作のトランシーバー等に搭載して使えるようにIFシフト機能を追加してみました。
その結果は、だいぶ以前に製作した7MHz CW TRX「善峰」に接続して確認してみました。
「善峰」は、VXOやBFOの信号出力を取り出すようにできていませんでしたが、今回追加しました。
信号の取り出し口にはRCAのピンジャックを使用し、VXOとBFOの信号をSWで切り替えて出力できるようにしました。
また、ケーブルには、TRX側から周波数カウンタの電源が取り出せるように、Cカットして電源重畳としました。

DSC00281.jpg

IFシフト機能は、まずTRXの信号出力をBFO側にして周波数を計測します。

DSC00275.jpg

この状態で、周波数カウンターのIFシフトメモリーSWを押します。

DSC00280.jpg

これでシフトするIF周波数が記憶されます。

DSC00278.jpg

次に、TRXからの出力信号をVXO側に切り替えます。
これで、IFシフトした分の周波数が補正されて、周波数表示されるようになります。

DSC00278.jpg   DSC00267.jpg

補正前のVXO周波数         補正後のVXO周波数 

この機能により、どんなIF周波数のTRXでも、周波数が測定できる範囲であれば補正をかけた周波数表示が可能になります。
「善峰」のようなVXOタイプのTRXで周波数表示をするには、非常に便利な周波数カウンターとして仕上がりました。
課題は、ATTiny2313のプログラムメモリーが2KBと小さく、基本機能しかプログラムできなかったことによる制限です。
VXOの周波数が受信周波数に対し、+IFなのか、−IFなのか、また、BFOがLSBかUSBかなのかについては、プログラムで書き換える必要があります。
最初に設定すれば、後は使わない機能ではありますが、プログラムメモリ容量が足りなくて汎用性は失われています。
4種類のプログラムを用意して選択して書き込めば用は足りますが。

DSC00274.jpg
ISPでプログラム書き込み中の様子

7SegLED_FrequencyCounter_IFShift071007.BMP
回路図

7segLedFrequencyCounterIFShift071007.pdf
プログラム(PDF)
posted by jn3xby at 15:09| Comment(0) | TrackBack(0) | AVR&BASIC

2007年09月03日

AVR用ISP端子配列考

ISP端子070814.JPG

既に一部で公表してますが、こちらにも書いておきます。
AVRのISP端子を基板に実装しようとする時、標準の6Pinや10Pinはパターンを引くのに決して合理的な配列にはなっていません。
当局が、いくつかのTRXなどを作る時に何気なく配列していたものを整理すると、意外にも主要なAVRにはISP関連のポートに規則性があり、うまく行くことがわかりました。
主要AVRの端子配列と合わせて、ご参考になれば!
PDFファイルはこちらです。

ISP端子070814.pdf

こちらにも掲載してます。

http://qrp-homebrewers.net/AVR_ISP.aspx
posted by jn3xby at 21:55| Comment(0) | TrackBack(0) | AVR&BASIC

2007年08月16日

USB AVR用 USBライターの製作 その2

昨日の製作編に回路図を掲載するのを忘れてしまいました。
また、ファームウェアの書き込みとか、ライターとして操作するためのソフトウェアとか、非常に長くなるので、HPの方に纏めました。

http://qrp-homebrewers.net/usbasp.aspx

こちらを参照ください。
posted by jn3xby at 19:56| Comment(0) | TrackBack(0) | AVR&BASIC

2007年08月15日

USB AVR AVR用 USBライターの製作

DSC00063.jpg

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ショップのものを使用するなど、できるだけ安く仕上げることを目標にしました。

後は、いつものような自作工程です。

DSC00018.jpg
基板図の生基板への焼付けです。アイロンを使用します。

DSC00021.jpg
焼付け完了です。

DSC00032.jpg
レーザープリンタの印刷ムラで発生するスをマジックで修正します。

DSC00034.jpg
エッチングを始める道具達です。

DSC00037.jpg
沸騰した湯にエッチング液を混ぜてエッチングします。
濃い紅茶色位です。(湯とエッチング液が半々)

DSC00039.jpg
エッチングが終わると、真っ黒になります。3,5分で終了です。ちんちんのお湯を混ぜるのがミソです。

DSC00043.jpg
焼きつけたパターンマスクを磨いて除去します。これで基板は完成です。

DSC00045.jpg
FRISKのケースに収まるように出来上がりました。

DSC00052.jpg
殆どの部品が実装できました。

DSC00057.jpg
ケーブルも接続し、ケースにも入りました。

DSC00061.jpg
でもどうしても水晶の厚み分がケースに入らず、蓋に穴を開けました。

DSC00062.jpg
蓋に、ラベルを貼って完成です。
今日はここまでです。
posted by jn3xby at 23:36| Comment(5) | TrackBack(0) | AVR&BASIC

2007年06月10日

390円液晶

DSC01438.jpg

ヤフオクで16文字4行の液晶を390円で売っていましたので、
早速ゲットし、表示してみました。
コントラストも良く、表示ができています。
プログラムは、いつもの通りBASCOM−AVRです。
表示だけなので、プログラムは下記の通り、シンプルです。

表示の内容には意味はありません。
こんなのが作れたらいいな〜という文字を並べてみました。


Cls
Cursor Off
Lcd "ANTENNA ANALYZER"
Lowerline
Lcd " Made by JN3XBY"
Thirdline
Lcd "Freq.=7003KHz"
Fourthline
Lcd "R=50ohm X=-1000j"
End
posted by jn3xby at 19:36| Comment(0) | TrackBack(0) | AVR&BASIC

2007年05月24日

LCF Meter 続の3

LCFメーターの方も、出張やらで進んでおりませんでしたが、
とりあえず、1個の基準コンデサでどういう風に、未知のLとCを
測定するのか、計算式を纏めて見ました。
数式を記述する適当なソフトが無かったのでWORDで書いてPDF化
しました。
もし、興味があれば読んでみてください。

LCMeter.pdf
posted by jn3xby at 22:27| Comment(0) | TrackBack(0) | AVR&BASIC

2007年04月22日

LCF Meter 続の2

DSC070422_1.jpg     DSC070422_2.jpg
基板の様子           ケースに入れた状態

先週で大まかなプログラムの目処が立ったので、今週は、昨日の昼からプリント基板の設計を始めて、夜には出来上がり、今日は、ケースの加工をしていました。プログラムはまだこれからが本格的な作りこみとなりますが、とりあえず、LとCと測定できています。

L、Cの計算は、先週の計算式をよく見ていたら、基準コンデンサは1個でいいことが解りました。
計算式は、後日まとめてアップしたいと思ってます。
今回、初めて浮動小数点を使いました。これによって精度の高い計算が可能になりました。
posted by jn3xby at 19:29| Comment(0) | TrackBack(0) | AVR&BASIC

2007年04月15日

LCF Meter 続編

DSC01067.jpg    DSC01068.jpg   
キャリブレーション直後        56pFの積セラの測定値

ディップメータ内蔵用の周波数カウンタを作ったので、ついでに去年の
2月5日より滞っていたLCF Meterを再開しました。
1年以上も前に配線した基板で、なぜか回路図もなくとりあえず基本部
分のみを動作させながらプログラムを作りました。
浮遊容量を算出する部分など、どうにか動作しています。
基準となるのは、2個の容量のわかったコンデンサだけです。
このコンデンサには、精度が高く温度特性もいいものが必要になります。
とりあえず、手持ちのフィルムコンデンサで実験を開始し始めました。
posted by jn3xby at 20:54| Comment(0) | TrackBack(0) | AVR&BASIC

2006年08月18日

新連載 開始

ホームページの方で、最近滞っている きまぐれ連載 BASICでAVRしよう!のリニューアルとして、新たにブログを開設しました。
こちらの方が、アップデートがしやすいのでもう少し情報改定が進むかと考えております。
また、目的をはっきりした方が挑戦される方も増えるのではないかと勝手に考え、内容も少し変更しております。
今後ともよろしくお願いいたします。
なお、新ブログのアドレスは下記の通りです。また、このブログのトップにもリンクアドレスを掲載しております。

http://jn3xby-avr.sblo.jp
posted by jn3xby at 19:31| Comment(0) | TrackBack(0) | AVR&BASIC

2006年05月07日

¥180グラフィックLCD U

TEST基板6.jpg

ついに大型連休も終わりとなってしましました。
気軽に始めたグラフィックLCDの制御ですが、この連休中、ずっとこれに付き合う羽目になり、お陰で¥180でしっかり遊べました。(遊ばれたが本当:笑)
何とか、グラフィック表示は出来るようになったものの、肝心の表示データの書き込み通信まではいたりませんでした。
通信のところは、別に検討が必要な気がしています。
このLCDが日の目を見るのは何時のことになるのだろう?
posted by jn3xby at 18:56| Comment(0) | TrackBack(0) | AVR&BASIC

2006年05月04日

¥180グラフィックLCD

TEST基板5.jpg  TEST基板2.jpg

日本橋のデジットでたった¥180のグラフィックLCD(128×64ドット)を見つけたので購入してみました。
動かせるかどうかもわからなかったのですが、使用しているICの資料を睨みながら試行錯誤の結果。写真のようなところまで動き始めました。
マイコンはアトメルのATMega8を使用し、言語は勿論BASICです。
RAMがフルグラフィック分無いので、現時点は、16×8文字のキャラクタ表示器にしかなっていません。
これからどう料理するか考えたいと思っています。
posted by jn3xby at 20:11| Comment(0) | TrackBack(0) | AVR&BASIC

2006年02月05日

LCFメーター

IMG_2701.jpg
安易な気持ちで実験を始めたLCメーターですが、周波数カウンター
としても使用できるようにとか、実際にプログラムを書き始めたら
2313やTiny26のROM容量では足りないとか、色々不具合も出てきて、
結局、Mega8を使って作ることになりました。
実験基板には載らないし、レイアウトも良くないので、一回り大き
な蛇の目基板で作り直しです。
とりあえず、配線だけは終わりました。プログラムの移植はこれか
らです。
posted by jn3xby at 19:12| Comment(0) | TrackBack(0) | AVR&BASIC

2006年01月29日

周波数カウンター2

IMG_2696_060129.jpg
LCメーターのつもりが周波数カウンターとしての性能アップに
向かってしまっています。
まず、周波数拡張手段としてマイコンの前段にプリカウンターを
接続しました。たまたま手持ちに74HC393が1個だけあったのでこ
れを使いました。これで1/16に分周しますので、測定周波数は、
16倍となり約24MHzまで測定できることになります。
しかし、このままでは表示最小分解周波数は16Hzとなりますので
プリカウンターの値(4bit)をマイコンに入力し読み取ることに
よって1Hzまで表示できるようにしました。(1Hzの必要性は?)
24MHzの信号を入れて表示している様子が上の写真です。
LCDにつながるリード線の下に見えるのが74HC393です。
次に、更なる測定周波数拡大のためにマイコンの基本クロックを
12.8MHz(秋月で\200で売っているTCXO)にしました。
これで計算上は70MHz位まで測定できるはずです。
データシートによれば74HC393も72MHzまで高速動作可能とかいて
あるので多分大丈夫でしょう。
残念ながら、信号源になるものがないので測定できていません。
次の写真はLC測定用に作った発振器の周波数を測定表示していま
す。
IMG_2698_060129.jpg
posted by jn3xby at 17:18| Comment(0) | TrackBack(0) | AVR&BASIC

周波数カウンター

IMG_2693_060129.jpg
共振周波数を計算して測定する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です。
posted by jn3xby at 12:49| Comment(0) | TrackBack(0) | AVR&BASIC