記事一覧

ドットマトリックスLED時計の製作③

2009.07.12

今回は、簡単にプログラムの内容を説明します。
まずは、プログラムの最後尾部分。
文字パターンの定義を今回はEEPROMに書き込んでいます。

__EEPROM_DATA(14,17,17,17,17,17,17,14);//0
__EEPROM_DATA(4,12,4,4,4,4,4,14);//1
__EEPROM_DATA(14,17,17,2,4,8,16,31);//2
__EEPROM_DATA(14,17,1,1,14,1,17,14);//3

7セグLEDは1桁のパターン定義は1バイトで済みましたが、今回は8x8ドット分の定義なので、1文字当たり8バイト必要になります。RAMだけでは足りなくなりそうなので、今回はEEPROMへ書き込んだということです。
このパターンを作成するのには、MikroBasic等に付属してくる「Custom LCD Character」というツールが使いやすいのですが、このツールで作成できるのは5x8ドット分までです。

ちなみに、8x8ドット分のソースは、

__EEPROM_DATA(228, 191, 164, 255, 162, 191, 226, 10); //時 (24)
__EEPROM_DATA(24, 36, 66, 129, 126, 18, 18, 38); //分 (25)
__EEPROM_DATA(224, 64, 64, 229, 2, 229, 32, 224); //エコoff(26)
__EEPROM_DATA(224, 64, 70, 233, 9, 230, 32, 224); //エコon (27)
__EEPROM_DATA(4, 136, 240, 167, 32, 72, 18, 62); //Game (28)

となっています。
このパターンを読み込んでいるのが、make_dot_patarn()関数になります。

void make_dot_patarn() {// ドットパターン作成
unsigned short r;

make_dot_doing = 1;// 割込み禁止フラグ
if (disp_ch == disp_len)// 1.2バイト目のINDEX
disp_next = 0;
else
disp_next = disp_ch + 1;
for (r = 0; r < MAX_ROW; r++) {
ee_adr = dgt[disp_ch] * EEP_BLOCK + r;// 1文字目r行目のアドレス
ee_dat = eeprom_read(ee_adr);// EEPROMから読む
ee_dat = (ee_dat << chr_sft);// 左に詰める
dat_up = (ee_dat << disp_bt);// スクロール分シフト
if (disp_len > 0) {// 2文字目あり
ee_adr = dgt[disp_next] * EEP_BLOCK + r;
ee_dat = eeprom_read(ee_adr);
ee_dat = (ee_dat << chr_sft);
dat_dn = ee_dat >> (chr_width - disp_bt);
} else {
dat_dn = 0;
}
rom_dat[r] = (unsigned char) dat_up | dat_dn;// 合成
}


スクロールする場合、2文字分のパターンを読みこんでいます。
ee_dat = eeprom_read(ee_adr);
まず、上位1文字目を変数に入れ、
ee_dat = (ee_dat << chr_sft);
空白分を左へシフト。(5x8パターンの場合、4ドット分シフトした状態で左詰となる)
dat_up = (ee_dat << disp_bt);
最後に、文字全体のスクロールとしてさらに左シフトします。

タグ:PIC 16F648A ドットマトリックス

ドットマトリックスLED時計の製作②

2009.07.11

とりあえずソースを公開します
こちらから、ダウンロードしてください

タグ:PIC 16F648A ドットマトリックス

ドットマトリックスLED時計の製作①

2009.07.10

今回は秋月の「赤色LEDドットマトリクス(8×8)38x38mm(1個100円)」を使用して、電光掲示板風、流れるデジタル時計を作成してみました。

ファイル 8-1.png
回路図はこのようになっております。
まず、マイコンは前回同様16F648A、表示器に8X8のLED、ダイナミック点灯をドライブするのに今回は74HC138というデコーダIC(マルツパーツ館にて1個84円で購入)を使ってみました。
ちなみにマルツパーツ館にて会員登録をするとパーツ類のデータシートが自由に閲覧できるのでオススメです。
74HC138は3本の入力に対して8本の出力のうちの一つの出力を制御することができます。
8X8LEDはアノードとカソードが各8本で計16本の入出力ピンが必要なのですが、カソード側の8本に74HC138の出力ピンを割り当てます。
PIC側ではアノードの8本と74HC138側の3本の計11本で、ドットマトリックスLEDの表示をすることが可能になるわけです。


とりあえずブレッドボード上に回路を組んだ状態です。
LEDはユニバーサル基板に半田付けし、リード線を引き出しました。
ソースの公開は次回。

タグ:PIC 16F648A ドットマトリックス

シフトレジスタ(74HC164)

2009.07.05


千石電商にて74HC164なるロジックICを購入しました
PICからは、なんと2本のIOピンだけで8つのLEDをドライブすることが可能です。
8つの内、任意の数個を点灯させるにはテクニックが必要そうですが。。。
とりあえず、12F629+MikroBasicにてナイトライダー風LEDを試作してみました。
とっても簡単です。

   1. program LED_PWM
2. dim i as byte
3. main:
4. TRISIO = %00000000
5. OPTION_REG.NOT_GPPU = 0
6. WPU = %00000100
7. GPIO = %00000000
8. do
9. GPIO.4 = 1
10. for i = 0 to 7
11. GPIO.2 = 1
12. delay_ms(10)
13. GPIO.4 = 0
14. GPIO.2 = 0
15. delay_ms(10)
16. next i
17. loop until 0 = 1
18. end.

タグ:74HC164 12F629 LED ロジックIC

PSoCはじめました

2009.06.28

ハードもプログラミングできるマイコン、ということでFPGAに非常に興味を持っていたのですが、いろいろ物色しているうちにアナログ回路まで作れるSPoCというマイコンの存在を知りました。
早速アマゾンにて購入、11,500円は正直痛い出費でしたがプログラマやら29466というマイコンやら、ブレッドボード、液晶ディスプレイ、解説本(今のところ日本語で書かれた唯一のPSoC本)まで付いているので妥協・・・

ちなみに、出版当初はCコンパイラのライセンス(16,000円相当)も付いててお得と評判になったらしいですが、現在はImageCraftのコンパイラが無償で付いてくるので、その点のメリットは無くなりましたね。

早速サンプルプロジェクトをビルドしてブレッドボードに組んでみました。

PWMモジュールを二つ使って違う周期で点滅するものです。
デザインは慣れるまで少し掛かりそうですが、cのプログラムは2行書くだけで実現できてしまいます。
他にもADCやらI2Cなどなど充実してそうで、(元を取るためにも)頑張って勉強しないといけないですね。

PSoCマイコン・トレーニング・キット―ディジタル&アナログ回路を自由自在にプログラミング!! (マイコン活用シリーズ)

タグ:PSoC 勉強 参考書

ページ移動