投稿

スーパーファミコン コントローラーの無線化プロジェクト:2ch化(SFC側)動作します!

イメージ
前回 のコントローラーの無線化プロジェクト:2ch化の続き。 前回 SFCのコントローラー内のシリアル/パラレル変換のICが3.3Vでも動くという事がわかったので、ひょうとして、SFC本体側も3.3VでHIGH、LOW(ボタンが押されているか?おされていないか?)を判定できるのでは?そもそも5Vの半分は2.5Vで、3.3Vはそれを超えるのでアイパターンは目を開いてくれていて判定できるはず・・・ 2CH側へ、ジャンバーケーブルを突っ込んで、コネクタ中の端子に接触させる。黄色いテープで無理やり固定。 赤いケーブルがDATの出力。レベルコンバーターの5V側から出してやって動く事を確認。 その後、赤いケールを写真のようにLOW側、つまり3.3Vロジックの方に接続。それでもちゃんと動いてくれる事を確認! つまりDATはコントローラー側からSFC本体にどのボタンが押されているかの信号を送り込むラインだが3.3VでOK!  次に、P/SのトリガーがSFC本体から送られてきて、これをマイコンCH32V003でトリガーを検出する。この検出には11ピンをアサインしている。この11ピンはPC1で、このピンは5Vトレラント!つまり5Vを入力しても壊れないピン。つまり、3.3Vロジック系と5Vロジック系の信号のやり取りのために、レベルコンバーターを用意していたが、結論は不要!! 非常に回路が簡素化される。 最終的には、上のようになった。2つのマイコンの間のデータのやり取りのためのSPIの接続4つだけというシンプル化。 【SFC側のESPのスケッチ】 前回 https://funasover.blogspot.com/2025/05/blog-post.html は1ch対応で動作確認していたのを2ch化する。 #include <ESP8266WiFi.h>   // WiFi #include <WiFiUDP.h>       // UDP #include "SPISlave.h" #define DAT_OUTPIN_BIT (1 << 4) uint32_t button_status; uint16_t button_status1; uint16_t button_status2; /...

スーパーファミコン コントローラーの無線化プロジェクト:2ch化(コントローラー側)

イメージ
 これまで、コントローラーは一つまでだったので、2つへの対応。 ここで重要な情報は、” スーパーファミコンのコントローラーに入っているシフトレジスタのICは3Vでも動く! ”ってこと。 以前は、ケーブルを切断したものを利用していたが、今回はメスのコネクターを入手。 QIコネクタのメスのプラスチックの部分をはずして、少しづつ押し込むとジャストフィット。半田してもよいですが、テスト段階でこれで。 【回路図】 電源回りの回路を組んで、ESP-WROOM-O2でLチカするところまで作っていたので、コントローラーを2つ接続。 https://funasover.blogspot.com/2025/05/2.html で1コン、2コンともにクロック、P/Sの信号は同タイミングで入ってくる事がわかっているので、単に分配して供給。DAT1とDAT2をそれぞれ、IO14とIO4に入れて押されたボタンの状態を読み取る。 ここでポイントは、コントローラー内部のICにSFC本体からは5Vが本来供給されているので、当初(これまでも)は、レベルコンバーターを入れて、5V系に変換して供給を計画。 そのため、昇圧回路も用意していた。( https://funasover.blogspot.com/2025/05/34v5vme2108a50pg.html ) ところが、このIC、3Vでも動くのです!!!!昇圧回路のICを中国大陸から入手してテストしてという時間が無駄に(勉強にはなったのでどこかで必要になったら使えるが) 前々から、気にはなっていた・・・初期型は、W545 12pin 2個使用、中期型、V520 20pin、後期型はV520B 20pinが使われている。V520データシートが見つけられないが、互換があると言われているファミコンのICの一つTC4021は今でもデータシートを参照できる。これ眺めているとVDDってVSS-0.5~VSS+20Vと記載されている。ってことは3Vでも動くのでは・・・とは思っていた。 https://qiita.com/fukufukusonreiz/items/b66000aabc227becf1c2 とか見ると5Vに昇圧しているので、昇圧しなければならない・・・と思い込んでしまっていた。昇圧回路まで含めた回路を作って、ひょっとして動くのではと試したら...

【充電回路】外付けカレントパス回路

イメージ
 USBが接続されていたらバッテリーへ充電しつつ、システム負荷へ給電するという回路。 【USBから全体の回路図】 【外付けのカレントパス回路部分】 充電しながら、USBから電力を得て、USB接続されていない時は、バッテリーから給電を得る回路について、 ・ 単機能充電ICを使った外付けカレントパス回路 | トレックス・セミコンダクター株式会社 | 電源ICのトレックス・セミコンダクター ・ DS01149C_JP ・ バッテリー充電コントローラ(TP4056)その2 - 電子工作専科 に説明がある。 このQ2のPチャンネルのMOSFETと逆流防止のダイオード、PULL-DOWN抵抗の3つの部品で構成。 USBから給電されいると、pch-MOSFETのゲート(上の図で1)がHIGHになるためソース(2)とドレイン(3)との間が絶縁される。USBの5Vの電圧が電池側(B+)にはかからない。 USBが接続されていない場合は、pch-MOSFETのゲート(上の図で1)は、100kΩの抵抗でPULL-DOWNされているので、MOSFETのゲート(1)がゼロ電位。その時ドレイン/ソース間の 抵抗はほぼゼロ。数十mΩオーダーでバッテリーからの給電が出力される。 pch-MOSFETはAO3401A( https://akizukidenshi.com/catalog/g/g114654/ )、ダイオードは、RB160M-30TR( https://akizukidenshi.com/catalog/g/g101398/ )が家にあったので利用。 VBUSの所に、3.0VのリニアレギュレーターNJM2884を用意して接続。 https://akizukidenshi.com/catalog/g/g110896/ 変換基板上に、必要な抵抗やらコンデンサーを入れてしまったモジュールを作成。 NJM2884このシリーズ、3.3Vもあるが、今回は電池利用でできるだけLiの電圧が低くなってきても動作させたいため3V品をチョイス。500mAまで流せるのでいつもなんでもかんでもレギュレーターはこれをよく使う。 同時に、5VのICにも給電できるように、ME2108A50PGを用いた昇圧回路も接続 ( https://funasover.blogspot.com/2025/05/34v5vme...

【充電回路】TP4056 保護回路付き

イメージ
DW01の保護回路の動作を確認し、 https://funasover.blogspot.com/2025/05/dw.html TP4056の単体での充電回路の動作を確認 https://funasover.blogspot.com/2025/05/tp4056.html  をしたので二つを合わせてみる。保護回路が搭載されていない安いLiPoを使う事を想定すると保護回路も用意する。 【回路図】 【ブレッドボードでのテスト】 【動作】 基本的には、保護回路がない時と同じ動作を確認。 こうなると、保護回路側のnch-mosfetがちゃんと動いているのでB-とGNDが短絡して動いているので問題ないと思うが、やはり保護回路側がちゃんと動作しているかの確認は必要かと。 左が充電中。右は充電終了後。 保護回路越しでも動作を確認。

【充電回路】TP4056(保護回路は電池側)

イメージ
  充電IC TP4056。たぶん買った方が安いはずだが、自分の回路に組み込みしたいので準備。 【回路図】 データシート https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf に掲載されている通りの回路。 電源はUSB(携帯の古い充電器2A)から取得。テストなので、USB-Cの5.1kの抵抗はつけてはいないが、回路はいたってシンプル。1.2kの抵抗で充電電流を決めて、それ以外は充電状態を示すLEDのみ。 ブレッドボードに組んだのがこの状態。 テスト利用したバッテリーは、充放電の時間が短くて済む250mAhの小さいもので、保護回路がバッテリー側に用意されているタイプをまず利用。 【動作】 バッテリーを接続せず、電源に接続すると両方のLEDが点滅する。 B+とGNDの間に、10uFのキャパシターを接続していると赤側CHRGEは細かく点滅する。 ”Coruscate”瞬くという意味。 充電中は、青色STANDBYのLEDが消えて、赤色CHRGEのみ点灯。 充電が完了すると、赤CHRGEが消えて青色STANDBYが点灯。 電池の電圧が、テスターでモニタしていたが4.25Vになったところで、充電を停止。

【充電回路】保護回路DW01の動作確認

イメージ
前にやろうといろいろ調べていたが実行に移らなかった バッテリーからの給電でデバイスを動かせるようにと。 目標仕様は、USBから充電しながら、USBから給電されている時は、充電しながらも使える。そして、安いバッテリーを使う事を想定して保護回路も用意する。 【充電制御ICの選択】 電子工作専科  電源回りについてバイブル的に読ませていただいている神サイト。 その中から、TP4056を選択。TP4056とセットでよく使われている保護回路がDW01、DW01からの信号で遮断を実際にするNchのMOFET、FS8205A。この組み合わせにした。 アマゾンで大量かつ安価に売られているので、いざという時は部品はそちらから調達できる。 【データシート】 https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf https://cdn.sparkfun.com/assets/learn_tutorials/2/5/1/DW01-P_DataSheet_V10.pdf https://www.ic-fortune.com/upload/Download/FS8205A-DS-12_EN.pdf 【DIP化】 まずは、変換基板を用いて、DIP化。TP4056はICの裏が放熱のためのPADがついているが、それが、使った変換基板は、中央付近でスルーホール、それもホール金属が露出していたので、短絡するかもと間に、放熱が劣化するが、カプトンテープを挟んで絶縁。 【DW01の回路動作の確認】 まず、DWO1側のみ動作を確認する事を実施する。 神サイト に沿って、DW01の動作の確認をする。しっかり動作を理解しておこうというのが目的で。神サイトのように、電子負荷(アマゾンで3~4千円)を買うのもな・・・とテスタとかよくある計測器でやってみる 負荷には、10KΩの抵抗を付ける3~5Vとかの範囲ならほとんど電流は流れない。 回路自体は、B+は負荷に直接つながっているが、GND側とバッテリーのマイナスはFS8205AのソースS1,S2を介している状態。ゲートを操作する事で、S1,S2間が導通したり、遮断されたりという事で制御をするというのがざっくり動作原理。 ブレットボードで回路を組んでみた。 今回のテストでは、B+、B-...

3~4V→5V 昇圧回路 ME2108A50PG

イメージ
 Liポリマーのバッテリーを電源とするが、5VでないといけないICを駆動する必要があり、昇圧回路が必要に。 昇圧回路を作った事がないので、ここしばらく通勤途中とかの時間で調べてみた。 ① MC34063 定番らしい。秋月とかでも購入が可能。また、TJ34063AGDやNJM2360ADといった互換のICも入手可能。日本国内でも入手しやすい。しかし部品点数は少ないといいながらも結構ある事とそのため面積も結構かかる。一つ手元にもっておくと便利なIC。今回は5Vと決め打ちでよく、12Vなどに昇圧する必要がないし1Aというよな電流を取り出す必要がないという事で、自分でLTspiceでシュミレーションする事までやってみて採用するつもりでいたんだが今回は採用を見合わせ。また設計する機会があった時にメモだけ。 ・設計時に各部品のパラメーターを計算してくれるソフト https://sourceforge.net/projects/mc34063uc/files/1.1.0/ ・LTspiceでのシュミレーション https://note.com/amr1/n/n6847344cad15 ② ME2108A50PG 中華ICで5V決め打ちになるが、小型でかつ部品点数が少ない。アマゾンとかで売っているモジュールに採用されているIC。 電圧が5V出力とICの選択で決め打ち、かつ周波数も180kHzと固定なので、非常に部品点数が少なくて、小型にできる。という事で今回はこちら。 【データシート】 https://www.lcsc.com/datasheet/lcsc_datasheet_2410121321_MICRONE-Nanjing-Micro-One-Elec-ME2108A50PG_C236798.pdf 【部品】 メインのICはAliExpressで調達。 中国大陸からようこそ。 それ以外は秋月でも入出可能のため秋月から調達。 末版のME2108A50PGの50が出力電圧を示して、ME2108A33PGなら3.3V。その他、5.6V出力なども用意されている。出力が可変ではないので、出力に合わせてICの型番を変えて用意する必要がある。可変したい場合は、MC34063を使うのが吉。 【回路図】 基本的にはデータシートに載っている回路構成で回路図を書いてみた。使う部品の値は、ネ...

スーパーファミコン コントローラーの無線化プロジェクト:2コン対応準備(テスト)

イメージ
 準備段階という事で、2コン対応が完了しているものではありません。 【2コンへの対応(P/S、CLKのタイミング)】 2コンへの対応に向けて、SFC本体から送られてくるP/Sのタイミングを見てみたが、1コン、2コンともに、同じタイミング。 同じようにクロックも確認したが同じタイミングで入ってくる。 一つのICからの出力を分けているだけと思われる。(中身の回路を追った訳ではない) DATだけを2系統用意すればよくて、その他は1コンの信号を基にすれば十分 【ESPのダイレクトにGPIO書き込みと読み込み】 digitalWriteやdigitalReadを使うと一つのGPIOを順に操作する事になるので、一度に設定、一度に読み込みを実装できるようにしないといけないなあ~とテスト #define myPin1 14 #define myPinBit1 (1<<myPin1) #define myPin2 12 #define myPinBit2 (1<<myPin2) #define readPin1 4 #define readPinBit1 (1<<readPin1) #define readPin2 5 #define readPinBit2 (1<<readPin2) uint32_t regvalue= 0 ; void setup () {   Serial . begin ( 115200 );   pinMode (myPin1,OUTPUT);   pinMode (myPin2,OUTPUT);   pinMode (readPin1,INPUT_PULLUP);   pinMode (readPin2,INPUT_PULLUP); } void loop () {   WRITE_PERI_REG ( PERIPHS_GPIO_BASEADDR + 4 , myPinBit1 | myPinBit2);   regvalue= READ_PERI_REG (PERIPHS_GPIO_BASEADDR + 0x 18 );   Serial . println (regvalue, ...