漢字フォントROM(GT20L16J1Y)
先日、スイッチサイエンスさんから届いた漢字フォントROM(GT20L16J1Y)を試食してみました。
このチップは、SPIでアドレスを指定すると漢字の16x16ビットマップ(32バイト)を返してくれます。
液晶や、ドットLCDにこれらを表示することが可能になります。
※仕様書には、16x15とあり1ライン分は区切りラインを意味しますが、まあ16x16でいいでしょう。
液晶や、ドットLCDにこれらを表示することが可能になります。
※仕様書には、16x15とあり1ライン分は区切りラインを意味しますが、まあ16x16でいいでしょう。
直ぐに使う予定はありませんが、とりあえず動作させることができたので次回使うときに忘れないように備忘録としてメモしておくことにします。
■データシート
いろんなデータシートがあり、情報が不足している簡易版だったりするので、いろいろ探していたららフルで情報がのっているPDFを見つけることができました。
ここ(PDF) にありました。
使うときは、目を通して置くのが良いでしょう。(中文ですが・・・)
いろんなデータシートがあり、情報が不足している簡易版だったりするので、いろいろ探していたららフルで情報がのっているPDFを見つけることができました。
ここ(PDF) にありました。
使うときは、目を通して置くのが良いでしょう。(中文ですが・・・)
■ハードウェア
このチップは、3.3VのSPI通信します。手元にあるGR-KURUMIを利用してアクセスすることにしました。
丁度、3.3VだしSPIもこなれた感じなのでブレッドボードで結線しました。
特に外付け部品はなく、ダイレクトに配線しています。
このチップは、3.3VのSPI通信します。手元にあるGR-KURUMIを利用してアクセスすることにしました。
丁度、3.3VだしSPIもこなれた感じなのでブレッドボードで結線しました。
特に外付け部品はなく、ダイレクトに配線しています。
※写真と線の色は異なります。
■プログラム
変換した24bitアドレスを以下のような制御で送信し、32BYTEリードすればデータを読み込むことができます。
★プログラム的には以下な感じです。
uint32_t Address = get_font_rom_addr(code);
// SSをLOWにする
digitalWrite(PIN_SPI_SS, LOW);
// アドレスを送信する。
SPI.transfer(0x03);
SPI.transfer(Address >> 16 & 0xff);
SPI.transfer(Address >> 8 & 0xff);
SPI.transfer(Address & 0xff);
// ダミーデータを送ってデータを32バイト分読み込む
for(int i=0; i<32; i++)
{
// SSをHIにする
digitalWrite(PIN_SPI_SS, HIGH);
★あと、GR-KURUMIの場合、SPIの初期設定は以下になります。// SSをLOWにする
digitalWrite(PIN_SPI_SS, LOW);
// アドレスを送信する。
SPI.transfer(0x03);
SPI.transfer(Address >> 16 & 0xff);
SPI.transfer(Address >> 8 & 0xff);
SPI.transfer(Address & 0xff);
// ダミーデータを送ってデータを32バイト分読み込む
for(int i=0; i<32; i++)
{
data[i]=SPI.transfer(0x00);
}// SSをHIにする
digitalWrite(PIN_SPI_SS, HIGH);
// SPI通信設定
SPI.begin();
SPI.setBitOrder(MSBFIRST); // MSB First
SPI.setClockDivider(SPI_CLOCK_DIV2); // DIV2 8MHz 最大
SPI.setDataMode(SPI_MODE3); // アイドル時のクロックがHigh、立ち下がりでサンプリング
※全部貼ってもいいのですが、mbedサンプル参考にしているので全部は止めておきますね。SPI.begin();
SPI.setBitOrder(MSBFIRST); // MSB First
SPI.setClockDivider(SPI_CLOCK_DIV2); // DIV2 8MHz 最大
SPI.setDataMode(SPI_MODE3); // アイドル時のクロックがHigh、立ち下がりでサンプリング
■表示
あとはご自由にお好きなディスプレイに表示すればOK.
とりあえず、コンソールで出力してみました。
とりあえず、コンソールで出力してみました。
液晶、LCDだけでなく、家にあるサーマルプリンタに出力しても良いと思ってます。
■追記(2014/2/9 11:00)
もう一点注意箇所がありました。
もう一点注意箇所がありました。
受信した32BYTEのデータの表示データ構造が以下のようになっています。
※データシートには記載がありますが・・・
なので、受信したビットマップをシーケンシャルに表示しても何のデータか良く分からない可能性があります。
表示するデバイスに応じてビット列を変換する必要があると思います。
私はこれが一番はまったかも。
※データシートには記載がありますが・・・
なので、受信したビットマップをシーケンシャルに表示しても何のデータか良く分からない可能性があります。
表示するデバイスに応じてビット列を変換する必要があると思います。
私はこれが一番はまったかも。