WAT-AVR128 모듈과 WAT-GLCD 모듈을 연결하여
128x64 배열의 Graphics LCD (모델명: GS-GB1286433YFYJ-C/R )를 제어해 보겠습니다.

 

 

 

 

 

 

 

 

LCD 의 데이터 선은 ATMEGA128의 PORTB 에 연결하고, 컨트롤 선은 PORTC를 사용합니다.

VR1의 5K 가변 저항은 Graphics LCD의 백라이트 밝기를 조절할 수 있습니다.

 

 

그래픽 LCD 에 우측 그림처럼 출력하고 3번째 줄부터는 영문'E'를 계속 출력하는 예제입니다. 이때 현재 위치에 커서를 표시해야 합니다.

화이트앳

WhiteAT.com

 

 

 

 

 

 

 

 

원문은 http://avr128.com 에 있습니다.

 

 

 

 

주요 코드

 

main.c 일부

/*

    

필요한보드

    1. WAT-AVR128 (모듈)

    2. WAT-AVR128 EXT (확장보드)

    3. WAT-GLCD (모노그래픽LCD)

 

기능

    그래픽LCD 에커서있는영문을표시한다.

 

 

    http://whiteat.com -> 업체홈페이지

    http://avr128.com -> ATMEGA128 자료실

 

    

    최종수정일: 2011-10-30

 

*/

 

 

#include <avr/io.h>

#include "WAT128.h"

 

 

int main()

{

 

    GLCD_Init();

    GLCD_ShowCursor(1);    // 커서를보이게하자

 

    GLCD_String(0,0," 화이트앳 ");

    GLCD_String(1,0," WhiteAT.com ");

 

    while(1)

    {

        // 약200ms 마다'E' 출력

        GLCD_English('E',0);

        DelayMS(200);

    }

}

 

 

 

 

 

 

 

다운로드 ( AVRStudio용)

매뉴얼: WAT-GLCD.pdf

펌웨어: EX_02_03.zip


Posted by WhiteAT
,

 

 

PORTA의 0 ~ 7 포트에 LED 8개가 연결되어 있고 LED에 불이 들어오게 하려면 해당되는 포트에 '0'을 출력하면 됩니다. PORTE 에 연결된 딥스위치 ON/OFF로 LED 를 제어할 수 있습니다. 딥스위치 1번을 ON 하면 D0가 ON, 딥스위치 1번을 OFF 하면 D0가 OFF 되고, 나머지 딥스위치 2 ~ 7번와 LED도 마찬가지로 ON/OFF 하는 예제입니다.

 

 

DIP SWITCH 1번 ON

●○○○○○○○

DIP SWITCH 1,2번 ON

●●○○○○○○

DIP SWITCH 5번 ON

○○○○●○○○

DIP SWITCH 모두 ON

●●●●●●●●

PORTA 에 LED, PORTE에는 딥스위치가 연결되며, 실험에 사용할 회로와 WAT보드의 연결 방법은 아래와 같습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

원문은 http://avr128.com 에 있습니다.

 

 

 

 

주요 코드

 

main.c 일부

/*

    EX_01_02.c

 

    PORTA의0 ~ 7 포트에LED 8개가연결되어있고

    LED에불이들어오게하려면해당되는포트에

    ''을출력하면됩니다.

    PORTE 에연결된딥스위치ON/OFF로LED 를제어할수있습니다.

    딥스위치1번을ON 하면D0가ON,

    딥스위치1번을OFF 하면D0가OFF 되고,

    나머지딥스위치2 ~ 7번와LED도

    마찬가지로ON/OFF 하는예제입니다.

 

         

 

    AVRStudio 4.18

    2011-08-25

 

    최신코드와다른예제는홈페이지에있습니다.

    http://avr128.com

    http://kit128.com

 

*/

 

#include <avr/io.h>

 

 

int main()

{

    DDRA = 0xFF;     // PORTA ALL OUTPUT

    PORTA = 0xFF;    // ALL LED ON

 

    DDRE = 0x00;    // INPUT for DIP SWITCH

 

    while(1)

    {

        PORTA = PINE; // 딥스위치값PORTA 로바로출력

    }

}

 

 

 

 

 

 

 

전체 소스 ( AVRStudio용)

 

 

 

 

Posted by WhiteAT
,

 

 

컴파일하여 생성된 결과 파일(헥사파일)을 다음과 같은 방법으로 라이팅 할 수 있습니다.

- Ponyprog 프로그램과 프린터 포트를 이용








 

< PONYPROG 실행 화면 >

 

 

 

 


http://www.lancos.com                  <= 여기에서 다운로드할 수 있다.

http://www.lancos.com/ppwin95.html     <= 조금더 자세한 주소

 



< PONYPROG 프로그램 기본적인 사용 방법 >
먼저 사용하는 Device Family 를 선택한다.

 

 

 

 

 

다음으로 사용하는 Device Type 를 선택한다.

 

 

 

 

 

다음으로 프로그램을 라이팅에 사용할 포트을 선정한다.
아래는 병렬 포트(LPT1)으로 셋팅하는 예이다.

 

 < PONYPROG 프로그램 FUSE 셋팅 >

 

 

 

 


하드웨어에 맞게 비트를 설정해 주어야 한다.

아래 메뉴를 선택하여 Configuration Bilts 창을 연다.

 

 

 

 

 

 

아래 예는 8Mhz 로 외부 XTAL 를 사용하는 설정이다.

 

 

 

 

 

 

< PONYPROG 프로그램 라이팅 >
기본적인 세팅은 끝났으며 이제 헥사파일을 라이팅 하면 된다.
메뉴를 선택한 후

 

 

 

 

 

라이팅할 헥사 파일을 열고,

 

 

 

 

메뉴를 선택하여 라이팅하면 라이팅이 진행됩니다.

 

     

 



=======================================================================================
Writing 속도 빠르게 하는 방법

PonyProg(Parallel Port) ISP가 느려서 사용하지 않는 분들은
한번, 하기 사항을 참고해 보시기 바랍니다.

1. 사용프로그램: PonyProg v2.06f
2. ISP형식: Parallel Port
3. 사용MCU: ATmega128
4. 사용환경: WindowsXP
-> PonyProg2000디렉토리에 들어 있는
     PONYPROG2000.INI 파일 설정중에서
     SPIBusSpeed=NORMAL을 SPIBusSpeed=FAST로 변경하니
     ISP Writing속도가 2배 정도 향상 되었습니다.







http://kit128.com/goods/view.php?seq=9 에서
케이블을 포함하여 6,600원에 저렴하게 판매하고 있습니다.







'전자 키트' 카테고리의 다른 글

ST-LINK V2, STM32 STM8 JTAG 디버거 프로그래머  (0) 2016.03.31
WAT-LED  (0) 2013.04.08
WAT-AT45DB SPI 데이터 플래시  (0) 2013.04.08
WAT-GLCD 그래픽 모노 LCD 모듈  (0) 2011.12.12
WAT-CLCD, 캐릭터 LCD 모듈  (0) 2011.10.31
Posted by WhiteAT
,




컴파일하여 생성된 결과 파일(헥사파일)을 다음과 같은 방법으로 라이팅 할 수 있습니다.

- Ponyprog 프로그램과 프린터 포트를 이용

- AVRStudio 프로그램과 WAT-AVR ISP ( USB 용 AVR ISP)를 이용

 



 



 

하드웨어 연결

 

 

 

그림처럼 AVR 모듈과 USB ISP 케이블을 연결하고 USB ISP 케이블을 PC의 USB 포트에 연결합니다.




 

 

 

 

 

이 내용에 대한

원본은 http://WhiteAT.com 에서 제공하는 WAT-AVR128 모듈 매뉴얼에 있습니다.

저작권은 http://WhiteAT.com 에 있습니다.

 

 



PL2303 드라이버(XP, 윈도우7 공용) 

   PL2303_Prolific_DriverInstaller_v1.5.0.zip
드라이버 제작사인 http://www.prolific.com.tw/eng/downloads.asp?ID=31 에서도 다운로드 가능합니다.





 

 

프로그램 연결

 

 

 

AVRStudio STK500 도구바에서 ‘Display the Connect Dialog' 버튼을 클릭하면 ISP 연결 설정에 관한 다이어로그 박스가 나타납니다.

 



 

 

  

 

Platform에서 AVRISP 를 선택하고 Port에서 연결된 포트 번호를 선택한 후 [Connect]를 클릭합니다. 연결을 성공하면 프로그램라이팅에 관련된 다이어로그박스가 뜨게 되고 연결이 실패하면 다시 선택하라고 같은 창이 뜹니다.

지금까지는 ISP 케이블에 AVR 모듈을 연결하지 않아도 상관없습니다.

 





 

 

 

 

 

 

 

 

디바이스 설정

 

 

[Device and Signature Bytes]에서 사용할 디바이스명을 선택하고 [Settings]에서 적당한 라이팅 속도를 결정합니다.

 

 

 

 

 

 

 

 

 

 

 

프로그램 라이팅

 

 

 

[...]으로 헥사파일을 선택한 후 [Program]으로 라이팅을 할 수 있습니다.


 








 

 

 

 

FUSE( 퓨즈) 설정

 

 


 

아래와 같이 설정할 수 있습니다. 가장 많이 사용되는 설정이며 필요에 따라 변경할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

에러 발생시

 

 

만약 다음과 같은 에러가 발생한다면 AVR 모듈이 연결되었는지 확인하고 연결되어 있다면 SCK 속도를 낮춰가며 적당한 라이팅 속도를 찾아야 합니다.

 

 









 

 

현재 AVRStudio 에서는 총 6가지의 ISP 라이팅 속도를 제공합니다.

 

 

 




 




 

이 제품은 http://kit128.com/goods/view.php?seq=4&main=true&mainType=1 에서 구매하실 수 있습니다.



 

Posted by WhiteAT
,

 

 

ATMEGA128 컨트롤러의 컴파일툴은 AVRStudio, Codevision, IAR 등이 있습니다. 이러한 컴파일툴의 대부분 유료이며 잘 알려진 무료 컴파일툴은 AVR Studio입니다. Codevision 은 유료이나 코드위저드가 있어 초기에 코드 생성할 때 편리합니다. IAR 은 주로 업체에서 사용되는 컴파일툴입니다.

 

 

소스 컴파일툴

 

 

AVRStudio 와 WinAVR 로 컴파일 할 수 있습니다. AVRStudio 는 코딩하는데 편리한 환경을 제공하고 WinAVR 은 컴파일러를 제공합니다.

 

 

프로그램 다운로드

http://www.atmel.com 에 가입 후 AVRStudio 프로그램을 다운받을 수 있습니다.

http://winavr.sourceforge.net/ 에서 가입 없이 WinAVR을 다운받을 수 있습니다.

 

 

 

프로그램 설치

먼저 WinAVR을 설치한 후 AVRStudio를 설치합니다.

 

AVRStudio 는 컴파일을 쉽게 도와주는 툴을 제공하고

WinAVR 은 여러 헤더파일과 라이브러리와 컴파일러(AVR-gcc)를 제공합니다.

 

 

 

 

 

 

먼저 새로운 프로젝트를 생성한다.

 

 

 

 

 

 

다음으로 프로젝트명을 결정 한다

 

 

 

 

 

 

 

 

Finish를 눌러 종료하면, 이제 소스를 편집할 수 있는 창이 열린다.

이제 코딩하면 된다.

 

 

 

 

 

 

간단하게 소스를 편집하고,

#include <avr/io.h>

 

int main(){

DDRB = 0xFF; // output

PORTB = 0xFF; // LED ON

return 0;

 

}

 

 

 

 

 

 

Build and Run 를 실행하여 test1.hex 파일이 생성되었는지 확인합니다.

라이팅 하는 방법은 http://whiteat.com/56165 에 있습니다.

 

출처: http://whiteat.com/260 

 

 

 

Posted by WhiteAT
,

 

PORTA의 0 ~ 7 포트에 LED 8개가 연결되어 있고 LED에 불이 들어오게 하려면 해당되는 포트에 '0'을 출력하면 됩니다. 딥스위치 1번을 ON 하면 D0(PORTA.0에 연결된 LED)부터 D7까지 차례대로 ON되고 딥스위치 1번을 OFF 하면 마지막 켜진 LED부터 OFF 되는 예제입니다.

 

 

DIP SWITCH 1번 ON

D0: ●○○○○○○○

D1: ●●○○○○○○

D2: ●●●○○○○○

D3: ●●●●○○○○

D4: ●●●●●○○○

D5: ●●●●●●○○

DIP SWITCH 1번 OFF

D4: ●●●●●○○○

D3: ●●●●○○○○

D2: ●●●○○○○○

D1: ●●○○○○○○

D0: ●○○○○○○○

PORTA 에 LED, PORTE에는 딥스위치가 연결되며, 실험에 사용할 회로와 WAT보드의 연결 방법은 아래와 같습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

원문은 http://avr128.com 에 있습니다.

 






 

 

 

 

 

주요 코드

 

main.c 일부

/*

    EX_01_03.c

 

    PORTA의0 ~ 7 포트에LED 8개가연결되어있고

    LED에불이들어오게하려면해당되는포트에

    ''을출력하면됩니다.

    

    딥스위치1번을ON 하면

    D0(PORTA.0에연결된LED)부터D7까지차례대로ON되고

    딥스위치1번을OFF 하면마지막켜진LED부터OFF 되는

    예제입니다.

 

    LED: PORTA 에연결

    DIP SWITCH: PORTE 에연결

         

 

    AVRStudio 4.18

    2011-08-25

 

    최신코드와다른예제는홈페이지에있습니다.

    http://avr128.com

 

*/

 

#include <avr/io.h>

 

// 일정시간딜레이

void Delay()

{

    register unsigned long i;

    for(i = 0; i < 300000; i++)

    {

        asm volatile(" PUSH R0 ");

        asm volatile(" POP R0 ");

        asm volatile(" PUSH R0 ");

        asm volatile(" POP R0 ");

        asm volatile(" PUSH R0 ");

        asm volatile(" POP R0 ");

        asm volatile(" PUSH R0 ");

        asm volatile(" POP R0 ");

        asm volatile(" PUSH R0 ");

        asm volatile(" POP R0 ");    

    }

}

 

int main()

{

    DDRA = 0xFF;     // PORTA OUTPUT

    PORTA = 0xFF;    //    ALL LED OFF

 

    DDRE = 0x00;        // DIP SWITCH 용으로입력

 

    while(1)

    {

 

        Delay();

 

        if((PINE & 0x01) == 0x00)

        {

 

            // DIP 1 이ON 이면

            PORTA <<= 1;

            PORTA |= 0;        // 마지막LED 는ON 되게

        

        }

        else

        {

 

            //     DIP 1이OFF 이면

            PORTA >>=1;

            PORTA |=0x80;    // 처음LED 는OFF 되게

 

        }    

    }

}

 

 

 

 

 

 

전체 소스 ( AVRStudio 컴파일용)

 

 

 




Posted by WhiteAT
,

 

PC에서 받은 데이터를 CLCD에 출력하는 예제입니다.

 

 

 

<Character LCD 초기화>

 

 

 

 

 

 

< PC로부터 수신된 데이터 출력 >

 

 

 

 

 

< PC프로그램 화면 >

http://avr128.com/35 에 있는 시리얼 통신 프로그램을 사용했습니다.

 

 

 

윈도우에 기본적으로 제공되는 하이퍼터미널 프로그램을 사용해도 됩니다.^^

 

 

 

 

원문은 http://avr128.com 에 있습니다.

 

 

 

 

 

 

 

주요 코드

 

main.c 일부

/*

    EX_09_02.c

 

    PC에서USART0 로받은데이터를LCD에출력

    AVRStudio 4.18

    2011-08-16

 

    http://avr128.com

 

*/

 

#include <avr/io.h>

#include "WAT128.h"

 

int main()

{

    INT16S iRxData;

 

    OpenSCI0(57600);    // USART 0 열기

 

    CLCD_Init();        // LCD 초기화

 

    while(1)

    {

        iRxData=GetByte0();

        if( 0<= iRxData && iRxData<=255 ){

            

            // CLCD 에출력

            CLCD_PutChar(iRxData);

            PutChar0(iRxData); // echo 보내기

        }

    }

}

 

 

 

 

 

 

전체 소스

 


 

Posted by WhiteAT
,

 

그래픽 LCD 에 영문, 원, 사각형 선(라인)을 출력 하는 예제입니다.

 

 

 

 

 

 

원문은 http://avr128.com 에 있습니다.

 

 

 

 

주요 코드

 

main.c 일부

/*

    

필요한보드

    1. WAT-AVR128 (모듈)

    2. WAT-AVR128 EXT (확장보드)

    3. WAT-GLCD (모노그래픽LCD)

 

기능

    그래픽LCD 에사각형, 원, 라인을그린다.

 

 

    http://avr128.com

 

    

    2011-08-10 : 사각형, 원, 라인그리기기능추가

 

*/

 

 

#include <avr/io.h>

#include "WAT128.h"

 

 

#ifdef _USE_GLCD_

#include "gfont.h"

#endif

 

 

int main(){

 

    int i=0;

 

 

//    OpenSCI0(57600); // 디버깅포트

 

    GLCD_Init();

    GLCD_String(0,0," AVR128.com");

 

 

    // 외각선(사각형) 그리기

    GLCD_DrawRect(0,0,127,63);

 

    // 대각선그리기

    GLCD_DOT_Line(0,0,127,63);

    GLCD_DOT_Line(0,63,127,0);

 

    // 원그리기

    GLCD_DOT_DrawCircle(64,32,10);

    GLCD_DOT_DrawCircle(32,32,14);

    GLCD_DOT_DrawCircle(96,32,14);

 

    while(1)

    {

 

    }

}

 

 

 

 

 

 

wat128.h 일부

// 점찍기

void GLCD_SetPixel(int x1,int y1,BOOL _b);

 

// 라인그리기

void GLCD_DOT_Line(int x1,int y1,int x2,int y2);

 

// 원그리기

void GLCD_DOT_DrawCircle(int x1,int y2,int _size);//

 

// 사각형그리기

void GLCD_DrawRect(int x1,int y1,int x2,int y2);

 

 

 

 

 

wat128.c 일부

 

void GLCD_SetPixel(int x1,int y1,BOOL _b)

{

    BYTE byteCS = 0;

    BYTE byteData;

 

    if(x1>=128 || y1>=64)

        return;

 

    if(x1<64 )

    {

        byteCS = 0x01;    

    }

    else

    {

        x1 = x1%64;

        byteCS = 0x02;

    }

 

 

    GLCD_Command(byteCS,0x40 + x1);    // x 좌표지정

    GLCD_Command(0x00,0xB8 + y1/8);    // y 좌표지정

 

 

    GLCD_ReadData(byteCS); //read 하면처음에이상한값이나온다;; 그냥버림

    

 

    byteData = GLCD_ReadData(byteCS);

 

    if(_b==1)

        byteData |= 1<<(y1%8);

    else

        byteData &= ~(1<<(y1%8));

 

    GLCD_Command(byteCS,0x40 + x1);    // x 좌표지정

    GLCD_Command(0x00,0xB8 + y1/8);    // y 좌표지정

 

    GLCD_WriteData(byteCS, byteData,0);

 

}

 

 

void GLCD_DOT_Line(int x1,int y1,int x2,int y2)

{

    int i;

    int y=y1;

    for(i=x1;i<=x2;i++)

    {

        if(y1 <y2)

            y = y1+(i-x1)*(y2-y1)/(x2-x1);

        else

            y = y1-(i-x1)*(y1-y2)/(x2-x1);

        GLCD_SetPixel(i,y,1);

    }

 

}

 

void GLCD_DOT_DrawCircle(int x1,int y1,int _size)

{

    int i;

    int j;

    int y=0;

    int Lasty=0;// dot 간의간격이클경우임의의선을그려준다.

 

    for(i=x1-_size;i<=x1+_size;i++)

    {

        y= round(sqrt((_size*_size )-(i-x1)*(i-x1)));

 

        GLCD_SetPixel(i,y1+y,1);

        GLCD_SetPixel(i,y1-y,1);

 

        if(Lasty !=0)

        {

            // 좌측처리

            if(Lasty +1< y1+y)

            {

                // dot 사이의간격이너무벌어진것이다.

                for(j=1;j<(y1+y)-Lasty;j++)

                {

 

                    GLCD_SetPixel(i-1,y1-y+j,1);    // 좌측상단

                    GLCD_SetPixel(i-1,y1+y-j,1);// 좌측하단에끊어진부분

 

                    //sprintf(g_temp,"\r\nLasty:%dm j:%d",Lasty,j);

                    //PutString0(g_temp);

 

                }

 

            }

            // 우측처리

             else if(Lasty -1 > y1+y)

            {

                // dot 사이의간격이너무벌어진것이다.

                for(j=1;j<Lasty - (y1+y);j++)

                {

                    sprintf(g_temp,"\r\nLasty:%dm i:%d, j:%d, y1+y-j:%d",Lasty,i,j,y1+y-j);

                    PutString0(g_temp);

 

                     GLCD_SetPixel(i,y1-y-j,1);// 우측상단

                     GLCD_SetPixel(i,y1+y+j,1);// 우측하단에끊어진부분

 

 

                }

 

            }

 

        }

 

        Lasty = y1+y;

    }

}

 

void GLCD_DrawRect(int x1,int y1,int x2,int y2)

{

 

    int i=0;

    for(i=x1;i<=x2;i++)

    {

        GLCD_SetPixel(i,y1,1);

        GLCD_SetPixel(i,y2,1);

 

    }

    for(i=y1+1;i<=y2-1;i++)

    {

        GLCD_SetPixel(x1,i,1);

        GLCD_SetPixel(x2,i,1);

 

    }

 

 

 

}

 

 

 

 

 

전체 소스

 



Posted by WhiteAT
,

 

 

WAT-KEY 4x4 예제

 

WAT-KEY 4x4 배열을 PC 에서 실시간으로 모니터링 하는 예제

http://avr128.com/27

 

 

 

 

WAT-IO&ADC 예제

 

로터리 스위치의 값을 FND 4자리 중 제일 앞자리에 표시하는 예제

http://avr128.com/25

 

가변 저항의 값에 따라 LED 를 켜는 예제

http://avr128.com/24

 

 

 

Posted by WhiteAT
,

WAT-AVR128_EXT 보드

AVR키트 2011. 7. 20. 15:53

 

 

다른 보드에 연결

 

WAT-AVR128_EXT 보드(확장 보드)를 사용하면 다른 보드와 쉽게 연결 할 수 있습니다.

 

 

 

보드명

보드 설명

WAT-KEY 4x4

4x4 배열의 매트릭스 키보드 보드

WAT-CLCD

Character LCD 보드

WAT-GLCD

Graphics LCD 보드

WAT-IO&ADC

LED, FND 와 가변 저항 테스트 보드

추가 예정

 
   

 

 

 

 

WAT-KEY 4x4 보드

 

WAT-KEY 4x4 보드

4x4 배열로 스위치를 장착하여 MCU의 8개의 핀과 VCC 핀만으로 16개의 스위치를 제어하는 예제를 제공합니다.

 

 

 

 

 

 

 

Posted by WhiteAT
,