スーパーファミコン コントローラーの無線化プロジェクト: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 + 0x18);
  Serial.println(regvalue, BIN);
  delay(1000);                      
  WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + 8, myPinBit1 | myPinBit2);
  regvalue=READ_PERI_REG(PERIPHS_GPIO_BASEADDR + 0x18);
  Serial.println(regvalue, BIN);
  delay(1000);                      
}


以前にも書き込みとしては
    WRITE_PERI_REG(PERIPHS_GPIO_BASEADDR + (8 - 4 * (bitRead(button_status, 15 - j))), DAT_OUTPIN_BIT);
+8はLOWに設定されて、+4はHIHGに設定されるのでこれを使って、SFCのコントローラーのDATをSFC本体に送り込む事をしていたが、読み込みは?
正しいのか?は不明だがGPIO INについては、0x18先から格納されているとのことで
READ_PERI_REGというコマンドでこのレジスタを読む

12:02:13.815 -> 11100000000000110010000000000101
12:02:14.824 -> 11100000000000110111000000110101
12:02:15.834 -> 11100000000000110010000000000101
12:02:16.840 -> 11100000000000110111000000110101

BINで出力すると上のよううに出力。
pinmodeでoutputに設定しているピンについても状態は読むようで、12ピン(ピン0が一番右なので右から13番前の緑)、14ピンの所(青)が0101と順に変化。
それを直接つないで読み取りを行ったピン4、5(右から5番目、6番目 赤)の状態も読み取りができている。
準備段階としてはまずはここまで。


コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法