Spresense SDK
環境でI2C接続をしたキャラクターLCDに文字を表示をさせようとしていますが、プログラミングの資料や前例が見つかりません。ソースコードそのものの例がなくとも、せめて何を呼び出せばよいかが分かればよいのですが、どなたかご存知でしょうか？

10月29日追記  
arduinoでのLCD表示例はすでに見つけているのですが、arduinoとSupresense
SDKとの変換で詰まってしまっています(SDKのライブラリを探して右往左往している段階)。同じく秋月電子で購入した温度センサーLMT01LPGを使用して温度を測定しようとしたのですが、arduinoだとGPIO入力でのチャタリングフィルタの解除方法が分からず動作するものができなかったのでSDKでプログラムしています(SDKでの温度取得はすでに成功しています)。この手のマイコンボードのプログラミング自体初めてでarduino自体正直よくわかっていません。申し訳ありません。

10月30日追記  
SDK環境の場合I2Cポートの選択や設定はソースコード上ではなく「カーネルコンフィグ」、「SDKコンフィグ」でソースファイルとは別に行うという事とI2C接続でのキャラクターLCDドライバーとして「pcf8574_lcd_backpack.h」が用意されていることがわかりました。また、「pcf8574_lcd_backpack.txt」にある程度使い方が書いてありました。しかし、細かい使い方がまだ理解できていません。使ったことのある方アドバイス願えますでしょうか？

11月10日追記  
LCDドライバー「pcf8574_lcd_backpack.h」を使用しようとするとカーネルパニックが発生し動作が停止します。原因を調べていくうちにデバイスパス(例「/dev/lcd0」)が生成できていないことが判明しました。どうもlcdデバイスを初期化する必要があるようですが、必要なコマンドがわかりません。どなたかご存知でしょうか？今の段階では  
int board_i2cdev_initialize(void);  
FAR struct lcd_dev_s *board_lcd_getdev(int lcddev);  
を使用すればよいのか？という認識ですが実際の使い方が理解できていません。
CC BY-SA 4.0
2019-10-28T01:02:49.467
60028
2020-02-04T06:02:10.230
2019-11-09T15:28:53.363
36276
36276
question
spresense
Spresense SDK環境でのキャラクターLCD表示
[SpresenseでLチカから始める (4) Wireライブラリ
キャラクタLCD](https://www.denshi.club/cookbook/arduino/spresense/spresensel-4-wire-i2clcd.html)
の記事が参考になるのでは？

時間に余裕がある時に、"SpresenseでLチカから始める"の連載記事を(1)から順に読んでいくと、いろいろな知識が身についてSpresenseでのプログラミングスキルを上げられると思いますよ。
CC BY-SA 4.0
2019-10-30T02:39:18.077
60103
2019-10-30T02:39:18.077
217
60028
answer
私も秋月のACM0802C-NLW-BBW-IICを持っていたので、  
SpresenseでLCD表示をどうすれば良いか、調べてみました。

「pcf8574_lcd_backpack.h」は、該当のドライバでは無いようですね。。

自分で作ってみたものがあるので、  
githubにアップしてみました。

<https://github.com/tttk-prj/spresense.git>

このリポジトりの中の、  
examples/lcd_test  
というフォルダにLCDのドライバとそれを使ったコードを入れてあります。

ビルドの仕方は、このリポジトリをクローンしたら、

```

     $ cd spresense/sdk/
     $ ./tools/config.py -k release
     $ make buildkernel
     $ ./tools/config.py -d ../examples/lcd_test lcd_test
     $ make
     $ ./tools/flash.sh -c /dev/ttyUSB0 -b 1152000 nuttx.spk
    
```

として、nuttx.spkをデバイスに書き込みます。  
（ポイントは、configで"-d"オプションを使って、examples/lcd_testの中に入れてある、lcd_test-
defconfigを指定しているところ）

そのあと、ターミナルソフトでspresenseのメインボードのUSBポートと繋いで、

```

    nsh> lcd_test
    
```

でLCDが表示されます。（のはず。。）

HWの接続は、

ACM0802C-NLW-BBW-IIC側の10ピンのピン番号をACM_01 〜 ACM_10として、  
Spresense側は、<https://developer.sony.com/develop/spresense/docs/introduction_ja.html>
に記載されているピン名とすると、

```

    ACM_01(Vss)  <->  GND
    ACM_02(Vdd)  <->  VOUT
    ACM_03(V0 )  <->  GND
    ACM_04(SA1)  <->  D09(PWM2)
    ACM_05(SA0)  <->  D08(SPI2_MISO)
    ACM_06(SDA)  <->  D14(I2C0_BDT)
    ACM_07(SCL)  <->  D15(I2C0_BCK)
    ACM_08(NC )  <->  NC
    ACM_09(BL+)  <->  EXT_VDD(Mainボード)
    ACM_10(BL-)  <->  GND
    
```

です。  
SA0とSA1は、D０８、D０９に接続して、プログラム上でLOWにして、デバイスアドレスを0x78にしてます。

ところで、  
SpresenseとこのLCDディスプレイは相性が悪いようですね。。

[https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_拡張基板でのデジタル信号uartspipwmgpio使用上の注意](https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_%E6%8B%A1%E5%BC%B5%E5%9F%BA%E6%9D%BF%E3%81%A7%E3%81%AE%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E4%BF%A1%E5%8F%B7uartspipwmgpio%E4%BD%BF%E7%94%A8%E4%B8%8A%E3%81%AE%E6%B3%A8%E6%84%8F)

この注意点に記載されてる現象にハマリリました。。。

I2CのACKフェーズでACK（LOW)を認識してくれないようです。。  
解決するには、外付けにバッファを付けるような指示が書いてありましたが、  
持っていないのと仮に持っていても面倒だったので、  
リポジトリに上げたコードでは、ソフトウェアでI2Cをエミュレートして、  
かつ、ACKフェーズは無視して、コマンドを強引に送ることで表示できるようにしました。。。

一応、ハードウェアのI2Cマスタも使えるよう、コードは入れています。  
ハードウェアを有効にするには、一旦ビルドした後に、  
spresense/sdkフォルダで、

```

     $ make menuconfig
    
```

で、  
Examples -> Test driver of ACM0802C-NLW-BBW-IIC  
の中の、  
「Use Spresense HW IIC peripheral」  
を有効にすれば、出来るはず、です。。

以上、参考になれば良いですが。。。
CC BY-SA 4.0
2019-12-31T17:38:16.253
61918
2019-12-31T17:38:16.253
34651
60028
answer