投稿

5月, 2025の投稿を表示しています

スーパーファミコン コントローラーの無線化プロジェクト:動作バージョン1

イメージ
動作のバグが残っていた(  https://funasover.blogspot.com/2025/04/blog-post.html )スーパーファミコンのコントローラー無線化プロジェクト。 多少力技だが一旦の問題解決、完全動作。 本来は、BLE通信で低消費電力に作るべきだと思うが、まずまずはWiFiを利用している点はあしからず。BLE化は後ほど。また現時点ではブレッドボード品。BLE完了時点で基板を起こそうかと。 【以前の課題】 https://funasover.blogspot.com/2025/04/attachinterrupt.html SFC本体が発するP/Sのパルスを検出して、ボタン状態を本体に送り込む際、パルスの検出時間にバラつき(ジッター)があり、どうする事もできず。 おそらく、ESP-IDFなどの開発環境で開発すれば回避できるかもしれないが、お手軽Arduino環境下ではお手上げ。 【解決手法】 ESPのArduino環境下でのGPIOインターラプトは使えないのであれば、別のマイコンという事でCH32V003を使う。ESPとの間はSPIで通信。肝心なCH32V003のGPIOインターラプトのバラつきは非常に小さい事を動作を確認済み( https://funasover.blogspot.com/2025/05/ch32v003gpio-external-interrupt.html#more ) ICが一つ増えるが、50円のIC、上の図ではP/Sをレベルコンバーターを通しているが、5VトレラントのGPIOピンをもっているので、トランジスタを1つ割愛はできるので、トータルではフットプリントや部品点数もあまり変わらない。 【作製ステップ1】 コントローラー回路 現時点では、電源をバッテリーから取るという回路ではなく、USBから給電しているのであしからず。D1,D2,D5を用いているが、これは任意。スケッチの方も用いるピンに合わせて変更する。 ArduinoIDEスケッチ #include <ESP8266WiFi.h>   // WiFih> #include <WiFiUdp.h> #include "ESP8266TimerInterrupt.h" const char ssid[...

[CH32V003]GPIO EXTERNAL Interrupt

イメージ
GPIOによるインターラプト。 サンプルはネットで見つける事ができるのですが、 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);   この1行がよくわからないので調査。インターラプトに設定するピンを素直にPC3とかPD1とか指定させてくれれば良いのに、GPIO_PinSource3??? https://www.wch-ic.com/downloads/CH32V003RM_PDF.html EXTI0~EXTI7の8個の外部インタラプトが用意されている GPIO(Px0~Px7(x=A/B/C/D))に設定ができる ただし、EXTI0ならPx0と数字の部分が一致していないといけない。 EXTI0にPA0を割り当てると他のPB0,PC0,PD0に設定する事ができない。 という事か。 さっそくテストをしてみる。

[CH32V003] 48MHzの設定

イメージ
 CH32V003が安い!それなりに高機能!という事で使いはじめた。 EVTのサンプルプログラムには     printf("SystemClk:%d\r\n",SystemCoreClock);     printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); というのが入っていて、システムクロックをシリアルに表示するようになっている 何気なく見ていると24MHzであると表示されている。 CH32V003だとスペック上は48MHzであるが半分で動いている事になる。 これを48MHzにするには? main,c等が格納されているUserのフォルダに、system_ch32v00x.cというファイルがある このファイルで、設定ができるとのこと。 それを開いて、 とコメントアウトされているのを とHSE をコメントアウトして、HSIのコメントアウトをはずす。 するとシステムクロックが48MHzに設定できる。 24MHzの際のSPIの通信をキャプチャーすると160usecぐらいかかっていたのが、およそ100usecと半分近くになる事が確認できる。半分にはならないのは? 実は詳細は、 50円マイコンCH32V003Fを使う(4): クロック設定を読み込む | mcuXfamilyのブログ を見ると書いてくださっている通りですが・・・ せっかく水晶振動子なしで48MHzのクロックで動かせるMUPなので、動かしたい!という事でた面した記録 内部クロックに切り替えることでPA1,2もGPIOとして使える GPIOをめーいっぱい使いたい場合 https://github.com/shippoiincho/tk80_ch32v003

[ CH32V003]  CH32V003 のSPI SPI -- ESP8266 SPI slav

イメージ
 CH32V003 でのSPIは結構難しいという話で、あまり良い解を紹介しているものではないのであしからず。とりあえず最低限の事をやるといった状態なので。 前回、ESP8266をSPIのスレーブにして、Arduino Nanoをマスターをして通信することをテストした。 https://funasover.blogspot.com/2025/05/esp8266-spi-slaveesp8266spi.html Arduino Nanoは、互換品でも最近は、パンデミック以降半導体不足以降結構なお値段。そこでATmega328P単体をを購入して使うようにしているが、購入時に、以前からCH32シリーズ気になっていたのでポチリと一緒に注文していた10個かっても400~500円ですから。 ATTinyの愛用者ですが、それよりはるかに安く、容量、クロックともに優れている。 Lチカとかの基本動作は、他のサイトに任せるとし、SPI中心に。

[ ESP8266 SPI slave] ESP8266をSPIのスレーブにする方法

イメージ
ESPをSPIのスレーブにする事を試みる。ESPをマスターとしてSPIのICと通信するのはなんてことなく簡単でネットで調べれば例題がいやと出てくるが、スレーブ化するのには情報が少ない。 先人の方々の情報収集したところ、ESP8266のArduinoIDEのライブラリーが存在する。制約はあるようだが使わせていただき、ライブラリーをテストしてみる。  https://github.com/esp8266/Arduino/blob/master/libraries/SPISlave/examples/SPISlave_Test/SPISlave_Test.ino 【テスト1】 ライブラリーといっても、特に取り込みする訳でなくて、8266のライブラリーを取り込むとすでに含まれている。SPISlave_Testの方をESPにそのままアップロード。SPISlave_SafeMasterの方をArduinoNanoに。Nano側のMasterはloopの中を少し編集はしてやった。 void loop () {   delay ( 1000 );   send ( "Are you alive?" );   delay ( 1000 );   send ( "Hello Slave!" ); } Hello Slaveを送りつけるように少し編集。Helloが最初のsetupの一回だけなんで、入れてみたというだけ。 デバイス的には、コメント欄にあるとおりに     GPIO    NodeMCU   Name  |   Uno   ===================================      15       D8       SS   |   D10      13       D7      MOSI  |   D11   ...