실험 키트

 

WAT-AVR128 모듈 알아보기

WAT-IO&ADC 모듈 알아보기

 

 

 

 

 

 

 

ATMEGA128 모듈에 연결

 

WAT-AVR128 모듈의 PORTA는 LED, PORTB는 DIP SWITCH, PORTC는 FND SELECT, PORTE는 FND DATA, PORTE는 ADC 에 연결하여 PC 프로그램에서 제어 및 상태를 실시간으로 모니터링 하는 예제입니다.

 

 

 

WAT-AVR128 모듈

WAT-IO&ADC 모듈

PORTA

FND DATA

PORTB

 

PORTC

FND SELECT, ROTARY SWITCH

PORTD

DIP SWITCH

PORTE

LED

PORTF

ADC

 

 

ATEMGA128 펌웨어 코드

  /*

    USART0 로보드의상태PC로전송

    PC에서LED, BUZZER, FND 제어

    AVRStudio 4.18

*/

 

#include <avr/io.h>

#include "WAT128.h"

 

BYTE g_FNDData[4]={1,2,3,4};

BYTE g_BUZZER = 0;

BYTE g_LED = 0;

 

UINT16 g_adcCDS;    // CDS 값보관

UINT16 g_adcVR;    // 가변저항값보관

 

void OperDisplayFND()

{

    DisplayFND4(g_FNDData[0],g_FNDData[1],g_FNDData[2],g_FNDData[3]);

}

 

INT16 g_byteOperPCTXTimer = 0;

void OperPCTX()

{

    if(--g_byteOperPCTXTimer>0)

        return;

 

    PutChar0(0x02);                        // 0 시작신호

    PutChar0(PIND);                        // 1 DIP SWITCH

    PutChar0(GetRotaryInt());             // 2 ROTARY

    PutChar0(g_adcCDS>>8);                // 3 CDS 상위값

    PutChar0(g_adcCDS);                // 4 CDS 하위값

    PutChar0((g_adcVR)>>8 &0xFF); // 5 가변저항상위값

    PutChar0(g_adcVR&0xFF);                // 6 가변저항하위값

    PutChar0(0x03); // 7

    PutChar0(0xCC);                        // 8 체크섬

    PutChar0(0x03);                        // 9 끝신호

 

    g_byteOperPCTXTimer = 20;

 

}

 

// 가변저항, CDS 값을ADC로읽기

void OperReadADC()

{

    INT16 uiTemp; // 임시변수

 

    g_adcCDS = 0;

    // 노이즈를생각해서값을번읽어평균을낸다.

 

    for(uiTemp = 0; uiTemp<16;uiTemp++)

    {

        ADMUX=0x40 | 0x00;

        ADCSRA = 0xD7;

        while((ADCSRA & 0x10) != 0X10);

        g_adcCDS += ADCL + (ADCH*256);

    }

 

    g_adcCDS>>=4;

 

    g_adcVR = 0;

    // 노이즈를생각해서값을번읽어평균을낸다.

 

    for(uiTemp = 0; uiTemp<16;uiTemp++)

    {

        ADMUX=0x40 | 0x01;

        ADCSRA = 0xD7;

        while((ADCSRA & 0x10) != 0X10);

        g_adcVR += ADCL + (ADCH*256);

    }

 

    g_adcVR>>=4;

}

 

int main()

{

 

    BUZZER_INIT; // BUZZER 초기화

    OpenSCI0(115200);    // USART 0 열기 

    InitFND4(); // FND 초기화 

    InitADC();    // ADC 초기화

 

    DisplayFND4(3,4,5,6);

    InitRotary();

    

    DDRD = 0x00; // 딥스위치를입력으로설정

    DDRE = 0xFE; // LED

 

 

    while(1)

    {

        BUZZER_OFF;

        OperDisplayFND();

        OperReadADC();

        

        OperPCTX();

 

        if(0x02 ==GetByte0())

        {

            UINT16 uiData = 0;

            uiData = GetByte0(); //1

            uiData<<=8;

            uiData += GetByte0(); //2

 

            //buzzer

            g_BUZZER = GetByte0();

 

                

            g_LED =    GetByte0(); //4

            GetByte0(); //5

            GetByte0(); //6

            GetByte0(); //7

            if(0xCC == GetByte0() && 0x03 == GetByte0() )

            {

                if( g_BUZZER)

                {

                    BUZZER_ON;

                    DelayMS(2);

                }

 

                // PC에서받은LED 값을출력

                PORTE =~((g_LED)&0xFC);

 

                // FND 표시

                g_FNDData[0]=((uiData/1000)%10);

                g_FNDData[1]=((uiData/100)%10);

                g_FNDData[2]=((uiData/10)%10);

                g_FNDData[3]=(uiData%10);

            }

        }    

    }

} 

 

윈도우 코드(통신 처리 부분)

try

{

        // 이번에 수신된 데이터 m_byteArray(QUEUE) 에 넣기

        for( int i=1; i<=nRcvSize; i++ )

        {

            m_byteArray.Add(m_CommPort.m_byRcvBuf[i]);

        }

        

        // 시작 신호 체크

        while(m_byteArray.GetSize()>0)

        {

            if(m_byteArray.GetAt(0) != 0x02)

            {

                m_byteArray.RemoveAt(0);

                continue;

            }

            else

            {

                break;

            }

        }

        

        CString strData;

        CString strTemp;

        if(m_byteArray.GetSize()>=10)

        {

            if(m_byteArray.GetAt(0) == 0x02 && m_byteArray.GetAt(9) == 0x03)

            {

                // DIP SWITCH 체크

                byteTemp = m_byteArray.GetAt(1);

                

                UpdateData(TRUE);

                m_bDIP8 = ((byteTemp & 0x80)!=0x80);

                m_bDIP7 = ((byteTemp & 0x40)!=0x40);

                m_bDIP6 = ((byteTemp & 0x20)!=0x20);

                m_bDIP5 = ((byteTemp & 0x10)!=0x10);

                m_bDIP4 = ((byteTemp & 0x08)!=0x08);

                m_bDIP3 = ((byteTemp & 0x04)!=0x04);

                m_bDIP2 = ((byteTemp & 0x02)!=0x02);

                m_bDIP1 = ((byteTemp & 0x01)!=0x01);

                

                // 로터리 스위치 값 읽기

                m_strRotary.Format("%d",m_byteArray.GetAt(2));

                

                // CDS 값 읽기

                uiTemp = m_byteArray.GetAt(3);

                uiTemp <<=8;

                uiTemp += m_byteArray.GetAt(4);

                m_prgCDS.SetPos(1023 - uiTemp);

                

                // 가변저항 값 읽기

                uiTemp = m_byteArray.GetAt(5);

                uiTemp <<=8;

                uiTemp += m_byteArray.GetAt(6);

                m_prgVR.SetPos(1023 - uiTemp);

                

                // 화면 갱신

                UpdateData(FALSE);                

            }

            

            // 마지막에 처리한 데이터 보기

            for(int i=0;i<10;i++)

            {

                strTemp.Format( "%02X ", m_byteArray.GetAt(i) );

                strData+=strTemp+ " ";

            }

            strData+= "\n";

            

            m_byteArray.RemoveAt(0,10);            

        }        

        

        m_ReceiveData = strData;        

        UpdateData(FALSE);

        

}

catch (CException* )

{

        

}

 

 

윈도우 프로그램에서 FND에 5634, LED 모두 OFF 값을 전송하며 ATMEGA128 보드에서 딥 스위치4번 OFF, CDS값 최대, 가변저항 값 최소, 로터리 스위치 값 3을 전송되면 아래와 같이 됩니다.

< WAT-IO&ADC에 연결한 윈도우 프로그램 >

윈도우 프로그램에서 FND에 5667, LED 3,5,7번 ON 값을 전송하며 ATMEGA128 보드에서 딥 스위치1,3,5,7,번 ON, CDS값 최대, 가변저항 값 최대, 로터리 스위치 값 9을 전송되면 아래와 같이 됩니다.


 

 

다운로드



매뉴얼: pdf.gif WAT-IO_ADC매뉴얼.pdf

펌웨어EX_09_03.zip

윈도우 프로그램(MFC 6.0):실행파일.EXE

윈도우 프로그램(C# 2008): 실행파일.EXE
(
실행파일의 소스코드는 제품과 함께 제공됩니다.)

 


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


Posted by WhiteAT
,

 

 

16x2 라인의 캐릭터 LCD 를 제어해 보겠습니다.

 

 

< ATMEGA128 과 캐릭터 LCD 연결 회로도 일부 >

 

 

 

 

 

 

 

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

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

 

 

캐릭터 LCD 우측 그림처럼 출력하는 예제입니다.

abcdefghijklmnop

0123456789ABCDEF

 

 

 

 

 

 

 

 

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

 

 

 

 

주요 코드

 

main.c 일부

/*

    EX_02_01.c

 

    필요한보드

    1. WAT-AVR128 (모듈)

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

    3. WAT-CLCD (캐릭터그래픽LCD)

 

    Character LCD에영문/숫자출력

    AVRStudio 4.18

    2011-10-04

 

    홈페이지: http://whiteat.com

    MCU자료실: http://avr128.com

    쇼핑몰: http://kit128.com

 

*/

 

#include <avr/io.h>

#include "WAT128.h"

 

int main()

{

 

    CLCD_Init();        // LCD 초기화

 

    CLCD_PutChar('a');

    CLCD_PutString(1,0,"bcdefghijklmnop");

    CLCD_PutString(0,1,"0123456789ABCDEF");

 

    while(1)

    {

    }

}

 

 

 

 

 

 

 

전체 소스 ( AVRStudio용)

EX_02_01.ZIP

 

 

Posted by WhiteAT
,

  

 

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
,

 

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
,

 

그래픽 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
,