2015年12月31日

周波数安定度比較

今年も早いものでもう大晦日になってしまいました。
9月の末に慌てて何か書かなくちゃと生存証明を書いてから、
早3ヶ月です。

今年は、昨年の高精度病から脱却して新しいことを始めようと、前半は、AirBand受信機を作ったり、Arduinoを始めたり、IoTを気取ってWiFiモジュールをいじったり、蛍光表示管でGPS時計を作ったり、タッチパドルを作ったりしてハムフェアまでを迎えたのですが、ある時aitendoでNEO-6Mなる新しいGPSモジュールを見つけて、また高精度病復活となり後半を過ごしてしまいました。

更にお世話になっているOMさんからModulationDomainAnalyzer(MDA)なる面白い測定器を譲っていただき、昨年にも増して深みにはまってしまったというのがこの1年でした。

しかし、頭の中では漠然とわかっていたことが実際に色々とやっているうちに更に理解が深まり、これまでにやったことをあらためて測定を行い整理してみて、なるほど言われている通りだったんだということを知った有意義な1年でした。

何も新しいことはありませんが、実際に測定したデータで比較したものは今まで見たことがなかったので当局的にはとても新鮮でした。

また、周波数カウンタだけでは周波数の安定度は測れないということも初めて知ることができました。

そこで、今年最後の記事はXTAL、OSO、TCXO、OCXO(シングルオーブン)、OCXO(ダブルオーブン)、ルビジウムとNEO-6MというGPSモジュールのクロック出力の周波数安定度比較した測定データを並べてみました。
単なる測定器の写真データの比較ですが、ご参考にでもなればと思います。

俗に色々な文献で周波数の安定度は概略次のように言われています。

XTAL 10~5 TCXO 10~6 OCXO 10~8 ルビジウム 10~10 
セシウム 10~13以上

経時変化はこれの1桁上ほどの変化があるといわれています。
今回は、この初期性能の確認が目的です。

もちろんセシウムは持っているはずもないので確認できていません。

(1)XTAL 10MHz

XTAL 10MHz XTAL.jpg

XTAL 10MHz.jpg
適当な定数で組んでおり調整もしていないのできっちり10MHzではない



カウンタで見る限り、0.1Hz台以下での変動である

XTAL 10MHz MDA 1Hz.jpg
スパン1Hzでの周波数変動のヒストグラムです。これも1Hz以内に見えます。
標準偏差も200mHzを切っていますので、3σ(99.7%をカバー)で600mHz以内の変動ということになります。
結構優秀です。

XTAL 10MHz MDA 10Hz.jpg
スパン10Hzで比較的長時間見ると標準偏差500mHzになっています。それでも1.5Hz以内になります。
1.5×10~7の安定度というところでしょうか!?

XTAL 10MHz オシロ.jpg
1石で簡単に作った発振回路ですが結構きれいな波形が作れてます。

(2)OSC

OSC 12MHz .jpg
いわゆるXTALオシレータです。10MHzに近い手持ちが12MHzでした。130Hzほど低い発振です。


こちらは更に1桁低い動きに見えます。20秒間では約0.1Hz以内の変動です。

OSC 12MHz MDA 2Hz.jpg
スパン2Hzでのヒストグラムです。カウンタの測定値と違って結構動いています。標準偏差は約500mHzですから3σは1.5Hzですから、結果としてはXTALと同じ位の変動は幅となっています。

TCXO 12.8MHz オシロ.jpg
このオシレータの出力波形はノコギリ波に近い波形でした。

(3)TCXO

TCXO 12.8MHz.JPG
昔、秋月で売っていた京セラ製の12.8MHzのTCXOです。
これも20Hzほど低い発振周波数となっています。


これは優秀です。20秒間で10mHz以内の変動幅です。

TCXO 12.8MHz MDA 1Hz.JPG
スパン1Hzでのヒストグラムです。この測定では結構変動幅があります。標準偏差70mHzですので3σで約210mHzの変動幅を持つことになります。
2×10~8の安定性能ということになります。

TCXO 12.8MHz オシロ.JPG
このTCXOも出力波形はノコギリ波に近い形になっています。

(4)OCXO 5MHz(TOYOKOM製 シングルオーブン)

OCXO 5MHz TOYOCOM.jpg
昨年のハムフェアで仕入れたシングルオーブン型のOCXOです。

OCXO 5MHz.jpg
外部周波数可変端子はオープンでの発振周波数です。3.5Hzほど高くなっています。

さすがOCXOです。1mHz以内の変動幅で観測されています。

OCXO 5MHz MDA 1Hz.jpg
スパン1Hzでのヒストグラムです。TCXOと比較して非常に変動幅が小さくなっています。

OCXO 5MHz MDA 50mHz.jpg
スパンを50mHzで観測したときのヒストグラムです。標準偏差は9.6mHzですので、3σは約30mHzの変動幅ということになります。
3×10~8の安定度ということになります。

OCXO 5MHz オシロ.jpg
出力波形は、ほぼ矩形波のようです。

(5)OCXO 10MHz(MORION製 ダブルオーブン)

OCXO 10MHz MORION.jpg
ebayで仕入れたロシア製ダブルオーブンの10MHzOCXOです。日本ではオーディオ用標準信号としての用途で急騰しているようです。

OCXO 10MHz.jpg
これも周波数可変端子はオープンでの測定です。0.2Hzしかずれていません。


これも1mHz台での変動です。カウンタでは、シングルオーブンより動いているようにも見えます。

OCXO 10MHz MDA 1Hz.jpg
スパン1Hzでのヒストグラムです。

OCXO 10MHz MDA 50mHz.jpg
これはスパン50mHzでのヒストグラムです。標準偏差も約9mHzですのでシングルオーブンと大差はありませんが、発振周波数が2倍だということを加味すると変動幅は半分ということになります。

OCXO 10MHz オシロ.jpg
これは正弦波の出力波形です。

(6)ルビジウム 10MHz(FE5650)

ルビジウム10MHz.bmp
昨年調整したルビジウムです。0.0001Hzのずれですが、ここまでくるとカウンタの基準とどちらが正しいのかわからなくなります。


0.0006Hz以内の変動幅です。これも基準の変動との違いは見分けられません。

ルビジウム 10MHz MDA 1Hz.jpg
スパン1Hzでも変動幅が非常に狭く観測されています。

ルビジウム 10MHz MDA 50mHz.jpg
スパン50mHzでのヒストグラムです。標準偏差は1.7mHzです。3σで約5mHzの変動幅です。
5×10~10の安定度ということになります。
使用した周波数カウンタも、MDAも基準発信器はもうひとつのGPS制御されたルビジウム(LPRO-101)で、安定度は被測定ルビジウムと同じ程度と思われますので、これくらいの値になるとどちらの安定度を測っているのかわからないと思います。

ルビジウム 10MHz オシロ.jpg
これも出力波形は、正弦波です。

結論から言うと、XTALは言われているより1桁くらい良いのかな?という結果でした。後は大体言われているような性能でしょうか?!

しかし、どこまでの精度を要求するかにもよりますが、経時変動で1桁は動くことを考えると何か周波数標準がないと不便であることも事実ではないかと思います。
もちろん校正されたルビジウムがあれば1桁狂ってもmHZ台だと思いますので全く問題はないでしょう!
ただし校正されていることが前提となります。
ルビジウムも調整トリマがついており数十mHzは平気で動かせます。
ダブルオーブンのOCXOもたまたま開放で初期値は良かったのですが外部端子で数Hzは動きます。
どのくらいの精度があったのかは今では知る良しもありませんが、昔秋月からカラーバースト信号を基準にした10MHzの基準信号源がありました。実は当局も買っていたのですが、作らないうちにアナログTV放送がなくなってしまいました(笑)
XTALを使った周波数カウンタをいくつか作りましたが、こうしてみると作ったカウンタの基準を正しく合わせられないと何を測っているのかわからなくなります。
昨年、高精度病に罹っていったのはここに原因があったわけです。
周波数カウンタを合わせるのに、カウント桁数の多い周波数カウンタを購入して、それの基準周波数がかなりいい加減でこれを合わせるのにルビジウムをお借りして合わせて、それでもどんどん変化するので結局ルビジウムを購入して、カウンタも12桁まで読めるものだから100μHz台の変動が気になってしまってという泥沼です。
もし、購入した周波数カウンタが10mHzまでしか読めなかったらこれほど酷くはならなかったのではと思っています(笑)
購入した周波数カウンタでそこそこの安定度が得られても、実は正しく測っているとは限らないということもわかりました。
例えば、1秒間のサンプリング(ゲートタイム)で半分が15MHz、半分が5MHzであっても周波数カウンタの表示は10MHzとなるのです。
これを繰り返していた場合、カウンタはずっと10MHzを表示し続けます。

MDAはこの動きを観測できるのです。もちろん、MDAであってもサンプリングタイムには限界がありますから同じようなことが起きていると思います。周波数カウンタにも標準偏差を測定計算する機能があるのですが、一致しません。どちらも目安と思って使用するべきではないかと。
要は、使う側が理解して使わないと一喜一憂してしまうということだと思います。
当局はそれを知りました。

いずれにせよ、アナログTV放送がなくなった後の現在、基準に使える信号が見当たらず困っている局も多いのではないかと思いますが、ルビジウム精度を求めるのでなければ(0.1Hzが合わせられる)、比較的安く入手できる便利なものを見つけました。それが、aitendoで見つけたNEO-6MというGPSモジュールです。

通常GPSモジュールは1Hzの基準信号が出力されていることが多いのですが、このモジュールはスペック外ですが〜10MHz間での信号を出力することができます。
この信号はセシウムを基準とした周波数制御が行われているGPS制御で生成される信号なので基準信号になるのではと思ったのです。

サイト検索をすると当然既に検討された方が多くいらっしゃいます。このモジュールは内部基準が48MHzで動いているので整数分の一ではない10MHzはジッターが多くて使えないとの評価でした。逆に整数分の一の周波数なら使えるのではないかと思いました。例えば、8MHz、6MHz、4MHz、1MHzなど。
それで実施した実験での測定結果が以下の通りとなります。

(7)NEO-6M 8MHz

NEO-6M 8MHz.jpg
そこその周波数精度が出ています。


20秒間の観測では±50mHz程度の安定度です。

NEO-6M 8MHz MDA 50Hz.jpg
スパン50Hzでのヒストグラムです。なんと標準偏差約3Hzです。3σで15Hzの変動幅となります。
GPS制御されていますので中心周波数は6mHz程度のずれですが、基準に使うには変動幅が大き過ぎます。

NEO-6M 8MHz オシロ CLKOUT.jpg
出力クロックは、整数分の一でそれなりに安定しているようには見えるのですが....

NEO-6M 8MHz オシロ.jpg
先のクロックを2じのBPFを通して正弦波化した観測波形です。綺麗な正弦波になっています。

(8)NEO-6M 6MHz

周波数カウンタの写真を撮るの忘れました。


20秒間の動画では、±100mHz以内で変動しています。

NEO-6M 6MHz MDA 50Hz.jpg
これもスパン50Hzでのヒストグラムです。標準偏差2.6mHzを超えています。中心は16mHzのずれですが。

NEO-6M 6MHz オシロ.jpg
同じく、2じのBPFを通した波形です。

(9)NEO-6M 1MHz

NEO-6M 1MHz.jpg
1MHzです。


±20mHz以内の変動に見えます。周波数カウンタの校正用には使えるかもしれません。

NEO-6M 1MHz MDA 5Hz.jpg
スパン5Hzのヒストグラムです。標準偏差490mHzです。中心は2mHzのずれですが、周波数が1MHzということを考えると大きな変動幅だと思います。

NEO-6M 1MHz オシロ CLKOUT.jpg
BPFを作らなかったので出力波形のみです。矩形波です。

(10)NEO-6M 10MHz

IMG_0215.jpg

NEO-6M 10MHz.jpg
10mHz台が観測できます。


最大で±80mHzの変動といったところでしょうか!

NEO-6M 10MHz MDA 500mHz.jpg
スパン500mHzのヒストグラムです。標準偏差は約100mHzとこれまでの中では一番安定しています。3σは300mHzということになります。
中心周波数のずれも129μHzとなっています(たまたまだと思います)

NEO-6M 10MHz オシロ CLKOUT.jpg
クロックアウトです。同期が取れません。これまでの評価でジッターが多いというのはこのことだと思います。基準クロック48MHzで、約1/5でしかも整数分の一ではないためDDSの原理から複数の周波数が見れているのだと思います。しかし、サンプリングの定理からすればちゃんとしたBPFを通せば正弦波は得られるはずです。

NEO-6M 10MHz オシロ.jpg
2次のBPFを通した波形です。BPFはaitendoの10.7MHzのコイルを2つ使いました。
しっかりとした正弦波が出ています。出力も約1.5V(50Ω終端)出ています。

波形だけ見れば8MHzや6MHzのほうがよさそうですが、3σの値でHzオーダーで動いているのを見てしまうと中心周波数はそれほどずれていないので多分大丈夫だとは思うのですが、なんとなく気分が良くありません。

10MHzは、直接出力波形だけを見ると使えないと思うのですが、チャンとフィルタリングしてやれば3σで300mHzしか動いていませんし、中心周波数もかなりの精度となっていますので、周波数カウンタ合わせの基準信号としては100mHzいや10mHz台まで校正できる基準として使えるのではないかと思います。
このGPSモジュールは、aitendoで1980円しかしませんし1個50円のコイルが2個とコンデンサが1個、インバータロジックICが1個、抵抗が4個全部で基板を入れても2500円もかからないでしょう!
GPSモジュールのパラメータ設定にUSB-シリアル変換モジュールがいるので持ってなければ後500円位かかりますが、いずれにせよ安価で手軽な周波数基準信号が手に入ることになります。

回路図は掲載しませんでしたが、希望の方がおられましたら送付したいと思います。

校正の必要は全くありませんので、ローカルさんがいなくてもいつでも基準信号が手元にあることになり便利だと思います。もちろんGPS方式ですから、アンテナは窓際か窓の外に出す必要がありますが、合わせるときだけですから、何とかなるでしょう。

しかし、何故10MHzだけが良い結果になったのかはわかっていません。GPSモジュールのメーカーの人だけが知る原理があるのかもしれません。

もっと精度の高い基準の検討も色々やって入るのですが、まだこれといった結果が出ていないのでもうしばらく病気は続くのかもしれません。
早く治らないと、次の自作もできないし、ここしばらくOnAirもできていないのでとか思いつつ2015年もあと少しとなりました。
ここまで読んでいただいた方々には、かなりの長文でしたのご苦労をおかけしました。
御礼を申し上げます。
来年は長文にならないようにもう少しBLOGのアクティビティもあげられればと思います。
2015年、大変ありがとうございました。
来る2016年も宜しくお願い申し上げます。

posted by ja6irk at 18:55| Comment(7) | TrackBack(0) | QRP-HomeBrew

2015年09月30日

9月も終わり

DSC01608.jpg

明日は、あっという間の夏が終わって、秋の気配の10月です。
Wifi IoTから何もやってなかったかというと、逆に色々やってはいたのですが、なかなか成果の上がるものはありませんでした。
その中で、自作はやっていますよ!という証明でとりあえずケースまで入った自作品を2つ掲載します。
一つは、ウクライナ製VFD管を使用した、GPS同期時計です。
1秒のくるいもありませんし、停電しようが、昼間電源を切っていようが、電源をONすれば数十秒ですぐに自動で正しい時刻を表示してくれます。
シャックの標準時計として作りました。



もう一つは、タッチパドルです。
去年のハムフェアで試作品が、今年のハムフェアでは製品が販売されていたタッチパドルをaitendoで売っているタッチ用ICを使用して作ってみました。デザイン的にも製品を意識したものにしてみました。

DSC01610.jpg

以上、8月、9月の自作品の一部です。中身がなくてすみません。
posted by ja6irk at 23:43| Comment(1) | TrackBack(0) | 徒然なるままに

2015年08月09日

ESP-WROOM-02 & Blynk

技適を取得したWiFiモジュールは先日紹介しましたが、これが結構人気のようで、aitendoだけでなく秋月でも販売が開始されたようです。
最初に販売されたショップよりも安く販売され(aitendo¥580、秋月¥550)今日の時点では、秋月のショップでは既に売り切れでした。一方、aitendoでは秋月対抗なのか、レジのところで¥500で売っていました。こちらは在庫が沢山あったようです。
秋月での型名(正式型名)は、ESP-WROOM-02(以前同じ型名で技適未取得のものが他で売られていたので要注意)です。
問題は、モジュールのピッチ変換でaitendoでは基板だけ売られています。AタイプとBタイプがあり、ブレッドボードではAタイプが使い安いのですが、今日の時点で売り切れでした。Bタイプは以前からあるESP8266と同じ配列なんでしょう、ブレッドボードでは使いにくく在庫がありました。

DSC01367.jpg

 さて本題です。温湿度センサーからのデータ取り込みWEBでの表示については参考にさせていただいたサイトオーナーashiyuさんからの支援で何とか使えるようになりました。
 自宅内ではこれでもいいのですが、最近はIoTという言葉とともにデータを外部のクラウドサーバにおいて、iPhoneやAndroid等の端末でどこからでもデータを見れたり逆に制御をしたりすることがはやっているようです。
実験用に無料で提供しているところもいくつか見られます。また、端末側のグラフィカルな表示やボタンなども簡単にできるアプリも提供されています。
今回は、その中で「Blynk」というものを使ってみました。

http://www.blynk.cc/
https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt=8

参考になるサイトも紹介されており、端末側のアプリもマニュアル無しでもとりあえず作れました。

DSC01366.jpg

写真のような情報を外出先から見ることができます。On/Offボタンなども作れるので、外からエアコンなどのOn/Offとか、植物の水遣りとか色々応用が考えられているようです。

以下、このWiFiモジュールに書き込んだプログラムです。
GPIO13に温湿度センサー、GPIO12にWifi接続確認用のLEDを接続しています。
殆どがサイトで紹介されているプログラムでオリジナルは殆どありませんが、実験されるかの参考になればと思って掲載しました。
※実験用でごみプログラムもありますが、それらは全てコメント処理しています。

/**************************************************************
* Blynk is a platform with iOS and Android apps to control
* Arduino, Raspberry Pi and the likes over the Internet.
* You can easily build graphic interfaces for all your
* projects by simply dragging and dropping widgets.
*
* Downloads, docs, tutorials: http://www.blynk.cc
* Blynk community: http://community.blynk.cc
* Social networks: http://www.fb.com/blynkapp
* http://twitter.com/blynk_app
*
* Blynk library is licensed under MIT license
* This example code is in public domain.
*
**************************************************************
* This example runs directly on ESP8266 chip.
*
* You need to install this for ESP8266 development:
* https://github.com/esp8266/Arduino
*
* Change WiFi ssid, pass, and Blynk auth token to run :)
*
**************************************************************/
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include
#include
#include
#define DHTTYPE DHT22
#define DHTPIN 13

DHT dht(DHTPIN, DHTTYPE,11);
float humidity, temp_f; // Values read from sensor

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "1f5088a7bda5*******1e5ca97d9e8";

void setup()
{
Serial.begin(115200);
Blynk.begin(auth, "****", "****");
dht.begin(); // initialize temperature sensor
pinMode(12, OUTPUT);
// digitalWrite(12, HIGH );

}

BLYNK_READ(1)
{
temp_f = dht.readTemperature(false);// Read temperature as Celsius
int value=temp_f*10;
String str;
char result[5];
result[0]=(value/100)+'0';
result[1]=((value/10)%10)+'0';
result[2]='.';
result[3]=(value%10)+'0';
result[4]='\0';
str +=result;
str +="℃";
//char buf[str.length()+1];
char buf[8];
str.toCharArray(buf,sizeof(buf));
Blynk.virtualWrite(1,buf);
}
BLYNK_READ(2)
{
humidity = dht.readHumidity(); // Read humidity (percent)
int value=humidity*10;
String str;
char result[5];
result[0]=(value/100)+'0';
result[1]=((value/10)%10)+'0';
result[2]='.';
result[3]=(value%10)+'0';
result[4]='\0';
str +=result;
str +="%";
//char buf[str.length()+1];
char buf[8];
str.toCharArray(buf,sizeof(buf));
Blynk.virtualWrite(2,buf);
}

void loop()
{
Blynk.run();

if (WiFi.status() != WL_CONNECTED) {
// コネクション確立済み以外のステータスなので
// 無線LAN接続NG LED消灯
digitalWrite(12, LOW);
} else {
//コネクションOKなので、点灯
digitalWrite(12, HIGH );
}
// delay(1000);

// delay(1000000);
/*
//1:μ秒での復帰までのタイマー時間設定 2:復帰するきっかけの設定(モード設定)
ESP.deepSleep(30 * 1000 * 1000 , WAKE_RF_DEFAULT);

//deepsleepモード移行までのダミー命令
delay(1000);
*/

}


posted by ja6irk at 19:17| Comment(2) | TrackBack(0) | AVR&Arduino

2015年07月12日

Arduino用Wifi

DSC01256.jpg

またしても、Arduinoネタです。
Arduino用のWifi基板(シールド)は非常に高くWifiを実験するにはコスト的に敷居の高いものとなっていました。一方で海外ではESP8266というICを使用した基板が非常に廉価で販売されており、使用例も沢山見つけることができています。
しかし、これらは技適を取得していないため国内での使用は問題がありました。
今年に入って技適の審査中である情報が散見されるようになっていましたが、ついに発売になり、当局も早速入手し実験してみました。
この基板はCEREVOというところが販売開始したもので、販売開始は7月7日で初日に注文し入手しました。
基板そのものはまだ在庫があるようですが、変換基板付きはすでに品切れのようです。
検索するとアマゾンでも、いくつか販売しているところが見つかり価格も殆ど同じくらいです。

入手して色々検索で調べていて、驚きました。
なんと、このESP8266はArduinoIDEで直接プログラム開発ができつまり、いわゆるArduino基板(UNOやNANOなど)は必要ありません。
Prominiやaitendoのあちゃんでいいのと同じように書込みにUSBシリアル変換が必要なのと、一般的に使用しないRTSの信号が必要になるのが課題ではありますが。

DSC01257.jpg

DSC01259.jpg

入手した基板の半田付けも終わったので、書き込み用のUSBシリアル変換基板の改造を行いました。
Prominiやあちゃんでいいのは、先日入手していた変換基板で問題はなかったのですが、RTS信号が必要なためICの端子から直接取り出し、もともと端子として出力されていたCTS端子のパターンをカットし接続しました。
書込みだけだとこれでいいのですが、デバッグするのにシリアルを使用する場合は、このRTS信号とDTR信号を切り離す必要があり、実際にやってみると確かにこの2つの線をはずさないとシリアル通信ができません。
いちいちつけたりはずしたりも不便なのでスイッチ基板を追加しました。

DSC01263.jpg

参考にしたのは、以下のサイトです。
http://tech-blog.cerevo.com/archives/859/
まずこちらで、自宅のWifiと接続できることを確認しました。

http://ashiyu.cocolog-nifty.com/blog/2015/07/esp8266exarduio.html
次にこちらで、ArduinoIDEのスケッチサンプルでWEBサーバー機能を確認しました。
ちゃんと自宅のWifiネットワーク二接続され、WEBサーバーとして動いています。

DSC01262.jpg

最終的には、電池駆動で温湿度データをWifiで送れるようにしたいと思って始めたのですが、温湿度データをシリアルで出力しデータとしてはセンサーとして動作していることは確認できたのですが、WEBサーバーのデータとして送り込むことができていません。この部分が自分で作成しているところなので難儀しています。
今日は時間切れになりました。
しばらく掛かりそうですが、ここがうまく行けばいろんなアプリケーションが作れそうです。
気長にやって行きたいと思っています。



posted by ja6irk at 19:17| Comment(7) | TrackBack(0) | AVR&Arduino

2015年07月05日

あちゃんでいいの

DSC01243.jpg

昨日、秋葉原での懇親会がありその前にaitendoに寄ってきました。
以前より売り切れになっていたArduino簡易版「あちゃんでいいの」が大量に入荷していたので購入してきました。
最初に売っていたのはどうも試作版のようで、色々変更になっています。
まずリセットボタンが追加になったのと、どうもDTRからリセット端子に行く信号をコンデンサでカットされていなかったようで、コンデンサが追加になっているようです。
これで、USBシリアル変換との接続で安心して使えるようになったのだと思います(推測ですが)
この基板で残念なのはプログラムの書き込みに使用するUSBシリアル変換のPinの並びと、「あちゃんでいいの」のPinの並びが違うことです。
aitendoの写真でもUSB-シリアル変換 [USB2RS-340G]が使われているようですが、DTRの信号が反対側になります。
このUSB-シリアル変換 [USB2RS-340G]は現在在庫切れのようで新製品としてUSB-TTL変換 [U2TL340-6P]が販売されていますが、これもUSB-シリアル変換 [USB2RS-340G]と同じPin配列ですので接続は注意しなければいけません。
前のモデルは500円で、新製品はリセットボタンと5V-3.3V切り替えスイッチが省かれているのに590円と値上げになっています。(この話題と関係ありませんが)
これらの変換基板と「あちゃんでいいの」との接続は下記の写真のようになります。

DSC01252.jpg

先週、当局が自作した「あちゃんでいいのもどき、XBYバージョン」はPin接続はDTRを反対側に入れ替えなくてもいいようにパターン設計しています。
俗に売られている、Arduino Pro、ProminiのPin配置も上記USBシリアル変換のPin配列と同じなので、何で同じにしなかったのかな?と疑問に思っています。
下記は「あちゃんでいいの」と「あちゃんでいいのもどき、XBYバージョン」を比較した写真です。

DSC01250.jpg

それから、あちゃんでいいのの製作で接続するLEDは基板上13番端子がLOWの時点灯する設計なっており、UNOなどとは論理が逆となっているため、パターンカットと接続を行い論理を反転し13番端子がHIGHの時点灯するように改造してあります。

いずれにせよ「あちゃんでいいの」¥166とUNOブートローダ書込み済マイコン¥350とUSBシリアル変換¥590の合計¥790で ArduinoUNOとほぼ同じ様なことが楽しめるようになり、コスト的な壁はものすごく低くなったのではないかと思います。(UNO用のシールドはそのまま接続できなくて配線しなければならないのは面倒ですが)
5月の連休から突然はじめたArduinoですが、これまでのBASCOM-AVRで当局が作れなかったものも作れるライブラリが世の中に沢山存在し、不得意なC言語をベースにしたツールではありますが、このツールの使いやすさが不得意部分を補佐してくれるので、非常に便利なAVR用プログラム開発ツールであると実感しました。
下記は、これまでに入手した、また自作したArduino基板群です。

DSC01254.jpg

左から、Arduino UNO、NANO、Promini、あちゃんでいいの、あちゃんでいいのもどきXBYバージョン旧、新 です。
posted by ja6irk at 12:22| Comment(2) | TrackBack(0) | AVR&Arduino

2015年06月14日

ISPでArduinoを楽しむY

DSC01236.jpg

先週は、aitendoで売り切れの「あちゃんでいいの」基板のもどき互換基板を作ったが、よく考えたらAVRマイコン幅で作れることに気づき作り直してみました。
また、先週の基板はUSB-232C変換基板との接続端子を「あちゃんでいいの」とおなじに順序にしたのですが、これに使用するUSB-232C変換基板の出力と同じ順序にすれば、書き込み用接続線を入れ子にする必要もなくストレートに接続できるためここのパターンも変更しました。
ICソケットに使用したのはリードの長いラッピング用の丸ピンソケットです。実は、これが意外と高く、また、最近はラッピングする人もいないのか入手困難でしたが、なんとか見つけて使ってみました。価格的には、ATmega328の値段より高くなっています(¥300)。

DSC01239.jpg

でもスマートにできたからOKとしました。ブレッドボードでの開発用ですから。
お決まりのLEDチカチカを書き込んで動作が確認できました。

DSC01240.jpg

ソフトの方は、ATmega168や328だけでなく、ATtiny2313や古いATmega8、ATmega48、88、8PinのATtiny45,13などを使えるように色々テストしていました。
サイト検索で実施例が沢山見つかるのですが、殆どが古いArduinoIDEのバージョン用(1.0.*)で最新の1.6.*やARMも対応した1.7.*ではなかなかうまく動いてくれません。
1.6.*でAttiny45を動かしているサイトを見つけ、そのファイルを参考にATtiny2313、4313やATmega48、8等はなんとか書き込みとLEDチカチカの動作まで確認ができました。
しかし、それぞれのAVRがもっている機能がどこまでプログラムできるのかは???の状態です。
実際に使ってみて確認するしかないかと思っています。

posted by ja6irk at 19:19| Comment(0) | TrackBack(0) | AVR&Arduino

2015年06月07日

ISPでArduinoを楽しむ X

写真 4.JPG

引き続きArduinoの使いこなしに挑戦しています。
これまでのBASCOM-AVRと違って多くのライブラリがサイト検索で見つけられるので、これまでやれなかったことを中心に試しています。
今回はISPではなく、中華製Arduino互換基板を使って、ブレッドボードで比較的実用的なものを実験してみました。
それが、上記写真の温湿度計です。これは単に温湿度を測ってLCDに表示するだけでなく、データをSDカードに保存し、更にWEBサーバーとしてWiFiで家庭内LAN上で他のPCやスマホから見れるようにしたものです。
これらが、ソフト作りで悩むことなく作れてしまう環境に感動しています。
当局の場合BASCOM-AVRだったら、WiFiやWEBサーバー等の仕組みを理解して自分でソフト作りが必要になって(探せば事例はあるのでしょうが)、いつまでたっても実現できなかったでしょう!
それぞれの機能ライブラリを簡単に組み合わせて高機能を実現できるのが、C,C++をベースにした構造化プログラミングのメリットなんだな!と今更ながら喜んでいます。
今回は、CPUに中華製Arduino Nano、温湿度センサーに秋月で入手していたDHT22、LCDも同じく秋月で入手していたAQM0802(8*2 I2C制御)、SDとWifiは東芝製FlashAirを使用しました。この東芝製FlashAirは、デジカメの写真データWifi伝送で有名ですが、WEBサーバー機能を搭載しており簡単に書き込んだデータのホームページ化が可能です。
本当は、家庭内消費電力の測定と表示が目的なのですが、まずは温湿度測定からはじめました。
とりあえずうまくいって良かったです。

その後、なんとなくaitendoのサイトを見ていたら、びんぼうでいいのに続き、あちゃんでいいの というArduinoシンプル基板が売られているのを見つけました。CPU別で166円です。

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

しかし、残念ながら在庫切れです。同じようなものを考えたりもしていたのですが、中華製の基板をそれなりに購入していたのであえて作るまでも無いと思っていました。
しかし、同コンセプトの基板を見つけ、在庫切れとなると何故か欲しくなり、片面基板しか作れませんが作ってみました。流石に小さく作るとなると汎用部品では無理があり、CR部品はチップ部品を使って作りました。
リセットボタンは付いていませんが、aitendoよりちょっとだけ小さく作れたのではないかと思っています。

写真 2.JPG

写真 1.JPG

Arduino Unoのブートローダーを書き込んだAVRを先日作っていましたので早速使ってみて、ちゃんとLEDチカチカのソフトの書き込みと動作が確認できました。

写真 3.JPG

ISP方式と比較して、USB I/F(今回は外付けUSB-232変換ボード対応)ブートローダー方式のメリットは、ArduinoIDEのシリアル機能を使って、デバッグが簡単に行えることです。
これでまた、Arduino近づいた気がします。
posted by ja6irk at 22:22| Comment(4) | TrackBack(0) | AVR&Arduino

2015年05月17日

ISPでArduinoを楽しむ W

OLED&ENC.JPG

 WeekDayは、なかなか時間もとれず、注文していた中華製Arduinoの基板もやっと受け取れました。
送ってきた基板は、写真のように1個ずつ静電袋に入れられておりしっかりした梱包でした。注文先はみな違ったのですが、どこも同じような感じです。

写真.JPG

 それぞれの中身の写真も撮ってみました。

UNO.jpg.JPG
UNO
nano.jpg.JPG
nano
mini.jpg.JPG
Pro mini
min2.jpg.JPG
Pro miniは書き込みにUSB-232C変換ボードが必要

 Arduinoでのプログラムは、以前にBASCOM−AVRで作っていたロ−タリーエンコーダーの4倍カウントを移植してみました。書式は、C方式に書き換えましたが、プログラムそのものはそのままで難なく動きました。
 ロータリーエンコーダーも中華製の400パルスのものに変更しましたが、さすがに4倍速(1600パルス)だと1mSのタイマー割り込みでは取りこぼしが多く、100uS割り込みに変更し、うまく動いています。



 表示デバイスも20*2のOLEDのI2C制御を試してみました。こちらも難なくうまく動いています。
 今回の実験で、多くの方々が作られたArduinoのソフトウェア資産を活用させていただければ、新しい周辺デバイスへの対応が簡単に行えることがわかりました。開発ソフトウェアは無料ですし、IPS対応のライターを持っていれば、Arduino専用ボードを買う必要もないし、なかなか良さそうです。
 ちなみに、今回仕入れた中華製Arduino専用ボードの価格を、中華製、aitendo、秋月、千石、マルツで比較してみました。中華製は注文して10日間ほど掛かるのと、リスクがゼロではありませんが結果は、ローカルのOMさんの言われるとおり、中華製の圧倒的パフォーマンスです。当局の場合、これまでそこそこの種類のものを購入しましたが、届かないとか、故障していたことはありませんでした。

Arduino価格比較.jpg

 なお、この比較は、国内販売されている店舗さんを否定しているわけではありませんし、中華製を買いなさいと言っているわけではありませんので念のため!
 当局も、いずれのお店も頻繁に利用させていただいております。
posted by ja6irk at 17:27| Comment(2) | TrackBack(0) | AVR&Arduino

2015年05月06日

ISPでArduinoを楽しむ!V

DSC01125.jpg

普通なら、Arduinoの専用ボードを入手して色々遊んでから、ISP書き込みになるのでしょうが、今回はISP書き込みができることを知って、それを確かめることからはじめました。
今回確認できたことは、Arduinoの沢山あるライブラリを活用するのに専用ボードは必要ないということです。
つまり、普通に売っているATMELのAVRマイコンである、ATmega168やATmega328をそのまま組み込みマイコンとして使用して、基板に乗せたままISPプログラムできるということです。
これまで、BASCOM-AVRで使用してきたプログラムライターである、USBaspやAVRISP、AVRISPmkU等があれば、今までのBASCOM-AVRと同じようにプログラムを書き込むことができるのです。
勿論、ソフトウェアはBASICではなくCをベースにしたものになりますが、ArduinoIDEという開発ソフトは素人にもとっつきやすくできています。そして、驚きは、大概の制御ライブラリはネット上にあふれダウンロードして使うことができます。
当局は、Cが苦手でこれまで実用ソフトを作ったことがありませんでしたが、実質1日でロータリーエンコーダーで回転パルスを入力し、DDSの周波数を可変して、その周波数をLCDに表示するというところまでを作ることができました。
これは、DDS制御や、LCDの制御のライブラリがあったからです。DDSの制御は殆ど4行くらいのプログラムで、必要な周波数の10進数(たとえば7000000Hz)を代入するだけで出力が出てきます。これまでのBASICよりはるかに楽です。LCDも同様です。
更にすばらしいのは、最近流行のI2C制御のLCDの制御や、TFT液晶の制御ライブラリもあります。
DDSの次のオシレータとしてはやりつつある、シリコンラボ社のSi570やSi5351の制御ライブラリもあります。
Si5351は8KHzから150MHzまで3つの独立した周波数の出力を出すことができるICです。しかし、レジスタは100以上もあり、その設定や、周波数の計算は複雑なのですが、ライブラリを使えばいとも簡単に出力を出すことができました。このICは機能が多く使いこなすにはそれなりに勉強が必要ですが、とりあえずVFOとしてDDSの代わりに使う程度なら出来上がってしまいました。

DSC01112.jpg
Si5351ボード
DSC01111.jpg
先日のDDSの変わりにSi5351ボードを駆動したブレッドボード

後先が、逆になってしまったのですが、専用ボードも欲しくなり先週のQRP懇親会で秋葉原に行った時、aitendoのびんぼうでいいのという500円の基板と250円の部品セットと380円の書き込み済マイコンを買ってきました。

DSC01120.jpg

ついでに、999円のカラーTFT液晶も買ってきました。
それを組み立て、サンプルソフトを動かしたのが最初の写真です。一部、表示を書き換えてあります。どこをどう書き換えればどのように表示されるのかは、実際にやってみれば簡単にわかりました。



ポート数は食いますが、自作のTRXでカラーのドットマトリクス表示ができそうです。
自作の楽しみもまた増えるのではないかと期待しています。
ということで、何も目的を決めていなかったのですが突然思いつきで始めた今年のGWの実験は終わりになりました。また、あすから本業に戻ります。

posted by ja6irk at 22:18| Comment(2) | TrackBack(0) | AVR&Arduino

2015年05月02日

ISPでArduinoを楽しむ! U

連休で時間があると一気に進みます。
とりあえず、LCD表示、タイマー割り込みによるロータリーエンコーダーのカウント取り込み、中華製DDS(AD9850)の制御による出力周波数可変まで出来上がりました。

DSC01108.jpg

プログラムの書式など、今までのBASICとは勝手が違い、書式エラーを沢山出しながらでしたが、なんとなく雰囲気がつかめて来ました。
LCD表示、タイマー割り込み、DDS(AD9850)については、サイト検索でライブラリーが見つかり、簡単に実現することができました。特に、DDSのライブラリは中華製DDSの基準クロック125MHzをベースに作ってあり、周波数データとして必要な周波数を10進数で記述するだけで(ex.7000000で7MHzとなる)簡単に出力することができます。途中の計算プログラムを考える必要がありません。

DSC01110.jpg

ローカルのOMさんが言われていた、ライブラリのコピペで簡単にできますよ!が、確かにそうだな〜と言った印象です。
ただ、ロータリーエンコーダーの取り込みのプログラムは自分で作りました。ライブラリは沢山見つかるのですが、殆どが外部割込みによるライブラリです。
当局の経験的には、外部割込みでエンコーダーを使用すると殆どの仕事が割り込み処理になってしまいほかの仕事に影響が出るのと、チャタリングの処理で結構苦労します。(ライブラリにはチャタの処理つきが多いですが)
これまでは、タイマー割り込みでうまく動いていたので今回もそれで作ってみました。割り込みは1mSとしていますが、1回転20パルス程度でしたらもっと遅くても問題は出ないと思います。ただ、今までは4倍速でカウントしていたのですが、今回は4倍速は実現できていません。もう少しソフトのコマンドを勉強しないとダメです。



ライブラリは別になりますが、今回のプログラムを参考のために記載しておきます。
(goto文を多用するなどCライクではありませんがあしからず)
これだけの記述で機能が実現できているよ!という参考程度にお願いします。

/*

The circuit:
* LCD RS pin to digital B0
* LCD Enable pin to digital B1
* LCD D4 pin to digital B2
* LCD D5 pin to digital B3
* LCD D6 pin to digital B4
* LCD D7 pin to digital B5
* LCD R/W pin to ground

*/

// include the library code:
#include
#include
#include

#define enc0 A4
#define enc1 A5

#define led0 A0
#define led1 A1

int enccnt = 0;
int encold = 0;
long fcnt = 7000000;
int intcnt = 0;


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
EF_AD9850 AD9850(7, 6, 4, 5);// (CLK,F-UP,RST,Data)

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);

pinMode(enc0,INPUT_PULLUP);
pinMode(enc1,INPUT_PULLUP);

pinMode(led0, OUTPUT);
pinMode(led1, OUTPUT);

MsTimer2::set(1, timer2int); // 1ms period
MsTimer2::start();

AD9850.init();
AD9850.reset();
AD9850.wr_serial(0x00, 1000000); //1000000Hz
// initialize serial communications at 115200 bps:
Serial.begin(115200);

}


void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
lcd.print("JN3XBY/1");

lcd.setCursor(9, 0);
// print the number of seconds since reset:
//lcd.print(millis() / 500);
lcd.print("Arduino");

lcd.setCursor(0, 1);
lcd.print("FREQ=");

AD9850.wr_serial(0x00,fcnt);

// lcd.setCursor(0,1);
lcd. print(fcnt);
lcd. print("Hz");

}

//*** Timer2 INT Routine***************************
void timer2int() {

//*** Encoder Count Routine ***
if (digitalRead(enc0) == LOW) {goto ret;}
if (encold == 1) {goto ret1;}
encold = 1;
if (digitalRead(enc1) == HIGH) {fcnt = fcnt + 10;}
if (digitalRead(enc1) == LOW) {fcnt = fcnt -10;}
goto ret1;
ret:
encold = 0;
ret1:
//*******************************

//*** 100mS LED ON/OFF **********
intcnt = intcnt + 1;
if (intcnt < 100){goto ret2;}
static boolean output = HIGH;
digitalWrite(led1, output);
output = !output;
intcnt = 0;
ret2:
//*******************************
;
}
//************************************************
posted by ja6irk at 11:43| Comment(4) | TrackBack(0) | AVR&Arduino