Sim's blog

電子工作はじめてみました

PSoC3でキャラクタLCD

2009-10-15 01:10:41 | PSoC
PSoC CreatorでLチカ(2)の続きになります。

デバッグとかにも使えるし、とりあえずキャラクタLCDを使ってみることにしました。

PSoC3のI/OはVddioというI/O専用の電圧まで扱うことができます。ただし、VddioはVdda以下にしないといけません。PSoC3 FTKでは、VddioとVddaは同じソースから電力が供給されるようになっています(回路図はcy8ckit003userguide.pdfに載っています)。

PSoC FTKに2つあるジャンパーJ1とJ4を両方1-2間につなぐことで5Vを使えるようになります。デフォルトは2-3間になっていてレギュレータで作った3.3Vになっています。正確には5Vの方はUSBのVBUSとの間にショットキーバリアダイオードが挟まっているのでVfの分だけ電圧降下しています。測ってみると4.8Vくらいでした。

なんで動作電圧やI/O電圧のことを気にしているかというと、キャラクタLCDを3.3Vで動作させるのは面倒なので、5Vで動かしたかったからです。

キャラクタLCDは秋月の超小型LCDキャラクタディスプレイモジュール(通販コード P-01675)です。
コントラスト調整は、迷走の果てさんの「LCDのコントラスト調整について2」を参考にして、抵抗一本(2kΩ、写真の赤黒赤)で済ませています。
電源電圧が4.86V、2kΩの両端が0.472Vだったので、抵抗には0.236mA流れています。LCD内部の抵抗は18.6kΩ(=4.86/0.236-2k)くらいということになります。

PSoC Creatorですが、Character LCDモジュールだけを使います。

このモジュールは入出力がありませんが、リソースの設定で、どのピンを出力にするのかを決めます。多少制約があって、7個連続したポートを使わないといけないようです。P0-0~P0-6みたいな感じです。PSoC3 FTKは裏に端子が出ていてP0が7-0全て使えます。P0-6:0とP0-7:1はどちらでも使えますが、前の方が多少効率がいいそうです。

ダブルクリックして設定の画面にします。

名前をLCD1に変更したのと、ユーザー定義フォントを有効にしました。右側はクリックすると絵を作れます。自動で読み込んでくれたりする機能があるかもしれないと思って、いくつか試してみましたが、そのような機能はないみたいでした。

書いたコードです。
#include <device.h>

// ..... 00
// o.o.. 14
// .o... 08
// ..o.. 04
// ...o. 02
// ....o 01
const uint8 negi[] = {
    0x00, 0x14, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, // 8byte/char
};

void main()
{
    LCD1_Start();
    LCD1_LoadCustomFonts(negi);
    LCD1_Position(0, 0);
    LCD1_PrintString("Hello, PSoC!");
    LCD1_Position(1, 13);
    LCD1_PutChar(0xdf); // ゜
    LCD1_PutChar('o');
    LCD1_PutChar(0xdf); // ゜
    for(;;)
    {
        LCD1_Position(1, 12);
        LCD1_PutChar(0x00);
        CyDelay(200);
        LCD1_Position(1, 12);
        LCD1_PutChar('_');
        CyDelay(200);
    }
}

使いそうな関数はほとんど用意されています。フォントの設定は1文字8バイトで8文字分設定できるみたいです。今回はズルをして1文字分しか設定していません。

秋月液晶のバックライトですが、100Ωをつないだところ、抵抗の端子間の電圧は0.96Vでした。全体が4.86Vなので、Vfは3.9Vということになります。また流れている電流は9.6mAです。結構明るいわりに、意外と少ない感じです。