おじさん工房 BBS
RFC-7 - 笛吹おじさん
2025/01/15 (Wed) 19:34:04
今晩は。
RFC-7造ってみようと部品発注しましたが納期遅延で
10MHz(TCXO)とプリスケーラー、3.3Vレギュレータ
部分しかできません。
USBシリアルi/Fが付いていますが、これは具体的に何に使うのでしょう。
tera termでつないでCPUのデバッグに使う?それとも
USB用アプリが用意されてべつの使いかたが出来るのでしょうか?
Re: RFC-7 - Ojisankoubou
2025/01/17 (Fri) 06:12:37
デバッグにも使いましたが、今は主に測定データのログに使っています。 ホームページの 1PPS や AUDIO の測定データは teraterm でログを取って excel でグラフにしました。
他にはプログラムの書き込みにも使えます。 ST-LINK を持っていない方でも USB 経由で書き込みができます。
Re: RFC-7 - 笛吹おじさん
2025/01/17 (Fri) 08:32:27
お早うございます。
ご回答有難うございます。よく分かりました。
ケースに入れることを考えると色々接続も考えないと
なりませんので、仮配置的なことで配線をしています。
USBで書き込みができるならST-LINKは付けないでもいいのかな、、、(考慮中)
いつ出来上がることやら?
Re: RFC-7 - やどさん
2025/01/18 (Sat) 23:22:45
笛吹おじさん Ojisankoubou様、こんばんは。
RFC-7 さっそく作ってみました! 画像添付
いやいや、色鉛筆で回路図塗りながら一日配線してたのですが、2か所ミスあって深夜になってしまいました… 汗;
しかしこれは凄いですね! → Time-to-Digital Converter、測定精度を2桁も上げてしまう正にブレイクスルーな技術!?
TDC で時間補間する方法( https://ojisankoubou.web.fc2.com/rfc/rfc-7/index.html )
に書かれているブロック図とタイミング図が肝だと思いますが、、
元信号のLPタイマー出力と、そのDFF(ディレイライン)信号の時間差を TDC7200(TDC)で補間して 時間分解能を一気に上げる、という原理でしょうか。。
→タイマークロック130MHz(7.69ns),TDC7200の分解能(55ps)で補間すると、 7690/55=139.8 ← ふた桁時間分解能が上がる!?
タイムチャート未だ理解できていないので考えてみますぅ… 汗;;
あと、シリアル受信できていないので調べないとっ、、、
Re: RFC-7 - 笛吹おじさん
2025/01/19 (Sun) 00:46:44
やどさん、今晩は。
音沙汰ないと思っていたら、、もう造ってしまったのですね。
いやー早い!。
私の方は部品が明日(もう今日ですかね)届きますので
もう少し時間がかかりそうです。
Re: RFC-7 - やどさん
2025/01/19 (Sun) 09:38:37
笛吹おじさん おはようございます。
恐れ入ります。。
2桁も改善するってどういう事??
、と云うことで作ってみるしかないと、先週末,不足部品をマルツ電通大構内店で受取ってきました。
>シリアル受信できていないので調べないとっ、、、
布団の中でTX,RX逆?と思って、、朝一見たら案の定でした。。お恥ずかしい… 汗);
画像の様なシリアルデバッグ機能が搭載されてました!→115kbpsです..
//
Re: RFC-7 - 笛吹おじさん
2025/01/19 (Sun) 13:34:13
やどさん、今日は。
USBシリアル動いて良かったですね。
今日部品が来るかと期待しているのですが、どうも
関東の集配所で止まっている様です。
私はGPSを使った精度の良い基準が使えませんので
取り敢えず2桁改善能力を持っている(自己満足、、、)測定器として造っています。
多分、誤配線があるのですぐには動かないでしょう。
Re: RFC-7 - 笛吹おじさん
2025/01/20 (Mon) 19:53:00
今晩は。
取り敢えず配線が終わりました。
ST-LINKで書き込みをしてみたのですが、エラーです。どうもCPUを認識していないようですね。
誤配線かな?
前途多難、、、、
Re: RFC-7 - 笛吹おじさん
2025/01/21 (Tue) 12:21:30
今日は。
やどさん、質問です。
ST32CubeProgrammarは32bit版、それとも64bit版ですか?
私は64bit版を使っているのですが、動作が不安定で書き込みができないことが多いです。
配線はOKの様でST-LINKをUSBにつなぎ直したり、PCを再起動して何とか書き込みが出来ました。
LCDは秋月のAQM1602Aを使っています。
コントラストが薄く(カウンタは動作している感じ)
デフォルトの16から32に変更、コンパイル、書き込みをしたのですが、まったくできません。
CPUを認識できないようです。
ST32CubeProgrammarの最新をDLして入れ直しても結果は同じです。
CPUの1pinのLEDは最初は点灯していなかったのですが、今は点灯状態です。
CPUがロックされているのか?
RFC-5の時からST32CubeProgrammarは不調ですね。
何が悪いのか、、、、
2025/01/21 (Tue) 14:38:45
>笛吹おじさん
プログラムの書き込みに苦労されているようですね。
私の環境は CubeProgrammar 64bitの最新版です。(v2.6.0)
書き込みエラーは出ていません。
すでに試されていると思いますが、
1 ST-LINKをUSBケーブルで延長せずにパソコンに直刺しする。
2 ST-LINKを交換する。
3 STM32 ST-LINK utilityを使ってみる。
このぐらいでしょうか。
>やどさん
すでにRFC-7が完成していますね。
精度が2桁向上とは、すごいです!
わたしは、以前、こちらで話題になったロジック・アナライザを作っています。
Re: RFC-7 - 笛吹おじさん
2025/01/21 (Tue) 17:37:28
パオさん、今晩は。
どうもアドバイス有難うございます。
もう一度見直したところ半田不良が見つかりました。これを直して書き込みはできるようになりました。
どうもお騒がせ致しました。
まだおかしいところがありそうですので見直します。
ロジック・アナライザを作られているのですね。
APB1ですか?
Re: RFC-7 - 笛吹おじさん
2025/01/21 (Tue) 19:07:38
今晩は。取り敢えずOKになりました。
LCDはコントラストのデフォルト=16だと薄くて見えませんので30にしました。
外部基準の切り替えは今は省略しています。
ケースに入れる時に考えようと思います。
抵抗キャパシタは1608のチップ部品、変換基板を使い
きわどい配線をしていますので、振動でハンダが外れるかもです。
Re: RFC-7 - やどさん
2025/01/21 (Tue) 20:20:59
笛吹おじさん パオさん、こんばんは
バッチリ、動いてますね!
>カウント動作しているけどコントラストが薄い…
どこかに電流パスがあって電源電圧低下しているか、
LCD電源が5Vになっているか?とか考えているうちに、動作OKとの投稿、とにかく良かったです。
まだあまり弄ってないのですが、、電源OFF/ON2回目以降,LCD表示が外部リファレンス表示Exになるのが気になりました。
外部Refのため、メニューに AUTO F.ADJやF.ADJが出ないです。
回路的には内部/外部Refを自動判別してないと思います。。
//
Re: RFC-7 - パオさん URL
2025/01/21 (Tue) 20:45:50
>笛吹おじさん
>ロジック・アナライザを作られているのですね。
>APB1ですか?
やどさんが紹介されていた「gusmanb/logicanalyzer 」の基板を作ったので組み立て中です。
(完成したら「ロジックアナライザ 」への返信に記載します。)
お二人共に仕事が早いですね。
RFC-7 は、自作した 20pin カウンタ基板を改造して試験ができないか考えていました。
その前に、追加回路用の部品を注文しないといけないです。
Re: RFC-7 - 笛吹おじさん
2025/01/21 (Tue) 21:49:34
今晩は。
パオさん、ロジアナの件了解です。
発表楽しみにしています。
やどさん、
USB受信はただつないでTeratermを起動すればいいのですか?
Re: RFC-7 - やどさん
2025/01/21 (Tue) 23:32:16
こんばんは
>USB受信はただつないでTeratermを起動すれば…
はい、そうです。
115200bps 改行コードCR+LFに設定しました。
RFC-7電源オンで、表示します。
リターン入力でコマンド一覧が表示されています。
>ロジアナ基板ナイスです。
実は、
ラズパイPICOの24chロジアナで、起動しなくなったFM-new7の解析… まだ原因わかりません。。。
まぁ、正月中ろくに見てなかったのですが、、と言い訳 汗);;
//
RFC-7 - Ojisankoubou
2025/01/06 (Mon) 16:50:17
RFC-7 のページをつくりました。
TDC(Time Digital Converter) を使って時間補間することで RFC-5 より 2 桁高分解能になっています。
まだ作ったばかりで工事中のところも多くありますが、だんだんと充実させていくつもりです。
https://ojisankoubou.web.fc2.com/rfc/rfc-7/index.html
Re: RFC-7 - 笛吹おじさん
2025/01/07 (Tue) 08:21:33
おめでとうございます。
本年もよろしくお願い申し上げます。
分解能アップのRFC-7ですか、、、、食指が動いてしまいますね。
先ずは、部品代のかからないコンパイルをやってみますかね。
追記
コンパイルは問題なくOKでした。
部品の手持ちはゼロ、Aliexpress?で入手可能ですか?
ロジックアナライザ - 笛吹おじさん
2024/12/16 (Mon) 08:18:03
お早うございます。
今回のLCD表示ではロジアナが大いに役に立ちました。
下記URLにあるロジアナも(64bit版)ですが使える様です。
https://www.saleae.com/ja/pages/downloads
Re: ロジックアナライザ - やどさん
2024/12/17 (Tue) 23:28:55
笛吹おじさん 皆様、こんばんは。
ダウンロードしてみました。
少ししか弄っていませんが、上質な感じですね。無料でいいのかな、、
SSD1306なOLED表示にはロジアナを活用しようと企んでいます。
データシートはみつけたのですが、、初期化コマンドどうしたらいいの??状態で、汗);;
⇒ https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
思いついたのが、Arduinoマイコンで文字を表示するだけのプログラム作って、I2Cシーケンスをロジアナで拾う方法です。
拾ったシーケンスをそのままlcdc_init()に記述してしまえば、RFC-5でも確実に表示するはず。。 言うは易し…
ただ、0.91インチOLED表示は128x64ドットなので、16文字2行表示するには、8x16な数字と●、*、?、sのフォントを作らないといけないかな??
//
Re: ロジックアナライザ - 笛吹おじさん
2024/12/18 (Wed) 00:45:59
やどさん、今晩は。
ロジアナ使えて良かったです。
SSD1306はarduinoで表示させています。
rfc-5でOLED表示も出来たら面白いですね。
RFC-5にもOLED用のフォルダーがありますね。
出来たら発表してください。
2024/12/18 (Wed) 23:10:24
>やどさん
次は SSD1306 ですか!
視認性の良い OLED でも動作することを期待しています。
RFC-5 を組み立てる前に siliconvalley4066 さんの周波数カウンタを試したことが有ります。
https://ss1.xrea.com/harahore.g2.xrea.com/STM32/stm32f103c8t6_counter.html
こちらは Arduino IDE で開発されている周波数カウンタですが、同じ MCU なので多少は参考になるかもしれません。
2024/12/19 (Thu) 12:29:40
>やどさん
自分でブログに記事を書いていながら忘れていましたが、Arduino で照度計を作った時に横長の SSD1306 を使って表示に苦労しました。
https://me-yoh.com/remaking_light_meter1
その際には、このライブラリと
https://github.com/datacute/Tiny4kOLED
見た目を良くするために、このフォントセット内の
https://github.com/datacute/TinyOLED-Fonts
大き目フォントを使いました。
このフォントセット内には、お目当ての「8x16フォント」もありました。
お役に立てば良いのですが。
Re: ロジックアナライザ - やどさん
2024/12/19 (Thu) 21:48:46
笛吹おじさん、こんばんは
格安USBロジアナで 起動がおかしくなった8ビットパソコンの動作解析(と言うほど高尚な事はできず)をしてます。
ちょっと8chでは足りず、格安ロジアナ2個で16ch観測できないのかな…
都立多摩図書館で40年前のパソコン雑誌に掲載されたFM-7回路図の複写サービスをしてもらって喜んでいたのですが、、
ぜんぜん泥沼から抜け出せそうもありません。。 なんでだろぅぅ、、と毎夜ため息ばかり… 汗);;
簡易SGのケーシング写真、レタリングが美しいですね!
自分の場合は
、かなり気を遣って穴あけ加工しているつもりですが、大抵ズレるんです。。
金属加工は薄いアルミ板以外やりたくないですし。。
格安PCB製造だけでなくて格安実装や格安なケース加工サービスも始まらないかな…
話は違いますが、SG写真を見て…
だいぶ前ですが430で、F2なCQが聞こえたことが有って、コールがBTBだった記憶がよみがえりました。
もしかして笛吹おじさんだったのかな?なんて…
//
Re: ロジックアナライザ - やどさん
2024/12/19 (Thu) 23:06:45
連続投稿失礼いたします。
パオさん 笛吹おじさん、こんばんは!
>siliconvalley4066 さんの周波数カウンタを試した…
おおっっ!、リンク先見ました。
siliconvalley4066 さん すごいです!
フォントセットの情報もありがとうございます。
最新の記事では、STM32Fマイコン+OLED表示モジュールで、レシプロカル式周波数カウンタを実現されていますね!
しかも、回路方式というか16bitタイマー3つで前回キャプチャー値との差から周波数を計算する、改善検討された説明文を見ていると、RFC-5と似てるっぽい!!
測定精度もRFC-5がシステムクロック130MHzに対して72MHzなのでその分落ちますが、ゲート1秒なら13ppbと申し分ありませんね!
凄いです、自分にはこのような回路方式の改善など到底真似出来ません。汗);
しかもArduinoIDEでプログラムカスタマイズできますし、Am/FMラジオの周波数直読化に利用したい自分にはもってこいです。
もう、siliconvalley4066さんの周波数カウンタ試行するしかないです! って、すぐ楽な方に流されます、、汗);
ちょっとだけ調べたら、
STM32F103C8T6には LPTIMが無いので、Ojisankoubouのfreqcounterコードを当てはめるのは難しそうです。
でも、オリジナルSTM32F103を、stm32g031f6p6ミニボードに変更する修正なら簡単そうです? ←「言うは易く…」
パオさんブログの「周波数カウンタを作る1」を見て、ArduinoIDE設定して試してみようかと思います。Tnx!
//
Re: ロジックアナライザ - 笛吹おじさん
2024/12/20 (Fri) 00:23:16
やどさん、今晩は。
F2のCWは私です。430MHZはFT-70DでA1は出せません。
そこでF2ーCWを出したのです。でも応答してもらえたのは1局、八王子の局でした。
何日かCQを出していたのですが、「BTB,うるさい」と言われてしまい、それ以来出していません。
やどさんのQTHは意外と近いのかもですね。
ところで、RFC-5のプログラムはPLUS-Gen.タイプをお使いですかそれともPGナシのほうですか?
今のケースは小さいのでPGーOUTほなしで行こうと20220906をコンパイルして書き込んだのですが、
表示がでないのです。
修正はOKなはずですが、、、。
パオさん。
3Dプリンターでケース作り、いやー進んでいますね。
好きな形のケースが作れるのでいいですね。
やってみたいですが、この歳では過剰設備投資になりそうです(笑い)
追記:
上手く行きました。
Re: ロジックアナライザ - やどさん
2024/12/20 (Fri) 21:05:55
笛吹おじさん こんばんは。
あっ、上手くいったとの事よかったです。
こちらはPG付RFC-5を使っていますがPG活用してないぃ 汗);;
あと、FT-70Dだったとの事、了解です。
ウチから昭島駅だと直線でほぼ10キロで、GP-ANTなのですが記憶に残ってました。。F2CW滅多に聴かないですし…
(430も混んでないのに文句云う人が居るのですね、、残念。。)
//
Re: ロジックアナライザ - やどさん
2024/12/24 (Tue) 23:54:53
>ちょっと8chでは足りず、格安ロジアナ2個で16ch観測できないのかな…
先人が工夫していないか調べていたら、、「ラズパイPICOで作る24chロジアナ」を二つ見つけました。
< gusmanb/logicanalyzer > https://github.com/gusmanb/logicanalyzer こちらを試行
< sigrok-pico >
https://github.com/pico-coder/sigrok-pico
YouTubeの解説?もありました。
・Turn your Pico into a 400MHz 24 Channel Logic Analyser
https://youtu.be/VjSF2LWJVVU?si=jVqeDZUf0ZP_4m0E
・Raspberry Pi Pico as a 24-Channel Logic Analyzer
https://youtu.be/waBu6ijT3wo?si=fBi2vmcwZarNuht8
これはウッテツケです!
多chで、速くて(?)しかも安価で簡単!!
ラズパイPICO-RXのSDR受信機から外して、早速試行してみました。 ← 画像添付(ポートを5Vにする方法が分からず、取り急ぎ4chのみ保護抵抗を付けて試行しました)
不良原因わかるかな? 汗);
//
Re: ロジックアナライザ - 笛吹おじさん
2024/12/25 (Wed) 08:13:37
やどさん、お早うございます。
多CHロジアナあれば便利ですね。
早速おやりになったのですね。
>ラズパイPICO-RXのSDR受信機から外して、早速試行してみました。画像
画像は?
私もラズパイPicoは持っていたと思います。
ちょっと実験してみようかな!
Re: ロジックアナライザ - やどさん
2024/12/25 (Wed) 09:07:06
おはようございます。
あれ?画像消えてる!?→修正しました。
p.s.
あっ、サイトみんな横文字ですが、もちろんChromeブラウザの自動翻訳機能を使っています。
YouTubeも日本語の翻訳字幕を表示して視聴です。これ良いですね、、活用の幅が広がりました。
//
2024/12/27 (Fri) 10:06:01
>やどさん
紹介してもらった PI Pico ロジアナ良いですね。
ただ、レベルシフタの「TXU0104PWR」が国内通販では手に入らないのが残念です。
(秋月の要望フォームで入荷希望をしてみました。)
https://akizukidenshi.com/catalog/pages/parts99.aspx
Re: ロジックアナライザ - やどさん
2024/12/28 (Sat) 11:12:18
パオさん こんにちは。
ラズパイPicoのポートは3.3V固定みたいでした…
5V系信号i/fには、秋月だと8ビットレベルシフタモジュールが安価でいいかもです。
https://akizukidenshi.com/catalog/g/g117062/
で、秋月見てたら、
ルネサスのGreenpakというのが安価で面白そうです。触手がのびます…
https://akizukidenshi.com/catalog/g/g129510/
https://www.renesas.com/ja/document/mat/greenpak-cookbook?language=ja
STM32F103なレシプロカル式周波数カウンタを試行してみました
・200MHzくらいが上限でした。← RFC-5のように、200MHz以上もカウントできないのは何故?
・ラジオ周波数チューニング中の周波数表示が乱れて変な値になってしまう。。ううっ、致命的
→RFC-5は、周波数が変わったときにも対応してます
・ArduinoIDEでSTM32G031への変更は口で云うほど簡単じゃなかった(・・;)
う~む、、kHzオーダー程度の精度でいいラジオの周波数表示なら、レシプロカル式じゃなくて、普通にダイレクトカウントすれば!?って突っ込みが聞こえてきそうです。。汗);;
//
Re: ロジックアナライザ - 笛吹おじさん
2024/12/29 (Sun) 07:49:04
やどさん、パオさん、お早うございます。
やどさん、素早く実験してみる、素晴らしい!です。
レシプロカルは周期を測り周波数に換算していますので1秒ゲートで測るオーソドックスな方がいいかもですね。
私事ですが、インフルエンザーAに感染してしまい体調NG、掲示板も斜めに読んでいる始末。
年内は何も出来そうにもありません。
おじさん工房さま、皆様もインフルにはお気を付けください、そして良いお年を御健やかにお迎えください。いろいろお世話になりました。
来年もよろしくお願い致します。
Re: ロジックアナライザ - やどさん
2024/12/29 (Sun) 10:22:21
おはようございます。
うわぁ、この時期では過去10年で最多ってテレビで云ってました。
もう明日は我が身、、外出控えます。> ますます運動不足になりそう 汗);
いろいろな話題のご提供ありがとうございました、暖かくしてどうぞお大事になさってください。
p.s.
ラズパイPicoロジアナでの5V→3.3Vレベルシフタ:
5Vトレラントな8bitバスバッファ74HC245とか74AHC245で5V系信号を受けるのも良さそうです。
→たまたま部品箱(ジャンク?)に74LCX245を見つけました。
//
パオさん基板使用rfc-5用ケース - 笛吹おじさん
2024/12/18 (Wed) 20:31:08
今晩は。
パオさん基板使用RFC-5周波数カウンタのケースを造っています。
私にとってケース作りは一番やりたくない作業なのです。
0.8mm厚のアルキ板を切り、曲げてLCDの長方形nの穴をあける、何といってもこれが一番大変です。
高齢になって指に力を入れると指がつってしまいます。
パソコンのキーを叩いている分にはいいのですが力仕事はだんだん出来なくなりつつあります。
Re: パオさん基板使用arfc-5用ケース - パオさん URL
2024/12/18 (Wed) 22:24:27
>笛吹おじさん
製作中(?)のケース写真を拝見しましたが、アルミ製の本格派ですね。
私は最近は手を抜いて、3Dプリンタでプラ製のケースを手軽に作っています。
(3Dプリンタなら、設計はパソコンで出来ますよ。おススメです。)
ところで、入力端子はどうされていますか?
私が作った基板の「20dB アンプ」部分は動作が不良ですが、ブログで紹介した市販品のアンプ基板(Amazonでも2個で千円程度で購入できます。)を代わりに付けると 300 MHz 位まで計測出来ます。
その為、2つの入力端子用の穴を開けておくと、その後の機能拡張に良いかもしれません。
Re: パオさん基板使用arfc-5用ケース - 笛吹おじさん
2024/12/20 (Fri) 23:21:21
今晩は。
ケースが出来ました。でも行き当たりバッタリですので
電池を入れるスペースがありません。(大笑い)
入力はパオさん20dBアンプ+5倍アンプにしました。
TRは2SC2714(550MHz)を使っています。
特性は90MHzくらいですね。PGはなしです。
やどさん、QTHお近くなのですね。お空でお会いできるかもですね。その時はよろしくお願い致します。
パオさん
小さく作りすぎ隙間がありません、いつもですが、適当に思い付きで造るものですから、つじつま合わせが
上手くいきません。
毎度お粗末な出来上がり?です。
Re: パオさん基板使用arfc-5用ケース - パオさん URL
2024/12/21 (Sat) 13:46:13
>笛吹おじさん
ケースの完成、おめでとうございます。
>毎度お粗末な出来上がり?です。
そんなことないと思います。
この短期間で独自に LCD を解析して、金属ケースを加工して、完成したのはすごいことです!
ちなみに、横の周波数特性のグラフは何をお使いですか?
グラフ化の方法などを教えていただけると幸いです。
Re: パオさん基板使用rfc-5用ケース - 笛吹おじさん
2024/12/21 (Sat) 14:43:42
パオさん今日は。
NanoVNA V2_2(S-A-A-2)を使っています。
おじさん工房にあるNanoVNAの改造
プログラムを入れています。
おじさん工房のプログラムを入れるにはCPUにフローティングポイントの演算ができるCPUが搭載されている必要が有ります。
同じNanoVNAでもCPUにこの機能がないものがあります。
私も最初に購入したものはNGでしたので買い換えました。
NanoVNAは中国の色々なストアが販売していますので、正統派の品物を手に入れることが重要です。
改造はおじさん工房に有りますのでこれに従って書き換えます。
NanoVNA Caputure ソフトが有りますのでこれを使えば画面をキャプチャーできます。
このアプリもおじさん工房に有ります。
追記
メニュー画面からconfigをセレクトしVersionを見ると
下の方にあるPort InfonにGD32F303と表示されれば対応品です。(記憶があいまいなのですが)
NG品は確かこの表示がでないと思います。
Re: パオさん基板使用rfc-5用ケース - 笛吹おじさん
2024/12/22 (Sun) 09:33:12
パオさん、お早うございます。
補足説明です。
1.フローティングポイントの演算ができるCPUが搭載されている必要が有ります。
これはおじさん工房のNanoVNAファームウエアの書き換えをする場合のことです。
2.周波数特性の観測は一般的なNanoVNAで出来ると思います。
3.NanoVNA Caputure ソフトは一般的なNanoVNAでも使えたと記憶してます。
もう1台持ってますので後程確認して見ます。
Re: パオさん基板使用rfc-5用ケース - パオさん URL
2024/12/22 (Sun) 10:16:10
>笛吹おじさん
ケースの話からズレてしまってすみません。
最後にこれ関係で1つだけ
素人質問で申し訳ないのですが、この様な試験をするときはテスト機材をどのように接続するのでしょうか?
フィルタやアッテネータなど単体の部品なら NanoVNA などの出力と入力の間につなぐと想像できますが、今回のような単体で動作する周波数カウンタの周波数特性は、回路のどこかに配線を追加して試験をするのでしょうか?
Re: パオさん基板使用rfc-5用ケース - 笛吹おじさん
2024/12/22 (Sun) 12:45:04
パオさん、今日は。
周波数カウンタの周波数特性は入力アンプの特性そのものですから、フイルタやアッテネータと同じ接続でつないでいます。
NanoVNAのPort1(出力)をカウンタの入力につなぎ、NanoVNAのPort2(入力)をアンプの出力につないでいます。
(アンプ単体ですと受け側の入力インピーダンスに等しい抵抗で終端する必要が有るかと思います。)
わたしの場合は入力アンプの出力がCPUの入力(8pin)につながった状態で測っています。
カウンタの電源を入れた状態でNanoVNAのスタートとストップ周波数を設定し測定しています。簡易測定ですのでおおまかな特性を見ています。
精度よく測るにはNanoVNA側にもアッテネータを入れる必要が有るのかもです。
おじさん工房にはその治具もありますのでご参考にされてください。
私も治具は作いアッテネータも入手したのですが行方知れずです。
20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/10/19 (Sat) 11:42:57
現在、RFC-5 とプリスケーラの基板を KiCad で製作中ですが、ほぼ終了しました。
発注前に回路の再確認をしていたところ、分からない所があったので教えて頂けますか?
「20dB 低雑音アンプ」は最新版の 500MHz 版を用いましたがリップルフィルタ部の「C4」の値を勘違いしていました。
C3 は「120u」なので SMD の3216サイズが使えます。
ところが、1000p だと思っていた C4 は 1000u でした。
色々と調べたのですが、秋月など通販で入手できる SMD コンデンサの最大は 300u程度のようです。
このアンプを製作された方もいらっしゃるようですが、C4 には何を使われましたか?
今思い付くのは…
1 電解コンデンサ(1000uF)
2 300u 程度の SMD 3個並列(300u x 3 = 900uF)
3 300u 程度の SMD コンデンサ1個で様子を見る
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/10/27 (Sun) 16:45:37
パオさん みな様こんにちは。
もう発注されていると思いますが… 遅れて投稿です。。
低雑音化のリップルフィルターの実験は出来てないのですが、汗);
自分だったら秋月でも手に入る低ESRな導電性高分子アルミ固体電解コンや チップアルミ電解コンにすると思います。
で、思い立って 20dBアンプの広帯域f特改善について実験をしてみました。
以前、ちょっと試してみて旨くいかず放置していたため、再度試してみました。→ 画像
結果、明らかにS21特性など改善したグラフが得られましたが、ケーブルや基板をちょっとでも動かすとグラフが変わったりして、基板や環境を整備しないと高周波数の評価は難しそうと云う印象です。。(ちょっと評価ボードがテキトウ過ぎました 汗);;
あと、前回投稿では、STM32G030F6P6ボードでカウンタ入力端子のプルダウン抵抗をチューニングすると、5倍アンプのみで210MHzも安定表示しました。
もしかすると最高周波数は、マイコンのプルダウン・プルアップ抵抗比で決まるスレッショルド電圧にも影響されそう。→ マイコン製造バラつきで左右されるのかも…です。
//
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/10/27 (Sun) 20:04:52
やどさん
返信有り難うございます。
>チューニングすると、5倍アンプのみで210MHz
確か、やどさんの5倍アンプは、Q1 に 2SK2394、R1 を 190Ωにしていたと思いますが、210MHz まで計測できたバージョンも同じでしょうか?
200MHz まで計測できるのなら、私の用途には5倍アンプで十分ですね。
基板製造メーカにオーダーした物が来週中には届くので、同じぐらいの抵抗値で実験してみます。
ちなみに、プルダウン抵抗はどのくらいの値を使いましたか?
(データシートでは 40kΩとなっていますが・・・)
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/10/28 (Mon) 07:08:22
パオさん おはようございます。
はい、2SC2394CP6で、R1はボードを見たら220Ωでした。ちょっとゲインを上げようと試行したままだったようです。
20pinのSTM32G030F6P6のボードでは、プルダウン可変抵抗 34.2kΩ程度で最良でしたが、電特スペックを見たら、25kΩminの(40k typ)55kΩmaxでした!
これはチップ(ロット?)によってガラガラ変わりそうです。
でも、20pinのPKGならチップに合わせてVR調整できて良いかもです。
あと、プリアンプ入力の信号振幅でも最高周波数が変わります。
記入した最高周波数は-7dBm(100mVrms,141mVpeak @50Ω)の場合で、もう少し大きな振幅の信号を入れれば周波数は上がります。
感覚的ですが、プリアンプからの振幅中心電圧と、マイコン入力端子のスレッショルド電圧が少しでもずれると感度がガクンと落ちるイメージでした。
//
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/11/24 (Sun) 13:51:15
パオさん、皆様 こんにちは。
パオさん基板を送っていただき、ありがとうございました。
RFC-5(5倍プリアンプ)の基本動作確認しました (^^)/
信号源にはAPB-3拡張のSG_GHzを使用し、入力信号と安定カウント最高周波数を測定してみました。
→ ただし、RFC-5入力は1MΩ(50Ω終端せず, STM32G030F6P6(20pin)使用
SG振幅 安定カウント最高周波数
-1dBm 350MHz
-4dBm 280MHz
-7dBm 220MHz
-10dBm 160MHz
うわぁー、、STM32マイコンのタイマーって350MHzでもカウントできるのですね!? 常識なのかな 汗;;
回路図で変更した所があります。
C1: RFC-5の回路図のとおり1μFにしました。
R3: 以前、2SK2394を使った場合のシミュレーションで190Ωくらいが良かった?ため(記憶が曖昧ですぅ…)100+91Ωにしてみました。
IC2: レギュレータICは手持ちのAMS1117-3.3を使用しました。(C10,C11が46uFとなっていますが多分47uFの間違え?)
あと、20pin版の方ですが、スイッチ基板のGNDがスイッチ1,2に繋がっていなかったので、配線追加しました。
基本動作問題ないどころか、とても良さそうなので パオさんの基板で20dB低雑音アンプも組み立てて実験してみます。
ありがとうございました!!
//
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/11/25 (Mon) 19:14:03
>やどさん
>SG振幅 安定カウント最高周波数
> -1dBm 350MHz
すごいですね!350MHz まで計測出来ましたか。
ところで、RFC-5のページで公開されている回路図の「20220906」の C1 では値が分からなかったので 0.1uF にしてしまいましたが、本当は 1uF だったのですね。
自信がないので、その他の数値も青色で入れましたが合っていますか?
Re: 20dB 低雑音アンプのプリント基板化 - 笛吹おじさん
2024/11/25 (Mon) 22:28:59
パオさん、今晩は、
C5は1uF耐圧25Vです。C3は22uF耐圧10Vです。
R1は150オームです。
C1は0.1uFでもOKだと思います。
追記
やどさんの回路では190オームです。済みません。
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/11/26 (Tue) 11:11:45
>笛吹おじさん
教えて頂き、ありがとうございます。
コメントを読んだ途端に、久々に顔が真っ赤になりました。
そうですよね。
1/25uFなんて中途半端なコンデンサを使うはずがないですね。
考えれば分かりそうですが、「最近の回路シミュレータは、分数で値を計算してくれるんだ。」と勝手に思っていました。
恥ずかしい・・・
基板をお送りした方々に、早々に間違いの連絡をします。
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/11/26 (Tue) 16:48:14
パオさん、笛吹おじさん こんにちは!
もう解決されていますが、1uFですが、、
パオさんの回路図でC1 = RFC-5オリジナルでC5でした。
あっ、、オリジナルのC3は22uFでしたね!
E24系列に出てくる値なので、気が付きませんでした 汗);;
いかんいかん、失礼しました~
あと、オリジナルのC1は 0.1uFでOKです。
ノイズ除去のパスコン(バイパスコンデンサ)は・を打ったり、値を書かずに、回路図の余白に注記されていることが多いです。
//
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/12/04 (Wed) 23:33:42
パオさん 皆様、こんばんは。
遅くなりましたが、パオさん基板で20dBプリアンプの試行をしてみました。
少し抵抗値を変えましたので添付画像に回路図を入れておきます。 → 画像左側
結果:
・マイコンにつないで安定して周波数カウントする最高周波数は、約158MHz
→ ただし、TinySAのSG機能で -7dbm出力時です。プリアンプ入力部で50Ω終端しました。
・PG=150MHzで安定して周波数カウントする最小入力振幅は、-24dBm → 画像右上
→ これまでに試した中で最良な感度でした! -24dBm = 14mVrms = 20mVp = 40mVpp
原因不明事項
・周波数帯域が狭いというか、200MHz程度以上に共振回路もしくはLPFがあるような周波数特性を示します!? 汗);
→ NanoVNA-V2でS21特性を測定すると、画像右下のように急に増幅度が低下する周波数特性となり、配線や抵抗などの定数見直しでも同様な傾向でした。
ご参考用に、今回 LTspiceで回路シミュレーションを行ったネット(ascファイル)や使ったライブラリなどを、下記共有ディレクトリにおきました。
https://drive.google.com/drive/folders/1riC0zhOjh7L3jIOKZVYTP_VtJSxp-a_b
の中の、「RFC-5回路シミュレーション資料.zip」ファイルをダウンロードしてください。
→ 下手の横好き的シミュレーションなので、ご参考程度に… 汗;;
//
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/12/05 (Thu) 10:04:46
>やどさん
確認してもらい助かります。
私が測った時も、このアンプ単体では最大で 120 MHz 位までしか行かなかったので、基板上のどこかの配置が RF 回路的に NG なのでしょう。(配線の配置が RF フィルタを作っている?)
ここまで高い周波数を扱う基板を作ったのは初めてなので、オーダーに出す前に基板の RF をシミュレートする必要があったのだと思います。
とりあえず、すぐに確認できる、20dB 低雑音アンプ - 5倍アンプ - MCU の接続で、どこまで測れるか確認してみます。
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/12/14 (Sat) 22:21:48
>やどさん
やはり色々といじってみましたが、私が基板化した「20dB アンプ」部分は性能が良くない(上限周波数が低い)ようです。
そこで、安価で購入できる RF アンプモジュールを RFC-5 のプリアンプとして試してみたところ良好な結果が得られました。(320 MHz まで計測出来ました。)
また、試作品ですが LCD に I2C の AQM1602Y を使ったケースを Fusion360 で設計して 3Dプリンタで作ってみました。(まだ充電池は外部です。)
ところで、やどさんは TinySA と NanoVNA-V2 をお持ちのようですが、今回の様な周波数特性を「グラフ化」するため、私も同様な器材を購入したいと考えています。適した器材はどちらでしょうか?
Re: 20dB 低雑音アンプのプリント基板化 - やどさん
2024/12/15 (Sun) 00:44:09
パオさん こんばんは。
おおっ、5089Zとか5189な広帯域20dBのLNAですね。
うちにもAliで数百円だったか、買ったのが転がっています。
これを使えば、部品点数最小限のコスパ良し、高精度なレシプロカル式周波数カウンタが出来ますね!
いやいやケーシングが素敵です。
>TinySA と NanoVNA-V2
RF20dBアンプのような特性測定ならば、やはりNanoVNAがおすすめです。他にもいろいろな測定に使えます。
NanoVNA、TT@北海道さんが生み出したノーベル賞級なRF測定器で、許可を得ずに中国で複製して安く販売したのが原因と思いますが、世界中のアマチュア、プロ級の人々に使われています。
TinySAはNanoVNAをお手本に作られた簡易スペアナです。
今回は信号発生器としてしか使っていませんが、出力信号レベルを-7dBmから-70dBmくらいまで1dBm毎に可変できて重宝します。
(ちなみにNanoVNAも信号発生器になります)
//
Re: 20dB 低雑音アンプのプリント基板化 - パオさん URL
2024/12/18 (Wed) 19:57:06
RFC-5 プリント基板のアンプ部を色々と試験した記事をブログに書きました。
https://me-yoh.com/make_frequency_counter_12
最終的に、私の基板化した「20dB 低雑音アンプ」は動作不良ですが、AliExpress の RF アンプで 370 MHz (-13.7dBm)まで計測出来ました!
ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/13 (Fri) 23:34:52
今晩は。長くなりましたのスレッド(4)にしました。
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/14 (Sat) 07:39:01
笛吹おじさん おはようございます。
> コマンドの、0x06部分では、表示エントリーモード設定になっていますが、0xC0にすればOK
おっと、すみません誤記です! 0xC0ではなく、0x0C (表示ON・カーソルOFF)でした。
で、80,80が続くのが文字データ送信部ですが、
よく考えたら、笛吹おじさんのコマンド送信部と同様に直せば、正しく表示データが送信されると思います。
表示データ1バイトを送信する部分、lcdc16xn_i2c.c内 lcdc_write8()を、下記のようにしたら文字出るはず、、汗);
//───────────────────────────────────
// データ1バイトをLCDに送る
//───────────────────────────────────
static int lcdc_write8( int data ) {
int err=0;
i2c_start();
err += i2c_write8( i2c_addrs ); // address + bit0=L(Write)
err += i2c_write8( 0x80 );
err += i2c_write8( data ); // data8bit
i2c_stop();
if( err ) return 1;
return 0; // OK
}
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/14 (Sat) 10:21:32
やどさん、お早うございます。
土曜の朝、早くからの御回答有難うございます。
早速やってみました。
結果************************************
244210-244355 I2C: Address/data: Address write: A0
244355-244376 I2C: Address/data: Write
244373-244394 I2C: Address/data: ACK
244399-244566 I2C: Address/data: Data write: 00
244563-244584 I2C: Address/data: ACK
244589-244755 I2C: Address/data: Data write: C0
244752-244773 I2C: Address/data: ACK
244821-244821 I2C: Address/data: Start repeat
244845-244990 I2C: Address/data: Address write: A0
244990-245011 I2C: Address/data: Write
245009-245030 I2C: Address/data: ACK
245034-245201 I2C: Address/data: Data write: 00
245199-245220 I2C: Address/data: ACK
245225-245390 I2C: Address/data: Data write: 0C
245388-245409 I2C: Address/data: ACK
245465-245465 I2C: Address/data: Start repeat
245489-245634 I2C: Address/data: Address write: A0
245634-245655 I2C: Address/data: Write
245652-245673 I2C: Address/data: ACK
245678-245845 I2C: Address/data: Data write: 00
245842-245863 I2C: Address/data: ACK
245867-246034 I2C: Address/data: Data write: C0
246031-246052 I2C: Address/data: ACK
246101-246101 I2C: Address/data: Start repeat
246125-246270 I2C: Address/data: Address write: A0
246270-246291 I2C: Address/data: Write
246288-246309 I2C: Address/data: ACK
246313-246480 I2C: Address/data: Data write: 80
246477-246498 I2C: Address/data: ACK
246502-246668 I2C: Address/data: Data write: 20
246666-246687 I2C: Address/data: ACK
246735-246735 I2C: Address/data: Start repeat
246759-246904 I2C: Address/data: Address write: A0
246904-246925 I2C: Address/data: Write
246923-246944 I2C: Address/data: ACK
246947-247114 I2C: Address/data: Data write: 80
247111-247132 I2C: Address/data: ACK
247136-247301 I2C: Address/data: Data write: 20
247300-247320 I2C: Address/data: ACK
247369-247369 I2C: Address/data: Start repeat
247393-247538 I2C: Address/data: Address write: A0
247538-247559 I2C: Address/data: Write
247557-247578 I2C: Address/data: ACK
247581-247748 I2C: Address/data: Data write: 80
247745-247766 I2C: Address/data: ACK
247770-247935 I2C: Address/data: Data write: 20
247934-247954 I2C: Address/data: ACK
248003-248003 I2C: Address/data: Start repeat
248027-248172 I2C: Address/data: Address write: A0
248172-248193 I2C: Address/data: Write
248191-248212 I2C: Address/data: ACK
248215-248382 I2C: Address/data: Data write: 80
248379-248400 I2C: Address/data: ACK
248405-248571 I2C: Address/data: Data write: 20
248568-248589 I2C: Address/data: ACK
248637-248637 I2C: Address/data: Start repeat
248661-248806 I2C: Address/data: Address write: A0
248806-248827 I2C: Address/data: Write
248825-248846 I2C: Address/data: ACK
248849-249016 I2C: Address/data: Data write: 80
249013-249034 I2C: Address/data: ACK
249039-249205 I2C: Address/data: Data write: 20
249202-249223 I2C: Address/data: ACK
249271-249271 I2C: Address/data: Start repeat
249295-249440 I2C: Address/data: Address write: A0
249440-249461 I2C: Address/data: Write
249459-249480 I2C: Address/data: ACK
249483-249650 I2C: Address/data: Data write: 80
249647-249668 I2C: Address/data: ACK
249672-249837 I2C: Address/data: Data write: 20
249836-249856 I2C: Address/data: ACK
249905-249905 I2C: Address/data: Start repeat
249929-250074 I2C: Address/data: Address write: A0
250074-250095 I2C: Address/data: Write
250093-250114 I2C: Address/data: ACK
250117-250284 I2C: Address/data: Data write: 80
250281-250302 I2C: Address/data: ACK
250306-250471 I2C: Address/data: Data write: 20
250470-250490 I2C: Address/data: ACK
250539-250539 I2C: Address/data: Start repeat
250563-250708 I2C: Address/data: Address write: A0
250708-250729 I2C: Address/data: Write
250727-250748 I2C: Address/data: ACK
250751-250918 I2C: Address/data: Data write: 80
250915-250936 I2C: Address/data: ACK
250940-251105 I2C: Address/data: Data write: 20
251104-251124 I2C: Address/data: ACK
251173-251173 I2C: Address/data: Start repeat
251197-251342 I2C: Address/data: Address write: A0
251342-251363 I2C: Address/data: Write
251361-251382 I2C: Address/data: ACK
251385-251552 I2C: Address/data: Data write: 80
251549-251570 I2C: Address/data: ACK
251574-251739 I2C: Address/data: Data write: 20
251738-251758 I2C: Address/data: ACK
251807-251807 I2C: Address/data: Start repeat
251831-251976 I2C: Address/data: Address write: A0
251976-251997 I2C: Address/data: Write
251994-252015 I2C: Address/data: ACK
252019-252186 I2C: Address/data: Data write: 80
252183-252204 I2C: Address/data: ACK
252208-252374 I2C: Address/data: Data write: 20
252372-252393 I2C: Address/data: ACK
252441-252441 I2C: Address/data: Start repeat
252465-252610 I2C: Address/data: Address write: A0
252610-252631 I2C: Address/data: Write
252628-252649 I2C: Address/data: ACK
252653-252820 I2C: Address/data: Data write: 80
252817-252838 I2C: Address/data: ACK
252842-253008 I2C: Address/data: Data write: 20
253006-253027 I2C: Address/data: ACK
253075-253075 I2C: Address/data: Start repeat
253099-253244 I2C: Address/data: Address write: A0
253244-253265 I2C: Address/data: Write
253262-253283 I2C: Address/data: ACK
253287-253454 I2C: Address/data: Data write: 80
253451-253472 I2C: Address/data: ACK
253476-253642 I2C: Address/data: Data write: 20
253640-253661 I2C: Address/data: ACK
253709-253709 I2C: Address/data: Start repeat
253733-253878 I2C: Address/data: Address write: A0
253878-253899 I2C: Address/data: Write
253896-253917 I2C: Address/data: ACK
253921-254088 I2C: Address/data: Data write: 80
254085-254106 I2C: Address/data: ACK
254110-254276 I2C: Address/data: Data write: 20
254274-254295 I2C: Address/data: ACK
254343-254343 I2C: Address/data: Start repeat
**********************************************
となり、20が連続で出ています。
まだ、その後の文字は表示されませんね。
まだ何かありそうです。
でもSW1,2を同時に押して電源を入れると「DFU G]と一瞬表示されますのでmain.cにある"DEFAULT SETTING"の1部?が出ているのかも、、、、、
これから日課のwalkingに行きますので2時間ほど投稿できません、よろしくお願い致します。
では、
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/14 (Sat) 11:55:52
おおっ、表示出ましたね!
スペースの埋め尽くしなので、面白くありませんが、立派な文字です。多分、お豆腐やカーソルも消えた事と思います。
一瞬、DFU Gとも表示するということは、文字送信は成功です。
コマンド送信も同様な関数にしてしまえばバッチリいけそうです。
I2C液晶への変更の肝は、初期化コマンドと、コマンド送信に表示データ送信の部分だけなので、これがOKになったら基本問題ないです。
もし、問題あればI2Cデコード結果を眺めてNGなところのコマンドや表示データの送信がどうなっているのかをゆっくり調べれば良いと思います。
すみません、自分もとても興味があったので、なんか逆に急かしてしまったかも、、、と思っていました。
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/14 (Sat) 12:43:37
今日は、今日は北風が強いです(東京の郊外西多摩)
やどさん、歩きながら考えて居たのですが、CPUからはLCDへ信号をほぼ正常な形で送りだしている印象です。
あとはLCDの問題?
以下のclock period をいじってみようかと思うのですが。100KHzよりは早そうなので、遅くしてみた方が、、、。
//const int ic2_period = 5; // ic2 clock period =100kHz(5us*2) 実測85kHz
//const int ic2_period = 2; // ic2 clock period =250kHz(2us*2) 実測170kHz
const int ic2_period_ns = 100;//200; // ic2 clock period =250kHz(2us*2) 実測170kHz
木を見て森を見ず的な事をやっていますので森の景観がどうなるのかまでは考えが及んでいません。
>すみません、自分もとても興味があったので、なんか逆に急かしてしまったかも、、、と思っていました。
いえいえ、そんなことはありません。やどさん、パオさんの応援で大いに助かっています。
感謝です!
今しばらくお付き合い頂ければ有難いです。
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/14 (Sat) 14:37:23
今日は。
SCL周波数は140~150KHzくらいで100KHz以下にはならない様な、、、。
どこをいじくればいいのか?
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/14 (Sat) 17:14:07
日が暮れるのが早いですね。
こちらは、寒くて車で移動… 運動不足ですぅ。Hi
先週、SCL周波数を落とすのも試してみました、
i2c_100khz.cを使って、20行目の
const int ic2_period = 2;
を 2から3や4にするとその比で遅くなりました。
ただ、 ACM1602NI-は、PiCマイコンでI2Cインターフェースしていて、消費電流を落とすためにPiCマイコンのクロック周波数を落としているとは思いますが、、
SCKで100kHz以下まで遅くしないと動かないのかは、試してみないと良く分からないです。
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/14 (Sat) 17:45:00
やどさん、今晩は。
車は免許も返納して乗れません(車持っていないです)
さて、お立合い!
何か出ましたよ。
const int ic2_period_ns = 500; //100;//200; // ic2 clock period =250kHz(2us*2) 実測170kHz
取り敢えず上記を500に替えてみました。
そうすると何やらそれらしい文字がでました。
SCL=132KHzくらいです。
この数字をもっと大きくすれば100kHzいかになるのか?
やってみます。
ゴールはもう少しですかね。
const int ic2_period_ns = 500; この数値を900まで増やしてみましたが130KHzよりは下がりません。
取り敢えず表示は良さそうです、SW2を押すと測定時間が変わりますがSW1を押したら気温表示が一瞬消えます。その時間がちょっと長い?(PCF8574アダプタにひかくして)かな。
あとは実際の周波数表示が出るか?をやってみます。
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/14 (Sat) 18:47:52
今晩は。
測定結果もちゃんと表示されている様です。
SCL周波数が100KHzにならないのはなぜ?
これを解決すれば概ねOKかなと。
const int i2c_addrs = 0xA0; //0x4E; // PCF8574 A2..0=111
//const int ic2_period = 5; // ic2 clock period =100kHz(5us*2) 実測85kHz
//const int ic2_period = 2; // ic2 clock period =250kHz(2us*2) 実測170kHz
const int ic2_period_ns = 900; //100;//200; // ic2 clock period =250kHz(2us*2) 実測170kHz
ST-LINK V2ですが、書き込みの度にUSBを抜き差ししないとCube Programmerとconnectできません。
そのうちUSBコネクタが壊れるのではと思っています。
そうなる前に終わらないと、、、、。
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/14 (Sat) 22:11:35
笛吹おじさん こんばんは。
表示完璧ですね!
タイミングが怪しいと、笛吹おじさんが考えた通りでしたね!素晴らしいです。
一応、秋月のページでデータシート見てみたら、
SCLは100kHz max, SDAのセットアップ・ホールド2.4us以上って書いてありました。。。汗);;
st7032は400kHzでしたが、何故100kHz maxなのか?と思って、、
ChatGPTに訊いてみました。
「I2Cの規格自体は、標準モードで100kHzまで、高速モードで400kHzまでと定められています。」
「LCDモジュールの特性、ノイズ対策、消費電力などの様々な要因が複合的に作用して、そのように設計されていると考えられます。」
ちゃんと、I2Cの標準モード規格のLCDモジュールという事でした。。
//
Re: ACM1602NI-FLW-FBW-M01(4) - パオさん URL
2024/12/14 (Sat) 22:29:27
>笛吹おじさん
LCD へ無事表示が出ましたね。
おめでとうございます!
ところで、ST-LINK V2 の不具合の件ですが、ドライバを入れ直してはいかがでしょうか?
私は USB が調子悪い時には「USB Device Tree Viewer」というソフトで確認して調子悪い時はドライバを入れ直しています。
>やどさん
毎日遅くまでお疲れさまでした。
ちなみに、「20dB 低雑音アンプ」で RFC-5 のアンプの続報を報告させてもらいました。
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/15 (Sun) 00:10:28
やどさん、パオさん、ご協力有難うございました。
お陰様で何とかゴウルにたどり着くことができました。お礼申し上げます。
SCLの周波数を落とす部分は適当に変更しましたが、今一つ効果がでていません。
この部分は検討事項です。
ST-LINKの件了解です。入れなおしてみたいと思います。
後は20dBアンプ部を作ります。結果についてはまた投稿します。
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/15 (Sun) 09:08:31
お早うございます。快晴、風無し。
以下を1500にしてSCLCLKはちょうど100KHzになりました。
const int ic2_period_ns = 1500; //100;//200; // ic2 clock period =250kHz(2us*2) 実測170kHz
これにて1件落着でございまーーーす!
皆様、有難うございました。
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/15 (Sun) 10:24:00
笛吹おじさん、おはようございます。
ちょっとデューティが気になって、こちらも実験してました。
i2c_250khz.c(delay_ns使用)だと、デューティーが悪くなってしまうので、
i2c_100khz.c(delay_us)を使った方がよいかもです。動いているので多分問題ないですが…
パラメータ振ってSCL周期をみると、こんな感じでした。
<i2c_250khz.c>
const int ic2_period_ns = 100; scl=3.90us
const int ic2_period_ns = 1000; scl=5.06us
const int ic2_period_ns = 5000; scl=7.19us
<i2c_100khz.c>
const int ic2_period_us = 3; scl=7.7us
const int ic2_period_us = 4; scl=10.8us
const int ic2_period_us = 6; scl=14.5us
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/15 (Sun) 12:27:13
やどさん、こんにちは。
どうもリポート有難うございます。
<i2c_100khz.c>に切替て書き込んでみましたが表示がおかしくなってしまいました。
<i2c_100khz.c>と<i2c_250khz.c>は内容が異なりますのでさらに<i2c_100khz.c>を直す必要が在りそうです。
<i2c_100khz.c>にはconst int ic2_period_usは有りませんのでこれを追加してic2_periodの部分をic2_period_us に変更しました。
まだ追加、変更が必要でしょうね。
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/15 (Sun) 13:10:20
あっ、i2c_250hz.cを修正していると云うことですね。
ならば、i2c_250hz.cの
delay_ns(xxx) を delay_us(xxx)に全部置換すれば
早いのでは?と思いましたが、、、
i2c_250hz.cを良く見たら、
delay_period(123);とか合わせ込みしている部分がありますね。。デューティーが悪くなった原因です。
delay_period(123);をやめて、delay_us(xxx)にすればばいいか?
i2c_100khz.cを直した方が確実か?、、汗);
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/15 (Sun) 15:54:38
やどさん、今日は。
<i2c_100khz.c>
const int i2c_addrs = 0xA0; // 0x4E; // PCF8574 A2..0=111
//const int ic2_period = 5; // ic2 clock period =100kHz(5us*2) 実測85kHz
//const int ic2_period = 2; // ic2 clock period =250kHz(2us*2) 実測170kHz
const int ic2_period_ns = 6;
上記の結果が画像です。何だか時間が違うような気がしてます。
やどさんのは14.5us、私のは29.2us。どうして???
CPUのCLK20MHz(オリジナルは26MHz)これは関係ないでしすよね。
delay_us()この関数はgccがもっているのですか?
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/15 (Sun) 16:59:35
>delay_us()この関数はgccがもっているのですか?
サーチすると見つけられますよ~
自分は、Linuxコマンド”grep”でディレクトリ下のどのファイルに”delay_us”文字列があるか探しています。
念のため、
オリジナルRFC-5のI2C波形と、
ST7032用のI2C波形をオシロでも観測してみました。→ 画像
//
Re: ACM1602NI-FLW-FBW-M01(4) - 笛吹おじさん
2024/12/15 (Sun) 23:55:44
やどさん、今晩は。
<i2c_100khz.c>の方がDutyはほぼ50%に近いですね、
此方を採用することにしました。
私の場合は
const int ic2_period_ns = 2;でSCL:1サイクルで
13.3us(75KHz)になって居ます。
やどさんの場合はic2_period_ns = 6で14.5us(69KHz)で多少異なりますが概ね同じと思えます。
この違いは多分CPUのXTAl発振周波数の影響でしょう。
表示も問題に様です。
これでFixとしようと思います。。
Re: ACM1602NI-FLW-FBW-M01(4) - やどさん
2024/12/16 (Mon) 01:06:01
笛吹おじさん こんばんは!
はい、たぶん源発振周波数で違いが出たのかと思っています。
もう表示もSCL周期も完璧ですね!お疲れ様でした。
ちょっとプログラム追いきれなくてメカニズムが分からりませんが一応、
delay_us()は、下記に見つけました。
board/stm32/stm32.h:
#define delay_us( us ) delay_usec( us )
board/stm32/stm32.c:
void delay_usec( uint32 us ) {
volatile uint i=(us*(SYSTEMCORECLOCK/1000000))/(LOOPTIME);
while(i--);
}
board/stm32/stm32.c:
#define LOOPTIME 8
board/board.c:
const int SYSTEMCORECLOCK = 32500000; // 32.5MHz = 260MHz/8
//
ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/11 (Wed) 17:24:16
今晩は。日が暮れると冷えてきました。
さて続きです。
画像の様に初期化は4個出ました。時間は10ms(プログラムでは5ms)です。
最初はA0+00+01でACKが戻っています。2個目以降は中身はプログラム通りなのですが、何故かACKが返っていません。なぜか?まだ解決していません。
追記
あれ❕ アドレス:50❓ A0じゃないとおかしい、、
Re: ACM1602NI-FLW-FBW-M01(3) - やどさん
2024/12/11 (Wed) 19:57:13
こんばんは、朝いち0℃くらいになってきました。ブルっっ;;
>アドレス:50?
波形を見るとA0なので大丈夫です。
スレーブアドレス表示は変えられるみたいです。
unshiftedを選ぶとLSBのWrを含めた、A0が表示されると思います。(画像添付)
>何故かACKが返っていません
あ、やはりST7032と同じ症状ですね!
I2C全体の波形をみると、通常pullupされているはずのSCLが”L“になっているのが原因だと思います。
一昨日 ACM1602NI-FLW-FBW-M01(1)で送った、
static void i2c_stop( void ) 関数の中の最後の
I2C_SCL_L(); をコメントアウトしてみてください。
//
Re: ACM1602NI-FLW-FBW-M01(3) - パオさん URL
2024/12/11 (Wed) 19:57:32
>笛吹おじさん
もう少しで表示が出そうですね。
頑張ってください!
>やどさん
最新のファイルを利用させてもらい、無事、I2C LCD へ表示が出来ました。
やったー!(動作もOKです。)
色々とありがとうございます。
表示できなかった原因を探ってみました。
1 1つしかなく動作試験でずっと使っていた AQM1602A は故障していました。Arduino UNO でも表示不能でした。(この前まで大丈夫だったのですが)
2 最初に試したバイナリは、多分 20Pin 用なので、 I2C のピンが違っているので、LCD を変えても表示しなかった。(多分)
ーその後ー
3 頂いた LCDC16xn_i2c.c に入れ替えてコンパイルしたら AQM0802 で表示できました!
4 プルアップ抵抗やリセット回路の配線を外しても表示OKです。
5 他に部品箱にあった AQM1602Y と ATD1602CP に差し替えても表示できました。
次は、自分でプログラムを修正してOKなら、ケースを作ってみようと思います。
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/11 (Wed) 21:02:10
やどさん、今晩は。
ロジアナのADRS表示了解です、ありがとうございます。
それからACKは最初のA00001では出るのですがそれ以降はでないのです。
>I2C_SCL_L(); をコメントアウトしてみてください。
やってみましたが状況は同じでした。
まったくACKが返らないのなら分かるのですが、、、、。不思議です。
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/11 (Wed) 23:20:44
今晩は。
ACK出る様になりました。
残るはDataの表示部分です。
Re: ACM1602NI-FLW-FBW-M01(3) - やどさん
2024/12/11 (Wed) 23:28:44
笛吹おじさん、パオさん こんばんは。
1)1つ目のコマンドライトのストップ(P)以後、2つ目のコマンドライト間のSClは”H”になっている?
2)2つ目のコマンド開始のスタートビット位置はSCL”H”でSDA”↓”で(S)になっている?
3)スレーブアドレスは、正しく0xA0?
もし3つ 問題なしで、ACKが返ってこないとすると、、、
と、書いている間に、ACK出るようになったとの事、おめでとうございます!
一番考えやすいのは、SCLが”H"になっていないでしたが、、、何を直しましたか?
ちなみに、スタート信号は、SCK”H"期間に SDA”↓”なので、
「別にSCLが通常”H"でなければいけない訳ではない」です。
以前投稿したように、何故ストップ後(またはスタート前)にSCL="H"でなければ、ST7032LCDが動かないのか解せません。。。
この投稿見ている方でご存じの方がいらっしゃいましたら教えてください。
//
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/11 (Wed) 23:59:38
やどさん、
//───────────────────────────────────
// I2C stop
//───────────────────────────────────
static void i2c_stop( void ) {
I2C_SDA_L();
delay_ns(ic2_period_ns/2);
I2C_SCL_H();
delay_ns(ic2_period_ns/2);
//I2C_SDA_H(); <======== コメントアウト // stop
delay_ns(ic2_period_ns/2);
I2C_SCL_L();
}
上記をコメントアウトしました。
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/12 (Thu) 20:17:26
今晩は、今日は冷たい大風で寒かったです。冬らしくなったのでしょう。
さて、今日は全く進展しませんでしたね。
LCD初期化は期待通りの結果が出たのですが、データ表示の段階はよく分からないことも有り、、、ダメです。
初期化はコマンドが決まっていますので
ADRS+00+コマンドを出すことで何とかなりました。
以下が泥臭いやり方です。(お恥ずかしいですが、)
void lcdc_init( void ) {
i2c_init();
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
// LCDC_RS_L(); // LCD RS = 0 コマンド
lcdc_cmdwrite40( 0x01 );
delay_msec( 5 ); // 4.1ms 以上待つ
lcdc_cmdwrite41( 0x38 );
delay_msec( 5 );
lcdc_cmdwrite42( 0x0f );
delay_msec( 5 );
lcdc_cmdwrite43( 0x06 ); // 4ビットモード
delay_msec( 5 );
lcdc_cmdwrite41( 0x38 ); // 4ビット、2行表示、5x7ドット文字
lcdc_cmdwrite42( 0x0f ); // 表示 ON
lcdc_cmdwrite43( 0x06 ); // increment, no shift
// lcdc_write8( LCDC_NOCURSOR ); // カソールなし
lcdc_cls(); // ディスプレークリア
}
それぞれのcmdwriteXXに相対する関数i2c_txXXを用意して飛ばします。
static void lcdc_cmdwrite40( int data ) {
i2c_tx0( (0x00) + I2C_LCD_E + I2C_LCD_BL ); // RS=0,E=1
// i2c_tx( (0x00) + + I2C_LCD_BL ); // RS=0,E=0
}
以下の関数でLCDに送り込みます。
int i2c_tx0( int txdata ) {
int err=0;
//int lcdcmd = txdata;
i2c_start();
err += i2c_write8( i2c_addrs ); // address + bit0=L(Write)
err += i2c_write8( 0x00 );
err += i2c_write8( 0x01 ); // data8bit
i2c_stop();
if( err ) return 1;
return 0; // OK
}
ここまでは決まったコマンドですので何とかなりました。まえの関数から送られてくる引数は無視。
/*
//───────────────────────────────────
// データ1バイトをLCDに送る
//───────────────────────────────────
static void lcdc_write8( int data ) {
// lcdc_write4( data ); // 上位4ビット出力
// lcdc_write4( data<<4 ); // 下位4ビット出力
char txstr_d[5];
txstr_d[0] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_E + I2C_LCD_BL; // RS=1,E=1
txstr_d[1] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_BL; // RS=1,E=0
data = data<<4;
txstr_d[2] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_E + I2C_LCD_BL; // RS=1,E=1
txstr_d[3] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_BL; // RS=1,E=0
txstr_d[4] = 0;
i2c_tx_str_d( txstr_d );
}
*/
txstr_d[0] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_E + I2C_LCD_BL; // RS=1,E=1
txstr_d[1] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_BL; // RS=1,E=0
上記の中にある
(data&0xF0)ですが、、、どうすればいいのか?
データはADRS+80+dataで送り込む必要が在りますが、どうすればその形になるのか?
初期化の関数も1個ですべてのコマンドをあつかえればいいのですが、私の力では無理です。
そんな訳で頓挫しています。
追記
やどさん、初期化が終わりでーた転送に入った数バイトのロジアナ波形を見たいのですが、お願いします。
Re: ACM1602NI-FLW-FBW-M01(3) - やどさん
2024/12/13 (Fri) 01:06:22
笛吹おじさん こんばんは。
> 初期化後のデータ転送に入った数バイトのロジアナ波形
初期化後の lcdc_cls(); 部のロジアナ波形画像添付します。
アドレス0x7C→制御バイト(RS=1)→表示データ(スペース)の0x20 を1行分16回繰り返しています。
> (data&0xF0)ですが…、?
lcdc16xn_i2c.cのデータやコマンドを1バイト送る関数の中身ですが、
例えば、コマンド0x38を送る場合:
txstr_d[0] = (data&0xF0) + I2C_LCD_RS + I2C_LCD_E + I2C_LCD_BL; のところは、このままだと、、
(data&0xF0)の部分でコマンド38の上位4ビットを残して、下位4ビットにはRSやRW,E,BLの各制御ビットを追加しているので、
(0x30)+0x01 +0x04 +0x08 = 0x3D が送信されてしまいます。
最初の方にビット位置の定義があります。
#define I2C_LCD_RS 0x01 // P0 →SC1602LCDのRS端子につながる
#define I2C_LCD_RW 0x02 // P1 →SC1602LCDのRW端子へ
#define I2C_LCD_E 0x04 // P2 : Eへ
#define I2C_LCD_BL 0x08 // P3 :
元の(PCF8574+sc1602)なLCDでは、SC1602LCDのRSやRW,E,BL制御信号もI2Cで送らなければいけなかったので、コマンドや表示値は4ビット幅にして2回に分けて送る必要がありました。
でも、I2C-LCDでは、アドレスとRWの8ビット → RSを含む8ビット → コマンドや表示データ8ビット、と8ビット幅で送ることが出来ます。
(RSやRW,E,BLの制御ビットを付加する必要ありません)
そこで、対策案ですが、lcdc16xn_i2c.c で、
//───────────────────────────────────
// データ1バイトをLCDに送る
//───────────────────────────────────
static void lcdc_write8( int data ) {
char txstr[2];
txstr[0] = 0x80; // RS=1
txstr[1] = (data);
i2c_tx_str( txstr );
}
//───────────────────────────────────
// コマンド1バイトをLCDに送る
//───────────────────────────────────
static void lcdc_cmdwrite8( int data ) {
char txstr[2];
txstr[0] = 0; //RS=0
txstr[1] = (data);
i2c_tx_str( txstr );
}
LCD初期化 の部分は、
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
// LCDC_RS_L(); // LCD RS = 0 コマンド
lcdc_cmdwrite8( 0x01 );
delay_msec( 5 );
lcdc_cmdwrite8( 0x38 ); // 8ビット、2行表示
delay_msec( 5 );
;
のように続ければ良さそうです。
あと、念のため、i2c_100khz.c のストップ条件の生成部と文字列を送る部分は、下記の様にしてみてください。
static void i2c_stop( void ) {
I2C_SDA_L();
delay_us(ic2_period);
I2C_SCL_H();
delay_us(ic2_period/2);
I2C_SDA_H(); // stop
delay_us(ic2_period/2);
//I2C_SCL_L(); <--- ここをコメントアウト
}
それと、
// 文字列を I2C に送る
int i2c_tx_str( char *txstr ) { の中の、
while( *txstr ) { はコメントアウトして、代わりに
for( int n=0; n<2; n++ ) { にしてください。
while( *txstr )のままだと、RSや表示データが0x00だと送信ストップしてしまうためです。
//
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/13 (Fri) 08:30:19
やどさん、お早うございます。
夜遅くまで私の愚問にご回答頂きありがとうございます。感謝! 感謝! 感謝! です。
貴重なやどさんの睡眠時間が短くなってしまいましたね。済みません。 n(_ _)m
早速やってみます。
結果はまたご報告いたします。
どうも、、、でした。
Re: ACM1602NI-FLW-FBW-M01(3) - やどさん
2024/12/13 (Fri) 12:41:32
いえいえ、すみません、大丈夫です。
それに全然愚問ではないです。。
笛吹おじさんのように、自ら問題を解決しようとする姿勢は他の範であると思います。
きっと、きんさんぎんさんみたいに100歳過ぎても頭脳が衰えないです。
//
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/13 (Fri) 17:13:48
やどさん、今日は。
結果です。
初期化の38-0F-06 CLS LCDは出ています。その後のデータ部分はA0-80-80 A0-80-80の繰り返しの様です。
LCD表示も豆腐が1個点滅しています。カーソルも豆腐が消えて時に出ています。
ACKはI2C_SCL_L();のコメントアウトでは駄目でした。
今はその上のI2C_SDA_H();をコメントアウトしています。
データ表示部分はプログラムをいじっていますので何か変わってしまったところが有る可能性もありますのでもう一度見直します。
static void i2c_stop( void ) {
I2C_SDA_L();
delay_us(ic2_period);
I2C_SCL_H();
delay_us(ic2_period/2);
I2C_SDA_H(); // stop <------ここに変更
delay_us(ic2_period/2);
//I2C_SCL_L(); <--- (ここをコメントアウト)
}
以下はロジアナの結果です。初期化の最初の部分は端折ってあります。
**********************
162426-162522 I2C: Address/data: Address write: A0
162522-162535 I2C: Address/data: Write
162535-162548 I2C: Address/data: ACK
162552-162663 I2C: Address/data: Data write: 00
162661-162675 I2C: Address/data: ACK
162679-162787 I2C: Address/data: Data write: 0F
162786-162799 I2C: Address/dress write: A0
162945-162959 I2C: Address/data: Write
162957-162971 I2C: Address/data: ACK
162975-163086 I2C: Address/data: Data write: 00
163084-163098 I2C: Address/data: ACK
163102-163212 I2C: Address/data: Data write: 06
163210-163224 I2C: Address/data: ACK
163262-163262 I2C: Address/data: Start repeat
163278-163374 I2C: Address/data: Address write: A0
163374-163388 I2C: Address/data: Write
163387-163401 I2C: Address/data: ACK
163404-163515 I2C: Address/data: Data write: 00
163513-163527 I2C: Address/data: ACK
163530-163641 I2C: Address/data: Data write: C0
163639-163653 I2C: Address/data: ACK
163686-163686 I2C: Address/data: Start repeat
163702-163799 I2C: Address/data: Address write: A0
163799-163813 I2C: Address/data: Write
163811-163825 I2C: Address/data: ACK
163827-163939 I2C: Address/data: Data write: 80
163937-163951 I2C: Address/data: ACK
163953-164063 I2C: Address/data: Data write: 80
164063-164076 I2C: Address/data: ACK
164110-164110 I2C: Address/data: Start repeat
164126-164223 I2C: Address/data: Address write: A0
164223-164237 I2C: Address/data: Write
164235-164249 I2C: Address/data: ACK
164251-164363 I2C: Address/data: Data write: 80
164361-164375 I2C: Address/data: ACK
164377-164489 I2C: Address/data: Data write: 80
164487-164501 I2C: Address/data: ACK
*************************
Re: ACM1602NI-FLW-FBW-M01(3) - やどさん
2024/12/13 (Fri) 20:57:40
笛吹おじさん こんばんは。
> ACKはI2C_SCL_L();のコメントアウトでは駄目でした
誤報かな?と思ったのですが、「// I2C_SDA_H(); stop」でないと表示されないのですね!
ストップ条件を出さずにスタートを重ねることになりますが、
ChatGPTに訊いてみたら、出来るそうです。(推奨はしないけれど、との事)
もしかすると、、I2Cポート設定時の最初のSCL・SDAがポイントなのかもと考えています。。
> 以下はロジアナの結果…
コマンド 0F→06→C0→表示データ 80→80→
表示データがスペース0x20でなく0x80になっているのが問題なだけで、これを直せば、表示しますね!!
っていうか、もうお豆腐とカーソルを表示しているのですね!
コマンドの、0x06部分では、表示エントリーモード設定になっていますが、0xC0にすればOKです。
あと、「Data write 0C 表示ON,カーソルOFF」のコマンドを加えれば、カーソルを消せます。
*ST7032液晶の初期化→表示クリア部分です(アドレスとStop行は省略)
Start
Data write 0 コマンド
Data write 38, 39, 14, 71, 56, 6C, 38, 01, 6C, 01, ← ST7032初期化部分
Start
Data write 0
Data write 0C 表示ON,カーソルOFF
Start
Data write 0
Data write C0 2行目の先頭指定
Start スペース書き込みを1行分 16回繰り返し
Data write 40 表示:RS=1
Data write 20 0x20 space
Start
Data write 0
Data write 80 1行目の先頭指定
Start
Data write 0
Data write C0 表示ON,カーソルOFF
Start
Data write 0
Data write 80 1行目の先頭指定
Start
Data write 40 スペース書き込みを1行分 16回繰り返し
Data write 20
//
Re: ACM1602NI-FLW-FBW-M01(3) - 笛吹おじさん
2024/12/13 (Fri) 22:30:10
やどさん、今晩は。
>コマンドの、0x06部分では、表示エントリーモード設定になっていますが、0xC0にすればOKです。
此処を直した結果です。
***********************
162341-162438 I2C: Address/data: Address write: A0
162438-162452 I2C: Address/data: Write
162451-162465 I2C: Address/data: ACK
162468-162579 I2C: Address/data: Data write: 00
162577-162591 I2C: Address/data: ACK
162595-162704 I2C: Address/data: Data write: 0F
162702-162716 I2C: Address/data: ACK
162743-162743 I2C: Address/data: Start repeat
162759-162855 I2C: Address/data: Address write: A0
162855-162869 I2C: Address/data: Write
162868-162882 I2C: Address/data: ACK
162885-162996 I2C: Address/data: Data write: 00
162994-163008 I2C: Address/data: ACK
163011-163122 I2C: Address/data:{ Data write: C0}
163120-163134 I2C: Address/data: ACK
163166-163166 I2C: Address/data: Start repeat
163182-163279 I2C: Address/data: Address write: A0
163279-163293 I2C: Address/data: Write
163291-163305 I2C: Address/data: ACK
163308-163418 I2C: Address/data: Data write: 00
163418-163431 I2C: Address/data: ACK
163435-163544 I2C: Address/data: Data write: C0 <ーー2回出ている
163544-163557 I2C: Address/data: ACK
163585-163585 I2C: Address/data: Start repeat
163601-163698 I2C: Address/data: Address write: A0
163698-163712 I2C: Address/data: Write
163710-163724 I2C: Address/data: ACK
163727-163838 I2C: Address/data: Data write: 80
163836-163850 I2C: Address/data: ACK
163853-163964 I2C: Address/data: Data write: 80
163962-163976 I2C: Address/data: ACK
164004-164004 I2C: Address/data: Start repeat
164020-164117 I2C: Address/data: Address write: A0
164117-164131 I2C: Address/data: Write
164129-164143 I2C: Address/data: ACK
164145-164257 I2C: Address/data: Data write: 80
164255-164269 I2C: Address/data: ACK
164271-164381 I2C: Address/data: Data write: 80
164381-164394 I2C: Address/data: ACK
***********************************************
Data Write CO が出ていますが(2回出ていますね)
0x20は出ないです。
表示はおかしいですが、取り敢えずは動いている印象です。
ACM1602NI-FLW-FBW-M01(2) - 笛吹おじさん
2024/12/10 (Tue) 08:41:10
皆様、お早うございます。
スレッドが長くなりましたので新しく(2)にしました。
やどさん、コンパイルは通りましたが表示は出ませんね。もう少し考えることにします。でも難しいです。
(今どきの若い人の言葉ではムズイです)
Re: ACM1602NI-FLW-FBW-M01(2) - パオさん URL
2024/12/10 (Tue) 09:51:40
>笛吹おじさん
昨晩、私も色々と試してみましたが、今のところ ST7032 LCD には表示させることが出来ていません。
>やどさん
なんだか指摘したみたいになってスミマセン(文書で表現するのは難しいですね。)
出来ましたら、ハードの不良と切り分けたいので、表示に成功した「main.hex」と、変更した「lcdc16xn_i2c.c」をメール先へお送りいただけないでしょうか?
Re: ACM1602NI-FLW-FBW-M01(2) - やどさん
2024/12/10 (Tue) 13:04:16
こんにちは。
パオさん
hexを下記に置きました。
https://drive.google.com/drive/folders/1riC0zhOjh7L3jIOKZVYTP_VtJSxp-a_b
のRFC_5_ST7032表示するもNG.zipです
昨晩、AQM1602XA(画像添付)をぶんきゅうさんのエレキーヤーで使っていた事に気が付いて、16文字表示できましたが、まだ変です。。汗);;
笛吹おじさん
PulsViewソフトでI2C解読させて、I解読した表示の上で、右クリックすると、Export All annotationsでき、テキストファイルに落とせました。
これで解析がとても楽になりました。
↓
SDAの立下りにトリガかけて、RUNした後に電源ONすると、最初からのI2C波形が得られます。
こんな感じでテキストができました。
481852-481944 I2C: Address/Data: Address write: 3E
481836-481836 I2C: Address/Data: Start
481944-481958 I2C: Address/Data: Write
481956-481970 I2C: Address/Data: ACK
481973-482079 I2C: Address/Data: Data write: 00
482079-482092 I2C: Address/Data: ACK
482096-482201 I2C: Address/Data: Data write: 38
482200-482213 I2C: Address/Data: ACK
482222-482222 I2C: Address/Data: Stop
562363-562363 I2C: Address/Data: Start
562379-562471 I2C: Address/Data: Address write: 3E
562471-562485 I2C: Address/Data: Write
562483-562497 I2C: Address/Data: ACK
562500-562606 I2C: Address/Data: Data write: 00
562606-562619 I2C: Address/Data: ACK
562623-562728 I2C: Address/Data: Data write: 38
562728-562741 I2C: Address/Data: ACK
562749-562749 I2C: Address/Data: Stop
642881-642881 I2C: Address/Data: Start
642897-642989 I2C: Address/Data: Address write: 3E
642989-643003 I2C: Address/Data: Write
643001-643015 I2C: Address/Data: ACK
643018-643124 I2C: Address/Data: Data write: 00
643124-643137 I2C: Address/Data: ACK
643141-643246 I2C: Address/Data: Data write: 39
643245-643258 I2C: Address/Data: ACK
643266-643266 I2C: Address/Data: Stop
723413-723413 I2C: Address/Data: Start
723428-723520 I2C: Address/Data: Address write: 3E
723520-723533 I2C: Address/Data: Write
723533-723546 I2C: Address/Data: ACK
723549-723656 I2C: Address/Data: Data write: 00
723655-723668 I2C: Address/Data: ACK
723673-723778 I2C: Address/Data: Data write: 14
723778-723791 I2C: Address/Data: ACK
723799-723799 I2C: Address/Data: Stop
: :
1128212-1128304 I2C: Address/Data: Address write: 3E
1128304-1128317 I2C: Address/Data: Write
1128317-1128330 I2C: Address/Data: ACK
1128333-1128441 I2C: Address/Data: Data write: 40
1128439-1128453 I2C: Address/Data: ACK
1128456-1128564 I2C: Address/Data: Data write: 20
1128562-1128576 I2C: Address/Data: ACK
1128583-1128583 I2C: Address/Data: Stop
1128611-1128611 I2C: Address/Data: Start
1128627-1128719 I2C: Address/Data: Address write: 3E
1128719-1128732 I2C: Address/Data: Write
1128731-1128744 I2C: Address/Data: ACK
1128748-1128856 I2C: Address/Data: Data write: 40
1128854-1128868 I2C: Address/Data: ACK
1128871-1128977 I2C: Address/Data: Data write: 20
1128977-1128990 I2C: Address/Data: ACK
1128998-1128998 I2C: Address/Data: Stop
//
Re: ACM1602NI-FLW-FBW-M01(2) - 笛吹おじさん
2024/12/10 (Tue) 14:43:29
皆さん、今日は。
今日も良いお天気です。
私のlcdは違うタイプですので動かないのは当たり前ですね。
やどさん、PulsViewソフトの使い方のご紹介ありがとございます。
別の話しです、私の古い愛機TS850が壊れてしまいました。
7MHzで和文CWを毎朝聞いて忘れないようにしていたのですが、、、。
やどさんもCWやるのですね。
私のPulsViewはHEX用事が出ないのです。何か足りないのかな、、、?
パオさん、やどさんと同じタイプのLCDですので多分表示が出のではと思います。
Re: ACM1602NI-FLW-FBW-M01(2) - 笛吹おじさん
2024/12/10 (Tue) 17:10:12
今晩は。
少し進歩しましたかね。
取り敢えずカーソルの点滅とSW1,2を同時押ししたときに「DEFAULT SETTING」と表示されるはずなのですが「M]と表示されています。
ADRS+00+comand,ADRS+80+data が出る様に変更を加え、何らかの反応は得られるようにはなったのですが
ACM1602NIに合う様にまだかなり変更を加えないといけないようです。
Re: ACM1602NI-FLW-FBW-M01(2) - やどさん
2024/12/10 (Tue) 20:05:27
笛吹おじさん こんばんは
表示し始めましたね!
> PulsViewはHEXが出ない…
こちらは下記をインストールしました。
https://sigrok.org/wiki/Downloads
Release builds:
WindowのPulseView 0.4.2 (64bit)
あと、昨晩チェックしていて下記修正の修正しました。
< lcdc16xn_i2c.c >
#define I2C_LCD_RS0 0x01 // C0,RS=00 for st7032 追加 ← 前回追加した行の 0x01を 0x00する
int i2c_tx_str( char *txstr ) { ← この関数内の、
:
// while( *txstr ) { ← while文をコメントアウトして
for( int n=0; n<2; n++ ) { ← この for文に変更する
:
}
:
}
これは、
文字列をI2Cで送る場合、データの終わりを示すため最後に'00'が置かれています。が、、
PCF8574だと、データ4ビット+BL,WR,RS,ENビットで送るため、8bit全体で'00'になることはないのですが、
ST7032系では付加ビットが要らないため、RS=0コントロールバイトやCGRAMデータで'00'になる場合があり、それ以降のデータが無いものと判定されて送信されません。
前回、RS=0は'01’としてお茶を濁したのですが、、
CGRAMデータで'00'があったのと、コントロールバイトは'00'を送るようにすべき(?)で、上記の様に修正してみました。
パオさんへ
よく考えたら、同じST7032のLCDなら表示するはずですね。。
i2c_250khz.c
static void i2c_stop( void ) 関数の最後の行の
I2C_SCL_L(); 行をコメントアウトしましたか?
追記、
高校時代に試験監の前で電信級の送信術テストを受けまして、学生時代に上級を受けようと和文覚えたのですが、結局2級が受かったのはカムバック後の2008年でした、、、和文無し合格世代ですぅ。。
基本、CWはコンテストか599BK専門、、汗);;
もっとも昨今はアマ無線QSOは、専らFT8デジタルばかりです。夜中にローカルラグチューしてた6mなんてもう誰も居ないですし。。
ってお前が出ろよっ!って怒られそうですが… 汗);
///
Re: ACM1602NI-FLW-FBW-M01(2) - パオさん URL
2024/12/10 (Tue) 21:45:14
>笛吹おじさん
とうとう液晶画面に表示が出たのですね。
おめでとうございます。
>やどさん
データありがとうございます。
早速書き込んでみましたが表示が出ません(悲)
AQM0802 と AQM1602A で試してみましたがダメですねぇ。(配線を何度も確認したり、プルアップしたり色々と条件を変えたのですが・・・)
ハード的な何か勘違いをしている可能性が高いので、少し頭を冷やして考えます。
Re: ACM1602NI-FLW-FBW-M01(2) - 笛吹おじさん
2024/12/10 (Tue) 23:24:06
今晩は。
パオさん、まだ先は長そうです。
A00001-5ms-A00038-5ms-A0000F-5ms-A00006とSDAがでるはずなのですが、そうはいきません。
A00001-10ms-A00038A0000FA00006となって居ます。
この後A080Dataにする必要が在ります。
ロジアナではA080dataになって居る様な気もしますが、、、
ロジアナ、やどさんの様には動いてくれません。
Re: ACM1602NI-FLW-FBW-M01(2) - やどさん
2024/12/11 (Wed) 07:22:03
笛吹おじさん おはようございます。
コマンドの3バイトは正しく送信されているようですね!
> A00001-10ms-A00038A0000FA00006
の原因ですが、ディレイがdelay_msec()でなくて delay_usec()になっているとか?
こんな感じになるでしょうか、、
//───────────────────────────────────
// LCD初期化 for ACM1602NI-FLW-FBW-M01
//───────────────────────────────────
void lcdc_init2( void ) {
i2c_init();
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
lcdc_cmdwrite4( 0x01 );
delay_msec( 5 ); // 4.1ms 以上待つ
lcdc_cmdwrite8( 0x38 ); // 8ビット、2行表示
delay_msec( 5 );
lcdc_cmdwrite8( 0x0C ); // 表示 ON
delay_msec( 5 );
lcdc_cmdwrite8( 0x06 ); // increment, no shift
delay_msec( 5 );
lcdc_cmdwrite8( 0x38 ); // 8ビット、2行表示
lcdc_cmdwrite8( 0x0C ); // 表示 ON
lcdc_cmdwrite8( 0x06 ); // increment, no shift
lcdc_cls(); // ディスプレークリア
}
>ロジアナ、、、
1000円ロジアナと PulseViewでI2Cデコードした時の手順を画像に添付します。
この表示にすると、すごく便利です。
//
Re: ACM1602NI-FLW-FBW-M01(2) - やどさん
2024/12/11 (Wed) 07:28:29
続きです…
周波数表示が出なかった!?件、
自分の間違いで、問題ありませんでした。 画像添付
→ ℃やHzなどを表示させたソースを元に変更したのが敗因でした。。やれやれ… 汗);;
昨晩、Ojisankoubouソースをから修正したら、問題なく周波数カウント値も表示してます。そうだよねぇぇ。。
→ https://ojisankoubou.web.fc2.com/rfc/rfc-5/index.html のソースファイル( + 実行ファイル )PG追加 20220912 版から修正.
秋月・ AE-AQM1602AとAE-AQM0802でLCD表示する事を確認した修正ソース(変更したファイルのみ)とHexファイルを下記に置きました。
https://drive.google.com/drive/folders/1riC0zhOjh7L3jIOKZVYTP_VtJSxp-a_b
rfc-5_20220912_rev for I2C-LCD.zip
//
*追記
board.hは、STM32G030F6P6(TSSOP20)用なので変更不要です。
→ SDA端子をPA11に変更しています。
Re: ACM1602NI-FLW-FBW-M01(2) - 笛吹おじさん
2024/12/11 (Wed) 09:39:26
お早うございます。
やどさん、ご丁寧なロジアナの説明有難うございます。
HEXとテキスト表示が出来ました。
初期化の部分はご指摘の様にusecになって居ました。
改めて波形を見ますと一番最初はADRS=A0になって居ますがACKが返っていません。
其の後はADRSが34になって居ますので、プろグラムを見直す必要がでてきました。
ロジアナの設定がおかしかったのか、ADRSはチャント出ているものとばっかり思っていましたが、、、まったくNGでした。
もう一度やり直しです。
ACM1602NI-FLW-FBW-M01 - 笛吹おじさん
2024/12/04 (Wed) 22:15:06
皆さん、今晩は。
毎日が日曜日ですので、相変わらず的外れな解析?をやっています。
void lcdc_init( void ) {
i2c_init();
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
// LCDC_RS_L(); // LCD RS = 0 コマンド
lcdc_cmdwrite4( 0x33 );
delay_msec( 5 ); // 4.1ms 以上待つ
lcdc_cmdwrite4( 0x33 );
delay_usec( 100 );
lcdc_cmdwrite4( 0x33 );
delay_usec( 100 );
lcdc_cmdwrite4( 0x22 ); // 4ビットモード
delay_usec( 100 );
lcdc_cmdwrite8( 0x28 ); // 4ビット、2行表示、5x7ドット文字
lcdc_cmdwrite8( 0x0C ); // 表示 ON
lcdc_cmdwrite8( 0x06 ); // increment, no shift
// lcdc_write8( LCDC_NOCURSOR ); // カソールなし
lcdc_cls();
このlcdc_initをロジアナで見ればコマンダが見えるはずではないかとやってみたのですが、アドレスの4Eは見えるのですが次が38、また4E、そして38と期待はずれの結果でした。(33が出るはず、、、)
表示の出ないACM1602もアドレスのA0は見えますがその後にはプログラムに書いた数値ではありません。
見方が悪いのかも知れませんが。
画像は全体的なタイミングを見たものです。
ACM1602はSDAが途中で出なくなっていますが、これは表示が出ないので当然の結果です。
全体的なタイミングの印象は大きくは違っていません。
パオさんの投稿にある
・コマンド送信は、ID(0xA0)、0x00、コマンド
・データ送信は、ID(0XA0)、0X80、データ
プログラムを見ると(初心者ですので、、、)そのような動きをする様に記述されています。
#include "i2c_100khz.c" のアドレスをA0にしてやれば動きそうな気がしますが、そうはならない?
むずかしいですねーーー。
Re: ACM1602NI-FLW-FBW-M01 - 笛吹おじさん
2024/12/06 (Fri) 17:36:26
今日は。
相変わらずやっています。
Arduinoで表示がされていますので、i2CのSCL,SDAをロジアナで見ますと、
A00001 A00038 A0000F A00006 初期化の数値が見えます。
ADRS+CMD(00)+Dataの形をとっていますね。
一方、RFC-5の場合はADRSは4Eと出ることは確認したのですが続くデータは異なります。
プログラムの流れをたどってみました(迷走状態ですが)。
void lcd_init2(void)の初期化の最初のdataは0x01はlcdc_cmdwrite4(0x01)ですので同じところの65行の関数に引数(0x01)が与えられます。
ここでi2c_tx( )に引数が渡されますね。
次にi2c_100khz.cの99行目のi2c_tx()に行きます。
ここでi2C_adrsとtxdataに渡され次のi2c_write8()に渡されLCDに初期化データの最初の0x01が書き込まれることになるのでしょう(私の想像ですが)。
i2_adrsとtxdataの間に命令コマンド(0x00)を送る必要が在ると思うのですが?
err += i2c_write8( i2c_addrs );
err += 0x00; <----追加
err += i2c_write8( txdata );
上記の様な泥縄をやってもNGでした(汗)
引数が関数を渡っていくのですが具体的に数値を当てはめてハードの動きを考えるのは、、、わたしには難しいです。
色々細かいところも考える必要が在るとは思いますがおおざっぱにたどるとこんな動きかなと。
Re: ACM1602NI-FLW-FBW-M01 - やどさん
2024/12/06 (Fri) 21:57:30
笛吹おじさん こんばんは。
コマンドが同じだったら簡単かと思ったのですが、そうでは無かったですね。。。
ちょっと、RFC-5でI2Cのプロトコル(の表現でいいのかな?)を簡易ロジアナでじっくり見てみました → 画像添付
で、あっ!と思ったのが、
コマンドは同じでも、LCDモジュールのRS,RW,EN端子にI2CなIOエキスパンダを通して制御信号を繋いでいて、
笛吹おじさんのI2C-LCDとは、ハード的にもI2Cプロトコル的にも違いそう、、という事です。
でも、、
2024/12/02 (Mon) 13:47:08の投稿から、
ちゃんと、ACKが返ってきて、豆腐の表示がクリアされたので、I2Cアドレスとデータ4ビットの順番(配線?)は正しいはずです。
問題は、RS(レジスタセレクト)だと思います。
RS=0でコマンドレジスタ、RS=1のときはDDRAM(表示RAM)が選択されます。
現状、RSが0のままで、表示dataが書き込まれず、コマンドレジスタが誤書き込みされているのではないでしょうか?
ちなみに、WRビットですが、レジスタやDDRAMをリードすることは無いとおもうので、0固定で良さそうです。
あと、EN(データバリッドのイネーブル?)は、決まったタイミングだし、I2C-LCDの場合は、RFC-5のSTM32マイコン側で発行するひつようは無さそうです。
さらに、パオさん情報のように、
・コマンド送信は、ID(0xA0)、0x00、コマンド
・データ送信は、ID(0XA0)、0X80、データ ← 80のMSBがRSです
となるようにする必要があります。
となると、、、
LCDC16xn_i2c.c の
// データ1バイトをLCDに送る
static void lcdc_write8( int data ) { } の部分の合わせこみが必要そうです。
現状のlcdc_write8は、4ビットモードなので、データ8ビットを上下に分けて、
ID{0x4E}、{上位4ビット+BL,EN,RW,RS} ← コマンド書き込み時(BL=1, EN=1->0, RW=0, RS=0)
ID{0x4E}、{下位4ビット+BL,EN,RW,RS} ← コマンド書き込み時(BL=1, EN=1->0, RW=0, RS=0)
のように2回に分けて I2Cでシリアルに送っています。
ここを表示データ書き込み時には、
ID(0XA0)、0X80、データ にすれば、表示データが正しく書き込めそう。。
ん? コマンド送信の時、ID(0xA0)、0x00、コマンドに直さないとダメだったら、初期化できたのは何故か??となりますが、、汗;
//
Re: ACM1602NI-FLW-FBW-M01 - 笛吹おじさん
2024/12/06 (Fri) 22:47:36
やどさん、今晩は。
画像はarduinoにつないだ時の物です。
画像上は初期化:01、38、0f、06、delay5ms
画像中はA0,00,01
画像下はA0,00,38 です。
0f,06も同様な形式です。
wire.hをincludeしていますのでwire.hの中身を見ればある程度分かるかと思ったのですが、、、、。
私には無理ですね。
rfc-5の場合は(やどさんの画像)はRSに目を付ける、RS=0かRS=1かを見ている?と言う事になるのかと。
LCDのドット(16個の□)が消えたので初期化が出来たと早合点かも知れません。
RSに注目してプログラムを直せば(追加)すればうまく行くかもですね。
ロジアナの下の数字に直したタイミングはロジアナアプリのオプションですか?
Re: ACM1602NI-FLW-FBW-M01 - やどさん
2024/12/07 (Sat) 02:15:12
>ロジアナアプリのオプションですか?
そうです、PulseViewソフトでは、I2Cのアドレスやコマンド値、データ値をHexで表示してくれてとても便利です。
参考にしたサイトです↓
“ロジックアナライザを試すその2(I2C)”
https://qiita.com/infinite1oop/items/b18197f74864b908a556
“簡易ロジアナを作り、Raspberry PiのI2Cアクセスを見る”
https://zenn.dev/hnz1102/articles/d2680aa4d9321b
Arduinoのようにライブラリでプログラムするのが普通になったので、ハードとソフトの関係が良くわからなくて頭が混乱しますよね。しかもハード(レジスタ設定など)が複雑怪奇になってるので… 汗;
自分はハードを弄ってた世代なので、、ソフトは苦手ですが、、
SDR-3プログラムを弄って、修正もされている笛吹おじさんなら、絶対直せますよ~。(と自分が云うのも変?…)
で、夜中に部品箱さがしたら、秋月で買った? AE-AQM0802という8文字x2行のI2CなLCDモジュールが出てきました。
ST7032というコントローラみたいですが、I2Cでのコマンドやでーたの送り方は似ているので、これで表示できるか試してみたいと思っています。
OLEDなモジュールもスタンバっているのですが、、こっちはコマンドが全然ちがうので、、未着手です。汗;
多分ですが、、
I2Cハードに近い側のi2c.c, Arduinoのwire.hとかは、そのまま使えて、、
I2Cにデータやコマンドを送り出す手順? を決めている、LCDC16xn_i2c.c を直せば良いのではないかと思っています。
PCF8574 + sc1602の場合は、RS,RW,Eの信号もデータと同時にI2Cで送る必要があるので、データを4ビット幅にしなければならなかったですが、
I2C-LCDなら不要なので(RSのみコントロールバイトでおくれば、LCDモジュール側のマイコンが生成してくれて?)、
データ8ビット幅の設定でOKなはず。
そうならば、
lcdc_write8() は、RS=1で、
ID(0XA0)、0X80、表示データ を各8bitで送る
lcdc_cmdwrite8() は、RS=0で、
ID(0XA0)、0X00、コマンドデータ を各8bitで送る
に直せば良いのではないか?です。
//
Re: ACM1602NI-FLW-FBW-M01 - パオさん URL
2024/12/07 (Sat) 10:56:29
>笛吹おじさん
ソフトウエアはお手伝いできなくてすみません。
ACM1602NI-FLW-FBW-M01 は持っていないのですが、
https://techv.exblog.jp/33817326/
では
「データシートにはMAX100Kまでと書いてありますが、100Kだと誤作動を起こすようです。安全なところで50Kとしました。」
と
「コマンドやデータを送る前に、0x80や0x00を先に送らなければならない」
と書かれていました。
また、
https://zenn.dev/maedan/articles/84590afbb0fe8b
では初期化と文字表示のソースが公開されていました。ご参考まで。
>やどさん
AE-AQM0802 や同じドライバ IC を使った LCD の在庫があります。
表示成功をお祈りしています。(「他力本願」で申し訳ないです。)
Re: ACM1602NI-FLW-FBW-M01 - 笛吹おじさん
2024/12/07 (Sat) 12:48:18
パオさん、今日は。
>ソフトウエアはお手伝いできなくてすみません。
いやいや私がかってにやっていることですのでお気使い無用でございますよ。
また有益な情報のご提供有難うございます。
トンネルの出口はまだ見えませんが、何となく明るくなってきていますので、、、出ることができるかもです(笑い)
もう暫く藻掻いてみます。
Re: ACM1602NI-FLW-FBW-M01 - やどさん
2024/12/09 (Mon) 00:36:37
笛吹おじさん パオさん こんばんは。
秋月の8文字2行なI2C液晶(AE-AQM0802)で表示させてみました。
実は、何十回も修正してはI2C波形確かめての繰り返し。。汗);
アドレスが合わなかったり、アドレス正しくでているのにLCDモジュールからACKが返ってこなかったり、、アドレス送信後のコントールバイト以降が送信されないなど… うーーむ。。
結果、やっと表示出ました。。汗);
ACM1602NI液晶とST7032のI2Cモジュールでは、I2Cアドレスと初期化設定とRSのビット位置が違いますが、ほぼ同じ送り方で大丈夫だと思います。
以下、修正したファイル名と修正した部分をそのまま記載します。
インターフェースは8ビット幅にしました。Functionレジスタの初期設定は 8ビット幅で設定しています。
< i2c_250khz.c >
const int i2c_addrs = 0x7C; // ST7032 3E: 01111100 ST7032追加
//const int i2c_addrs = 0x4E; // PCF8574 A2..0=111 コメントアウト
< LCDC16xn_i2c.h >
#define I2C_LCD_RS 0x01 // P0
#define I2C_LCD_RW 0x02 // P1
#define I2C_LCD_E 0x04 // P2
#define I2C_LCD_BL 0x08 // P3
#define I2C_LCD_RS0 0x01 // C0,RS=00 for st7032 追加
#define I2C_LCD_RS1 0x40 // C0,RS=01 for st7032 追加
注:
コントロールバイトは、コマンドライト時は 0x00なのですが、
0にしてしまうと、txstrの文字列が無いと判定されて送信されなくなるので、故意に0x01にしました。
ST7032のRSビットはbit6なので、表示データライト時のコントロールバイトは0x40にしています。
//───────────────────────────────────
// データ1バイトをLCDに送る for st7032
//───────────────────────────────────
static void lcdc_write8( int data ) {
char txstr[3];
txstr[0] = I2C_LCD_RS1; // C0,RS=01
txstr[1] = (data);
txstr[2] = 0;
i2c_tx_str( txstr );
}
//───────────────────────────────────
// コマンド1バイトをLCDに送る for st7032
//───────────────────────────────────
static void lcdc_cmdwrite8( int data ) {
char txstr[3];
txstr[0] = I2C_LCD_RS0; // C0,RS=00
txstr[1] = (data);
txstr[2] = 0;
i2c_tx_str( txstr );
}
//───────────────────────────────────
// LCD初期化 for st7032
//───────────────────────────────────
void lcdc_init( void ) {
i2c_init();
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
// LCDC_RS_L(); // LCD RS = 0 コマンド
lcdc_cmdwrite8( 0x38 );
delay_msec( 20 );
lcdc_cmdwrite8( 0x38 ); // 8ビット、2行表示
delay_msec( 20 ); // 4.1ms 以上待つ
lcdc_cmdwrite8( 0x39 ); // IS=1
delay_msec( 20 );
lcdc_cmdwrite8( 0x14 ); // Internal OSC
delay_msec( 20 );
lcdc_cmdwrite8( 0x71 ); // 3.3V=0x71, 5V=0x7A(コントラスト)
delay_msec( 20 );
lcdc_cmdwrite8( 0x56 ); // 3.3V=0x56, 5V=0x54 Bon
delay_msec( 20 );
lcdc_cmdwrite8( 0x6C ); // Follower-Cont.
delay_msec( 20 );
lcdc_cmdwrite8( 0x38 ); // 8ビット、2行表示 IS=0
delay_usec( 100 );
lcdc_cmdwrite8( 0x01 ); // 表示クリア
delay_msec( 20 );
lcdc_cmdwrite8( 0x0C ); // 表示 ON
delay_usec( 100 );
// lcdc_write8( LCDC_NOCURSOR ); // カソールなし
lcdc_cls(); // ディスプレークリア
}
注:なかなか表示が出なくて,ディレイ時間を多めに設定してました。ST7032だと20ms→2msでOKなはず.
i2c-sclクロックは250kHzでも問題なく動作します。
//
Re: ACM1602NI-FLW-FBW-M01 - 笛吹おじさん
2024/12/09 (Mon) 12:38:59
やどさん、今日は。
やりましたね!表示が出ていますね。いやいやすごいです。
やどさんの変更部分をコピペして部分的にわたしのLCDに合わせてみたのですが、コンパイルでエラーが出てしまいました。
再検討が必要です。
もう少し時間がかかりそうですね。
Re: ACM1602NI-FLW-FBW-M01 - パオさん URL
2024/12/09 (Mon) 20:10:36
>やどさん
日を越す時間まで頑張った成果、すごいです!
とうとう I2C LCD(ST7032)で表示が出来たのですね。
私もいくつかある同様の I2C LCD で試してみましたが、エラーが出ます。
ところで、間違っていたら申し訳ないのですが、変更箇所を確認させてください。
1 rfc-5_20220906/board/lcd/ 内の「i2c_250khz.c」に
const int i2c_addrs = 0x7C; // ST7032 3E: 01111100 ST7032追加
を追加
//const int i2c_addrs = 0x4E; // PCF8574 A2..0=111 コメントアウト
2 同じフォルダの「LCDC16xn_i2c.h 」に
#define I2C_LCD_RS0 0x01 // C0,RS=00 for st7032 追加
#define I2C_LCD_RS1 0x40 // C0,RS=01 for st7032 追加
を追加
3 「LCDC16xn_i2c.h 」に
// データ1バイトをLCDに送る for st7032
// コマンド1バイトをLCDに送る for st7032
// LCD初期化 for st7032
の3つを追加
ということですが、
追加するのは「lcdc16xn_i2c.c」ではないでしょうか?
もし、そうならば、すでに入っている
// データ1バイトをLCDに送る
などの部分はコメントアウトしなくても動きますか?
Re: ACM1602NI-FLW-FBW-M01 - やどさん
2024/12/09 (Mon) 22:18:13
パオさん、笛吹おじさん こんばんは。
>同じフォルダの「LCDC16xn_i2c.h 」に..
すみません、「lcdc16xn_i2c.c」です。
なんで".h”にしてしまったのか??寝ぼけてたかな、って思って lcdc16xn_i2c.cを見たら、頭のタイトル文字列をコピペしてました・・失敗 汗;;
そして、「lcdc16xn_i2c.c」の中の下記関数を置きかえます。
// データ1バイトをLCDに送る
static void lcdc_write8( int data ) { }
// コマンド1バイトをLCDに送る
static void lcdc_cmdwrite8( int data ) { }
// LCD初期化
void lcdc_init( void ) { }
上記修正で、コンパイルエラーはなくなると思います。
あと、
昨晩 良く把握できなくて書かなかったのですが、
もし、正しいI2Cアドレスを送っているのにACKが返ってこなくて表示しなかったら、下記も修正してみてください。
「i2c_250khz.c」内の関数
static void i2c_stop( void ) の最後の行で
I2C_SCL_L(); ← ストップ波形を生成した最後に、SCLをLowにしてますが、
//I2C_SCL_L(); ← コメントアウトしてPullUpのままにしてみてください。
AE-AQM0802はこの修正でACKが返ってきて表示OKになりました。
さらに:
さきほど、カウンタ周波数はちゃんと数字表示するかな?と思って、発振器をつないだのですが、、LCD一行目に肝心の周波数が表示しない!? ですぅぅ.. 汗);;
SW長押しでPGモードに入れた時の一行目の表示は全く問題ないのですが??
おかしいぃなぁ、、
文字表示の書き込みは、lcdc_write8( int data ) だけだのはずだと思ったのですが、、他にあるのかな…、、うーむ。。
もしかすると、"Hz""℃"など単位を入れた修正ソースを元に直したため?何か間違えてたかも?
//
RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/11/30 (Sat) 21:55:51
今晩は、スレッド替えました。
やどさん、やってみましたが、表示は出ませんね。
A0、50の両方をやりました。
パオさん、i2cdetectのご紹介有難うございます。
やってみましたI2C-LCDは50と出ました。
Re: RFC-5にi2CーLCDを使う - やどさん
2024/12/01 (Sun) 10:29:05
> 表示は出ませんね
だめですか…
・SDA/SCLがプルアップされていない?
・I2Cスレーブアドレス違い?
→0x50と出たということは、大丈夫そうですね
・コマンドが違う?
→表示したサンプルコードの初期化部+文字表示部分をRFC-5/lcd/lcdc16xn_i2c.c に適用してみる
まぁ、サンプルコードで表示しているので前途は明るいですよね、、
Re: RFC-5にi2CーLCDを使う - パオさん URL
2024/12/01 (Sun) 16:01:37
>笛吹おじさん
ソフトウエア的な話題にはついていけませんが、ハード的にこの LCD は、
・アドレスは 0X50 なので、送信するのは 0xA0
・I2Cのクロックは100kHzまで
らしいです。
i2c.c で
#include "i2c_100khz.c"
を選んで、
i2c_100khz.c のアドレスを変えてみてはいかがでしょうか?
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/01 (Sun) 16:46:19
今日は。皆様アドバイス有難うございます。
#include "i2c_100khz.c"も駄目でした。
そこでSCL,SDAの動きをロジアナで見て見ました。
使い方をわすれていますので先ずはお試しです。
ずいぶん前に「saleae」のLogic Analyzerを入手しました。8chの安いものです。その時にアプリをinstallしたのですが見当たりません。
そこで適当なアプリを入れて見ました。
画像を見るとアドレス50がLCDに送りだされている様な、、、印象です。
アプリの使い方が良く分かっていませんので、詳細は分かりませんが。
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/01 (Sun) 19:17:23
ArduinoとRFC-5の起動時?の波形を比較してみました。
SCLの時間はRFC-5では周期4us、Duty2us。
Arduinoは周期10us、6ushigh、4uslow
そんなにおおきな違いはありませんね。
i2c_100khz.cを下記の様に変更しています。
const int i2c_addrs = 0xA0; //0x4E; // PCF8574 A2..0=111
const int ic2_period = 5; // ic2 clock period =100kHz(5us*2) 実測85kHz
//const int ic2_period = 2; // ic2 clock period =250kHz(2us*2) 実測170kHz
Re: RFC-5にi2CーLCDを使う - やどさん
2024/12/01 (Sun) 20:43:29
笛吹おじさん パオさん こんばんは。
そうですね、RFC-5ではI2Cアドレスが0x28になっています。
SCL=1のときSDA↓でスタートして、その後SCL↑ごとにSDA値ラッチなので、”01010000"の8bit=アドレス7bit(0101000)とR/Wが"0"の波形です。
続いてACKビットになりますが、LCDからACKの"0"が出ていないです。
試しに、千円くらいで買った 簡易ロジアナ(24MHz/8ch)で見てみました。→ 画像
PCF8574インターフェーのLCDなので、I2Cアドレス0x27 + R/W(0)で、8ビット全体で 0x4E が出て、アクセスされた LCD(PCF8574)から、ACKの"0"が続いています。
でも、0xA0にしても表示しなかったとの事なので、LCD初期化が出来ていないのかと思います。
ちなみに簡易ロジアナですが、sigrokのPulseViewというソフトをダウンロードしてPCで使うのですが、I2Cなどプロトコル解析して表示してくれて とても便利です。コスパ最高です。
//
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/01 (Sun) 22:10:29
やどさん、今晩は。
私も同じロジアナです。PulseViewが見つからず、適当にDLしたものをつかいました。
確かロジアナを購入したときアプリはDLしたのですが、、、、
ACKが返っていないようですね。
何がNGなのか?分かりません。
もう暫く格闘して見ます。
追記
sigrok viewはLinuxですか?
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/01 (Sun) 23:28:28
今晩は。
void lcdc_init( void )これは違うので書き直す必要がありそうですね。
つまり、LCD制御コマンドが異なるのです。
これを書き替えてやってみましょう。
他にもあるでしょうね。
Re: RFC-5にi2CーLCDを使う - やどさん
2024/12/01 (Sun) 23:47:16
笛吹おじさん こんばんは。
> sigrok viewはLinux?
Win11-PCで使っています。
「PulseViewインストール手順(Windows)」でググると頭の方に、インストールと使い方がヒットします。
I2Cアドレス(を含むコマンド?)は
const int i2c_addrs = 0xA0; にして、lcd/i2c.cでコメントされている
//#include "i2c_100khz.c" 行を活かしてください。
パオさんのとおり、i2cクロック100kHzまでだと、タイミングの問題があるのかもしれません。
初期化部の待ち時間も気になります。。。
p.s.
実家の押し入れにあったレトロPC(FM-7)、パワーオン後のBASIC起動画面が出なくなりまして、、
ロジックアナライザでCPU動作見ていました…
超、久しぶりに6809MPUをみてて、昔のマイコンは端子機能が単純だったなぁ、、なんて思っていました。
でも、、原因は全然わからず、、汗;
土日潰れましたぁぁ。。汗;;
//
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/02 (Mon) 13:47:08
今日は。
下記を追加して初期化は出来た様です。
void lcdc_init2( void ) {
i2c_init();
delay_msec( 20 ); // 電源投入後 15ms 以上待つ
lcdc_cmdwrite4( 0x01 );
delay_msec( 5 ); // 4.1ms 以上待つ
lcdc_cmdwrite4( 0x38 );
delay_usec( 100 );
lcdc_cmdwrite4( 0x0F );
delay_usec( 100 );
lcdc_cmdwrite4( 0x06 ); // 4ビットモード
delay_usec( 100 );
lcdc_cmdwrite8( 0x28 ); // 4ビット、2行表示、5x7ドット文字
lcdc_cmdwrite8( 0x0C ); // 表示 ON
lcdc_cmdwrite8( 0x06 ); // increment, no shift
//lcdc_write8( LCDC_NOCURSOR ); // カソールなし
lcdc_cls(); // ディスプレークリア
}
LCD上の16個の四角いドットは電源を入れると瞬間見えますがすぐに消えました。未だ何も表示はされません。
LCDC16xn_i2c.cの変更が必要がも、、、、です。
Re: RFC-5にi2CーLCDを使う - パオさん URL
2024/12/02 (Mon) 21:47:58
「ACM1602NI-FLW-FBW-M01」の情報を調べてみました。
・コマンド送信は、ID(0xA0)、0x00、コマンド
・データ送信は、ID(0XA0)、0X80、データ
・コマンド、データ送信の間は5ms空ける
・Initは、以下コマンドを送信する(0x01,0x38,0x0f,0x06)
・表示前に、1行目なら0x80、2行目なら0xc0のコマンドを送る
だそうです。
なお、この LCD のドライバ IC は ST7032 でも PCF8574 でもはなく PIC16F689 だそうです。
https://www.ne.jp/asahi/air/variable/picmel/applications/ACM1602NI/index.html
Re: RFC-5にi2CーLCDを使う - 笛吹おじさん
2024/12/02 (Mon) 23:24:59
パオさん、今晩は。
どうも貴重な情報有難うございます。
ACM1602NIはインターフェースはPic,LCD制御がST7066Uが使われています。
I2C経由でデータをST7066Uに送り込めばLCD上に表示ができることになるのですが、そうは簡単ではなさそうです。
取り敢えず、初期化は出来ている様なのでなぜ文字が表示されないのか?それを今探っています。
SW1,2を押した状態で電源をONすると「DEFAULT SETTING」と出るのですがこれをやっても何もひょうじは出ません。
初期化の部分に文字を出すコマンドを入れて文字が出るのかどうか確認して見たいと考えて居ります。
暗中模索の状態ですね。
パオさん基板 - 笛吹おじさん
2024/11/28 (Thu) 21:57:53
皆さん、今晩は。
送って頂いた基板に部品を取り付けました。
すべて手はんだです。
CPUは8ピンタイプ、Xtalは20MHzのTCXOです。
オリジナルは26MHzですが20MHzでもOKかと思います。
まだ通電はしていませんが、果たして??です。
RF IN2がプリアンプ入力になるかと思いますがこのアンプの回路図はどこかにありますか?
Re: パオさん基板 - やどさん
2024/11/28 (Thu) 23:25:48
笛吹おじさん こんばんは。
パオさんから送ってもらった"8pin.jpg"画像の左下部分にRF IN2のアンプ回路図がありましたが、違ってたらすみません。
回路図的には、5倍アンプか20dBアンプかの選択になっています。(20dB+7dB構成もできます)
//
Re: パオさん基板 - 笛吹おじさん
2024/11/29 (Fri) 00:02:36
やどさん、今晩は。
8pin.jpg"画像はパオさんのブログにありますか?
2024/11/29 (Fri) 09:33:55
>笛吹おじさん
まだ間違いがあるかもしれませんが、自作基板の製作方法の記事をアップしました。
特に「20dB 低雑音アンプ」については確認が不十分です。(このアンプは「5倍アンプ」の代替?追加?など・・・)
https://me-yoh.com/make_frequency_counter_11
ご確認をお願いします。
(間違いがあったら、そっと教えてください。(笑))
Re: パオさん基板 - 笛吹おじさん
2024/11/29 (Fri) 18:58:54
今晩は。
基本部分が出来ましたので、プログラムを書き込んでみました。
残念ながらうごきません。
ちゃんとCPUは認識されています、main.hexとCPUメモリのコンペアは異常なし、LCDのSCL,SDA
の信号は出ています、CPUは取り敢えず動いている感じです。
main.hexも前回書き込んでいる実績のあるものです。
20MHzのクロックも出ています。
プログラムの書き込みがまずいのかもですね。
プログラムの書き込みはあっという間に終わります。
何となく書き込みがうまく行っていない様な感じがしますね。
2024/11/29 (Fri) 19:22:50
>笛吹おじさん
書き込みの後に自動で Verify(検証)されるので、そこで異常がなければ、正常に書き込まれているので変ですね。
後は「NRST_MODE」の書き換えは、もちろん終わっているでしょうし・・・
我が家でもプログラムの書き込みは一瞬で終わるので違いが分かりません。
Re: パオさん基板 - 笛吹おじさん
2024/11/29 (Fri) 23:12:12
今晩は。
どうもLCDが不良の様です。動いている方からLCDを外して繋げるとちゃんと表示が出ています。
I2Cの高いLCDなのに、、、、何という不運。
参りましたね。
Re: パオさん基板 - 笛吹おじさん
2024/11/30 (Sat) 08:35:42
お早うございます。
I2CーLCD、最初に電源を入れた時、表示が2列されるはずなのですが1列しか表示されていません。
この時点で何かおかしいなー?と気付くべきでした。
ハズレくじを引いたようです。
2024/11/30 (Sat) 10:59:15
>笛吹おじさん
無事動作してよかったですね。
表示がおかしい LCD は秋月の「ACM1602NI-FLW-FBW-M01」ですね。3.3V対応で1,700円!
今回の表示異常とは異なりますが、この基板ではデジタル系とアンプ部分を切り離すために(在庫処分のために)3.3V系の LCD を使っています。
5V LCD を使用する場合は電源を別にするか、昇圧回路を追加する改造をしないと正常に表示されないので、ブログの製作記事に注意書きを追加します。
Re: パオさん基板 - やどさん
2024/11/30 (Sat) 11:08:31
笛吹おじさん おはようございます。
I2CなLCDモジュールなのですね!
秋月サイトだとサンプルプログラムが置いてあるので、Arduinoマイコンとかで動作確認すると良さそうです。
で、コントローラとI2Cスレーブアドレスが多分違うので、(だいたいSC1602/HD44780コマンドコンパチが多いみたいですが、)
> rfc-5_20220912/board/lcd/i2c_250khz.c
18行目 const int i2c_addrs = 0x4E; // PCF8574 A2..0=111
は合わせる必要があります。
違っていたらすみません。。
//
Re: パオさん基板 - 笛吹おじさん
2024/11/30 (Sat) 13:15:53
みなさん、こんにちは。
そうですねアドレスの違いがあるかもですね。
秋月のサンプルを見ると
const uint8_t address = 0x50;
となって居ますね。
後でやどさんのアドバイスを試してみます。
PCF8574 変換の場合はロータリーSWでアドレスを設定したような記憶があります。
アドレスをソフトで調べる、、、そんなこともしたような。
80歳の脳みそでは古いことは呼び起せません。
PCF8574変換したLCDは3.3Vでも動くかなとやってみましたNGですね。5Vを供給する必要が在ります。
Re: パオさん基板 - 笛吹おじさん
2024/11/30 (Sat) 14:28:59
今日は。
board.cとboard.hを下記の様に変更しました。
//#include "lcd/lcdc16xn_i2c.c"
#include "lcd/i2c_100khz.c"
i2c_100khz.cのアドレスを50に変更(これ自信がありません)
const int i2c_addrs = 0x50; //0x4E; // PCF8574 A2..0=111
コンパイルすると
board/lcd/i2c_100khz.c:26:20: error: 'I2C_SCL_PORT' undeclared (first use in this function)
26 | stm32_gpio_type( I2C_SCL_PORT, I2C_SCL_PIN, GPIO_TYPE_OD ); // open drain
I2C_SCL_PORT,I2C_SDL_PORT,I2C_SCL_PIN,,,,undeclared
(first use in this function) でエラーになりますね。
includeするのか新たにエラー項目について定義するのか、、、、必要なのかも知れませんね。
秋月のサンプルでLCDが生きているのかをチェックしてみます。
Re: パオさん基板 - やどさん
2024/11/30 (Sat) 20:03:51
笛吹おじさん こんにちは。
表示バッチリですね!ナイスです。
まぁ、すぐ動いちゃうより、エラー対策など頭を使っていた方が身体に良いですよね!100歳もいけそう…なんて。(^^)/
あと、RFC-5のプログラムの方ですが、、
board.cとboard.hは変更なしでOKです。
→includeしている "lcd/lcdc16xn_i2c.c"が、lcd/i2c.cを読んでいて、更にlcd/i2c_250khz.cが呼ばれています。
なので、lcd/i2c_250khz.cの18行目を
const int i2c_addrs = 0xA0; // にすれば良いと思います
アドレス0x50を1bit左シフトして0xA0としたのは、I2Cアドレス7bit+R/W1bitの計8ビットでI2Cコマンドになるためなのですが、ちょっと自信ないですが..汗;
また、コマンドがコンパチでない場合も、同じi2c_250khz.cの中の初期化コマンドなどを合わせる必要がありますが、、まずはI2Cアドレス修正で如何でしょうか。
//
Re: パオさん基板 - パオさん URL
2024/11/30 (Sat) 21:01:44
>笛吹おじさん
高価な LCD が壊れていなくて良かったですね。
I2C アドレスを確認する方法ですが、ブログで紹介しています。(宣伝になってしまいスミマセン)
https://me-yoh.com/category/electronics/making_i2c_scanner
この中で ATtiny を使ってハードを作っていますが、それ以外に Arduino で簡単にアドレスを調べる方法を「ラジオペンチさん」が開発されています。
http://radiopench.blog96.fc2.com/blog-entry-520.html
Ardino UNO があればプログラムを書き込んで部品をつなぐだけでパソコン上にアドレスが表示されます。
便利ですよ。
RFC-5 表示用LCD - 笛吹おじさん
2024/11/26 (Tue) 18:51:50
皆さん、今晩は。
私は表示用LCDはパラレルをPCF8574でi2Cに変換したものをつかっています。でもこの変換ICは秋月ではもう売っていません。
他の所にはありますが。
やどさん、パオさんは何を使っていますか?
やどさんは変換されている様な、、、。
パオさんはi2Cタイプをお使いの様な印象です。
i2CタイプのLCD表示器はお値段が高いです。でもポチツてしまいましたが。(年金暮らしには痛いです)
Re: RFC-5 表示用LCD - パオさん URL
2024/11/26 (Tue) 20:41:52
>笛吹おじさん
私は aitendo の I2C 変換器を使用しています。(295円)
https://www.aitendo.com/product/7404
これに、部品箱の在庫の LCD をつなげました。
https://me-yoh.com/modification_i2c-lcd-adapter
https://me-yoh.com/lcd_px1602_display_test
どちらも動作しましたが、配線の変更が必要です。
これなら直結できます。(バックライトなし295円)
https://www.aitendo.com/product/17836
バックライトあり(395円)
https://www.aitendo.com/product/10147
Re: RFC-5 表示用LCD - 笛吹おじさん
2024/11/26 (Tue) 21:53:59
パオさん、今晩は。
思い出しました、パオさんご紹介の変換基板以前使ったことがあります。
PCF8574が搭載されている基板ですね。
忘却の彼方に沈んでしまってまったく記憶がありませんでした。
嫌ですね、お恥ずかしいことですが、歳を重ねるとはこういう事なのですよ。
アイテンドーを見ると在庫なしになっていますね。
2024/11/27 (Wed) 09:50:37
>笛吹おじさん
失礼しました。aitendo の在庫状況を見ていませんでした。
送料が色々ですが、Amazon で「PCF8574」で検索すると、変換アダプタが1個200円以下で売っているようです。
本当は安価な「ST7032」を使った I2C LCD を直付け出来ればよいのですが、プログラムのどこを変えればよいのか分かりません。(悲)
Re: RFC-5 表示用LCD - やどさん
2024/11/28 (Thu) 23:14:59
パオさん、笛吹おじさん こんばんは。
こちらも、PCF8574を積んたSC1602(HD44780)なLCDです。
ST7032なLCDを秋月サイトでみていたら、
・基本的なコマンドは、一般的なパラレル接続のSC1602と同じです
・基本的なWireコマンドで制御できます。・I2Cアドレスは0x3Eです
とありました。(AQM1602XA-RN-GBWのデータシートで)
とすると、I2Cアドレスを合わせれば、動くかもしれません。(待ち時間とかの問題あるかもですが…)
F:\rfc-5_20220912\board\lcd
i2c_250khz.c:
18 const int i2c_addrs = 0x4E; // PCF8574 A2..0=111 -> ST7032の 0x3Eに変更
board\には、#define OLED_SSD1306_I2Cのプログラムもあったので、SSD1306のOLEDも使えそうです。
Aliで100円くらい?だったSSD1306のOLEDが余ってるはずなので、(記憶が… 汗;;)試してみようかな。。
表示文字が小さいですが、視認性がいいので組込み用に良さそうです。
//
2024/11/10 (Sun) 20:59:40
ブログの記事は出来ていませんが製作した RFC-5 のプリント基板を組み立ててみました。
基板上には「5倍アンプ」と「20dB 低雑音アンプ」を選択出来るようになっていますが、まだ、「5倍アンプ」のみですが正常に動作しましたので、ご報告いたします。(現状で最大は 190MHz まで計測できています。)
>Ojisankoubou 様
「20dB 低雑音アンプ」とプリスケーラ基板の動作が確認できた後になりますが、この基板を配布してもよろしいでしょうか?(十数枚の予備があります。)
もちろんお代は頂かない「無料配布」の予定です。
これだけ素晴らしい機能の RFC-5 が(比較的)手軽に
作れるようになって、皆様のお手元に届けば良いなぁと考えております。
Re: RFC-5 プリント基板が出来ました - Ojisankoubou
2024/11/11 (Mon) 07:45:28
> 「20dB 低雑音アンプ」とプリスケーラ基板の動作が確認できた後になりますが、この基板を配布してもよろしいでしょうか?(十数枚の予備があります。)
> もちろんお代は頂かない「無料配布」の予定です。
もちろん OK です。
商用目的でない限り(無償または実費程度ならば)自由に配布・頒布して構いません。
Re: RFC-5 プリント基板が出来ました - パオさん URL
2024/11/15 (Fri) 12:40:16
>Ojisankoubou 様
自作基板の「無料配布」の許可を頂きありがとうございます。
ブログの記事を公開させて頂きました。
https://me-yoh.com/make_frequency_counter_10
なお、必要ないかもしれませんが、
Ojisankoubou 様
RFC-5 に書き込みを頂いた
やどさん
笛吹おじさん 様
にはご連絡を頂ければ、今回製作した基板を取り置きしておきますので差し上げます。
(機能確認の環境がないので、試験して頂きたいというのが本音ですが・・・)
Re: RFC-5 プリント基板が出来ました - やどさん
2024/11/16 (Sat) 12:21:38
パオさん、こんにちは!
ブログもみました、すごいです!
基板が余りましたら是非使ってみたいです。
20pinMCU用とプリスケーラ用基板予約お願いします 汗);
→ 別途ご連絡してSASEお送りいたします。
//
Re: RFC-5 プリント基板が出来ました - パオさん URL
2024/11/16 (Sat) 13:49:09
>やどさん
3名分のプリント基板は別に保管していますので、住所が分かり次第お送りします。
>Ojisankoubou 様
ちなみに、こちらの掲示板にメールアドレスは記載しない方がよろしいでしょうか?
もし、記載がまずいようでしたら、ブログの記事へのメッセージをお願いいたします。
メッセージは公開せずに直接返信いたします。
よく見たら、掲示板にメールアドレス入力欄がありました。
失礼いたしました。
Re: RFC-5 プリント基板が出来ました - パオさん URL
2024/11/16 (Sat) 22:54:18
>笛吹おじさん 様
大変申し訳ありません。
書き込み頂いたメッセージが、こちらの手違いで消えてしまったようです。
大変申し訳ありませんが、「pao@me-yoh.com」までご連絡ください。
Re: RFC-5 プリント基板が出来ました - 笛吹おじさん
2024/11/25 (Mon) 17:33:27
パオさん、基板届きました。
どうも有難うございます。
Re: RFC-5 プリント基板が出来ました - パオさん URL
2024/11/25 (Mon) 19:21:46
>Ojisankoubou 様
おかげさまで、RFC-5 基板を希望される方から連絡を頂き、着々と発送しています。
その中で、バグ修正をしたバイナリを希望される方がいました。
さすがに私がコンパイルしたファイルをブログで公開するのはまずいと思ったのですが、問い合わせのあった方に個別にファイルを送ってはいけないでしょうか?
Re: RFC-5 プリント基板が出来ました - Ojisankoubou
2024/11/26 (Tue) 07:08:43
> 問い合わせのあった方に個別にファイルを送ってはいけないでしょうか?
もちろん OK です。
RFC-5 バグ修正 - Ojisankoubou
2024/10/26 (Sat) 13:25:51
RFC-5 のページにバグ修正を追記しました。
ソースの修正部分のみなので各自修正・再コンパイルしてください。
入力周波数が 110MHz ぐらいのとき演算がオーバーフローしておかしくなる対策
freqcounter/freqcounter_measure.c の 197行目
int div = (f*WATCHDOG_MS)/2000; を
int div = ((f/10)*WATCHDOG_MS+100)/200; に修正
Re: RFC-5 バグ修正 - 笛吹おじさん
2024/10/29 (Tue) 19:09:53
今晩は。
バグの修正をやりました。
コンパイル法、書き込み法、すべて忘却の彼方に行ってしまった老人には難しいい状態です。(笑い)
何とかコンパイルしてSTLINKで書き込みをしたのですがコネクトできずプログラマーのVersionを上げたり試行錯誤。
コネクトできる時もあり書き込みをしたのですが、結局CPUがおかしくなったようです。
新しいCPUに載せ替えてうまく書き込みが出来ました。
動作はしていますが、温度表示がメニュー操作をするにしたがって30℃台からどんどん上昇していきます。
画像では61度ですがそのままメニューカラ抜けてほって90度位になりました。
私のコンパイル、書き込みが悪い可能性が在りそうですが、どなたか?おやりになった方ご一報頂ければ有難いです。
追記
どうも電池電圧が下がっていたようです。
外部電源に切替てOKになりました。
お騒がせしましてすみませんでした。
Re: RFC-5 バグ修正 - パオさん URL
2024/11/10 (Sun) 15:39:19
>Ojisankoubou 様
RFC-5 のバグ修正ありがとうございます。
少し時間がかかりましたが、ソースを修正して当方でも問題なく動作しています。
>笛吹おじさん 様
電池電圧が下がると、その様な動作になるのですね。
参考になります。
RFC-5 の入力切替 - パオさん URL
2024/10/09 (Wed) 20:47:03
やどさん様、トーク中にすみません。
私もやっと gcc の設定をしてプログラムの書き換えが出来る環境ができました。
そこで、20 Pin の STM32G031F6P6 で
1 クロック入力の確認("ERROR HSE"は消えました。)
2 RF 入力の確認(自分のオシレータの周波数を確認できました。)
3 I2C 端子の入れ替え
4 SW 入力端子(PA13)の入れ替え
までは出来ましたが、RF 入力(PB5)の入れ替えが出来ません。
>また、タイマー入力 PB5は20pinに配線しました。
やどさん様は RF 入力の入れ替えに成功されたようですが、具体的にはどこを書き換えましたか?
Re: RFC-5 の入力切替 - やどさん
2024/10/10 (Thu) 01:01:02
パオさん、こんにちは。
"ERROR HSE"が解消したら、もう動いたようなものですね!
RF入力の入れ替えですが、
配線のつなぎかえだけで(プログラムの変更なし)OKです。プリアンプ出力線をモジュールのB6(20pin)に接続してみてください。
TSSOP20パッケージの STM32G031F6P6だと、LPTIMタイマ入力であるPB5ポートが20pinにあるからです。
元のSOP8ピンパッケージだと、SWCLKと同じ8pinにPB5が割り当てられていました。
ps.
LPTIM がないSTM32G030F6P6ではカウント動作するはずがないのですが… モノに聞くと動きます。
PB5端子はプルアップされていて動作周波数範囲が狭くなってみえるようです。PB1/0には約100Hzが出てきます!
Aliのチップがフェイクなのか、STM32G030にも仕様として隠しているLPTIMが搭載されていると思われます。
//
Re: RFC-5 の入力切替 - Ojisankoubou
2024/10/10 (Thu) 06:35:05
PA14 が Pull-down されているのを使って、PB5(LPTIM1 IN) を Pull-up して入力を中間電圧にバイアスしています。 STM32G031F6P6 では PA14 とつながっていないので PB5 につながっている適当なポートで Pull-down してやる必要があります。
>やどさん
STM32G030 に LPTIM がのっているのはおもしろいです。 昔、FLASH が小さいはずなのに上位 CPU と同じ大きさがあるということもありました。 上位 CPU でチップを作って ID だけ変えているのでしょうかね。
Re: RFC-5 の入力切替 - パオさん URL
2024/10/10 (Thu) 21:53:19
Ojisankoubou様、やどさん様ありがとうございます。
アドバイスどおりにB6(20Pin)に信号を入れても、20MHz 位までしかカウントしないのでファームをオリジナルに戻しましたが変化なし・・・と思ったら、プルダウンが必要なのですね。(データシートにはちゃんと書いてありました。)
書き換えるのが面倒なので、外付けで30~40kΩでプルダウンしたら110MHz 位まで行けました。
(オリジナルのファーム用の接続図です。)
これで一応動作することが確認できました。
後は、叶えたい夢として2つの機能があります。
1 余ったポートにスイッチを付けて「長押し」せずにメニューを出す。(値を保存する。)
2 RF IN を切り替える。
素人考えですが、PB5(LPTIM1_IN1)とPB7(LPTIM1_IN2)で切り替えることは可能でしょうか?
Re: RFC-5 の入力切替 - やどさん
2024/10/10 (Thu) 22:55:16
パオさん Ojisankoubou様、こんばんは
動作した件、ナイスです!
先ほどまで、パオさんと同じく、外付けボリュームで最適なプルダウン値を調べてました。
こちらも約34kΩで感度が最良になったので、ひとます33kΩの固定抵抗をつけました。
5倍アンプとひどい配線ですが、約210MHzまで正しくカウントしています。やったー (^^)/
→ TinySAから-7dBmの入力時で,50Ωの終端なしの場合です
パオさんのブログはすごく見やすくて内容も大変参考になります。本日、Xの方もフォローさせていただきました。Tnx!
あっ、やどさんに"様"は不要です。念のため ^^);
Ojisankoubou様
RFC-5のSTM32G031(SOP8)は、PF2/NRST端子をI2C_SDAとして使っていますが、
STM32G031x4/x6/x8のデータシートを検索してもI2C_SDAとマルチされている記述がみつかりません。
これも隠し(?)機能なのでしょうか?(見逃していたらすみません)
//
Re: RFC-5 の入力切替 - Ojisankoubou
2024/10/11 (Fri) 06:44:33
>パオさん
LPTIM1_IN2 はクロック入力としては使えなかったと思います。 LPTIM2_IN1 を使って出力を切り替えるというのはどうでしょう。
>やどさん
ソフトウェア I2C なので GPIO として使っています。
Re: RFC-5 の入力切替 - やどさん
2024/10/11 (Fri) 07:53:04
> ソフトウェア I2C なので GPIOとして
そうか、、内蔵I2Cモジュールを使っていると思い込んでいました。汗);
8ピンマイコンの数少ない端子を使って実現した、もう匠の技ですね!
Re: RFC-5 の入力切替 - パオさん URL
2024/10/11 (Fri) 13:10:08
>Ojisankoubou様
>LPTIM2_IN1 を使って出力を切り替えるというのはどうでしょう。
20 Pin の STM32G031F6P6 の LPTIM2_IN1 は PB1 のみなので難しそうですね。
入力切替はあきらめて、ハード的な方法にしてみます。
>やどさん
素人の記事を色々とご覧いただき感謝です。
X のフォローバック致しました。
ところで、当方、ソフトは Arduino IDE で LCD に文字を書いたりする程度のレベルなので掲示板汚しになって恐縮ですが、gcc について基本的な所を教えて頂けると助かります。
RFC-5 の「ソフト」欄に記載されている「ソースファイルを解凍したフォルダと同じ階層に「STM32Cube_FW_G0」を置いてください。」
の意味ですが、
1 RFC-5 の解凍したソースファイル(2種類あればそれぞれ)のフォルダー内に
2 「STM32Cube_FW_G0」を解凍した中身(430MB,23,000個のファイル)をソースファイルのそれぞれに置く
という事なのでしょうか?
(現在はそうしているのですが・・・)
Re: RFC-5 の入力切替 - やどさん
2024/10/11 (Fri) 20:17:58
パオさん、こんばんは。
>「STM32Cube_FW_G0」を置く階層
解凍した"RFC-5"のソースフォルダと横並びに(同じディレクトリに) "STM32Cube_FW_G0_V1.3.0"フォルダーを置けばOKです。
→掲示板の2022/09/09 (Fri) 14:03:48 "RFC-5 レシプロカル周波数カウンター" by.笛吹おじさんのスレッドに参考になる説明があります。
あと、Xに"いいね"も頂き恐縮です。一昨年からゴタゴタしたりで呟くのが少ないですが、よろしくお願いします。
それと全然"素人"じゃないです。ブログの構成や説明文と図表の割合とかも、とっても凄いと思います。
自分もブログ挑戦したことがあるのですが、、記事ひとつ仕上げるのに1,2日はかかってしまうので、無理~って、止めてしまいました。汗);
//
Re: RFC-5 の入力切替 - Ojisankoubou
2024/10/12 (Sat) 08:52:56
>「STM32Cube_FW_G0」を解凍した中身(430MB,23,000個のファイル)
使っているのはヘッダーファイルだけですので、
STM32Cube_FW_G0_V1.3.0\Drivers\CMSIS 7.1MB
以外は削除してもOKです。
Re: RFC-5 の入力切替 - パオさん URL
2024/10/13 (Sun) 21:09:20
>Ojisankoubou様
失礼しました。
過去の掲示板は一通り見たつもりだったのですが、2022/09/09 のスレッドは見ていませんでした。
そのままの内容が書かれていますね。
私のように迷った方用に、解凍した STM32Cube_FW_G0_V1.3.0\Drivers\CMSIS の場所とソースファイルの位置関係を図にしました。
(ドキュメントフォルダだけ残しました。)
おかげさまで、確認用、オリジナル版とPG追加版の3か所に入れていた「STM32Cube_FW_G0」が、1つのヘッダファイル群だけになったのでHDD内がスッキリしました。
次はプリント基板を作ってみます。
動作したらご報告します。
Re: RFC-5 の入力切替 - Ojisankoubou
2024/10/14 (Mon) 07:00:28
すみません、書くのを忘れていました。
CMSIS フォルダーの中にもいらないファイルがたくさんあり、私は、
Core
Core_A
Device
Include
フォルダー以外は削除しています。
本当に必要なヘッダーファイルは残したフォルダーの中のほんの一部のファイルなのですが、ヘッダーがヘッダーを呼ぶようになっていて面倒なのでそのままにしています。
APB-1 Sweep Generator?(2) - 笛吹おじさん
2024/10/09 (Wed) 08:56:32
やどさん、お早うございます。
永くなったのでスレッドを変えました。
AD9833はサイン波のQualityがあ良くないですが、Sweep Gen.の信号源には使えるのではと思います。
Proicessingもうまく行っているようですね。私はAIはやりませんが、プログラム作成の手段としてはいいかもです。最近AIの能力が格段に上がったようです。
最終的には人間が手直しをして使いやすさを実現する必要が在りそうです。
Proicessingも支障がない様でした開示して頂ければ幸いです。
Re: APB-1 Sweep Generator?(2) - 笛吹おじさん
2024/10/09 (Wed) 11:48:42
今日は、私もCHAT GPTでAD9833のプログラムを造ってもらいました。
でも、Sweepが開始されません。この辺は自分で直すしかないようです。
Re: APB-1 Sweep Generator?(2) - やどさん
2024/10/09 (Wed) 20:38:36
笛吹おじさん、こんばんは。
ChatGPTも使われたのですね。
はじめ無料のChatGPTで同じ指示文でAD9850ボード用のコードを作らせたのですが、こちらもSweepSin波が出なかったです。。
→なんかリセットの位相が逆?でもダメ
ググると無料版ChatGPTは古い情報と思考のままだとか…
Copilotは無料で使える個人版でも、最新モデル?のGPT-4 Turboが導入されているという記事を見つけてCopilotを使いました。
難しいのは、的確な指示文(プロンプト)を書く事ですね。ChatGPTが生成する日本語より自分の方が下手ですし…(笑)
でも、ChatGPTにプロンプトメーカーというのが在って、これで直した指示文をCopilotに喰わせれば優秀な答えが返ってくるんじゃ?とか考えてます。まだ試してませんが 汗;
で、本題です。→ 画像
昨晩作らせたProcessingプログラムで、真空管FMラジオのレシオ検波出力測定値を、シリアル受信しながらグラフ化したS字カーブです。
→ ArduinoのARef=5Vのままで10bitAD測定なので、見栄えが良くなるように縦軸スケールを弄ってまして、実際の電圧ではないです。
不思議なことに、無料のChatGPTで作らせたら特にエラーなくできたのですが、Copilotで同じ指示をしたら、エラーやらグラフ描かないはで、1時間以上かかりました。汗);
まぁ、Processingって何?っていう人が1時間程度でできたなら、全然OKですけどね…
ChatGPTに指示した文です。(ArduinoのスイープGenコードの生成に続いて行っています)
・PCでProicessing4を使ってArduinoからの周波数と電圧値を受信してグラフを描く方法を教えて
・X軸をスイープ周波数に合わせたい
・Y軸に電圧値を表示したい
・X軸にもラベルを付けてほしい
・X軸のラベルは100kHz刻みにして
こんな いい加減な?指示文でできてますw
あと、
Arduinoの方は、スイープ開始・終了周波数を固定して、電源ON(リセット)1秒後にスイープが始まるように修正しました。
また、AD9850は正弦波出力だと振幅が小さいので、矩形波(5V)出力にしてスイープしています。
//
Re: APB-1 Sweep Generator?(2) - 笛吹おじさん
2024/10/09 (Wed) 21:21:06
やどさん、今晩は。
Proicessing4でのグラフ作成もうまく行ったのですね!私はまだそこまで言っていません。
AD9833のプログラムをいじって動かなくなってしまい、そのままになっています。
Proicessingについては今一理解不足状態で時間がかかりそうです。
しかし、やどさん、すごいです。短時間のあいだにほぼ期待通りの結果をだしたなんて。
もう少し、悪戦苦闘して見ます。どうもお疲れさまでした。
Re: APB-1 Sweep Generator?(2) - 笛吹おじさん
2024/10/11 (Fri) 16:32:32
今日は。
私のPCのUSBシリアルは色々なアプリで使っているせいかどうもうまく動作しない傾向がある様です。
スタンドアローンで結果をLCD表示器に表示できるようにすることができればいいと思いますが、、、、
古いノートPCがありますので、それでやってみることにします。
Re: APB-1 Sweep Generator?(2) - やどさん
2024/10/11 (Fri) 22:08:14
笛吹おじさん、こんばんは
ちょっと考えたのですが、
10MHzなどSIN出力する動いている実績のあるプログラムを基に修正・追加してくのが良さそうです。
動いたコードの修正や機能追加ならば、ChatGPTでも大丈夫そうです。
動かなくても状況を伝えるとデバッグや修正コードを造ってくれます。
・例えば、こんな指示文でいけると思います
→ 下記のArduinoUNOのコードを修正して、9600bpsで接続したシリアルモニタからサイン波の周波数を設定できるようにしてください。周波数設定後に10msのディレイをいれてください。初期周波数は1MHzにしてください。
(指示文のあとに、動作したコードも貼り付けてChatGPTやCopilotに送信)
・問題なければ
次に
→ 開始周波数と停止周波数を"1000000 2000000"の様にシリアルモニタから入力して、その周波数間で1kHz毎にスイープするように修正してください。
・ダメだったら
→2MHzになってしまいます。とか、
初期周波数で出力するけど、スイープしません。とか、症状を伝えて、対策コードを出させます。
→ 何が悪かったの? とか聞くと、教えてえてくれます。
あと、 "HD44780互換の16x2 LCDディスプレイに表示して"、とかも できそうです。
//
Re: APB-1 Sweep Generator?(2) - 笛吹おじさん
2024/10/11 (Fri) 22:37:21
やどさん、今晩は。
なるほど、そんなやりかたもありますね。
相手がAIですので何回でも聞き直せますので、いろいろ聞き方を変えながらやってみます。
有難うございました。
APB-1 Sweep Generator? - 笛吹おじさん
2024/10/01 (Tue) 18:22:50
ご無沙汰です。
電池管でFMラジオを作っています。レシオ検波用の検波コイルを手巻きで造るのですが、調整にSweep Gen.が必要になります。
APB-1の信号発生器を使って10MHz~11MHzを20KHzステップで出力電圧をエクセルに書き込みグラフを書かせています。(S字カーブ)
ネットワークアナライザでスタート、ストッップ周波数を指定してやってみたのですが、目的が違うので残念ながらNGの様です。
何かアイディアが有ればと思って書き込みました。
Re: APB-1 Sweep Generator? - やどさん
2024/10/03 (Thu) 21:13:42
笛吹おじさん こんにちは!
レシオ検波用コイル調整ってやったことないですが、Sカーブが復調音の良し悪しに効きそうですね。。
写真はtinySAに発振スイープ機能があって、APB-3スペアナでモニターしてみたものです。(10.7MHz,スイープスパン0.2MHz, 周期5秒, 105step設定)
これなら検波出力をオシロで観測するとS字カーブが見えそうです。
ただ、tinySA出力が最大-7dBm(-0.14Vp@50Ω)なので1N60のVF(0.27V?)以下なのが問題です。
APB-3のネットワークアナライザ機能で、フィルター測定と同様にしてもできそうですが、、
何せ -14dBmくらいの出力なので、5dBm(0.6Vp@50Ω)程度まで増幅が必要そうです。
APB-1のDACも同じくらいの出力レベルでしょうか?
ps.
実は先月、National製のAM/FMラジオ付き真空管レコードプレーヤ(SE-1350G)のジャンク品をオークションで落札しました。
幼少の頃に家にあったものと思うのですが、ネットを探しても回路図が見つかりません。
FM復調部は12BA6にレシオ検波用のIFTがつながって、1N60の4倍くらい大きなダイオード2個につながっています。
回路図を起こしてレストアしようと思ってますが… 出来るかな ^^);
//
Re: APB-1 Sweep Generator? - 笛吹おじさん
2024/10/03 (Thu) 22:05:38
やどさん、今晩は。
お久しぶりですね。どうも貴重な情報有難うございます。
tinySAに信号源がついているのは知っていたのですが、詳細は知りませんでした。
tinySAは持っていませんが使えそうですね。確かにレシオ検波ダイオードをONするだけの電圧は必要でしょうね。
レシオ検波はFM復調の大事な部分ですので調整を確実にやることが正解かと思います。
私はSMT(サブミニチュア管)でAMラジオとFMラジオを作ったのですがAMはまー聞ける状態になりました。
しかし、FMは全く感度が悪くおまけに周波数も高いので調整に手こずって今のところ蚊の鳴く様な音でしか聞こえません。
私の住まいがマンションですので電解強度が弱いことが最大の障害です。アンテナを立てればいいのですが、、、
National製のAM/FMラジオ付き真空管レコードプレーヤを入手されたのですね。
ぜひレストアしてください。
回路図は私も探してみます。
Re: APB-1 Sweep Generator? - やどさん
2024/10/06 (Sun) 12:10:37
笛吹おじさん こんにちは
入手したFMラジオで レシオ検波のS字カーブを実測できました! → 画像
TinySA出力(10.7MHz±0.3MHzスイープ 周期1.5秒 -7dBm)を
LNA(SPF5189Z 広帯域アンプ)で増幅し,検波コイルに接続しました。
検波コイルに入力部で、10.7MHzスイープ信号の振幅は 約4.0Vppでした。
結果、ノイジーですが、、、
検波出力の電圧変化は オシロ読みで0.43V程度
リニアなのは、全周期の20%程度なので、0.6MHzx0.2 = 120kHz
→ FM放送局のデビエーション±75kHzに足らない、汗;
トランスレス方式ですが AC電源ラインのペーパーコンデンサのパンク(ショート)を直したら、ラジオ回路は生きていました。
ビニール線の室内アンテナでもラジオがAM/FM共にそこそ聞こえてます、、これはいい買い物でした。
webで見つけたFMレシオ検波関連のサイトのタイトルをご参考までに記します(Google検索用キーワード)
・レシオ検波IFT, 調整方法まど
"TRIO R10.7 FM中間周波・レシオ検波トランス"
"ナショナル FM用 IFT(レシオ検波型)" ← pdfファイル
"中華 真空管 FM ステレオ ラジオ を 作ってみた"
→ラジオ技術 1970年5月号の FMステレオチューナー自作記事もありました。
・レシオ検波のLTspiceシミュレーション
"FMレシオ検波式ダイオードラジオの実験"
"FMレシオ検波のシミュレーション(EF-850)"
//
Re: APB-1 Sweep Generator? - 笛吹おじさん
2024/10/06 (Sun) 17:33:39
やどさん、こんにちは。
S字カーブが綺麗に見えてますね、素晴らしい!
10.7MHz前後の直線性もいいので問題ないのではと思います。
私もそれらしいカーブを原始的な方法で観測しました。555タイマーICで鋸歯状波を作りその電圧をバリキャップに加えて発振周波数を変化させる簡易スイープジェネレータです。
検波コイルの出力をオシロのX-Yモードで見ました。
周波数等は10.7MHz±1MHzくらいでしょうか。この辺は適当です。
適当に作ったものですので、精度は二の次になっています。
やどさんの回路図にある検波コイルは詳細が分かりませんので作れません。
TR用の大型IFT(10.7MHz)のコイルを巻き替えて作った物を使っています。
この測定で使ったものはトロイダルコアを使った検波コイルです。
それからやどさんの入手されたAM/FMラジオの回路図はどうも無いようです。色々見たのですがあるブログにもなぜか回路図はないと言うようなことが書かれていました。お役に立てず済みません。でもちゃんと動作するとの事良かったですね。
トランスレスですので感電の心配がありますが通電状態で検波段の真空管の第一グリッドに10pF程度のコンデンサ経由でスイープ信号をいれればLNAは省略できるかもしれません。(測定側に100Vが加わらないように、また感電に注意です)
それから質問ですが、tinySAの発振器はトラッキングジェネレータの出力が外部に出ていると言う事なのでしょうか?
スイープジェネレータ的な使い方が出来るのでしょうか?
DDS(AD9833)でスイープジェネレータが作れないか発振させてみたのですが10MHzサイン波とんでもない波形でちょっと無理そうです。
わたしには敷居が高く所詮無理なのですが,,,,
555と発振回路を組み合わせてもう少し丁寧に作るのが早道かなとも思っています。
問題は表示画面です。横軸に周波数を表示でき,縦軸にゼロVを中心に電圧が表示できればいいですね。
Re: APB-1 Sweep Generator? - やどさん
2024/10/06 (Sun) 23:20:09
笛吹おじさん こんばんは。
>入手されたAM/FMラジオの回路図はどうも無いようです。
ありがとうございます。
そうなんですね、似たような回路図をお手本にして、基板の表裏とスイッチなどへの配線を目視で追ってました。
とりあえず検波部は先に投稿した画像のようになっていました。
教科書的な回路図と違っていて面喰いましたが、、ナショナルのEF-850の回路と同じみたいです。
それをLTspiceで調べた方のブログが参考になりました。Tnx!
555の発振回路でスイープするのはシンプルで良いですね!
tinySAの発振機能使用時は発振出力を設定したスイープ周期(2秒とか10秒とか)で出すだけなんです。
それで、時間軸と周波数変化の関係が本当にリニアになっているかどうか?、APB-3のFMアナライザでグラフにできるかな?と思ったのですが、久しぶりに使ったせいか、、うまく表示できず、汗;
周波数変化が遅すぎるせいかな?? 仕方なく、APB3のカウンタ機能で確認しました。
あと、第一グリッドにスイープ信号を入れる手がありましたね!!思いつきませんでした。。
APBシリーズでDAC出力で周波数スイープしながら、ADCのレベルを読み取ってグラフにするのが一番確実なのですが。。
AD入力はコンデンサでDCカットされているので、改造しないとダメだし、、ハードルが高いです。汗);;
//
Re: APB-1 Sweep Generator? - やどさん
2024/10/07 (Mon) 20:15:59
こんばんは、追記です。
> DDS(AD9833)でスイープジェネレータが作れないか?
"DDSに周波数を設定してレシオ検波レベルをAD変換する" の繰り返しであれば、生成AIにプログラムを作らせても出来そうかな、と思いまして、、やってみました。
以前、VFOにした "AD9850 DDSモジュール"があったので、
Window10/11に付いている生成AI "Copilot" に、Arduinoのコードを教えて、と頼んでみました。
結果、とても簡単に出来ました! エラーもなく(当たり前?)ビックリ仰天です、すごい。
スイープ開始・終了周波数は、ArduinoとPC間のシリアル通信で設定し、
スイープ中の周波数と各周波数時のADC変換値は、シリアル経由でPCに表示します。
スイープ終了後に Excelにコピペすれば、S字カーブのグラフが描けるはず。(まだ実際にやっていませんが…)
ちなみに Copilotへの指示は、下記の様に 段階的に指示を追加しました。(本当に動作するコードが出来るのか心配だったので)
◆ Copilotに指示した文
1回目: Arduino Nanoを使用して、AD9850 DDSモジュールからシリアル通信で設定した周波数のサイン波を出力する方法を教えてください
2回目: シリアル通信で、開始周波数と停止周波数を設定して1kHzごとに周波数をスイープしてください
3回目: 各周波数で0.5秒間待機したら、A0端子から電圧レベルを読み取ってください
4回目: 電圧レベルは10回測定して平均値を取ってください
◆ Copilotが生成したコードの説明文です
ライブラリのインクルード:
SPI.hをインクルードします。
ピンの定義:
W_CLK, FQ_UD, DATA, RESETを定義し、AD9850の対応するピンに接続します。
セットアップ:
シリアル通信を9600bpsで開始し、AD9850をリセットします。
ループ:
シリアルモニタから開始周波数と停止周波数を入力し、1kHzごとに周波数をスイープします。
各周波数で0.5秒間待機し、その間にA0端子から電圧レベルを10回測定し、その平均値を計算します。
平均電圧をシリアルモニタに表示します。
このコードを使用することで、Arduino Nanoを介してAD9850 DDSモジュールから設定した範囲内で1kHzごとに周波数をスイープし、各周波数での電圧レベルの平均値を測定することができます。試してみてください!
◆ Copilotが生成したコードです ← 0.5秒ごと周波数を変更では遅いので10msに変えました。
#include <SPI.h>
#define W_CLK 8
#define FQ_UD 9
#define DATA 11
#define RESET 12
void setup() {
pinMode(W_CLK, OUTPUT);
pinMode(FQ_UD, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
Serial.begin(9600);
resetAD9850();
Serial.println("Enter start frequency in Hz:");
}
void loop() {
tatic float startFreq = 0;
static float stopFreq = 0;
static bool sweep = false;
if (Serial.available() > 0) {
if (!sweep) {
startFreq = Serial.parseFloat();
Serial.println("Enter stop frequency in Hz:");
sweep = true;
} else {
stopFreq = Serial.parseFloat();
Serial.print("Sweeping from ");
Serial.print(startFreq);
Serial.print(" Hz to ");
Serial.print(stopFreq);
Serial.println(" Hz");
for (float freq = startFreq; freq <= stopFreq; freq += 1000) {
setFrequencyAD9850(freq);
delay(500); // 0.5秒ごとに周波数を変更
float voltageSum = 0;
for (int i = 0; i < 10; i++) {
int analogValue = analogRead(A0);
float voltage = analogValue * (5.0 / 1023.0);
voltageSum += voltage;
delay(50); // 測定間の短い遅延
}
float averageVoltage = voltageSum / 10;
Serial.print("Frequency: ");
Serial.print(freq);
Serial.print(" Hz, Average Voltage: ");
Serial.print(averageVoltage);
Serial.println(" V");
}
sweep = false;
Serial.println("Enter start frequency in Hz:");
}
}
}
void pulseHigh(int pin) {
digitalWrite(pin, HIGH);
digitalWrite(pin, LOW);
}
void resetAD9850() {
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD);
}
void setFrequencyAD9850(float frequency) {
long freqWord = frequency * 4294967295 / 125000000;
for (int i = 0; i < 4; i++, freqWord >>= 8) {
shiftOut(DATA, W_CLK, LSBFIRST, freqWord & 0xFF);
}
shiftOut(DATA, W_CLK, LSBFIRST, 0x0000);
pulseHigh(FQ_UD);
}
以上、これは使えそうです
Re: APB-1 Sweep Generator? - 笛吹おじさん
2024/10/08 (Tue) 00:14:08
やどさん、今晩は。すごい、すごい。
明日やってみます。
有難うございます。
Re: APB-1 Sweep Generator? - 笛吹おじさん
2024/10/08 (Tue) 09:29:27
やどさん、お早うございます。
早速コンパイルして見たのですが、
Compilation error: 'resetAD9850' was not declared in this scope
上記エラーになりますね。
IDE環境は2.3.3です。SPI.hが古いのかなーー?
そんな状況です。
追記
コンパイルパスしました。
AD9833でやってみます。
Processingと組み合わせるとグラフにカーブをかけるのではないですかね。
詳しくは知りませんが。
Re: APB-1 Sweep Generator? - やどさん
2024/10/08 (Tue) 14:35:15
あっ、すみません
掲示板にソースコードを張り付けた時、インデントが反映されず、全角スペースを入れてしまいました。
多分エラーの原因になったのかと思います。
あと“Processing”分かってないので調べてみます。 汗);
Re: APB-1 Sweep Generator? - 笛吹おじさん
2024/10/08 (Tue) 23:00:18
やどさん、今晩は。
AD9833でやってみました。このDDSはMax12MHzまで発振、しかし、サインはあまりきれいではありません。
AD9850の方がいいのですが持っていませんのでAD9833で実験しました。
シリアルモニタはStart Freq.を入れてすぐにSTOP FREq.を入れないと上手く動きません。すごく忙しいです。
少し待ち時間を入れてます。
入力はStart Freq. Stop Freq. span、Sweep Timeを入れてからSweep スタートする様にした方がいいかもです。
それから、Sweepが終了した後、次のSweepの設定がうまく出来ないようです。
たたき台が出来たのであとは改良すればいいですね。
Re: APB-1 Sweep Generator? - やどさん
2024/10/09 (Wed) 07:36:58
笛吹おじさん おはようございます。
こちらでは、シリアルモニタを起動するとリセットが掛かって最初から実行しているみたいです。
で、スイープ開始と終了周波数の入力を、1回で入力する方が良いかもしれません。→ "10600000 10800000(リターン)" みたいに。
それと、刻み周波数や待ち時間追加なども、直したいところを次々に指示するとCopilotがあっという間に直してくれます!
AD9833ボードを使ったブログ記事を見たら、7MHzでも正弦波はキビシイ様でした。正弦波にするのにLPFを追加されてます。ひょっとして、レシオ検波コイル自体が10.7MHzのBPFなので、LPF無くても大丈夫かも?
実は、、昨晩、、
”Proicessing4を使って、Arduinoからシリアル受信した周波数と電圧データをグラフを描く方法を教えて”…と、試したら上手く動かなくて、汗;
“i cannot be resolved to a variableとメッセージがでます”とか“グラフが表示されません”とかCopilotに伝えながら、あちこち修正してもらいました。(測定しながらグラフ描いてくれます!)
うーむ、文句も言わずにデバッグ手順なども教えてくれるし、改修コードもすぐに作ってくれるし、すごいです.(^^)/
APB-1 の古いリンク - さくらんぼ
2024/09/25 (Wed) 19:09:35
申し訳ありませんが、APB-1 Radioの古いリンクは機能しませんでした。リンクを更新してください。
1 C# ソース一式 20100415 (ZIP 1045KB)
2 FPGA ソース一式 20100415 (ZIP 11,112KB)
3 PRE-1基板 20100319 (PDF 2611KB)
どうもありがとうございます。
Re: APB-1 の古いリンク - Ojisankoubou
2024/10/08 (Tue) 14:10:59
FC2 のファイルサイズ制限に引っかかって削除されていたようです。
FPGA ソース一式 20100415 は4分割して制限に引っかからないようにしましたので、お手数ですが解凍後同一のフォルダーにまとめてください。
投稿者削除 - (削除)
2024/10/03 (Thu) 22:01:03
(投稿者により削除されました)
RFC-5を作りたい(続き) - パオさん URL
2024/09/10 (Tue) 17:06:23
1 アンプ部なしでブレッドボード上ですが、動作確認を行いました。
8ピンの変換基板に乗せた STM32G031J6M6 と部品箱にあった 20MHz オシレータで動作確認が出来ました。
自作の信号源(出力 0dBm程度)でアンプなしでも 60MHz まで計測出来ました。
2 手元の部品で簡単なアンプを付けたら 97MHz までカウントしました。(ブレッドボード上なのに嘘のような・・・)
3 「Mini Core Board STM32G031FxP6」評価ボードで試験してみました。
上で動作確認したボードのオシレータを外してもカウンタとして動作することが分かったので、評価ボードのオシレータは交換していません。
プログラムは変更なしでエラーなく書き込みが終了しました。
MCU は足の数が多いだけで、ほぼ同じなので PF2 と PA12 に I2C LCD をつなぎましたが表示はしませんでした。(考えが甘かったですね。)
Re: RFC-5を作りたい(続き) - Ojisankoubou
2024/09/11 (Wed) 08:38:59
パッケージが違っても内部コアは同じなのでマルチボンディングの仕方が違うのでそのせいかもしれません。 同じになるように外部で接続すると動くかも。
あと、ROM が小さいとか。
Re: RFC-5を作りたい(続き) - パオさん URL
2024/09/11 (Wed) 12:03:12
返信頂きありがとうございます。
早速、接続が同じになるように外部でジャンパをつないでみましたが、LCDの表示は豆腐のままです。
この MCU が使えれば足が余るので、スイッチを追加したり、アンプあり、プリスケーラありの入力を切り替えたりが出来るかな?と思ったのですが簡単には行かないですね。
ちなみに、
STM32G031J6M6
Flash 32k
GPIO 6
Wake Up Pin 3
ADC 6+2
pin 8
STM32G031F6P6(テストボードの MCU)
Flash 32k
GPIO 18
Wake Up Pin 4
ADC 15+2
pin 20
なので、メモリ不足はないかなと思います。
追伸
AliExpress から届いた 26MHz オシレータが発信はしますが出力が小さすぎて使えません。(-5dBm)
なかなか思ったようには行きませんね。
Re: RFC-5を作りたい(続き) - Ojisankoubou
2024/09/12 (Thu) 08:51:12
LCD 表示が豆腐になるのは LCD が初期化されていないということだと思います。
LCD 初期化は一番最初におこなっていますので、これが動いていないというのは、
接続ミス、
リセットしっぱなし(リセットICがついている)、
といった単純なミスのように思えます。
Re: RFC-5を作りたい(続き) - やどさん
2024/09/23 (Mon) 13:16:09
こんにちは。
Aliに注文した 'Mini Core Board STM32G'ボード届いたので試してみました!
パオさんと同様にLCDが初期化されませんでした ^^);
が、届いたのは STM32G031FxP6ではなく、STM32G030F6P6ボードだった事に気が付きました。
データシートを見ると、PF12-NRST(TSSOP20-6pin)にPF12が無く、'alternate function mapping'によるとLCDに接続するSDAはPA11(16pin)でした。
そこで、rfc5/board/board.hの55,56行目を
#define I2C_SDA_PORT GPIOA // PA11 <--- GPIOF // PF2
#define I2C_SDA_PIN 11
に書き換えました。
また、タイマー入力 PB5は20pinに配線しました。
配線変更をして動作確認すると、LCD表示しましたが、まだ動作がおかしいです(・・;)
・電源ONから5秒後位から"ERROR HSE"と表示され10秒後から正常表示になる。
・写真はTinySAで8MHz入力中ですが、周波数が5MHz前後でふらついている。-7dBm(PB5入力実測で約1.8Vpp)入力でカウント動作する範囲が5Mhzから10MHz程度しかない。
まだ間違いがありそうです。。
//
Re: RFC-5を作りたい(続き) - パオさん URL
2024/09/23 (Mon) 21:13:39
おじさん工房 様
アドバイスどおり、リセット回路を確認したらコンデンサで GND に落ちていたので、部品を取り外したら LCD は表示するようになりました。
(ブログに詳細を書いてみました。)
https://me-yoh.com/make_frequency_counter_5
https://me-yoh.com/make_frequency_counter_6
やどさん様
検証いただきありがとうございます。
私の所でも出ましたが"ERROR HSE"はオシレータが認識できないと出るエラーのようです。
まだ、プログラム環境を構築しておらず、内部の書き換えが出来ないので、力技で LCD を表示させた段階ですが・・・
ところで、写真を拝見したところ RFC-5 のプリント基板らしきものが見えました。
ご自分で製作されたのですか?
Re: RFC-5を作りたい(続き) - Ojisankoubou
2024/09/24 (Tue) 13:56:48
>やどさん
STM32G030 は LPTIM がないので動作しません。
>パオさん
あとはポートを合わせれば動作すると思います。
Re: RFC-5を作りたい(続き) - やどさん
2024/09/24 (Tue) 20:35:25
Ojisabkoubou様、パオさん こんばんは。
この掲示板を見る前に、"ERROR HSE"の原因を調べていまして、修正して動きましたー!と、投稿してしまうところでした。。 汗;
データシート見たら、確かにSTM32G030x6には'LPTIMER1/2'が無いですね!!!
"ERROR HSE"は、board.cで外部OSC(20MHzや26MHz)設定のところでエラー時に表示するのですね。
それで、OSCIN端子を観測したところ、GNDを中心に充放電波形の様な26Mhz信号が!?
→ 32kHzのXtalを外して外部クロック線を配線したのですが、すぐ横のGNDパターンとニアミスショートしていました。。汗;
このOSC_INの配線をハンダ修正したら 正常っぽく動き出しました。 写真添付
でも、27MHz程度までしかカウントしなくて、これがLPTIMが無い影響なのか?
LPTIMが無いSTM32G030x6では どうなるのか考えてみます。
パオさん
写真に写ってる基板ですが、初めてKiCADで作製トライしてみたボードです。
自動レイアウトでそのまま基板にしたらOSCラインが大回りしていたり、無駄に大きかったりイマイチ。。
その後 手動レイアウトで20dBアンプも搭載した改訂版をつくりました。
//
Re: RFC-5を作りたい(続き) - Ojisankoubou
2024/09/28 (Sat) 15:44:07
>パオさん
ホームページ拝見しました。
LCD ですが、バックライトが明るすぎるのが良くないので、バックライトのジャンパーをやめて数kΩの抵抗を入れるとよいです。
あと、STM32G031J6M6 の1番ピン(OSC_IN)のはんだが付いていないように見えます。 ERROR HSE はこれが原因では?
Re: RFC-5を作りたい(続き) - パオさん URL
2024/09/29 (Sun) 16:51:42
> Ojisankoubou 様
私のような素人のページを見て頂き感激です。
LCD の改良はその手がありましたか。次回利用するときに試してみます。
> ERROR HSE はこれが原因では?
ブログの写真が良くないですね。
STM32G031J6M6 の周波数カウンタは Pin1 にクロックは来ていて正常に動作しています。
クロックが認識できていない STM32G031F6P6 の「PB9/PC14-OSC32_IN」(Pin 2)と基板の C14 間は導通があり、周波数カウンタで確認しても 26MHz は来ていました。
「PB7/PB8」(Pin1)にもクロックを入れてみましたがダメですね。
もう少し確認してみます。
ありがとうございます。