GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
GR-KAEDE_Sketch_V1.00.zip の Makefile 中のコンパイルオプション
CFLAGS :=-Wall -I"$(GNU_PATH)rx-elf/include" -I. -I"$(GNU_PATH)lib/gcc/rx-elf/$(GCC_VERSION)/include" -I"$(GNU_PATH)rx-elf/include/c++/$(GCC_VERSION)/" -I"$(GNU_PATH)rx-elf/include/c++/$(GCC_VERSION)/rx-elf/64-bit-double/" -ffunction-sections -fno-function-cse -fsigned-char -fdata-sections -mno-balign -DDEBUG -DGRKAEDE -DGRSAKURA -DARDUINO=144 -DCPPAPP -D__RX_LITTLE_ENDIAN__=1 -D__T4__ -g2 -g -flto -mlittle-endian-data -m64bit-doubles -mcpu=rx64m
最適化オプション `-O2' とかがないですね。なんか効率悪いコード吐くなと思ったらこれが原因か。`GRKAEDE' と `GRSAKURA' と `ARDUINO' がデファインされてるのもどうかという感じ。
参考: GR-SAKURA_Sketch_V2.02.zip の Makefile 中のコンパイルオプション
CFLAGS :=-Wall -I"$(GNU_PATH)rx-elf/include" -I. -I"$(GNU_PATH)lib/gcc/rx-elf/$(GCC_VERSION)/include" -I"$(GNU_PATH)rx-elf/include/c++/$(GCC_VERSION)/" -I"$(GNU_PATH)rx-elf/include/c++/$(GCC_VERSION)/rx-elf/64-bit-double/" -ffunction-sections -fno-function-cse -fsigned-char -fdata-sections -mno-balign -DTESTING=1 -DGRSAKURA -DARDUINO=100 -DCPPAPP -D__RX_LITTLE_ENDIAN__=1 -D__T4__ -O2 -flto -mlittle-endian-data -mcpu=rx600 -m64bit-doubles
pins_arduino.h の中でデジタルピンの数が
#define NUM_DIGITAL_PINS 66
となっていますが、下記の各テーブルの要素がそれぞれ 67 個あり、上の値も 67 が正しい感じです。
const uint8_t PROGMEM digital_pin_to_bit_PGM[] const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] const uint8_t PROGMEM digital_pin_to_port_PGM[]
私は
-DDEBUG
が無いと嬉しいです.
結局CN17へのデジタルI/Oの割り当ては行われないのでしょうか?
CN17 へのデジタルI/O 割り当ての修正です。GR-KAEDE_Sketch_E111 で新規プロジェクトを作成し(←重要)、アーカイブの内容を置き換えて下さい。
PIN_IO62~PIN_IO66 に P21, P20, P93, P60, PA0 を割り当てています。CN17 へのデジタルI/O 割り当を行わない意図が不明なためこの仕様は暫定的なものです。
なお、なんでか PIN_IO66(PA0) が動作しません。今んところ原因は不明です。←カン違いだった模様
動作テスト用スケッチ
#include <Arduino.h> void setup() { for (int i = PIN_IO62; i <= PIN_IO66; i++) { pinMode(i, OUTPUT); } } void loop() { for (int i = PIN_IO62; i <= PIN_IO66; i++) { digitalWrite(i, HIGH); delay(500); digitalWrite(i, LOW); } delay(500); for (int i = PIN_IO62; i <= PIN_IO66; i++) { digitalWrite(i, HIGH); } delay(500); for (int i = PIN_IO62; i <= PIN_IO66; i++) { digitalWrite(i, LOW); } delay(500); }
サーボのライブラリはソースコードの提供ではなくライブラリファイルでの提供なんですね。
CN17の端子をサーボに割り当てられない。
fujitaさん、CN17のディジタルIOへの対応ありがとううございます。
SDRAMを設定しない状態でdigitalWriteの動作は確認しました。
SPI.h にあるクラス「SPISettings」の変数「spcmd」に初期値が無いため,SPCMD0レジスタの「SSLA」に不正な値が入りSSが動かなくなる事があります.先日のミーティングでの「液晶画面が出なくなる」はこのためでした.202行目で初期値をゼロにする等必要かと思います.
RTC.RCR2.BIT.CNTMD の設定が無いのでは?
カメラに接続されているi2cが、wireライブラリの対象になっていないようですが、対応はなされないのですか?
取り敢えずcn17の件も含めて色々非サポートなのは、これは仕様なのか、穴なのか、明確にしてほしぃナァ。
Matsuuraさん、ご指摘ありがとうございました。ご返信遅くすみません。
カメラのi2cは他のWireと排他なのですが、改版の際に仕様変更の可能性がありますので、ひとまず現状維持にしようかと思っています。
元々wireのA4、A5はArduinoに合わせる為にソフトウエアでエミュレートしているのでしょうから、いっその事オーバーライドで好きなPINを割り当てられる様に作っておいた方が便利なんじゃないかな?
Okamiyaさん,
image.cpp 54~47行目で使用しているフラグのセットが何処にも無いようです.
これを呼び出す gr_sketch.cpp 45~47行目のループが何故2回なのかよく分かりませんが.
image.cpp 93行目のラベルは87行目(writeの前)に移動した方が良いと思います.
SDカードとSPI(LCD)の問題は,SDのSSピンに他のピンを指定した際にもSPCRのSPMSが0である為のようです.
こちらではとりあえずアプリ側でSDにアクセスする時レジスタを書き換えて両者を動かしているので大丈夫です.
hamayanさん、現在はSoftI2cMaster rtc(A4, A5);の引数を変えればできるため、APIとして用意するかどうかなのですが、ハードI2Cもたくさんあり、あまりニーズがなさそうだったので(せめてArduinoのSCL, SDAピンなのですがハードとしてN.C.になっている)、敢えて見せてない状況です。
Matsuuraさん、コメントいただきありがとうございます。
>image.cpp 54~47行目で使用しているフラグのセットが何処にも無いようです.
g_flag_finished_image_beginですかね?上でfalseとして初期化していますが、私の勘違いでしょうか。
>これを呼び出す gr_sketch.cpp 45~47行目のループが何故2回なのかよく分かりませんが.
これ、完全に私の凡ミスで、本来は3回ですね。image[3]の初期化で、Mdl_IP_Init( detect_workaddr );をそれぞれのメモリ空間を初期化してます。
>image.cpp 93行目のラベルは87行目(writeの前)に移動した方が良いと思います.
そうですね。ありがとうございます。
>SDカードとSPI(LCD)の問題は,SDのSSピンに他のピンを指定した際にもSPCRのSPMSが0である為のようです。
>こちらではとりあえずアプリ側でSDにアクセスする時レジスタを書き換えて両者を動かしているので大丈夫です。
SSLAの件も含めて、この初期値忘れは、ビンゴですね。大変助かりました。問題発生時はSSLAが設定禁止の4とかになってました。
g_flag_finished_image_begin を48行目以降で true にして初期化を1度だけに制限したかったのかなと思いました.こうしないと初期化を何度も実行します.そのため起動時間が長く掛かっていますので,1度で良いならその方が嬉しいです.
Matsuuraさん、ありがとうございます。その通りです。基本的には一回でOKです。初期化を一度だけにしたかったので、荒いですが手っ取り早くグローバル変数で管理することにしました。ひとまずサンプルではbeginを一度だけのコードにしようかと思います。
hamayanさん、CN17はfujitaさんの反映を適用させていただきます。確かにカメラを使わない方にはサービスピンになりますので。Fujitaさん、ありがとうございます!
digipontaさんのWebサーバー、SDカード同時使用?でSDがfailする件は、Matsuuraさんご指摘の初期化漏れの修正でSDがfailすることがなくなりました。再現していた状態で、初期化コードを追加して改善を確認しています。ただ、Webサーバーで画像が崩れる件、jpegエンコード時に崩してしまっているようでした。SDカードの保存データも一緒に崩れていたことと、生の画像は問題ないためです。
ですので、JPEGエンコードをもう少し調べた後にV版にしたいと思います。とりあえず、E1.12としてe2studioのプロジェクトだけ公開します。9月29日までにJpegエンコードが改善できるかを判断したいと思います。・・・インドコンテストも始まってますので一旦V版として制限付き公開させていただきます。
V1.13として公開させていただきました。
・server.writeのサイズがsint16になってしまっていたのをuint32_tにしました。
・jpegエンコードで失敗することがあるのを改善しました。
・RTCでhourが変な値になるのを修正し、またうるう年にも対応しました。
これでおおよそdigipontaさんのサンプルも問題なく動くと思います。多くのご支援をいただきありがとうございました。
Okamiyaさん
SPI.h にあるクラス「SPISettings」の変数「spcmd」の初期値として187行目に
spcmd = 0x070d; // default value
が追加されましたが,b3-b2の
BRDV(ビットレート分周設定ビット)が8分周となり非常に遅いです.
分周無しの
spcmd = 0x0700;
ではまずいのでしょうか?
KAEDE と SAKURA 両方
SD.cpp のbegin で SPI のクロックを SPI_HALF_SPEED にしているが,
SPI_FULL_SPEED にしていない?
matsuuraさん、ご指摘ありがとうございます。SPCMDの件、おっしゃるとおりです。前回の未初期化問題で、マニュアルに記載のリセット後初期値をそのまま入れていました。SDへのアクセスは(SPCMDを修正後は)、3MHzで動かしています。48MHzの16分周ですが、SPI_HALF_SPEEDだと本来は4MHzで設定されるプログラムですが、実際には12分周がないため、それ以下となる16分周が設定されます。
SPCMD0のCPHAも0が良いようですね.
SDカードは初期化時は低いクロックを使用し,カード認識後に高速クロックに切り替えて使用します.SPI_FULL_SPEEDだと最大速度の25MHzになります.
実際は最初から高速でも問題ないらしいですが.
elm-chan.org/.../mmc.html
画像ファイルの読み書きやWAVファイル再生では早い方が嬉しいです.
2件ともSAKURA,KAEDEの両方です.
昨日SPCMDを0x0700を初期値とするライブラリにしてSAKURA/KAEDE共にアップデートさせていただきました。
確かに最大速度は25MHzですので、SAKURA/KAEDEは動作確認上問題なさそうならば48MHzの2分周の24MHzで動かしてもいいかもしれません。
もともとArduinoライブラリから転用して、上位層はほとんど手を付けてないのでHALFの設定になってはいますが、折角の高性能CPUですからね。
>動作確認上問題なさそうならば
私の所ではFULLの24MHzで48kHzのWAVが再生出来ているので良さそうですが,biginの引数で使いたい周波数に設定出来るといいですね.
GR-KAEDE_Sketch_V1.17.zip の gr_common/core/pins_arduino.h の 331行目、
331: _offset(PORT5), /* PIN_IO48(PJ5) */
は
331: _offset(PORTJ), /* PIN_IO48(PJ5) */
の間違いでは?