安価なHIDデバイス 3.3V ESP→CH9329→HID


前回、ESP8266→ATMega32U4→HID→PCとキーボード入力のテストをした。

https://funasover.blogspot.com/2025/02/esp8266atmega32u4hidpc.html

この欠点は、お手軽にできる反面、コストが高いってこと。ProMicro(leonardo )を一つ使うとフルのキーボードが作れてしまう、アマゾンで3つで2300円ぐらいなので、一つ750円。それに加えて5V系だと、ESPとレベルコンバーターを使う必要が出てくる。あと専有面積が結構大きくなるってことかな。

そこで、安価な方法を考えてみた・・結論はタイトルにあるCH9329にたどり着いた。

① Attiny85 200円+V-USB、3.3V https://akizukidenshi.com/catalog/g/g109574/

②ATmega328PB 240円+水晶振動子(50円ぐらい)+V-USB https://akizukidenshi.com/catalog/g/g118148/

③CH9329 150円 https://akizukidenshi.com/catalog/g/g117539/

結論は、①、②は手元に、ICがゴロゴロしているので最初に考えたが、なかなかこれら、難易度が高い!!がんばったがあきらめた。安価に、簡単な回路でというと③。


【①、②ダメな理由】

① Attiny85 200円+V-USB、3.3V

Attiny85は内部にPLLをもっているので16.5MHzをinternalで生成できる。これを使ったV-USBで、電源、GND、USBのD+、D-で4ピン、残りの2つをGPIOでソフトシリアルでピンの数も足りる、小さい!で3.3VでもV-USB動くか確認したら、動く!。外部振動子なしで3.3Vで作ったら、D+、D-の電圧を下げるのに使う、ツェナーダイオードも不要で抵抗を挟むだけじゃん!コンパクト、回路も簡単!そして、個別にAttiny85でソフトシリアルもテストで動く事は確認。

こりゃもらった。と思ったらこれが動かない。

問題は、ライブラリーのkeyboardとSofeSerialが共存できない!!

multiple definition of `__vector_2'

といったような感じ。これリソース(おそらくタイマー)がかぶっているので、リンカーがNGを吐くといったことで、2つのライブラリーがコンパチブルでない時に起こるらしい。

https://stackoverflow.com/questions/61369976/arduino-softwareserial-says-multiple-definition-of-vectors

代替案としてSofeSerialもいくつかあるので、試したがダメ。TrinketとDisparkの二つとも試したがダメ。

しばらく頑張ったが、マイコンがもっているタイマーを他のライブラリーが使っているものを避けて、自前でソフトシリアルを作るぐらいの気合をいれないと動かせないと判明・・サーボを使うライブラリーとSofeSerialも同じように共存ができないという課題が検索するとヒットする。

②クロックは16MHzの水晶振動子を使う事が多いが、3.3Vで動くこと、そしてそしてV-USBの周波数とアンドとると12MHzである必要がある。V-USBは12MHzが最も遅い周波数として動かす事ができる。しかし、例え12MHzの水晶振動子を使っても、Attiny85と同じAVRのマイコンなので、これもkeyboardとSofeSerialが共存できない!!と同じ所でつまずくという事でNG。

③ということで、CH9329になった。

このIC、”Supports 5V and 3.3V power voltage”と書いてあるから、3.3Vで動くと思いきや、どうも動かせない(やり方があるのか?・・・よくわらない。

VCC MIN3.7V~MAX5.5Vと同じマニュアルに書いてあるし・・・)で、

結果5VからVCCをとる事にした。https://blog.nyancotech.online/2023/01/uart-to-usb-hidic-ch9329.html

で先人の方々、16ピン3.3V出力ピンと15ピンのVCCを繋げば3.3Vでも動くと書いてあるがつなげる勇気がない・・・3.3Vの出力ピンに5Vを入力する?出力ピンに????

と不安があるが、これ正しいもよう。データシートのV33に、書いてある。CHの型番のICにはこの仕様は結構多いよう・・・

電源電圧の問題だけで、テストすると電源まわりのパスコンだけ用意してやれば簡単に動かせる。

これで結構ハマるのが、電流?不足?USBハブを挟むと動かない・・・電流はUSBタイプの電流計で見ているが、CH9329で20mA程度しか食っていないが、ESPが電流を食っているからだろうが、不安定。ハブをかまさずPCのUSBポートにそのままさすと、少し安定性が増すが、たまにリセットを繰り返す状態になったりと不安定。

たまたま、使っているUSBハブ(USBセレクタだが)が外部電源を付ける事ができる(本来はつけないといけないらしい)タイプで、外部電力を付けたら安定化した。効果は電源ラインに0.1uFを挟む事になっているが、10uFも併用したらまずより安定になって、それでも不足していたので、外部電源による補助を入れると安定化!!

CH9329の不安定さでお困りの際は、電源系を怪しみ、十分な容量を確保してやる事です。

コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

ILI9341 240X320 Arduino