◆PIC24FJ64GA002で秋月300円液晶をつかってみます。今回は単色のチャレンジです。



0)参考サイト
なる研
さんで各ポート、タイミングチャートを勉強させてもらいました。

1)色設定とポート
PORTBを全部使えば16ビットカラーに出来るんですが
ポートの節約のため256色8ビットにしました。
今回はPORTBの下位8ビットを下記の表のように接続しました。












機能LTA042B010FPIC24FJ64GA002
赤2R5_22RB7_16
赤1R4_23RB6_15
赤0R3_24RB5_14
緑2G5_15RB4_11
緑1G4_16RB3_7
緑0G3_17RB2_6
青2B5_8RB1_5
青1B4_9RB0_4


2)タイムチャート
CLKが立下りのときにサンプリングされるので
CLK=1のときに色をセットしておいて、CLK=0にするだけです。

3)実行中はこちら
73c2da65.jpg


4)プログラムの例
赤色をセットしてクロックをパタパタだけです。
プログラムの例はこちら↓

//=========================================================
// TEST
//=========================================================
//== ヘッダファイル ============================================
#include <p24FJ64GA002.h>
#include <stdio.h>
//== define ===========================================================
#define akiLCD_CLK PORTAbits.RA2
#define akiLCD_HS PORTAbits.RA3
#define akiLCD_VS PORTAbits.RA4
//== configuration ======================================================
_CONFIG1( JTAGEN_OFF //JTAGポート:OFF
& GCP_OFF //汎用セグメントプログラムメモリコード保護:OFF
& GWRP_OFF //汎用セグメントフラッシュメモリ書き込み保護:OFF
& BKBUG_OFF //バックグラウンドデバッカ:OFF
& COE_OFF //クリップオンエミュレート:OFF
& ICS_PGx1 //ICDピン選択:PGC1、PGD1を選択
& FWDTEN_OFF) //WDT:OFF
//== 8MHz×PLL4=32MHz =================================================================
_CONFIG2( IESO_OFF //2段階起動:OFF
& FNOSC_FRCPLL //発振選択:内部発振、PLL使用
& FCKSM_CSDCMD //クロック切り替え、モニタ:切り替えOFF、モニタOFF
& OSCIOFNC_ON //OSCOピン:ON→IO OFF→Fosc/2
& IOL1WAY_OFF //RPレジスタプロテクト:OFF
& I2C1SEL_PRI //I2C1ピン:主選択
& POSCMOD_NONE) //主発振:無効
//== function_prototype =================================================================

//== MyTimer =====================================================================
void delay_us(unsigned int usec); //Timer1を利用したusec関数
void delay_ms(unsigned int msec); //msec関数


//== main ==================================================================
int main(void)
{
//== クロックの設定 ========================================================
CLKDIV = 0; //PLL設定 1:1
//== AD切り替え ==========================================================
AD1PCFG = 0xffff; //全digital
//=== TRISA ===========================================================
TRISA = 0x0000; //initial_
//== TRISB =============================================================
TRISB = 0x0000; //input:
//TRISBbits.TRISB3 = 1; //SD_WE
//TRISBbits.TRISB4 = 1; //SD_CD
//TRISBbits.TRISB6 = 1; //SDI
//== SPI設定 ============================================================
//RPOR5bits.RP10R = 7; //SDO1:RP10
//RPOR5bits.RP11R = 8; //SCK1OUT:RP11
//RPINR20bits.SDI1R = 6; //SDI:RP6
//== TIMER1設定 =========================================================
T1CONbits.TON = 0; //Timer1_OFF
T1CONbits.TSIDL = 1; //アイドルモード:Sleep中は停止
T1CONbits.TGATE = 0; //ゲート積算時間:OFF
T1CONbits.TCKPS = 0B00; //PS1:1
T1CONbits.TCS = 0; //クロックソース:内部
IEC0bits.T1IE = 0; //割り込み拒否
IPC0bits.T1IP = 0; //優先レベル0
//== 割り込み許可 =========================================================
//== 前処理 =============================================================
delay_ms(200);
akiLCD_HS = 0;
akiLCD_VS = 0;
//== while文 ===========================================================
while(1)
{
akiLCD_CLK = 1;
PORTB = 0b11100000; //RED
akiLCD_CLK = 0;
}//while
}//int main(void)
//== CN_Interrupt =========================================================================

間違ってたらゴメンね!

5)回路図はこちら
バックライト用に負電源が必要なので、これまた秋月のLT1054を使いました。
電解コンデンサ2つで負電圧(電源電圧のマイナス版)を作れるので楽です。
e7064089.png