- 締切済み
ArduinoのSPIで10bit送信
ArduinoのSPI機能を用いてHD44780互換ICを搭載したLCDを操作したいと考えています. LCDのデータシートには RS | RW | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 の形式でデータを送信するように記載がありました. ArduinoのSPI.transferは8bit送信固定ですが、10bitのみ送信することは可能でしょうか. それともSPI.transferを2回実行して,不要な6bitには0を書き込めば問題なくLCDを操作できるのでしょうか? お分かりになられる方がいらっしゃいましたら何卒ご教授宜しく御願い致します.
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- tadys
- ベストアンサー率40% (856/2135)
No.1です。改めて補足の資料を見てみました。 確かにSPIでの接続が出来るように書いてあります。 SPIでの接続方法はApplication Noteの8ページに書いてあります。 SPIでの通信方法は29ページに書いてあります。 これによるとデータを10ビット送る前にCSB端子をLOWにして10ビットを送った後にCSB端子をHIGHにする必要が有ります。 ArduinoのSPIは8ビット固定なので10ビットだけを送るのはできません。 問題は16ビットを送った時のLCDの動作です。 Application Noteの29ページのRAM Data Continuous Writeのタイミングを見るとCSBがHIGHからLOWに変化したときの次の2ビットがRS、R/Wという特別の意味を持つようです。 16ビットでデータを送ったときはRS、R/W+データ8ビット+データ6ビットとなってうまくいかないような気がします。 もしそうであれば、RS、R/Wの2ビットはポートを直接操作して出力した後にSPIで8ビット出力するか、10ビットすべてをポートを直接操作して出力するかになるでしょう。
- koujikuu
- ベストアンサー率43% (429/993)
No.2 補足 データシート見ました 確かにSPIモードがありますが、独自仕様のため ハードウェアSPI 転送は使えません 直接ポートを操作して、10ビットシリアルデータを出力する必要があります AVR 用 サンプルプログラム でも直接ポート操作をしています http://dokuwiki.ehajo.de/artikel:displays:weh001602_spi_democode また74HC595を追加すると、LiquidCrystal_SR3W ライブラリが使えるのでSPI 3本でコントロール可能です http://isa.asablo.jp/blog/2014/10/09/7454355
- tadys
- ベストアンサー率40% (856/2135)
補足に有った資料を見た限りではSPIで接続することはできません。 データシートの第6頁のブロック図にあるようにマイコンとは11本の線で接続するのが基本です。 ただし、HD44780と互換であればDB0~DB3を使わずに済む方法もあります。 「Arduino HD44780」で検索すれば色々出てきます。 例えば: http://blog.nanapi.co.jp/tech/2014/11/20/iot_workshop_01/ http://www.techand.jp/Digital/Arduino/Char_LCD.html
- tadys
- ベストアンサー率40% (856/2135)
>従来のパラレルに加えてSPIでも制御できるようです. そういうことでしたら、LCDの型名やデータシートを明らかにしてください。 情報を出し惜しみすればお互いに無駄な手間をかけることになります。
- koujikuu
- ベストアンサー率43% (429/993)
LCD E 信号が無いので、SPI SS を LCD E に接続しデータ送信していると思われます 恐らくシフトレジスタでシリアル->パラレル変換しSS信号でLCDにデータライトしています (ライトのみリード設定禁止) シフトレジスタの場合、後から送られた10ビットが有効になるので、 RS,RW,DB7,DB6,DB5,DB4,DB3,DB2 ,DB1,DB0, 0, 0, 0, 0, 0, 0 先にダミーデータ6ビットを付加する形になります LCD型番、回路図があれば、もっと正確な回答がつくと思います。
- tadys
- ベストアンサー率40% (856/2135)
HD44780はパラレル通信なのでシリアル通信のSPIでつなげることはできません。 シリアル通信のLCD表示器もありますが接続がI2Cなので初心者には難しいでしょう。 http://akizukidenshi.com/catalog/g/gP-05693/ ArduinoとHD44780の接続はこちらを参考にしてください。 http://www.techand.jp/Digital/Arduino/Char_LCD.html
お礼
ご回答ありがとうございます. HD44780に互換性がある新しいICのようで、従来のパラレルに加えてSPIでも制御できるようです.H44780のパラレル通信操作は以前にPICを用いて実施したことがあり、理解できております. 今回Arduinoを初めて使用しましたが、SPI.Transferで送信できるbit数(8bit)とHD44780互換ICのコマンドのbit数(10bit)が異なるため、どのように制御すれば良いのかわからずに、ご質問した次第です.
お礼
ご回答ありがとうございます. 情報不足で申し訳ありません. https://store.comet.bg/en/Catalogue/Product/45090/ 上記サイトの製品になります. 宜しく御願い致します.