ESP32-DevKitC-32E を使って実験中ですが、下記に述べるトラブルでほとほと困っています。説明が難しくてうまく書けませんが、これが原因では? とか、似た経験があるとかあれば教えてください。 <やろうとしていること> カメラモジュールOV7670と組み合わせて、ESP32で制御して画像をLCDに表示しようとしている。 OV7670からはPCLK、HREF、VSYNCのパルスが出力されるので、それらをトリガにして割込みをかけ、ESP32側で処理を行う。 PCLK:画素(ドット)毎に出力される。187.5kHz(カメラレジスタに設定) HSYNC:1ライン毎に出力される。約400Hz VSYNC:1フレーム(画像)毎に出力される。約1Hz VSYNCの割込み毎にLEDをトグルさせて目視確認している。 <症状> 普通であれ1秒毎にVSYNC割込みがかかるはずが、その10倍以上の頻度で割込みがかかる(LEDがトグルする)。 PCLKの線を切り離すと正常頻度で割込みがかかる。 VSYNC、HREF、PCLKの波形をアナログオシロで確認したところ、正常時と異常時で変わらない。割込み処理の記述をVSYNCだけにしても症状が出る。 ★(重要)書いてる途中で気づいたのですが、オシロプローブをVSYNCに当てると正常で、外すと症状が出ます。(下記に動画をUPしました) https://www.youtube.com/shorts/mtHiCEfNJdw 実験の様子と、ESP32が乗った基板の裏の写真を添付します。 <推測> 最初、プログラムのバグを疑っていたのですが、オシロプローブを当てると正常になることから、電気的な何か・・ノイズ? こうなるとちょっとお手上げです(´;ω;`) <プログラム抜粋> #include <Wire.h> //********** // 各種定義 //********** #define VSYNC (32) #define HREF (25) #define PCLK (19) #define LED1 (33) //#define KCLK (0) #define devaddr_camera (0x21) // カメラのi2cバスアドレス (中略) //********** // 割り込み処理 //********** void IRAM_ATTR VSYNC_IN() { digitalWrite(LED1, !digitalRead(LED1)); Serial.write("A"); // 本当に割込み処理をしているのかをこちらでも確認 } (中略) //********** // ピン初期設定 //********** void PIN_init(void) { // LEDピン設定 pinMode(LED1, OUTPUT); // LED1を出力に設定 digitalWrite(LED1, LOW); // PCLKピン設定 // pinMode(PCLK, INPUT); // PCLKを入力に設定 // HREFピン設定 // pinMode(HREF, INPUT); // HREFを入力に設定 // VSYNCピン設定 pinMode(VSYNC, INPUT); // VSYNCを入力に設定 } (中略) //********** //setup //********** void setup(void) { PIN_init(); delay(100); attachInterrupt(VSYNC, VSYNC_IN, FALLING); Serial.begin(9600); while (!Serial); delay(100); Wire.begin(); // I2C利用 CAMERA_init(); // カメラ初期設定 } //********** //loop //********** void loop() { delay(1); }