割込み処理をやめてレジスタ設定で37.9kHz、duty1/4 PWM波形の確認の様子
ある程度試してうまくいかない。原因が???なのであきらめてTCBでやった。
TCAではなぜかうまくいかなかったけどあまりちゃんと調べてない。
ネットでTCAの方が後々使い回ししやすそうだったんだけど・・・
まだまだ、ATtinyわかってない。。。ってことだな...
注)37.9kHzはここから来てます。 マイクロロボの赤外線シリアル通信で使ってるこちらの同調周波数です。
https://akizukidenshi.com/goodsaffix/pic79603.pdf
最近使ってるマイコン、実はよくわかってない・・・
Arduinoでマイコン使うようになってからそういうの増えた。
そもそもATtiny、データシートをまともに読んだことない。
昔のマイコン使いではちょっと考えられない。
それでもおよそやりたいことが、超簡単にできるArduino&ネット環境に感謝。
main()はどこに隠しちゃった?とか最初は気になったけど。。。
ESP32...M5Stackは仕事でもよく使うようになったけど
ESP32はちゃんとわかってない。わかる必要がなくなった。
整数の計算に置き換える必要がなくなってしまった。
ずっと昔、日立のH8、PICにしてもデータシート、、、データブックを
読み込んでからじゃないと触れなかった。
レジスタ等々おまじないをたくさんしないと思う動作で動きださなかった。
ATtiny1614のポート利用は今のとここんな感じにしてる。
ArduinoPort2(AVR:PA6、Pin3)で赤外LEDの約38kHzを以前紹介した方法で
出力してるけど、いけてない。
他の以前のスケッチ、ESP32で割込みでカウント処理でPWMがぱっとポートを
切り替え安いのでそのままATtinyでも使ってた。
ESP32だと他に凝った処理が入ってないなら割込みも全然かまわない。のだけど
それをATtinyで使うのはあまりよろしくない。
負荷が高い。。。 ESP32を使ってるとマイコンに負荷の掛からない処理で...
っての忘れがち。
何度も紹介してる 倒立振子スティックくん あれのスケッチは
割込みは使ってない。普通に?ポーリングTSSで動いてしまう。
それも実数計算で。30年前の8bitマイコンではちょっと考えられない。
ATtinyはそれなりに昔の感覚でスケッチを作らないといけない。
割込みを使うと他の処理がその分、当たり前だけど止められてしまう。
32bit、ESP32の240MHz2コアに比べると
8bit、ATtinyの20MHzは1コアは処理がすごく遅い。
そんなんで38kHzのPWMduty絞りなんかしてるとCPU負荷が増えるばかり。
なので、CPUの負荷にならないタイマの機能だけでPWM出力する方法に
変更してやらんと後々困る。
ただタイマでそのまま出力しようとすると今度はポートの自由度はなくなる。
ATtiny1614ポートの構成
先のロボでのポート割り当てで
モータに使うポートはPWM使えるTCA0・・・は変えられない
なもんで
TCB1・・・AVR:PA3・・・ArduinoPort10 13番pin センサーの予定にしてたけど
そのピンをこれまでPA6,ArduinoPort2 4番pin 赤外LED用からそっちへ
変更することにした。
★ 重要と思ったとこ ★
で・・・・レジスタ設定の仕方はデータシート見て、ネット情報検索して
なるほどねってまではすぐだったけど、、、
わかったつもりになってからうまく動くまでが半日掛かった!!!
動かない・・・で検索して、、まずヒントになったのがこちら、
********************************************************************************
CLKCTRL.MCLKCTRLBはレジスターロックの対象となっているので
予め用意されているマクロで設定する必要があります。
********************************************************************************
これに気付くまでそこそこ時間掛かった
で、これでいいのかな。。。と思ったけど、、、
ccp_write_io((void*)&(CLKCTRL.MCLKCTRLB), 0b00000001);
はなぜかコンパイル通らない
ここでまたしばらく時間の掛かるネットの検索のはじまり。。。
どうも ccp_write_io ではなくて _PROTECTED_WRITE じゃないといけないらしい。
https://avr.jp/user/AN/PDF/AN2711.pdf
_PROTECTED_WRITE( CLKCTRL.MCLKCTRLB, 0b00000001);
こちらはちゃんと2分周にできた♪
5Mhzクロックで8bitのカウンタ、50μs周期(最遅20kHzから2.5MHz)
までののPWMが0.2μs分解能でのパルスが出せる。
で最終的にはこのスケッチで最初の波形が出力できるようになった。
#ATtiny1614 マイコンボード 2つ目完成
— しん (@shinichi_nin) 2024年5月2日
動作確認はお約束の #Lチカ♪
普通、、、 #ピッチ変換基板 使うと思いますが
自分はいつも #ゲジゲジ式 です。
ゲジゲジで作ると消費電流ゼロ♪ ^^;
#VQFN #ATtiny1616 も ゲジゲジです...https://t.co/QAaYLeDqIm#スタックチャン #M5Stack pic.twitter.com/iJWhoyUIWz
そもそも・・・
ESPマイコンでは簡単に数MHzのカウンタで
ledcSetup(); ledcAttachPin(); ledcWrite();使って
37.9kHzで自由なPWMdutyの出力ができるけど、ATtinyではできない。。。と
思って上記のようなことやってますが。。。できるよっての知ってる方が
おられましたら教えて頂ければ幸いです。
他、参考