obnizのフォーラムは新しいシステムに移行しております。
新しいフォーラムはこちらになりますArduCAMMini OV2640 2MP サンプルで動かない
-
早々にありがとうございます。
昨日までの進捗をまずはご連絡いたします
1)csの件:理解しました。aruduinoのスケッチからLOW true信号と判断して進めました。2)プログラムからの問題調査
下記のプログラムを実行すると、await cam.spi_pingpongWait()関数でエラーになります。
spi_pingpongWait()関数では、spiのtest register(0x00)へ0x55をwriteしてreadして正しいかどうかのテストをしています。
この時readで0x55ではない値のため、throw new ERROR('spi bus error')となります。帰ってくるreadデータは、不定。
直接原因は分かりました。<!-- HTML Example -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body><div id="obniz-debug"></div>
<img id="image"><script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.debugprint = true
obniz.onconnect = async function () {obniz.io11.output(true);
var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, vcc:5, sda:6, scl:7 });
await cam.spi_pingpongWait()
}
</script>
</body>
</html>3)ご指摘の通り、電源周りの問題がありようなので、ご指示通りおこなう。
3-1) IO11をvccに接続。
何度か、電源投入手順等変更しながらですが、一度成功しましたが、それ以外は失敗。3-2) Obnizのvcc/gndのスルーホールにピンを立て、そこからArduCamMiniへcvv/gnd供給をする。
すべて失敗でした。現状での結論
プログラムとしては問題はないと思います。(一度成功している)
SPI接続のハード上の問題(漠然としていますが)これから
Obniz + ArduCamMinの+5Vの供給は2Aあり電流計測では02A程度ですので容量的に問題ありません
オシロスコープとか持っておりませんので、いろいろトライしてみますが、進捗は期待できません。原因推定の想定から知りたいことでは、
spi通信も転送モードはあっているのか?(arducamminiはmode0)
現象から、クロックとデータのマージンが少ない、あるいはgndレベルが上がっているとの想定です。確認していただきたいことがあれば指示いただければ、やってみたいとおもいますのでよろしくお願いします。
石井@行田
-
お世話になります。
問題がありましたので、ご確認上教えていただければ幸いです。
下記に実行したプログラムとログです。
spiのclock(プログラムではfrequency、ログ上ではclockと表示している)を1000000に変更してみましたがprogram内指定の4000000で変更されていません。defaultでは3vのdrive()のパラメータを5vに変更してみましたが、Obnizeがsendした内容では変更されていません。恐縮ですが、オシロはありませんので、現物信号をみてはいません。
宜しくお願い申しあげます。石井@行田
<!-- HTML Example -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body><div id="obniz-debug"></div>
<img id="image"><script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.debugprint = true;
obniz.onconnect = async function () {
obniz.io11.output(true);
var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3,frequency:1000000, drive:"5v", gnd:4, vcc:5, sda:6, scl:7 });
await cam.spi_pingpongWait()
}
</script>
</body>
</html>Obniz: connected to ws://192.168.10.8
Obniz: send: [{"io11":true}]
Obniz: send: [{"io5":{"output_type":"push-pull5v"}}]
Obniz: send: [{"io5":true}]
Obniz: send: [{"io4":{"output_type":"push-pull5v"}}]
Obniz: send: [{"io4":false}]
Obniz: send: [{"io0":true}]
Obniz: send: [{"system":{"wait":100}}]
Obniz: send: [{"io3":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
Obniz: send: [{"io1":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
Obniz: send: [{"io2":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
Obniz: send: [{"io3":{"pull_type":"float"}}]
Obniz: send: [{"io1":{"pull_type":"float"}}]
Obniz: send: [{"io2":{"pull_type":"float"}}]
Obniz: send: [{"io4":false}]
Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"spi0","pin_name":"gnd"}}}}]
Obniz: send: [{"spi0":{"mode":"master","clock":4000000,"clk":3,"mosi":1,"miso":2}}]
!!!! clock:1000000に変更されていない!!!
Obniz: send: [{"io6":{"output_type":"open-drain"}}]
Obniz: send: [{"io7":{"output_type":"open-drain"}}]
Obniz: send: [{"io6":{"pull_type":"pull-up5v"}}]
Obniz: send: [{"io7":{"pull_type":"pull-up5v"}}]
Obniz: send: [{"io4":false}]
Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"i2c0","pin_name":"gnd"}}}}]
Obniz: send: [{"i2c0":{"sda":6,"scl":7,"mode":"master","clock":100000}}]
Obniz: send: [{"display":{"pin_assign":{"0":{"module_name":"Cam","pin_name":"cs"},"1":{"module_name":"Cam","pin_name":"mosi"},"2":{"module_name":"Cam","pin_name":"miso"},"3":{"module_name":"Cam","pin_name":"sclk"},"4":{"module_name":"Cam","pin_name":"gnd"},"5":{"module_name":"Cam","pin_name":"vcc"},"6":{"module_name":"Cam","pin_name":"sda"},"7":{"module_name":"Cam","pin_name":"scl"}}}}]
Obniz: send: [{"io0":false}]
Obniz: send: [{"spi0":{"data":[128,85],"read":false}}]
Obniz: send: [{"io0":true}]
Obniz: send: [{"io0":false}]
Obniz: send: [{"spi0":{"data":[0,0],"read":true}}]
Obniz: send via local
Obniz: recvd via local
Obniz: {"spi0":{"data":[31,255]}}
Obniz: send: [{"io0":true}]
Error: spi bus fail
Obniz: send via local以上
-
@Yuichi-Ishii
返事が遅くなってしまい申し訳ありません。1度は動いたとのこと良かったです。おっしゃる通り、何かが不安定な可能性があります。
弊社の環境で今いくつか試していたのですが、これよりもさらにクロック速度を上げても動作していますので、固有差がなにかあるのかもしれません。
spiのモードですが、転送モードはmode0なのであっているかと思います。(ちなみにmodeの変更機能もはこれから追加の予定があります)ご報告の通り、ライブラリ側でfrequencyが受け取れていないバグがありました。これから修正致します。
以下のように自分でspiを用意して渡すことが可能なので以下で試していただけないでしょうか。var spi = obniz.getFreeSpi(); spi.start({mode:"master", clk :3, mosi:1, miso:2, frequency:1000000, drive:"5v"}); var cam = obniz.wired("ArduCAMMini", { cs:0, spi:spi, gnd:4, vcc:5, sda:6, scl:7 });
こちらで5vかつ1Mhzの条件での動作が可能です。
よろしくお願いします。
-
spiの周波数ですが、バグではなくもともと周波数を変更できないようにしておりました。
変更する場合は上記のようにspiオブジェクトを作って渡す方式が正しくなりますので、そちらでお願い致します。
-
ありがとうございます。
getFreeSPI()の関数にテストしました。
frequency : "4M", drive:"5v" ではloopbalkでエラーでしたが、
drive:"3v",の場合frequency:"2M","1M"で動作確認できました。先日オシロ(100Mhz,1Ghzサンプル,2ch)が調達できましたので、いろいろ条件を変えた所、4Mhz時は専用の5V電源のほうが安定。オシロプローブを付けたほうが成功確率が高いなど、不安定要素があるようです。ArduCAMMiniのいろいろ関数を個別に使ってみましたが、4Mhz, 3V でも不安定になるよです。しかし残念ながら、本質的なタイミング上の問題を再現、理解でいていません。
ご指摘のようにspiオブジェクトを使ってみます。ただ初心者なので、少し勉強しながら進めていきます。
ご支援ありがとうございます。石井@行田
-
@Yuichi-Ishii 検証ありがとうございます。不安定な場合があるということだったので、ArduiCamライブラリにおいて周波数変更などできる機能や、不安定な場合は周波数などを変更するようにとdocumentを更新しようと思います。
また何かありましたらご連絡下さい。
-
お世話になっています。
ファームウエアのバージョンアップありがとうございます。
ArduCamMiniでの関連部分につきまして、確認してみました。
1)Frequency及びdriveの確認:frequenctについては2MでSPIのregisterへのwrite/readはOKになりました。(まだ不安定なんで今のところ、1Mに設定しています。)driveは電圧確認でOKです。ご対応ありがとうございました。
2)ただ、画像を表示する、最初のサンプルコードは、htmlへの表示ができませんでした。個別のサンプルプログラムでチェックしましたところ、[await]isCaptureDoneWait()関数でエラーとなっています。
GoogleChrome F12でのLog表示で(TypeError: this.isCaptureDoneWait is not a function at Obniz.obniz.onconnect)。
できる範囲での確認ですが、取り急ぎご報告いたしました。石井@行田
-
@Yuichi-Ishii すみません、ドキュメントが間違っておりました。
await this.isCaptureDoneWait()
となっている部分ですが
await cam.isCaptureDoneWait()
が正しいです。obniz.jsのドキュメントですのでこれから修正して更新いたします。
ありがとうございます。
-
また、ドキュメント中にある
const chipid = await this.getChipIdWait();
も
const chipid = await cam.getChipIdWait();
が正しい記載となります。
-
早々のreplyありがとうございます。
sampleプログラムを以下のように修正し、TypeErrorはなくなり、SPIのデータ転送が行われました。
しかしhtmlにimageは表示されませんでした。
また転送byte数表示は image size=8200byte。 init()ではsetsize(320x240)なので少々少ないのでは。(よくわかっていません) もう少し追いかけてみます。できることがありましたらコメントいただければ幸いです。
石井@行田<!-- HTML Example -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@2.0.0/obniz.js"></script>
</head>
<body><div id="obniz-debug"></div>
<img id="image"><script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
obniz.io11.output(true);
var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, vcc:5, sda:6, scl:7, spi_frequency:1000000 });await cam.spi_pingpongWait();
cam.setMode('MCU2LCD');
const chipid = await cam.getChipIdWait();
if (chipid != 0x2642) {
throw new Error('unknown chip ' + chipid)
}
cam.init();cam.flushFIFO();
cam.flushFIFO();
cam.startCapture();
while (true) {
if ((await cam.isCaptureDoneWait())) { break; }
}
const jpegData = await cam.readFIFOWait();console.log("image size = " + jpegData.length + " bytes");
const base64 = cam.arrayToBase64(jpegData);
document.getElementById("image").src = "data:image/jpeg;base64, " + base64;}
</script>
</body>
</html>
-
@Yuichi-Ishii こちらのプログラムそのままで動かしたところ、以下のように画像として表示されました
jpegですので、この解像度なら3kbyteや8kbyteでもおかしくはないかと思います。
カメラが起動できていなければチップIDが読み取れずI2Cの通信エラーが起こるはずですが、それが起きていないので通信自体はうまく行ってそうです。画像として表示する部分になにか問題があるのかもしれません。
今お使いのOSやブラウザは何を使われていますでしょうか。
-
ありがとうございます。
OS :win10 64bit Web:Google Chromになります。
どうもおかしいので、自己診断をしてみたところ、
obniz idを入れたところ、テスト結果にIDを出力して何も表示されませんでした。browserでF-12キーでログ表示したころ以下のようなエラーメッセージを表示。再現します。どこか壊したのかもしれませんので、少し整理して考えてみたいと思います。
(1)自己診断結果については、以前は、各ポートごとに問題がないか表示されていたように記憶しています。こちらのハードの不具合化しているのかの確認。
何か確認すべきことがあればコメントお願いします。(2)Obniz本体のI2c通信での不具合の可能性については、一度Arduinoでの動作確認等を行ってみたいと思います。その後は、動くところと動かないところの確認を進めていきます。
お世話をおかけいたします。
石井@行田
--- log by F12 key on Google Chrome ---
Uncaught Error: Error: firmware 2.0.0 needs obniz.js version 2.0.0 or higher. see https://obniz.io/doc/hw_firmware
at Obniz.error (obniz.js:8553)
at Obniz.notifyToModule (obniz.js:8519)
at Obniz.wsOnMessage (obniz.js:7660)
at Obniz.<anonymous> (obniz.js:7742)
error @ obniz.js:8553
notifyToModule @ obniz.js:8519
wsOnMessage @ obniz.js:7660
(anonymous) @ obniz.js:7742
-
お世話になっています。
さきほど、Aruduinoにて動作確認を行ったとろろ、エラーが発生しました。以前から、何度か動作確認を行っていますので、Arducom Mini 2MP側で不具合があるということになります。
申し訳ありませんが、一旦これでこの課題は終了とさせていただきたいと思います。
大変ありがとうございました。
また、なにかありましたらご相談させていただきます。石井@行田