Raspberry PiとGR SAKURAでキャラクターLCD (1)
Raspberry PiをDHCPで使うと振られたIPアドレスがわからなくて難儀することあるね、と知り合いに言ったら「これにIP出したら」と秋月の20x4キャラクターLCDを分けてくれました。
調べたら5Vデバイスということで、3.3VのRaspberry Piとは直接つなげません。レベル変換するのが普通なのでしょうが、買ったままあまりいじっていなかったGR SAKURAが手元にありましたので、そちらをロジックのレベル変換に使って表示させてみました。
GR SAKURA自体は3.3Vなのですが、5VトレランスのGPIOポートがいくつかあるので、そちらにつなぐような格好になります。Rapberry PiとSAKURAボードはUARTで接続しました。
GR SAKURAのスケッチは以下の通りです。
/*GR-SAKURA Sketch Template Version: V1.06*/ #include <rxduino.h> #include <LiquidCrystal.h> #include <string> #define INTERVAL 100 LiquidCrystal lcd(4, 5, 6, 7, 8, 9); int swflag = 0; int numread = 0; void setup() { pinMode(PIN_LED0,OUTPUT); pinMode(PIN_LED1,OUTPUT); pinMode(PIN_LED2,OUTPUT); pinMode(PIN_LED3,OUTPUT); pinMode(PIN_SW, INPUT); pinMode(2, INPUT); digitalWrite(PIN_LED0, 0); digitalWrite(PIN_LED1, 0); digitalWrite(PIN_LED2, 0); digitalWrite(PIN_LED3, 0); Serial.begin(38400, SCI_SCI0P2x); lcd.begin(20,4); lcd.clear(); lcd.home(); lcd.setCursor(0,0); // lcd.print("hello\n"); delay(INTERVAL); digitalWrite(PIN_LED0, 1); digitalWrite(PIN_LED1, 1); digitalWrite(PIN_LED2, 1); digitalWrite(PIN_LED3, 1); } void loop() { int c = 0; /* reset */ if(digitalRead(2) == HIGH){ if( swflag == 0 ){ system_reboot(REBOOT_USERAPP); swflag = 1; } } else{ swflag = 0; } /* UART -> LCD */ while(Serial.available() > 0){ c = Serial.read(); if(std::isprint(c)){ lcd.setCursor(numread,0); lcd.write(c); numread ++; } } }
Raspberry PiをリセットするとGR SAKURAが無反応になることがあったので、GPIO2にリセットを仕込んでRasperry Piの方から起動後にSAKURAをリセットしてからUART送信を実行するようにしています。(上のスケッチだとRapsberry Piが起動してGPIOをOUTに設定するまでSAKURAがリセットを繰り返します。イマイチ…)
リセットについて、初めはSAKURAのJ17を接続した上でリセットピンから操作してみたのですが、リセットボタンを押したときと同様のPCからスケッチを転送するモードで起動してしまいうまくいきませんでした。何か方法があるのかもしれませんが…。
Raspberry Pi側はUART送信のために、シリアル経由のログイン機能をつぶして、起動時に自作のプログラムでIPアドレスの文字列を送信しています。そちらは次回に。
Raspberry Piでゆっくり声
知り合いのところに某部材販売サイトからRaspberry Pi入荷のお知らせが届いたと聞きまして、便乗して自分の分も頼んでみました。
手元にDE0で使った音声合成LSIがあったので、とりあえずI2Cでつないでしゃべらせてみることに。
i2cの送信に関しては、検索で出てきたi2c-toolsを使っております。インストールは、下記のサイトの手順に従って行いました。
Raspberry Pi I2C How-To ガイド by @azarashi55
ちょっとはまったのが、
$ sudo i2cdetect 0
これが、現行の基板だと末尾に1を指定するように変わっており、なんで認識されないのだろうと…。わかれば簡単なことでした。ちなみに、音声合成LSIのI2Cアドレスは0x2eのようです。
実際にしゃべらせるときは、i2c-toolsのi2csetコマンドで文字列を送信するのですが、1バイトずつ16進に変換する必要がありまして、シェルスクリプトを書いてみました。
(経験少ないので変なところあるかと思いますが…)
#!/bin/bash send=' -y 1 0x2e 0x00 ' str=$1 slen=${#str} i=1 while [ $i -le $slen ] do ch=`echo $1 | cut -c $i` chex=`perl -e "print unpack(\"H2\", \"$ch\")"` chex="0x${chex} " send="${send}${chex}" i=`expr $i + 1` done send="${send}0x0d i" i2cset ${send}
talk.sh ohayo-.
みたいな感じで実行させると、「おはよう」としゃべります。
DE0買ってみた
少し前の話ですが、DE0というFPGAボードを買っていじってました。
↑こちらの通販で、LCD付きの拡張キットと一緒に購入
FPGAというかハード設計初体験なので、とりあえず書籍の内容をそのまま実行させて遊んだ後、書籍のサンプルをつぎはぎして音声合成LSIをしゃべらせてみました。
PS2キーボードから入力した文字を音声合成LSIに送りつつLCDにも表示するという、少し凝ったもので、FPGAにCPUを構成する機能も使ってみたりして、自己満足感は高かったです。笑
使った音声合成LSIはコレです
↓
秋月の「音声合成LSI ATP3011F1−PU(ゆっくりな女声)
PCにソフトーク入れろ、というのはナシで…。
参考にした書籍:
超入門!FPGAスタータ・キットDE0で始めるVerilog HDL: すぐ始められる!USB対応・書き込み器不要・大容量FPGA搭載! (トライアルシリーズ)
- 作者: 芹井滋喜
- 出版社/メーカー: CQ出版
- 発売日: 2011/07/22
- メディア: 単行本
- 購入: 1人 クリック: 44回
- この商品を含むブログ (15件) を見る
すぐに動き出す!FPGAスタータ・キットDEO HDL応用回路集―液晶表示からSDメモリーカード制御まで…できることがパット広がる (トライアルシリーズ)
- 作者: 芹井滋喜
- 出版社/メーカー: CQ出版
- 発売日: 2013/04/01
- メディア: 単行本
- この商品を含むブログ (3件) を見る
FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?
- 作者: 小林優
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/22
- メディア: 大型本
- 購入: 3人 クリック: 31回
- この商品を含むブログ (19件) を見る
余談ですが、今回DE0をいじってみて、SDRAMやキャラクターLCD等のコントローラがIPという形で用意されており、簡単にCPUに組み込めるのに驚きました。
自分の会社の仕事ではハード屋さんが必要なコントローラやI/Oの数を見積もってCPUを決定するのですが、FPGAならそういうところを自由に決められるわけで、そのうち基板の上にはFPGAが1個あるだけなんて時代になるかもしれないなあとか妄想してしまいました。笑
『はじめる組込みLinux』+H8/3069Fボード
はじめる組込みLinux H8マイコン×uClinuxで学べるマイコン開発の面白さ
- 作者: 米田聡,佐藤嘉則
- 出版社/メーカー: ソフトバンク クリエイティブ
- 発売日: 2007/04/14
- メディア: 大型本
- 購入: 5人 クリック: 119回
- この商品を含むブログ (14件) を見る
AKI−H8/3069FフラッシュマイコンLANボード: 組み立てキット 秋月電子通商 電子部品 ネット通販
ずいぶん前に仕事でLinux使うことになったので、この本と本で取り上げている秋月のH8ボードを買いまして。結局は別のCPUを採用したので開封もせずにしまいこんでたのですよね。
最近になって片付けしてたらでてきたので、本を読みながらボードを組み立ててみました。
社会人になって以来、ずっとファームでやってきてハードはさっぱり……ていうか、はんだ付けもろくにしたことなかったのですが、せっかくなのできちんと始めてみようと考え、はんだごて等の工具一式も購入してがんばってやってみたところ、紆余曲折は多々ありましたが、一応、書籍に載っている内容はほぼ全て網羅することができました。
以下、やってみたこと
・DRAM 4MB増設(このはんだ付けは自信なかったので知り合いにアウトソース…)
・LCD表示
・uClinuxのnfs起動
・uClinuxのCF起動
本に書いてある通りにやっただけなので、完成した今でもわからないことだらけなのですが、電子工作デビュー作にしてはよく動いてくれたなあと。
最後にアドバイスというのもおこがましいのですが一点だけ……本には秋月のボードは小さいからIDE I/Fはユニバーサル基板に実装するようにと書いてあったのですが、最初はケチって秋月のボードに部品を乗せてしまいました。結果、配線がえらいことになってしまいハンダミスが多発しまして、狭いところに部品をのせているので修正もままならず……結局、安定動作してくれませんでした。
泣く泣くユニバーサル基板で作り直してどうにか動いたのですが、これからチャレンジする方はIDE I/Fを載せるなら、絶対ユニバーサル基板で作った方がいいと思いますよ!(ていうか、本に書いてあるんだから普通そうしますね…)
後で
仕事で得た知識を書きたいけど内容がピンポイント過ぎて検索で見つけられてしまう可能性大。ほとぼりが冷めたらメモしておきたい。
syslogのテスト
loggerコマンドを使うとsyslogに任意の内容を送れる
例)
% logger -p kern.info "koreha test desu"
(参考)
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec07/unix_sec02.html
Linuxクロスリファレンス
Linuxクロスリファレンス:
http://lxr.linux.no