O-Familyで販売されている基盤(基板一式1900)を購入して部品、ケースは自分で用意しました。
なぜ、この基板を購入したかと言いますと、レシプロカルモードと普通のゲートモードを切り替える事が出来るのです。ケースはアルミ製ですが、四角い穴を開けるのが結構手間が掛かります。なかなかきれいには行かないですね。
ATtiny2313を使ってカラーLCDを動作させてみました。画像は丁度緑色を表示しているところです。約2秒間隔で色が変化していきます。カラーLCDはCoCoNet液晶工房のTFT液晶モジュール(128×128,1.44") [ZY-FGD1442701V1]価格900安いのでちょっといたずら(勉強用)購入しました。ピン変換基板とあわせても1100です。使用参考ではマイコンSTC 11L02(Flash:2K/SRAM:256、8051互換マイコン)を使っていますがデモプログラムをATtiny2313用に変更してみました。
/*****デモプログラム********/
#include <avr/io.h>
#define F_CPU 1000000UL // 1MHz
#include <util/delay.h>
#define DELAY _delay_us(10)
#define DELAY1 _delay_ms(100)
#define DELAY2 _delay_ms(50)
#define DELAY3 _delay_ms(200)
#define DELAY4 _delay_ms(2000)
//PORTBのビット定義
#define CS 2
#define A0 3
#define RD 4
#define WR 5
#define RES 6
uint8_t color[]={0xf8,0x00,0x07,0xe0,0x00,0x1f,0xff,0xe0,0x1f,0xff,0x00,0x00,0xff,0xff};
//0xf8,0x00 red
//0x07,0xe0 green
//0x00,0x1f blue
//0xff,0xe0 red + green
//0x1f,0xff red(2bit)+green+blue
//0x00,0x00 black
//0xff,0xff white
void WriteCOM(uint8_t a)
{
PORTD&=~(1<<CS); //CS=0
PORTD&=~(1<<A0); //A0=0:command data
PORTB=a;
PORTD&=~(1<<WR); //WR=0
DELAY;
PORTD|=(1<<WR); //WR=1
PORTD|=(1<<CS); //CS=1
}
void WriteDAT(uint8_t b)
{
PORTD&=~(1<<CS); //CS=0
PORTD|=(1<<A0); //A0=1:display data or parameter
PORTB=b;
PORTD&=~(1<<WR); //WR=0
DELAY;
PORTD|=(1<<WR); //WR=1
PORTD|=(1<<CS); //CS=1
}
int main(void)
{
DDRB=0xff;
DDRD=0xff;
uint8_t i,j,k=0;
PORTD|=(1<<RES); //RES=1
DELAY1;
PORTD&=~(1<<RES); //RES=0
DELAY1;
PORTD|=(1<<RES); //RES=1
DELAY2;
PORTD|=(1<<RD); //RD=1: RD is not use in this program.
//System function command
WriteCOM(0x01); //software reset
DELAY2;
WriteCOM(0x11); //SLEEP OUT
DELAY3;
WriteCOM(0xFF); //Vcom level control
WriteDAT(0x40);
WriteDAT(0x03);
WriteDAT(0x1A);
WriteCOM(0xd9); //EEPROM control status
WriteDAT(0x60);
WriteCOM(0xc7);
WriteDAT(0x90);
DELAY3;
//panel function command
WriteCOM(0xB1); //Frame rate control (In normal mode full colore)
WriteDAT(0x04);
WriteDAT(0x25);
WriteDAT(0x18);
//WriteCOM(0xB2); //Frame rate control (Idle mode)
//WriteDAT(0x04);
//WriteDAT(0x25);
//WriteDAT(0x18);
//WriteCOM(0xB3); //Frame rate control (In partial mode + full colore)
//WriteDAT(0x04);
//WriteDAT(0x25);
//WriteDAT(0x18);
//WriteDAT(0x04);
//WriteDAT(0x25);
//WriteDAT(0x18);
//WriteCOM(0xB4); //Display inversion control
//WriteDAT(0x03);
WriteCOM(0xB6); //Display function set5
WriteDAT(0x15);
WriteDAT(0x02);
WriteCOM(0xC0); // POWER CONTROL 1 GVDD&VCI1
WriteDAT(0x02);
WriteDAT(0x70);
WriteCOM(0xC1); // POWER CONTROL 2 GVDD&VCI1
WriteDAT(0x07);
WriteCOM(0xC2); // POWER CONTROL 3 GVDD&VCI1 (in normal mode/full colore)
WriteDAT(0x01);
WriteDAT(0x01);
//WriteCOM(0xC3); // POWER CONTROL 4 GVDD&VCI1 (in idle mode/8colores)
//WriteDAT(0x02);
//WriteDAT(0x07);
//WriteCOM(0xC4); // POWER CONTROL 5 GVDD&VCI1 (in partial mode/full colore)
//WriteDAT(0x02);
//WriteDAT(0x04);
//WriteCOM(0xFC); // POWER CONTROL 6 GVDD&VCI1 (in partial mode + idel mode)
//WriteDAT(0x11);
//WriteDAT(0x17);
//WriteCOM(0xC5); //VCOMH&VCOML
//WriteDAT(0x3c);
//WriteDAT(0x4f);
WriteCOM(0x36); //Memory data access control MV,MX,MY,RGB
WriteDAT(0xc8); //MX=1, MY=1, MV=0, RGB=1
//CASET Direct to (127-Physical Column Pointer)
//RASET Direct to (159-Physical Row Pointer)
WriteCOM(0x3a); //GAMMA SET BY REGISTER
WriteDAT(0x05); //65k colores, 16-bit/pixel
//***********************GAMMA*************************
WriteCOM(0xE0); //Gamma adjustment(+polarity)
WriteDAT(0x06);
WriteDAT(0x0E);
WriteDAT(0x05);
WriteDAT(0x20);
WriteDAT(0x27);
WriteDAT(0x23);
WriteDAT(0x1C);
WriteDAT(0x21);
WriteDAT(0x20);
WriteDAT(0x1C);
WriteDAT(0x26);
WriteDAT(0x2F);
WriteDAT(0x00);
WriteDAT(0x03);
WriteDAT(0x00);
WriteDAT(0x24);
WriteCOM(0xE1); //Gamma adjustment(-polarity)
WriteDAT(0x06);
WriteDAT(0x10);
WriteDAT(0x05);
WriteDAT(0x21);
WriteDAT(0x27);
WriteDAT(0x22);
WriteDAT(0x1C);
WriteDAT(0x21);
WriteDAT(0x1F);
WriteDAT(0x1D);
WriteDAT(0x27);
WriteDAT(0x2F);
WriteDAT(0x05);
WriteDAT(0x03);
WriteDAT(0x00);
WriteDAT(0x3F);
//***************************RAM ADDRESS*******************
WriteCOM(0x2A); //column address set
WriteDAT(0x00);
WriteDAT(0x02); //xs=02:start address
WriteDAT(0x00);
WriteDAT(0x81); //xe=81:end address
WriteCOM(0x2B); //row address set
WriteDAT(0x00);
WriteDAT(0x03); //ys=03:start address
WriteDAT(0x00);
WriteDAT(0x82); //ye=82:end address
WriteCOM(0x29); //Display off
DELAY1;
WriteCOM(0x2C); //memory write
while(1)
{
for (i=0;i<128;i++)
{
for (j=0;j<128;j++)
{
WriteDAT(color[k]); //write data
WriteDAT(color[k+1]);
}
}
DELAY4;
k+=2;
if(k>14)
k=0;
}
}