2020年2月29日土曜日

ESP32でのシリアル受信処理が最後まで完了しない対応


fix for "realtime uart" in esp32-hal-uart.c #1674

に対応方法があった。


 1.シリアル受信で受信データが途中までしか取り出せない
 これは、ESP32の受信関数の設定の問題
 ....\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-uart.c
 のファイル内の
 void uartEnableInterrupt(uart_t* uart)
{
    UART_MUTEX_LOCK();
    uart->dev->conf1.rxfifo_full_thrhd = 1;  //112;   ←ここ!
    uart->dev->conf1.rx_tout_thrhd = 2;
    uart->dev->conf1.rx_tout_en = 1;
    uart->dev->int_ena.rxfifo_full = 1;
    uart->dev->int_ena.frm_err = 1;
    uart->dev->int_ena.rxfifo_tout = 1;
    uart->dev->int_clr.val = 0xffffffff;

    esp_intr_alloc(UART_INTR_SOURCE(uart->num), (int)ESP_INTR_FLAG_IRAM, _uart_isr, NULL, &uart->intr_handle);
    UART_MUTEX_UNLOCK();
}

uart->dev->conf1.rxfifo_full_thrhd = 1;  //112;   ←ここ!
を1にすればよい。ここに設定した数字までデータがたまらないとSerial.available()の戻り値が応答しない

2018年11月24日土曜日

MDX-20 controler(mbed LPC1114)設計データ

ひとつ前のblogでmbed(LPC1768)でコントローラを作りましたが、マイコンが7000円と高いので、LPC1114で作り直しました。マイコンは200円なのでだいぶ下がります。

ただし、処理能力が低いので、SDカードからMDX-20への転送速度が遅く、ぎりぎり使い物になる程度です。
転送速度が遅いので、ブレットボードでの動作確認までして、開発を止めました。

ここでは設計データを残すために資料をまとめました。

LPC1114と各部品の接続とprogram はここに置いておきます。

190102 UARTの配線ミスの修正をおこないました。Programにも、MDX-20へのデータ送信で、MDX-20からの停止指示(CTS)が来ても送信する不具合がありますが、これは修正していません。


2018年11月23日金曜日

MDX-20 controler(mbed LPC1768) 設計データ


設計、プログラムのデータをまとめました

回路図は作らず、mbedと部品間の接続関係の資料を作りました。(PCBは作らずユニバーサル基板でつくったので)
190102 UARTの配線の間違いと、Programの修正を行い、データを更新しました。
回路データ、mbedProgramのリンク

このコントローラはfusion360で作成したRMLデータをMDX-20に流し込むために作りました。
MDX-20では、ユーザー原点の設定ができませんでしたが、このコントローラでそれを可能にしました。
RMLデータはUSBメモリでコントローラに供給します。
コントローラがMDX-20を制御するので、パソコンは不要です。

MDX-20の通信コネクタの情報と、Fusion360でのRMLデータ出力設定については、下記のblogを参照してください。

これまでのMDX-20コントローラ作成のblog

MDX-20を使う


mbed LPC1768で作るMDX-15/20 controler

(経過報告)MDX-15/20のコントローラをmbedLPC1768でつくる

Fusion360の設定

fusion360のCAMデータをMDX-15/20で使用する

2018年11月11日日曜日

M5Stackシリーズの機能一覧

性能の違いが判らなかったので一覧表を作成した。

データ元はこちら


FIREが特殊。
BASICとM5GOが同じ。
GRAYはBASIC,M5GOにMEMSを追加
といった感じ。

2018年11月10日土曜日

M5stack GrayでMLX90640(サーマルカメラ)のサンプルプログラムを動かす。

MLX90640(M5Stak用ミニサーマルカメラユニット)M5Stack Grayを使うための手順をまとめました。

販売元のwebには、
M5BurnerでM5GO / M5Stack FIREにファームウェアを書き込むとモジュールが動作可能となり、Arduino IDEでプログラムできるようになります。」

とあり、M5Burner付属のM5GO, M5Stack FIREのfirmwareを書き込み、arduino sample programを書き込み試してみましたが、i2c driverで "nat ack read"が出て動きませんでした。
ここまではarduinoIDEのボード選択は"M5Stack-Core-ESP32"

この後で、arduinoIDE Borads Managerで、"M5Stack-FIRE"のボードデータがあったのでこれに入れ替えて、再度上記のM5Burnerでのfirmwareを書き込んでやっていましたが駄目でした。

(M5BurnerでのfirmwareとarduinoIDEのボード選択の違いは理解していません)

販売元のwebには、
「・・・M5BurnerでM5GO / M5Stack FIREにファームウェアを書き込むとモジュールが動作可能・・・」
の意味ですが、新しいfirmwareでは Wire.endTransmission()の戻り値が拡張されており、既存のfirmwareではエラーになることの対応です。

ですが、上記の動作確認では対応できませんでした。

M5Stack Grayでは、Wire.endTransmission()の戻り値の判定を旧のものにあわせれば動くようになります。

MLX90640_I2C_Driver.cpp 

42行目
if (Wire.endTransmission(false) != 7) //Do not release bus
if (Wire.endTransmission(false) != 0) //Do not release bus

にするとエラーが出なくなります。


あと、M5StackのLCD表示が無駄に回転しているようなので、
MLX90640.cpp 119行目(setup()内)
M5.Lcd.setRotation(1);
をコメントアウトします。

これで、firmwareを入れ替えなくても、M5Stack Grayで動くようになります。


備考:
M5Stack にはBasic, Gray, FIRE, GO がありますが、この違いがよくわかりません。

M5Burnerでfiwmwareを書き込めますが、これにはBasci, Gray名義のfirmwareがないので、どれを選択すべきか変わりません。

arduinoIDEのボード選択と、M5Burnerのfirmwareの関係が分かりません。

M5BUrenerには"UNIT_THERMAL_V0.1"というfirmwareがあります。これを書き込むとサンプルプログラムなしでサーマルカメラの動作確認ができます。


2018年7月1日日曜日

JeVois-A33JeVois Windows10でトラブル続き

JeVois-A33 をswitch scienceで購入しました

EPSON endeber win10pro で動作させようとしています。

現状、USBデバイスとしてカメラとの認識が頻繁に途切れる現象が出ておりつかえません。

これまで行った対応をまとめます。

1.USBポートの移動

 本体前面のUSBポートでは認識しませんでした。これを背面のUSBポートに移動させると認識するようになりました。

 前面はマザーボードから中継ケーブルを経由するのがいけないのだと思います。

2.windowsのレジスタをいじる


Jevois detected by Windows but no video

のやり取りの
----------------------------------------------
Ok, apparently this is a known issue on Windows 10 Anniversary update, where Microsoft introduced a new Windows Camera Frame Server and redirected all application access to webcam through it.

https://arstechnica.com/information-technology/2016/08/windows-10-anniversary-update-breaks-most-webcams/

I followed the steps in the article below to disable the frameserver in registry and the camera started working after a reboot.

http://wccftech.com/fix-windows-10-webcam-issue-anniversary-update/

Hope this works for other people.
----------------------------------------------
から↓の手順を実施

wccftechのサイトの内容を実施。

-----------------------------------------

Fix Windows 10 Webcam Issue After Anniversary Update

  • First and foremost click on the Start Menu and do a search for ‘regedit’ and launch the program.
  • Now in the left hand sidebar, navigate to the following location: HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows Media Foundation > Platform.
  • Once here, right-click on the ‘Platform’ folder in the left hand sidebar and then hover your mouse over ‘New’ and then select ‘DWORD (32-bit) Value.’
  • Name the value ‘EnableFrameServerMode’ and then set the value to ‘0.’
  • Now navigate to HKEY_LOCAL_MACHINE > SOFTWARE > WOW6432Node > Microsoft > Windows Media Foundation > Platform.
  • Right-click on ‘Platform,’ then hover above ‘New’ then add a DWORD value. Name it ‘EnableFrameServerMode’ and set the value to ‘0.’
The last step is only necessary if you’re running a 64-bit version of Windows.
From here on in you should not have any sort of webcam related issues on Windows 10. Lastly, also be sure to restart your PC once you’re done with the changes.
-----------------------------------------



認識が切れる現象は解消せず。(なんとなくつながっている時間はながくなった気がする)

3.camera側 mini-USBの嵌め合いがゆるい

嵌め合いが緩く、がたつきます。PCがcameraを認識していて、cameraアプリで表示しているときに、USBケーブルに触れると認識が途切れます。

どうも、これがあやしい

2018年6月2日土曜日

M5Stackでfelica reader(RCS-620S)を使う

こちらのarduino用のlibraryをM5stackで使う場合は改造が必要。
これはlibraryのarduinoの対応Verが古くそのための齟齬が生じているため。
以下3か所の変更が必要
ものはswitch scienceで販売されている


1.Serialのflush命令の削除

serial処理のflush命令が使えないため。この命令を削除する必要がある(このため送信完了待ちがなくなるが支障なかった)

変更箇所はRCS6920S.cppの中にある
void RCS620S::flushSerial(void) という関数。
この関数内でコールされているflush()を削除する。

2.Serialポートの変更

libraryはプログラムの書き込み、モニタを行うSerialポートを選択する設定になっているので、これを別(M5Stackの場合はSerial2)にする変更を行ったほうが良い。

RCS620S.cppの
#includeの下に、

HardwareSerial RCS620SSerial(2);
を追加してSerial2を"RCS620SSerial"という名称で使用する宣言を入れる。

プログラム内にある"Serial."の文字を"RCS620SSerial"で置き換える。

int RCS620S::initDevice(void) 関数内に

    RCS620SSerial.begin(115200);      // for RC-S620/S

の命令を追加する。

3.includeの削除


#include "Wprogram.h"
は削除するか、
#include "Arduino.h"
に置き換える(なくても動作する)

#include "Print.h"
は削除しても動作する。