Arduino

2017/10/28

STM32F103C8T6

今日はWWコンテスト(phone)だ。もう始まって6時間余りだが、まだ聞いていない。このところ週末は出かけてばかりいたので、色々と家事が溜まっていてやっと、とりあえずの分をこなしたところ。

昨晩から、以前購入して気になっていたARMベースのCPUボードをArduino化していた。これは、中華製だが送料込みで2ドルもしない。nanoと比べると若干幅が広いがそれでも十分小さい。どのくらい高速処理ができるか楽しみだ。プログラムから随分と遠ざかっていたので、すっかり忘れてしまっているが、ここで少し感を戻しておかないと本当に完全に忘れてしまいそうだ。

Arduino化にあたっては、このサイトを参考にさせていただいた。久しぶりにDOS窓からコマンドを打ったり、結構悪戦苦闘してBOOTプログラムを転送することができた。こいつも定型化しておかないと毎回悩みそうだ。

Stm32f1_boot

上はBoot書き込みに使用したUSB-シリアル変換基板。中華製のCH340のチップが載っている。CWのキーイイングに使っているやつだ。
Dscf0023

ArduinoIDEもバージョンアップした。今年の初めに1.8.1にしていたが、さらに1.8.5に上げた。GitHubから必要なファイルを落としてBootプログラムを書き込んだ。うまくいったので、定番のLチカBLINKを書き込んだ。緑のLEDがうまく点滅した。さて、どうやってプログラムを書くんだっけ?

【追記】
BlinkのプログラムのDelayをゼロにして、ポートのON/OFFをループさせてみた。ON/OFFの1周期で1.38uSであった。これって、早いんだっけ?。ATMEGだとどのくらいだろうか。

【さらに、追記】
Arduino NANOで同じようにBlinkのDelayをゼロにして、測定してみた。結果は6.93uS。この結果から、5倍速い。IOポートの制御は一般に遅いので、IOを制御しない演算であればもっと処理時間が違うかもしれない。STM32はクロックが72MHzでNANは8MHzだから、クロック速度だけでも9倍は違う。このくらいは処理能力差があると思う。

上がNano、下がSTM32だ。
Dscf0024

コンテストの方は7MHzを中心に50局余り。やっぱりSSBは飛ばない。しかも、声を張り上げるので疲れる。来月のCWが待ち遠しい。


| | コメント (0) | トラックバック (0)

2017/03/03

マイコンの開発環境

開発環境のバージョンアップを行った。何かのテーマを開発中だと中々バージョンアップできないのだが、幸い?仕掛中のものがないので、バージョンアップしてみた。

Arduino_181
まずは、Arduino。Ver1.6.xからVer1.8.1にバージョンアップした。昨年はイタリアと米国で訴訟問題でごたごたしていたorgとcc、和解したらしく統一のIDEが提供された。とりあえず、バージョンアップしてみた。古いソースが通るかどうかは未確認。せっかくバージョンアップしたのだから、何かやってみようか。


Mikroc_pro701
もう一つはPICの開発環境だ。無料版もあるが、ROMサイズが2KBに制限されているので、随分前に有料版を入れている。Aruduinoよりも前から使っている。これで、初めてC言語でプログラムを書いた。Arduinoと同様にライブラリーが充実しているので、すぐにLCDなどを動かすことができる。自分が最初に使ったこともあり、すごく親近感がある開発環境だ。

今回、MikroC PRO Ver7.0.1に上げた。今回から、プロダクトキーを入力するように変更となり、日本の代理店であるマイクロテクニカを通じてプロダクトキーを払い出してもらった。今回から、パソコン(固有のハード)との紐づけがなくなったようで、払い出されたプロダクトキーをずうっと使うらしい。昔のマイクロソフトの製品のようだ。
Arudinoがある中、有料の開発環境は苦戦していると思われるが、これからも頑張ってほしいと思う。

マイコンの世界もArduinoに使っているアトメルのCPUはPICのマイクロチップに買収されている。この最下位層のCPUの世界もどうなっていくことか。IoTの世界ではもっとパワーのあるCPUが主力かもしれない。最近知ったのだが、PICとかを使った過電流制御やSWR劣化検出など、コントローラーとして使うような使い方がいいのかもしれない、と思う今日この頃だ。何か自作に取り組まねばと、焦っているのだが・・・・

| | コメント (2) | トラックバック (0)

2016/05/22

TFT 2.4inch LCD Sメーター

今週の休みも、ほとんど電子工作に当てる時間はなく、けれど何かアップしておこうと思い、先週のネタですが上げておきます。

Img_0034

Sメータの関数を作ってみた。ちょっとサイズが小さいのでもう少し大きい物も作ってみたいと思っている。全体のデザインを決めないとサイズも決まらないので、全体の画面イメージも作りたいと考えている。
動画撮影をしていて、ドットのクリアを忘れている事に気が付き、慌てて追加した。表示させるときは、左から、消すときは、右側から順に消した方が良いかと思い、そうしている。フィーリングはいかがだろうか。

| | コメント (0) | トラックバック (0)

2016/05/15

TFT 2.4inch LCD タッチパネル編

うまくいかない。教えていただいた、ライブラリーのテストスケッチを動かしているのだが、思うように行かない。

このライブラリーはX,Y軸に加えて、Z軸(押下圧)も返してくれる。ペン書きなどお絵かきソフトであれば、線の太さや濃さに応用することができよう。ボタンの押下であれば、押している間は濃い?画像に差し替えたり、音を変化させれば、面白いかもしれない。

何がうまくいかないかというと、タッチの割込で割込ピンを使った場合に、どうも割込がかからないように見える。
XPT2046からは、ちゃんと検出して、LOWを出してくるが、Arduino側が受け取らないように見える。何か、割込を使うための設定が必要なのだろうか?

XPT2046_Touchscreen ts(CS_PIN, 255); // Param 2 - 255 - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN); // Param 2 - Touch IRQ Pin - interrupt enabled polling

下の行を有効にすると、上手くデータが読み込まれない。

以下は、割込なしの設定の時。これだと、上手く動くようだ。

============================
#include <XPT2046_Touchscreen.h> //<>はブログで表示させるため「全角」ですが、本来は半角文字です。
#include <SPI.h> //<>はブログで表示させるため「全角」ですが、本来は半角文字です。

#define CS_PIN 8
// MOSI=11, MISO=12, SCK=13

//XPT2046_Touchscreen ts(CS_PIN);
#define TIRQ_PIN 2
//#define TIRQ_PIN 3
//XPT2046_Touchscreen ts(CS_PIN); // Param 2 - NULL - No interrupts
XPT2046_Touchscreen ts(CS_PIN, 255); // Param 2 - 255 - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN); // Param 2 - Touch IRQ Pin - interrupt enabled polling

void setup() {
Serial.begin(38400);
ts.begin();
while (!Serial && (millis() <= 1000));
}


void loopB() {
TS_Point p = ts.getPoint();
Serial.print("Pressure = ");
Serial.print(p.z);
if (ts.touched()) {
Serial.print(", x = ");
Serial.print(p.x);
Serial.print(", y = ");
Serial.print(p.y);
}
Serial.println();
// delay(100);
delay(30);
}


void loop() {
if (ts.touched()) {
// if (1) {
TS_Point p = ts.getPoint();
Serial.print("Pressure = ");
Serial.print(p.z);
Serial.print(", x = ");
Serial.print(p.x);
Serial.print(", y = ");
Serial.print(p.y);
delay(30);
Serial.println();
}
}

====================

Touch


また、代わり映えしない画像だが、こんな風にやっている。サンプルスケッチのLCD表示あり版もライブラリの組み込みがうまくいかないのか、コンパイルエラーになってしまう。中々難しい。
Dscf0998

教えていただいた、使用したライブラリー:
https://github.com/PaulStoffregen/XPT2046_Touchscreen


| | コメント (6) | トラックバック (0)

2016/05/08

TFT 2.4inch LCD SPI編

昨日は「JA1AMH高田さんを送る会」、「QRPクラブ懇親会」と長時間に渡り、秋葉原界隈に居た。多くの方にお会いし、昔のエピソード、新しい刺激を毎度のことながらたくさんいただいてきた。

その中で、「おみやげ」までいただいた。TFT液晶のSPI接続のものだ。これだと配線の数が減るので、Arduinoのポートが空いて、他のものを制御するのが楽になる。

早速、動かしてみた。情報によると、このモジュールは3.3V仕様のため、Arduinoとの接続はレベル変換を要するらしい。ここでは簡単にArudinoの出力に3.3Kオーム直列、入力ポートに並列となるように6.8Kオームの計2本の抵抗で5Vを分圧して3.3Vぐらいなるようにした。Arudinoの入力側は、3.3VでLCDからドライブしてくるので、何とかロジックレベルの1/2を超えて"H"と認識できるため、何も細工せず直接接続した。

【追記】
aitendo製の物も信号ラインは5Vを直接つないでいるが、本当は3.3Vにすべきではないかと思っている。aitendoのお店のデモ機も直接接続してあったので、直接接続したが、この辺りはどうも怪しい。一応、壊れずに動いてはいるが。
Dscf0988
結構、バックライトが明るいために、白文字は色が飛んでしまっている。実際にはもっと綺麗で、画像品質は申し分ない。

Dscf0990
左側に見えるのが抵抗を乗せた基板だ。


上はaitondo製の8bitパラレルのもの。下が今回頂いた「おみやげ」のSPI接続のものだ。どちらも、同じように動くことが確認できた。
SPIのものはArduino IDEから書込・転送完了後、LCDチップにリセットが上手くかからないのか、電源を入れ直すと表示を始める。この辺りは何か手を打たないとダメかもしれない。

-・・・-
「おみやげ」の詳細
モジュール名:
TJCTM24024-SPI

接続:
arduino ---- LCD
9 ----- D/C Data/Command selection input (D/CX)
10 ----- CS input
11 ----- SDI(MOSI) input
12 ----- SDO(MISO) Output
13 ----- SCK input
+3.3V--- VCC
GND ---- GND
+3.3V--- RESET
+3.3V--- LED

参考情報:
http://forum.arduino.cc/index.php?topic=323026.0

include:
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

【さらに追記】
フォントを組み込んでみた。これは、中々良さそう。ただし、ROMが肥大してくる。
Dscf0993

Dscf0996

上のフォントはこれ。
#include  (カッコ)Fonts/FreeMonoBoldOblique12pt7b.h(カッコ)  
カッコ=<、>
tft.setFont(&FreeMonoBoldOblique12pt7b);

| | コメント (4) | トラックバック (0)

2016/05/05

TFT 2.4inch LCD

ずい分前に仕入れたカラー液晶(L024AC-2P)を動かしてみた。Arduinoでやれば、グラフィックエンジンや液晶ドライバーが容易に見つかる。

こんなイメージを表示させてみた。
Dscf0980

Dscf0984

試験用にArduino UNOにインストルしてみた。googleで検索するとすぐに見つかる。エンジンとドライバーをダウンロードして、スケッチに読み込む。

必要なファイル:
Adafruit_GFX.h
Adafruit_TFTLCD.h

このドライバーは、以下のチップにも対応している。
ILI9325
ILI9328
ILI9341
HX8347G
HX8357D

ここで、使用しているLCDは2.4インチ320x240ドットのQVGAサイズのものだ。ドライバーはILI9325が使われている。

表示はサンプルスケッチを改造してテキストを入れ替えただけだ。ドットのLCDはどのような表示デザインにしたらいいか、さっぱりわからない。イメージが湧けば良いのだが???である。
さて、どうしたものか・・・・・

-・・・-

エンジンのマニュアル(adafruit製)

| | コメント (2) | トラックバック (0)

2015/06/10

「あちゃんでいいの」を買う

物欲に負けた。使う当てもないのに。土曜日にQRPクラブの懇親会に参加するため出かけたついでに、買ってしまった。

Dscf0310

機器組込用には最適だ。まあ、水晶の配線がプリント版になっていて楽なだけだが、ついついいいなあ~と思って手が出てしまった。これには、USBシリアル変換器が必要になるが、これを買ってしまっては、UNOより高くなってしまう。確か、手持ちがあったはずだと探すが、小さいため中々見つからない。ヤレヤレ、やっと見つけてケーブルとコネクターを付ける。PL-2303という旧式のものだ。コンテストログのCWインターフェースにも使っている。Win7まではドライバーが対応しているがそれ以上はないらしい。今のところは、関係ないが。

Dscf0304

ブートローダーを焼きこまないとダメなので、ROM焼き器も作った。以前はブレッドボードに作っていたが、毎回調べるのが億劫になって、ひとつ作ることにした。
こちらを参考にさせていただいた。MNI TNX!
ここに書かれている手順を忠実にやれば書くことができるが、このシールドを挿入したままでは、UNO本体にプログラムを流し込めない。エラーになってしまう。原因はシールド側の10uFが大きすぎて、リセットがうまくかからないためのようである。(想像だが)
このwebサイトの手順では。UNO本体にプログラムを転送しておいてから、シールド上のチップに書き込む。10uFを外しても取り敢えず動作するので外しておいた。何か不都合があるかもしれない。(備忘録として)
こんな小さなCPUがあると何かを作りたくなる。ところで「あちゃんでいいの」とはどういう意味だろう? 毎度aitendoの名付けは??だ。


| | コメント (0) | トラックバック (0)

2015/04/12

Arduino DDS VFO for DC Transceiver 3

久しぶりにいじってみた。
DDSのチップから出力を取り出すために、ローパスフィルターとバッファアンプを入れてみた。
また、DDSモジュールは3.3Vで動作させている。制御線はFETによるレベル変換を入れてインターフェースしている。これにより、水晶発振モジュールとDDSチップの発熱が非常に軽減される。もっとも、3.3Vで125MHzのクロックはオーバークロックとなるので、メーカーの動作保証外となるので、自己責任で。

Dscf0167

Dscf0165
DDSモジュールの手前に見えているのが、3.3V用の3端子レギュレーター。1.7Vx60mA=102mWの発熱がある。aitendoの小さい放熱器を抱かせてある。銅粘着テープに貼付け後、ハンダ付けしてある。ほとんど温度上昇を感じないので、効果はありそうだ。パターンで放熱するよりは、強力だ。

Dds_vfo_output
これが、出力特性だ。出力端はオープンで、オシロスコープで波形のPeakToPeakを測っている。25MHz付近にピークがあるが、フィルターのインピーダンスミスマッチによるものだと思う。下記の回路図で470オームを入れることで、このくらいの特性になっている。これがないと、もっとピークが強調される。
この特性を測るためにプログラムをいじって、ロータリーエンコーダーのステップに100KHzを追加した。こうなると、全波受信機か、SGみたいになってきた。

Dscf0162
これは、ローパスフィルター単体で測った特性だ。1:4の広帯域トランスで、50オームを200オームに持ち上げて測っている。fcは30MHzにしているが、部品のばらつきもあるので、この程度だと思う。

Dscf0173
回路図をメモっておく。CADで回路図を起こしていないので、そろそろヤバい。忘れそうだ。
DDSモジュールはA系から出力している。B系はローパスが入っているがマッチングがうまくないのか、レベルが暴れる。A系からとって、自作のローパスを入れてみた。高調波は、もう少し後段で測って見ようと思う。
この出力に50オームを接続すると負荷が重すぎてドライブできない。波形がスライスされてしまうので、高調波がいっぱい出ていると思われる。次段は、もう少し軽い負荷で受ける様にしよう。


| | コメント (0) | トラックバック (0)

2015/03/29

Arduino DDS VFO for DC Transceiver 2

引き続き、こんなことをやっている。
プログラムも機能実装が終わって、ひと通り動作するようになった。細かいとことは手直しした方がいいところ、ノイズ対策が残っている。この辺りは、ハード実装にも関係するので、ちゃんとケースに入れて詰めていこうと思う。

Dscf0157

Dscf0138

Dscf0141

Dscf0143

Dscf0147

Dscf0149

Dscf0155

編集中


| | コメント (0) | トラックバック (0)

2015/03/22

Arduino DDS VFO for DC Transceiver

Arduinoの練習で、こんなことをしている。
前回の続きだ。

Dscf0107

Dscf0108

Dscf0113

Dscf0114

Dscf0116

Dscf0131

Dscf0137


【2015.3.29追記】
コメントを追記しようと思ったのですが、めんどくさくなってしまいました。
次を掲載したので、ご覧ください。


| | コメント (0) | トラックバック (0)

より以前の記事一覧