picマイコンの使い方

PICマイコンの8bitマイコンから32bitマイコンまで使いこなすぞ! 周辺機能やアセンブラ、C言語を使いこなすぞ。ARMには負けないぞ! 頼みの綱はPIC32MZだ!たのしみだなー

【dsPIC33FJ128MC802】aitendoの1.44インチ液晶TFT(ZY-FGD)をPMP接続で使ってみる!


◆dsPIC33FJ128MC802でaitendoの1.44インチTFT液晶ZY-FGD1442701V1-PCBを使ってみます。
液晶はaitendoで購入できます。
PMP接続自体はスピードアップにはつながりませんが後のDMA転送時に便利です。



1)参考
以前の作成した記事PMPを使ってみる。秋月LCD-SD1602と接続。をちょっと変更するだけでできます。

2)PMPの設定
PICでLCDコントローラの例
「書き込みenable」がないのでPMENBとの接続は必要ありません。

1.パラレルポートモード選択をマスタモード1設定
①「PMMODEbits.MODE = 0b11」にする。

2.読み/書きイネーブルPTRDENを有効にする。
 ①「PMCONbits.PTRDEN = 1」にして
 ②「PMCONbits.RDSP = 1」します。
 ③pin24がPMRD/PMWRになります。

 ④LCDのRWと接続します。
 ⑤ただし読み込みRDは使わないので未接続です。

書き込みのとき・・・
①PMADDRbits.ADDR0をセットします。
②PMDIN1にデータを入れる。
③勝手にWRはパタパタします。
④ADDR0を固定すれば連続書き込みが可能!!

読み込みのとき・・・
①PMADDRbits.ADDR0をリセットします。
②PMDIN1から読み出します。
③今回は使いません。

PMP設定のプログラム

//== PMP_Initialize ===================================================
PMMODE = 0x0000;
PMMODEbits.MODE = 0b11; //<9:8>MastarMode_1
PMCON = 0x0000;
//== port_select ====
//== R/W:PMRD/PMWR ==
PMCONbits.PTRDEN = 1; //<8>PMRD/PMWR_enable
PMCONbits.RDSP = 1; //<0>PMRD/PMWR
//== E:PMENB ========
//PMCONbits.PTWREN = 1; //<9>PMWR/PMENB_enable
//PMCONbits.WRSP = 1; //<1>PMENB
//== CD:PMA0 ========
PMAENbits.PTEN0 = 1; //<0>PMA0_enable
PMCONbits.PMPEN = 1; //<15>PMP_enable







3)メインのプログラム

LCDの初期化等は省きます。

ブルーバック後、任意の個所に赤ラインを描画します。

256byte連続で書き込みます。

    unsigned char *st_pointer;      //line_pointer
unsigned char st_box[256]; //line_data

void zy_write(unsigned flag, unsigned char data); //(flag:0:command/1:data)
void zy_full_set(unsigned char h_byte, unsigned char l_byte);
void zy_line(unsigned char *byte); //line_out

st_pointer = &st_box[0]; //first_byte_set
zy_full_set(0x00,0x1f); //blueback
//== while文 ===========================================================
while(1)
{
zy_line(st_pointer); //line_out
}//while(1)

//== set ===================================================
unsigned char st_box[256] =
{
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,0xf8,0x00,
0xf8,0x00,0xf8,0x00,0xf8,0x00
};
//==========================================================

//== zy_fgd Write 0:cmd/1:data ====================================================
void zy_write(unsigned flag, unsigned char data)
{
//zy_cs = 0;
//command_mode
if(flag == 0)
{PMADDRbits.ADDR0 = 0;} //command_mode/cd_low
//data_mode
else{PMADDRbits.ADDR0 = 1;} //data_mode
//PMP
while(PMMODEbits.BUSY == 1); //PMP_OK?
PMDIN1 = data;
}//void zy_write(unsigned flag, unsigned char data)
//== zy_fgd_full_set ============================================
void zy_full_set(unsigned char h_byte, unsigned char l_byte)
{
unsigned int i;
for(i=0; i<16384; i++)
{
zy_write(1,h_byte);
zy_write(1,l_byte);
}
}//void zy_full_set(unsigned char h_byte, unsigned char l_byte);
//=================================================================================

void zy_line(unsigned char *byte)
{
zy_write(0,0x2a); //x_address
zy_write(1,0x00); //start
zy_write(1,0x02);
zy_write(1,0x00); //end
zy_write(1,0x81);
zy_write(0,0x2b); //y_address
zy_write(1,0x00); //start
zy_write(1,0x04);
zy_write(1,0x00); //end
zy_write(1,0x04);
zy_write(0,0x2c); //memory_write
//check_pin
LATAbits.LATA0 = !LATAbits.LATA0;
PMADDRbits.ADDR0 = 1; //data_mode_set
unsigned char count;
for(count=0; count<256; count++)
{
PMDIN1 = *(byte+count); //auto_increment
//byte++;
}//for(count=0; count<128; count++)+
//check_pin
LATAbits.LATA0 = !LATAbits.LATA0;
}//void zy_line()
//======================================================================







4)波形の確認

黄色がWRの挙動です。ピンクはRA1に接続してます。1ライン転送毎に切り替えてます。

1ライン描画するのに84μsecかかりました。

2437654c.png








5)実行の様子
aitendoの1.44インチ液晶TFT(ZY-FGD)PMP接続1ライン出力

6)動画をとってみました。
SDカードから連続的にBMPデータを書き込み続けてみました。

ちなみにDMA転送だと超早いです。

7)回路図
28b9ed33.png


次回はPMPのDMA転送です。転送スピードが3倍程度速くなります!

【SPIインターフェース】CKEとCKPの設定

◆SPIインターフェースのCKEとCKPとは・・・



1)CKE:SCKエッジ選択ビット/SDOの切り替えのタイミング
1=SDOはクロックがactiveからidle時に切り替わる。
0=SDOはクロックがidleからactive時に切り替わる。
2)CKP:SCKの極性ビット/idle-active-high-lowの決定
1=SCKはhigh=idle/low=active
0=SCKはhigh=active/low=idle

3)実際の例:スレーブ側でクロックの真ん中にてSDOを取得したい場合
62a6475c.png
上図のように「CKE=0/CKP=1」だと「スレーブ側でクロックの真ん中にてSDOを取得」できます。


【PIC24F04KA200】書き込めない!!(pickit3)


◆PIC24F04KA200にプログラムが書き込めない!!



どうやらコンフィグレーションがダメらしい・・・
「リセットを使う」にしとかないとだめでした。
×:_FPOR(MCLRE_OFF);
○:_FPOR(MCLRE_ON);
(回路図は下)

書き込み失敗(書き込めない)
×:_FPOR(MCLRE_OFF);
The following memory fegions failed to correctly:Configuration Memory
Address:00f8000c Expected value:00000079 Received Value: 000000f9
Programming failed

PIC24F04KA200書き込み失敗


書き込み成功(書き込める)
×:_FPOR(MCLRE_OFF);

PIC24F04KA200書き込み成功


5)回路図
c777fd6f.png


ギャラリー
  • 【PIC32MZ2048ECH144-I/PH】PIC32MZ2048ECH144を買いました!
  • 【PIC32MX370F512H】タイマーを使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送でaitendoの1.44インチ液晶TFT(ZY-FGD)を使ってみる。その3
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】aitendoの1.44インチ液晶TFT(ZY-FGD)をPMP接続で使ってみる!
  • 【dsPIC33FJ128MC802】aitendoの1.44インチ液晶TFT(ZY-FGD)をPMP接続で使ってみる!
メッセージはこちちらからお願いします。

名前
メール
本文
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

ブログパーツ
  • SEOブログパーツ
にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村
アクセスカウンタ
アクセスランキング