Arduinoを使った自己満足電子工作およびプログラミングを綴ったブログです。素人独学でいろいろチャレンジしてます。ここで記載しているソースコードは無保証です。@mgo_tec﻿メニューとウィジェットTwitterinstagramRSSお知らせ自作ライブラリESP32_mgo_tecを1.0.71に更新。(2020/02/10)自作ライブラリESP32_mgo_tecを1.0.70に更新しました。新型M5StackのIPSディスプレイに対応しました。詳しくはこちらの記事をご覧ください。ESP32のloop関数内はデフォルトでウォッチドッグタイマ無効でした。こちらの記事を修正しました。導入したため、右下にそのロゴが出ています。(2019/12/10)Google自動広告を停止し、従来の表示に戻しました。(2019/12/08)Googleさんのお勧めにより、AIによる自動配置広告をテスト中です。広告が多めに出ていると思いますのでご容赦ください。(2019/12/05)ESP32データシート独自和訳記事を新設しました。(2019/12/4)ESP32テクニカルリファレンスマニュアル独自和訳ページを更新しました。メモリやキャッシュ関連を追記しました。(2019/12/4)こちらの記事にコメント投稿があり、誤りを修正しました。Eventsスケッチ例を追記しました。Development版v1.0.4-rc1が出ていますよ。リリースされています。(2019/10/01)ESP32トラブルシューティング記事を更新しました。v1.0.3がリリースされました。ボードマネージャから更新できますよ!(2019/09/18)ESP32トラブルシューティング記事を更新。MD5エラーについて追加しました。Development版1.0.3-rc1がリリースされています。(2019/05/19)ESP32-WROOM-32のSPIFFSサイズアップ方法のこちらの記事に追記しました。場合、アップローダープラグインは1.0を使って下さい。(2019/05/06)ESP32とSSD1306のこちらの記事のソースコードを修正しました。正式リリースされました。(2019/04/17)電波時計関連のこちらの記事にLEDC(PWM)関数で作った別のソースコードを追記しました。(2019/04/04)LC共振回路の計算ツールページとRCローパスフィルタ回路計算ツールを作成してみました。リリースされています。デベロッパーサイトの再申請が必要になりました。こちらの記事も大幅変更しました。Developersページがガラッと変わりました。APIが上手く使えない場合、こちらを参照してください。(2018/08/19)先月号に引き続き、工学社さん技術情報誌I/O(アイオー)2018/04号にもこちらの記事を転載して頂きました。有難うございます!こちらの記事を工学社さんの技術情報誌I/O(アイオー)に転載していただけました。ありがとうございます!Make:Japanさんにこちらの記事が紹介されました。ありがとうございます。プロフィールこのブログはRapidSSLのSSL認証を取得しています。支援のお願い投げ銭感覚で気軽に支援していただけると嬉しいです。支援方法はこちらの記事参照。広告表示について当ブログでは広告表示しております。このブログの維持運営のためには必要不可欠です。Adsenseという広告配信サービスとAmazon.co.jpアソシエイトというアフィリエイト宣伝プログラムの参加者です。いうアフィリエイトサービスにも参加しました。40MHzまでの安定した高周波パルスを思い通りに出せたぞ記事公開日:2019年4月4日facebooktweetLINEはてブPocketRSSfeedlyこんばんは。元号が令和に決まりましたね。今年度一発目の記事投稿でーす。)で出力することが、やっとできるようになりました。サンプルスケッチの数値が意味不明で、ずーっと放置していました。出力できるようになったのです。までは出力できると見受けられました。40MHz波形を測定できませんが、HIGHレベルとLOWレベルは確実に切り替わっているものと推測できました。メガヘルツ級になると、ESP32のスイッチングノイズの影響も有り、矩形波とは程遠い波形になりますが、クロック信号として認識できる程度は発信可能なようです。ライブラリの使い方を私なりの解釈で説明してみたいと思います。因みに、私はアマチュア素人ですので、誤りがあるかも知れません。お気づきの点がありましたら、コメント投稿等でご連絡いただけると助かります。ライブラリが存在していて、私自身も過去に何度も関数を試しました。以上の高周波クロックを生成することができませんでした。いうものがありますが、その使い方も理解できずにいました。関数をあまりに使いこなせなかったので、こちらの記事では、digitalWrite関数でGPIOのHIGH,LOWを切り替えて40kHzの矩形波パルスを生成する荒業をやっていました。実は、クロックパルス波形が微妙に揺れていて安定せずに、電波時計がイマイチ合わせ辛いものでした。この揺れはいわゆるジッタと呼ばれるものだと思われます。こちらの記事ではプログラミングでCPUクロックを抽出してGPIOから40kHz矩形波を生成していました。以前より格段に安定しましたが、やはり、どうしても定期的に波形が崩れるために、電波時計に同期しない時もありました。プログラミングによって波形出力タイミングがズレているのだと思われました。今回、LEDCの使い方を理解して、ガッツリ安定したクロックを出せたので、こちらの記事の電波時計合わせも精度がグーンと上がり、全ての時計が最短でガッツリ合うようになりました。クロックの安定はとっても重要なんだなぁと改めて実感した次第です。マイコン熟練者ならばあまりにも初歩的過ぎて取るに足らない事かもしれませんが、私自身にとっては大きな発見でした。これ、ネットで調べても、なかなか情報が無いんですよねぇ・・・。クロック生成として使われていました。動作を解明しようとしていた時に、ついでに得られた副産物的な知見でした。LEDCライブラリの自己流の使い方を簡単に説明したいと思います。制御のネット情報から個人的に解釈してみました。想像で書いているところもあるので、誤っていたらコメント投稿等でご連絡いただけると助かります。制御ができると書いてあります。その16チャンネル分は、任意のGPIOに割り当てられるようです。クロックタイマを使うそうです。最大分解能は16bitとのことです。PWMコントローラは、設定可能な周期と義務で16の独立したチャンネルのデジタル波形を生成することができます。MHzのAPBクロックで動作します。MHzのオシレータクロックを使用するオプションがあります。各チャンネルは、設定可能なカウント範囲を持つ20ビットタイマーを選択できます。msの期間内で最大16ビットまで可能です。ソフトウェアですぐにデューティ比を変更することができます。RGBカラーグラデーションジェネレータに便利です。マイコン内部にあって、その分解能の最大値が20bitなのか16bitなのか良く分からない文章ですが、最大20bitなんて使う用途が無いような気がするので、16bitと思っておけばよいのではないかと思われます。ゼロに戻るカウンタでPWMパルスを作るということのようです。用の以下の図を作ってみました。カウントアップして、上限に達したらゼロにリセットされるようです。HIGHレベルにするという制御にします。カウントアップし、それ以上はゼロに戻ります。819.2usということになります。単位でしか変えられないのです。msの期間内で最大16ビットまで可能」という説明の意味と概ね一致しますね。1.22kHzということになります。「しきい値」を変えれば、自分の好きなデューティ比にすることができます。以下の場合、分解能が16bitなので、かなり細かくデューティ比を設定できますね。あまりにも速度が遅すぎると思いませんか。高速にしたい場合がありますよね。下げれば良いわけです。8bitにすると、以下の図のようになります。カウンタが上限になってゼロに戻ります。16bitよりも約300倍速くなりました。分解能が低くなるので、細かく周波数やデューティ比を決定できなくなるので、そのことを把握してプログラミングする必要があります。1bitとした場合どうなるのでしょうか?以下の図のようになります。周波数の上限ということになるわけです。40MHzということになります。この場合、デューティ比は50%限定です。ライブラリ内でレジスタを直接制御するプログラムが既に組まれており、最大40MHzの安定したパルスを出力させることができるようです。切り替えるよりも、遙かに安定した正確なクロックパルスを出力できます。オシロスコープで波形を眺めていても、安定感の違いが良く分かります。力業で出力して電波時計を合わせていましたが、電波時計の種類によってうまく合わないものがありました。ライブラリを使ったら最短で一発で全ての手持ちの電波時計がカッツリ合ってくれました。あまりにスバラシイ!!!もっと早く理解できていれば、今までこんなに苦労しなかったのに・・・と思いました。」を開いてみて下さい。サンプルスケッチ(サンプルプログラム)です。いう数値が理解し難いと思います。