/**********************************************************/ /* */ /* CMOS-EYE ATmega128接続例サンプルプログラム */ /* Target Board:BestTechnorogy BTC068 */ /* Environment:GDL1.7.4.0 */ /* Since:2006.9.12 */ /* (c) AsakusaGiken Co., LTD. T.Ishii */ /* */ /**********************************************************/ /*----------------------------------------------------------------------------------- ピンアサイン (CMOS-EYE - ATmega128) A0 PA0 A1 PA1 A2 PA2 A3 PA3 A4 PA4 A5 PA5 A6 PA6 A7 PA7 A8 PC0 A9 PC1 A10 PC2 A11 PC3 A12 PC4 A13 PC5 A14 PC6 A15 PC7 A16 PG0 A17 PG1 A18 PG2 D0 PF0 D1 PF1 D2 PF2 D3 PF3 D4 PF4 D5 PF5 D6 PF6 D7 PF7 M0 PE5 M1 PE6 M2 PE7 CE PE2 WE PE3 OE PE4 ST PB0 BSY PB1 RX PD3/TXD1 *CMOS-EYEシリアル命令用 TX PD2/RXD1 (BTC068上ですでに配線されているもの) LED PB7 *BTC068上のLED (オシロ<-ATmega128) TEST PB2 *TESTは処理時間測定用、オシロスコープで波形を計測 ------------------------------------------------------------------------------------------*/ /*-----------------------------------------------*/ /* ヘッダファイルインクルード */ /*-----------------------------------------------*/ #include /* ATmega128の内部I/O定義をインクルード(GDL付属のヘッダファイル) */ #include // USART通信ライブラリ #include #include // 割り込み関連 char txb[100],rxb[100]; /*-----------------------------------------------*/ /* 名称定義 */ /*-----------------------------------------------*/ /*---ピン---*/ #define ADDR1 PORTA #define ADDR2 PORTC #define ADDR3 PORTG #define DATA_IN PINF #define DATA_OUT PORTF #define M0 PE5 #define M1 PE6 #define M2 PE7 #define CE PE2 #define WE PE3 #define OE PE4 #define ST PB0 #define BSY PB1 #define RX PD3 #define TX PD2 #define LED PB7 #define TEST PB2 /*---IO方向---*/ #define DATA_DIR DDRF //#define INPUT 0 #define ALL_INPUT 0x00 //#define OUTPUT 1 #define ALL_OUTPUT 0xFF /*---その他---*/ #define LOW 0 #define HIGH 1 /*-----------------------------------------------*/ /* グローバル変数 */ /*-----------------------------------------------*/ int R,G,B; /*色平均値格納変数*/ unsigned char pix9[9]; /*周囲8ピクセルデータ格納配列*/ /*-----------------------------------------------*/ /* アドレスセット */ /*-----------------------------------------------*/ void set_address(long myAddr) { /*引数は19ビット以上必要なのでlong 型(32ビット)*/ ADDR1 = (unsigned char)(0x000000FF & myAddr); ADDR2 = (unsigned char)((0x0000FF00 & myAddr)>>8); ADDR3 = (unsigned char)((0x00070000 & myAddr)>>16); } /*-----------------------------------------------*/ /* 設定 (M0-M2,CE,WE,OEのみ) */ /*-----------------------------------------------*/ void set_high(unsigned char myPin) { PORTE |= (1<>BSY; } /*-----------------------------------------------*/ /* LED (LOWで点灯、HIGHで消灯) */ /*-----------------------------------------------*/ void LED_ON(void) { PORTB &= ~(1< 255){ R_hi = 255; }else{ R_hi = R + myDiff; } if (G < myDiff){ G_lo = 0; }else{ G_lo = G - myDiff; } if ((G + myDiff) > 255){ G_hi = 255; }else{ G_hi = G + myDiff; } if (B < myDiff){ B_lo = 0; }else{ B_lo = B - myDiff; } if ((B + myDiff) > 255){ B_hi = 255; }else{ B_hi = B + myDiff; } set_low(CE); /*SRAM有効*/ for (cnt=0; cnt= R_lo && myR <= R_hi && myG >= G_lo && myG <= G_hi && myB >= B_lo && myB <=B_hi){ setPixData(toAddr + cnt, 0); /*範囲内の場合は黒(0)を描画*/ }else{ setPixData(toAddr + cnt, 255); /*範囲外の場合は白(255)を描画*/ } } set_high(CE); /*SRAM無効*/ DATA_DIR = ALL_INPUT; /*データバスを入力へ*/ } /*-------------------------------------------------*/ /* 周囲9ピクセル値取得 */ /*-------------------------------------------------*/ /*この関数前に、 set_low(CE); と DATA_DIR = ALL_INPUT; を実行する必要あり*/ /* myAddr:対象アドレス px:画面幅 */ void getPix9(long myAddr, int px) { pix9[0] = getPixData(myAddr + 1); /*右*/ pix9[1] = getPixData(myAddr - px + 1); /*右上*/ pix9[2] = getPixData(myAddr - px); /*上*/ pix9[3] = getPixData(myAddr - px - 1); /*左上*/ pix9[4] = getPixData(myAddr - 1); /*左*/ pix9[5] = getPixData(myAddr + px - 1); /*左下*/ pix9[6] = getPixData(myAddr + px); /*下*/ pix9[7] = getPixData(myAddr + px + 1); /*右下*/ pix9[8] = getPixData(myAddr); /*自分*/ } /*-------------------------------------------------*/ /* 収縮関数 */ /*-------------------------------------------------*/ void Contract(long stAddr, long toAddr, int myX, int myY) { int tx,ty,cnt,position; unsigned char data; set_low(CE); /*SRAM有効*/ DATA_DIR = ALL_OUTPUT; for (tx=0; tx