倉◎番プログラムのバグ修正
倉◎番プログラムにいくつかのバグがありましたので修正版をUPします
・ステージ14の荷物の数が足りない(他、MAPの数点のバグ)
・縮小表示の時、一時右端のブロック壁が表示されない
konyaさんより移植版のプログラム搭載要請を受け、以上の修正を行いました
修正箇所はfont.h内のconst char map[540][23]={・・・・・} と
souko.c内のvoid move(void){ ・・・・・・} です
倉◎番プログラムにいくつかのバグがありましたので修正版をUPします
・ステージ14の荷物の数が足りない(他、MAPの数点のバグ)
・縮小表示の時、一時右端のブロック壁が表示されない
konyaさんより移植版のプログラム搭載要請を受け、以上の修正を行いました
修正箇所はfont.h内のconst char map[540][23]={・・・・・} と
souko.c内のvoid move(void){ ・・・・・・} です
こまった事に、PIC32MXはPICkit2では書き込みが出来ない
MPLABで調べるとPICkit3なら書き込みが出来るらしい?のでPICkit3を早速購入しテストボードも作成することにした
早速、電子工作の実験室さんのHPからLED点滅プログラムを拝借し、テストしてみる
ここで問題発生
PICkit3には専用のソフトが無く!MPLAB IDE上で認識させるようで、しかもなんだかエラーが出ている?
PICkit 3 detected
Connecting to PICkit 3...
Running self test...
Self test completed
Firmware Suite Version...... 01.26.33
Firmware type......................PIC32MX
PICkit 3 Connected.
PK3Err0045: You must connect to a target device to use PICkit3.
えー?認識しない??でも、PIC32MXは認識できてる?
基本的にマニュアルを見ない(英語わかりません)私はあわててググる
どうやら、ターゲットボードに電源が供給されていないと認識しないようだ
PICkit2の時はそんなこと無かったのに・・・
で、MPLABのpurogrmmerメニューのsettingのPowerをONすると見事認識してくれた
無事にLEDチカチカプログラム成功!
次回はLCDの動作確認をと思うけど、PMPを理解してないのでうまくいくか??
PICミニゲーム作成でネックになるRAM容量ですが、最新のPICを入手しました
まるで婚約指輪みたいなケースに入っています
スペックは以下の通り
CAN 1
I2C 4
RAMサイズ 128kB
SPI 3
UART 6
USB 1
インストラクションセツトアーキテクチァ RISC
インタフェースタイプ CAN / I2C / SPI / UART / USB
オンチップADC 16-chx10-bit
サプライヤパッケージ TQFP
タイマー数 5
デバイスコアー PIC
データバス幅 32Bit
ピン数 64
ファミリ名 PIC32
プログラムI/O数 53
プログラムメモリサイズ 512kB
プログラムメモリタイプ Flash
動作供給電圧 Typ 2.5, 3.3V
実装 表面実装
最大クロックレート 80MHz
最大動作供給電圧 3.6V
最大動作温度 85°C
最大拡張メモリサイズ 4GB
最大速度 80MHz
最小動作供給電圧 2.3V
最小動作温度 -40°C
機能 マイクロコントローラ
製品幅 10mm
製品長さ 10mm
製品高さ 1mm
320×240LCDを256カラーでVRAMを確保してもまだ50kBも余裕がある
クロックレートもdsPIC33の倍の80MHz
夢が広がるチップです
28pinのdsPICのRAM容量は16kですが、VRAMを確保する場合1ドット16色が通常ですが何とか色を増やせないか思案してみます
128*128のLCDのドット数は16384ドットになりますが、すでにRAM容量いっぱいになってしまいます
で、1バイト2ドット構成にすれば半分の128*64で8192バイトで確保できます
しかし、1ドットあたりの色は16色になってしまいます
1111ビットに11ビットを足せば64色が保管できる
1バイト=11ビット+11ビット+11ビット+11ビットで4ドット分が確保できるので
単純に計算すれば
8192バイト+4096バイト=12288あれば64色表示が出来るのではないか?
ではどうやってプログラムを実現するか
16色のパレットを4バンクに分けて登録する
PRAM[128][64] //パレット用RAM
BRAM[128][32] //バンク用RAM
BCOL[4][16] //バンク別カラーパレット
ただし、一つのキャラクタに64色使おうとすればかなり複雑になり速度低下の原因になる
一つのキャラクタにつき16色限定し、4種類の16色カラーパレットを用意するようにすればかなり表現力が向上するのではないか?
たとえば、メインキャラクタ用にバンク1を使用し、サブキャラクタ用にバンク2を、で残りの2バンクを背景用のキャラクタに使うようにする
それぞれのバンク専用に関数を用意すればシンプルにプログラミングが出来るのではないか
まだ思考段階なので実際のプログラミングはこれからです
時間があればプログラムの解説もちょっとやろうかな?
開発言語はMPALB C30です
オリジナル基板用ですが、PICデバイス、LCDインターフェイスと、入力ボタンポートをへんこうすれば動くと思います
簡易マップエディタ(倉◎番もどき専用)
PICマイコン :dsPIC33F64GP802-SO
カラーLCD :ZY-FGD1442701V1(128*128 26kColor)
開発言語 :MPALB C32
参考資料(私が師匠と勝手に思っている方)
電子工作の実験室HP (後藤さん)PICマイコンの師匠
エレ玩 Konyaの開発記録Blog (konyaさん)PICミニゲームの師匠
簡単なフロー
1.ステージマップ情報読み込み、表示(荷物の数設定)
2.作業員表示
3.作業員移動処理
進行方向が床なら作業員移動
荷物なら
2進行先が床か荷物置き場なら作業員+荷物移動
4.荷物が荷物置き場と同じなら荷物カウント+1し荷物の色を変更
5.荷物置き場がすべて埋まったらクリアー
6.マップの拡大、縮小表示切替
7.割り込みメニューの処理
ステージ最初からやり直し
ステージの選択
初期画面へ
ゲーム再開
8.次のステージへ(1.から繰り返し)
まずは、表示文字、キャラクタ、背景のグラフィック作成
8*8チップ(縮小画面用)
16*16チップ(拡大画面用)
壁のグラフィックのデータ変換
数値はカラー番号
{4,4,4,4,4,4,4,4},
{4,5,5,5,4,5,5,5},
{4,5,5,5,4,5,5,5},
{4,5,5,5,4,5,5,5},
{4,4,4,4,4,4,4,4},
{5,5,4,5,5,5,4,5},
{5,5,4,5,5,5,4,5},
{5,5,4,5,5,5,4,5},
ステージ1のマップ
ステージ1のマップデータ変換
数値はチップ番号
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,2,0,4,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,2,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,2,2,2,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,2,0,0,0,2,3,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,2,0,3,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
実際のLCDに表示した画像
回路図
最近のコメント