AtmelStudio7 (AVRStudio7) 프로그램 다운로딩

앞에서 AtmelStudio7을 이용하여 컴파일 하는 방법을 포스팅 하였습니다. 이제 AVR 보드에 프로그램을 다운로딩하는 방법을 알아보겠습니다.
(요즘은 보드에 프로그램 넣는 것을 ‘업로딩’이라고도 합니다.)

 

프로그래밍 설정

[Tools] => [Device Programming]를 실행합니다.

[WAT-ISP29] AVR ISP 가 연결된 포트를 선택합니다.

 

Device 를 선택합니다.

 

[Apply]를 클릭하면 더 자세한 설정창이 표시됩니다.

 

설정은 보드 환경에 맞게 해주시고, 잘 모르면 Close로 닫아도 됩니다.

 

[Start Without Debugging]으로 다운로드 후 실행을 합니다.

 

PORTB에 연결된 LED 가 약 1초 간격으로 ON/OFF 를 반복합니다.

 

아래와 같이 ‘ISP on STK500’ 상태에서 프로그래밍 다운로딩이 가능합니다.
만약 ‘Simulator’ 상태라면 클릭하여 변경할 수 있습니다.

 

이 예제는 아래의 코드를 사용하였습니다.

 

AVR ISP 자료들

AVR Studio4
AVR Studio7

 

 

AVR ISP 프로그램 케이블 제품구매

WAT-AVR ISP (10핀 플랫케이블) 는 http://kit128.com/goods/view?no=10 에서
WAT-AVR ISP (6핀 케이블) 는 http://kit128.com/goods/view?no=4 에서

WAT-ISP79 AVR ISP(표준10핀) 케이스 포함은 http://kit128.com/goods/view?no=79 에서
WAT-ISP79 AVR ISP(표준10핀) (케이스 미포함)은 http://kit128.com/goods/view?no=113 에서

[WAT-ISP29] USB AVR ISP 프로그램 케이블 (표준10핀)는 http://kit128.com/goods/view?no=29 에서 구매하실수 있습니다.

 


Posted by WhiteAT
,

WAT-AVR128_PLUS 모듈

AVR키트 2013. 4. 8. 17:21




WAT-AVR128 모듈과
확장 보드의 기능을 합친 모듈 입니다.



WAT-AVR128 보드 얼.pdf

WATAVR128_manual.pdf

AVR128 모듈을 다른 보드에 연결하여 사용할수 있는 확장 보드입니다.



PORTA,
PORTB,
PORTC,
PORTD,
PORTE,
PORTF

등의 포트를 다른 보드와 연결해서 사용할 수 있습니다.

 

 

 

 

 

 

 

 

쇼핑몰에서 구매하기

 

 

 

 

 

Posted by WhiteAT
,

 

실험 키트

 

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
,

 

다운로드

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

펌웨어 소스코드:EX_09_03.zip

   

 

 

 

 

제품 소개

   

WAT-IO&ADC 모듈은 AVR, Cortex-M3, PIC 등의 MCU와 10P Flat 케이블을 연결하여 Input/Output을 실험할 수 있는 모듈입니다. FND, LED, BUZZER 을 제어할 수 있으며 가변저항, CDS(빛의 밝기), 딥 스위치, 로터리 스위치의 값을 읽을 수 있는 제품입니다.

 

 

특징

 

항목

내용

FND

4 digit

LED

8 port

BUZZER

1 port (5V)

가변저항

5K

CDS

CDS

딥 스위치

8 channel

로터리 스위치

10R

크기

85 mm x 85 mm

인터페이스

Digital Input/Output

 

 

구조

    

   

 

 

외형

 

 

 

 

 

 

 

 

회로도

 

 

 

외부 인터페이스

 

 

커넥터

 

 

 

 

번호

핀명

설명

1

D0

DATA (bit 0)

2

D1

DATA (bit 1)

3

D2

DATA (bit 2)

4

D3

DATA (bit 3)

5

D4

DATA (bit 4)

6

D5

DATA (bit 5)

7

D6

DATA (bit 6)

8

D7

DATA (bit 7)

9

VCC

전원 ( DC 5V)

10

GND

그라운드

< FND DATA >

 

번호

핀명

설명

1

RO0

로터리 스위치 핀 0

2

RO1

로터리 스위치 핀 1

3

RO2

로터리 스위치 핀 2

4

RO3

로터리 스위치 핀 3

5

FND0

FND 0 선택 핀

6

FND1

FND 1 선택 핀

7

FND2

FND 2 선택 핀

8

FND3

FND 3 선택 핀

9

VCC

전원 ( DC 5V)

10

GND

그라운드

< FND SELECT, ROTARY SWITCH >

 

번호

핀명

설명

1

LED0

LED 0 제어 핀

2

LED1

LED 1 제어 핀

3

LED2

LED 2 제어 핀

4

LED3

LED 3 제어 핀

5

LED4

LED 4 제어 핀

6

LED5

LED 5 제어 핀

7

LED6

LED 6 제어 핀

8

LED7

LED 7 제어 핀

9

VCC

전원 ( DC 5V)

10

GND

그라운드

< LED >

 

 

 

번호

핀명

설명

1

AVCC

ADC 컨버터용 전압

2

AREF

ADC 컨버터용 기준 전압

3

CDS

CDS 센서 연결 핀

4

VR

가변저항 연결 핀

5

   

6

   

7

   

8

BUZ

부저 연결 핀

9

VCC

전원 ( DC 5V)

10

GND

그라운드

< ADC >

 

번호

핀명

설명

1

DIP0

딥스위치 1번 핀

2

DIP1

딥스위치 2번 핀

3

DIP2

딥스위치 3번 핀

4

DIP3

딥스위치 4번 핀

5

DIP4

딥스위치 5번 핀

6

DIP5

딥스위치 6번 핀

7

DIP6

딥스위치 7번 핀

8

DIP7

딥스위치 8번 핀

9

VCC

전원 ( DC 5V)

10

GND

그라운드

< DIP SWITCH >

 

 

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 펌웨어 코드

  /*

    EX_09_03.c

 

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

            }

        }    

    }

} 

 

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

private void tmrRxData_Tick(object sender, EventArgs e)

{

btnRxSignal.BackColor = Color.White;

 

 

if (null == m_serialPort) return;

if (!m_serialPort.IsOpen) return;

 

int iRecSize = m_serialPort.BytesToRead; // 수신된 데이터 갯수

 

 

// AVR에서 10바이트식 보내는데 10바이트 이상이 들어 왔는지 체크

if (iRecSize >= 10)

{

byte[] buff = new byte[iRecSize]; // 임시 변수

 

// 시리얼 포트에서 데이터를 가져오자.

m_serialPort.Read(buff, 0, iRecSize);

 

// 맨앞의 값이 0x02 인지 체크

if (buff[0] !=0x02 )

{

for(int i=0;i<iRecSize-1;i++)

{

buff[i] = buff[i+1];

}

}

 

 

if (buff[0] == 0x02 && buff[8] == 0xCC && buff[9] == 0x03)

{

this.txbRotaryValue.Text = buff[2].ToString();

 

this.btnDIP1.BackColor = ((buff[1] & 0x01) == 0x01) ? Color.White : Color.Green;

this.btnDIP2.BackColor = ((buff[1] & 0x02) == 0x02) ? Color.White : Color.Green;

this.btnDIP3.BackColor = ((buff[1] & 0x04) == 0x04) ? Color.White : Color.Green;

this.btnDIP4.BackColor = ((buff[1] & 0x08) == 0x08) ? Color.White : Color.Green;

this.btnDIP5.BackColor = ((buff[1] & 0x10) == 0x10) ? Color.White : Color.Green;

this.btnDIP6.BackColor = ((buff[1] & 0x20) == 0x20) ? Color.White : Color.Green;

this.btnDIP7.BackColor = ((buff[1] & 0x40) == 0x40) ? Color.White : Color.Green;

this.btnDIP8.BackColor = ((buff[1] & 0x80) == 0x80) ? Color.White : Color.Green;

 

 

this.trbCDS.Value = (Convert.ToInt32(buff[3]) << 8) + (Convert.ToInt32(buff[4]) << 0);

this.trbCDS.BackColor = Color.FromArgb((1024-this.trbCDS.Value) / 4, (1024-this.trbCDS.Value) / 4, (1024-this.trbCDS.Value) / 4);

this.trbVR.Value = (Convert.ToInt32(buff[5]) << 8) + (Convert.ToInt32(buff[6]) << 0);

 

 

 

btnRxSignal.BackColor = Color.Green;

}

}

 

// AVR 모드로 명령 전송

this.SendToBoard();

 

}

 

 

윈도우 프로그램에서 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을 전송되면 아래와 같이 됩니다.


원문: http://whiteat.com/57035


 

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 프로그램과 프린터 포트를 이용

- 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
,