チョコです。
やっと、RL78/G23-64PFPBのArduinoIDE環境を使ってみました。
RL78/G14FPBのサンプル・コードをRL78/G23-64PFPBのArduinoIDE環境に移植したり、MultiFuncシールドを接続して動かしてみました。
本体は、サンプルプログラム等に投稿してあります。アップしたのは、以下の3つです。
チョコさん
シェルティです、こんにちは。
今回RL78/G23用のArduinoライブラリ開発を担当しました。使っていただき感謝いたします。
Arduino IDEでのコンパイルが遅い件(初回3分くらいかかる)は改善していきたいと考えています。
現在、さらに機能拡張中です。RYZ014Aというセルラーモジュールを使ってインターネット通信機能を付加したり、SDカードにファイルをR/Wしたり、CPUを低消費モードに移行したりするAPIの追加を考えています。
以上です
シェルティさん、おはようございます。
ArduinoのAPI関数LiquidCrystal()を使おうとして、サンプルで示された4ビット幅での設定を行い、例に示されていたスケッチを作成したのですが、全く表示できませんでした。
そこで、「LCDがケーブルも含めて正常か」を、以前作成していたRL78/G10で駆動するボードで確認しました。
このボードは、RSKRL78G13で使っているのと同じような7×2のピンヘッダ用に作成していたものに今回用のシングルインラインのヘッダを追加したものです。RL78/G23-64PFPBの代わりにこのヘッダに接続して表示を確認しました。
以下のように正常に表示できることを確認しました。
さらに、オシロでE信号とRS信号をシングルトリガで波形確認したのですが、トリガされませんでした。
RL78/G23-064PFPBも最近追加購入したものでも確認しましたが同様の結果でした。
このときに気が付いたのですが、RL78/G23-064PFPBを交換すると、シリアルポートの番号が変わるようです。
ところで、LiquidCrystal()関数は組み込まれているのでしょうか?このAPIがあると楽なんですが。
以上
こんにちは、シェルティです。
ご連絡ありがとうございます。LiquidCrystal()はまだ評価済APIリストにないですね。
RL78用のArduinoライブラリ内部で実装が空関数とかになっているかもしれません。
https://github.com/renesas/Arduino/wiki/API%E3%83%AA%E3%82%B9%E3%83%88
画面表示は、チョコさんが使っている16×2行のキャラクタLCDと、SPIかIICで繋ぐ128x64dotのOLEDディスプレイがよくArduino界隈で使われていると思うので、これらが使えるようにLiquidCrystal()等を整備できればと思います。
https://www.amazon.co.jp/EasyWordMall-OLED%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-0-96%E3%82%A4%E3%83%B3%E3%83%81-%E3%82%A4%E3%82%A8%E3%83%AD%E3%83%BC51%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A912864-Arduino%E7%94%A8/dp/B017M15MNE/ref=asc_df_B017M15MNE/?tag=jpgo-22&linkCode=df0&hvadid=259694934430&hvpos=&hvnetw=g&hvrand=9096820174045136069&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009294&hvtargid=pla-458466469581&psc=1
少し開発チームと相談して今後の計画を持ってまいります。
シェルティさん、早速のリプライ有難うございます。
>RL78用のArduinoライブラリ内部で実装が空関数とかになっているかもしれません。
そうですか。RL78/G10からLCDのライブラリを移植してみようかと思います。
7セグLEDやLCDはセンサー等の測定結果の表示に使う予定なので、最初に作成しています。
今回は4ビット幅で直接制御し、その後I2C対応(そうすると、ArduinoIDEのAPIはないので、新規作成)予定です。
これまで、ベアメタルでのプログラムをやっていたので、Arduinoは少し不便かなと思っています。ハードを直接いじることはできますかね。特にタイマ系で使用可能なリソースは何なのかを知りたいです。
コメントありがとうございます。
>>これまで、ベアメタルでのプログラムをやっていたので、Arduinoは少し不便かなと思っています。ハードを直接いじることはできますかね。特にタイマ系で使用可能なリソースは何なのかを知りたいです。
はい、可能です。Arduinoライブラリをe2 studioに含めた形でスマートコンフィグレータでタイマや他のペリフェラルを再設定できる環境を追々以下に解説記事を増やしていきたいと考えています。
https://github.com/renesas/Arduino/wiki/%E3%83%9B%E3%83%BC%E3%83%A0#arduino%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%86%85%E9%83%A8%E3%82%92%E8%A9%B3%E7%B4%B0%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88
Arduinoはマイコン導入時の勉強には最適ですが、使いこなしてくると逆に不便なところが出てきます。以下は設計資料からの抜粋ですが、RL78へのArduino適用→量産製品開発について以下のような導線を考えています。
シェルティさん、情報有難うご合います。
>Arduinoライブラリをe2 studioに含めた形でスマートコンフィグレータでタイマや他のペリフェラルを再設定できる環境を追々以下に解説記事を増やしていきたいと考えています。
完成したら、参考にさせていただきます。
>Arduinoはマイコン導入時の勉強には最適ですが、使いこなしてくると逆に不便なところが出てきます。
それでも、ArduinoのAPIは結構簡単にI2CやLCDを制御できるので、そこらを少しモディファイしておけば、マルチタスク環境でも結構使いまわしができるかと考えています。
現状のコード生成には不満を感じているので、ArduinoのAPIには期待しています。
コメントありがとうございます。更新ができましたらまた報告いたします。
>>そこらを少しモディファイしておけば、マルチタスク環境でも結構使いまわしができるかと考えています。
おっしゃる通りと思います。↑で貼ったフローだとシングルタスク環境→Arduino環境・マルチタスク環境→一般の組み込み製品のような表現で丸め込んでしまっていてあまり正確な表現ではないですね。貼ったあとに「ちょっと失敗したなあ」と思っていて、少し補正の文言を考えていたところです。
実際、いまRYZ014AというセルラーモジュールをArduino APIで制御する手段を開発中ですが、通信系のソフトウェアはRTOSベースで受信部分を「受信割込みで即時に受信バッファにデータを詰め込んで受信タスクを起動→受信タスクで適切なタイミングでデータ処理」とするのがセオリーでして、次の版からArduinoライブラリにFreeRTOSカーネルを組み込む格好になります。そうするとArduino環境でも普通にFreeRTOSのAPIを叩いてマルチにタスクを生成・実行できます。とするとArduino環境を使った際のユーザ要求は「詳細なデバッグがしたい」が残ってくるのだと思います。
ともあれ引き続きいろいろ意見交換させてください。使いやすい環境づくりを目指してまいります。
RL78/G10からLCDのライブラリをLiquidCrystal()関数の簡易版としてRL78/G14-FPBのアプリケーションプログラムに組み込んでみました。
今回は、まじめなサンプルコードなので、遊びとは言えないかもしれません。
今回は、RL78G14-FPBからRL78G23-64PFPBのArduino IDE環境にプログラムを移植して動作確認を行いました。
LCD部分をライブラリにしたかったのですが、方法が分からないので、力任せにコピペしました。
3か所ほど少し修正しただけで、動作しています。
LCDが使えるようになったので、少し使い道が広くなるかと思います。
とりあえず、「サンプルプロフラム等」に投稿してありますので、興味がある方は覗いてみてください。
ありがとうございます。ルネサスでもRL78G23-64PFPB向けにLiquidCrystal()の作りこみを開始しました。あと128x64ドットのOLED表示機もサポートしようと考えています。投稿いただいたデータを開発チームにも見てもらおうと思います。
LCD表示器の制御方法.pdf
レス有難うございます。
元が、RL78/G10で作成したライブラリをRL78G14-FPBに移植したものをRL78G23-64PFPBに移植したものなので、最後は力任せでした。
RL78G14-FPBの方が見やすいかと思います。また、以前検討したときにまとめた資料(PDF)を添付しておきます。
CS+環境では、ArduinoのAPIのような使い方が難しいので、そこらは対応出来ていません(RL78G14-FPBでは、"."を
構造体で対応しているようですが、今回はそこまではやっていません)。
必要なら、16文字2行のLCDのボードを提供可能です。
LCD_LIBの部分を本来のスケッチとは分けて使いやすくしました。
具体的には、下の画面イメージに示すように、LCD_LIBタブにLCDのライブラリを独立させました。
このように分離した状態でコンパイルして動作させたのが下の写真です。
これまでの写真のボードと異なり、8ビットI/Fでも使えるようになっていますが、
これまでと同様、今回は4ビットI/Fで使っています。
>>必要なら、16文字2行のLCDのボードを提供可能です。
ご配慮感謝いたします。こちら、弊社でも調達しましたので提供は今のところ不要ですね。
またいろいろ実装面について情報共有、相談などさせてください。
最後に、手持ちの8文字×2行のLCDを動かしてみることにしました。
上側がRL78G23-64PFPBで、右がHDC1080センサー、左下が8文字×2行のLCDです。これは、バックライトが点灯していますが、バックライトなしのものもありますが、非常に見難いです。
8文字に収めるために、表示を簡素化してあります。
LCD実装するボードを下に示します。
左側がLCDを指すためのソケットです(右は高さを合わせるためのダミーです)。
左のソケットの下あたりにあるのが、コントラスト調整用の半固定抵抗です。ほぼグランドに近いところに設定されています。出来れば、ライトアングルのものがよかったのですが、適当なものがなかったので、LCDを付けたり外したりして、適当に調整しています。
上側が信号の引き出しを行っているピンヘッダ(ライトアングル)です。
これは配線面です。ここで、注意するのは、GNDとVDDの関係です。使用した8文字×2行のLCDは16文字のLCDとは、逆になっています。この写真では、黒いGND線は分かりやすいのですが、VDDは赤いケーブルがなくなってしまっていたので青い線を使ったので、かすかにしか見えないですね。もっと分かりにくいグリーンの配線が制御信号、白い線がデータ配線です。今回はE信号の抵抗でのプルダウンは省略しました。また、このLCDでは、バックライトはジャンパと抵抗をLCDボードに実装することで、電源をオンすれば、バックライトが点灯するようになっています。
ここまでで使用したLCDは5V動作です。3.3Vでは動作しないので、3.3Vで動作させたい場合には、3.3V動作のLCDを準備してください。なお、3.3VのLCDは4.5Vまでしか動作範囲にはないので注意してください。
これで、HD44780 I/FでのLCDの制御はおしまいにします。
RL78G23-64PFPBで何をやろうか迷ったのですが、結局MultiFunctionシールドで残っていた半固定抵抗器を使ってみます。
半固定抵抗器を単純に使うだけでは、あまり面白くないので、A/D変換して得られた値の4回分の移動平均を7セグLEDに表示します。
表示は頭に0を追加する(0パディング)か0を表示しない(0サプレス)かを切り替えられるようになっています。
別のスケッチに手を加えて名前を変えて保存して、コンパイルしたところ、以下のエラーが出てしまいました。
この状態で、Arduino IDEを一旦閉じて、再度起動すると、なにも変更しないでもコンパイルが通ってしまいます。
なぜかはわかりませんが、他から持ってきた場合には、Arduino IDEを一度閉じれば何とかなるようです。
RL78G23-64PFPBで使用したMultiFunctionシールドをRL78G14-FPBに接続してみました。
RL78G14-FPBのAN6115(アナログ入出力(Arduino API))に手を加えて作成しました。
その中でArduinoAPI部分にも手を加える必要があったので、コード生成からやり直したのですが、
KatoNaganoさんの以下のスレッドと同じと思われる現象が確認できました。
このプロジェクトでは、コード生成を行うと、確実に発生するようです。
実行結果をいかに示します。
本件Arduinoライブラリの開発チームに現象を診てもらうよう依頼しました。進展がありましたらまた書き込みます。