ラジオ少年の楽しい電子工作、その他

AVRを使った簡単な回路の実験、そして日々のちょっとした出来事を書きます。

秋桜

2009年10月30日 | 日記
近くの国立公園でコスモスの花がきれいに咲いています。毎年コスモス祭りが行われています。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

周波数カウンタ

2009年10月28日 | 日記
ATmega88-20PUを使った周波数カウンタを作って見ました。
O-Familyで販売されている基盤(基板一式1900)を購入して部品、ケースは自分で用意しました。
なぜ、この基板を購入したかと言いますと、レシプロカルモードと普通のゲートモードを切り替える事が出来るのです。ケースはアルミ製ですが、四角い穴を開けるのが結構手間が掛かります。なかなかきれいには行かないですね。
コメント (3)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

カラーLCDの実験

2009年10月27日 | 日記

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;
  }

}

 

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする