가변저항은 저항 값을 변경할 수 있는 저항입니다. 주로 고정되지 않은 저항 값이 필요할 때 사용되며 AD 테스트 회로에서 많이 사용됩니다.

 

 

회로에서는 아래와 같이 표시되며 각 단자를 A, B, WIPER 라고 합니다.

 

가변저항 값이 5K 라면

A-B 간의 저항 값은 항상 5K 이고, A-WIPER 간의 저항 값과 B-WIPER 간의 저항 값의 합은 항상 5K 입니다.

A-WIPER 의 저항 값이 1K라면 B-WIPER 간의 저항 값은 4K 가 됩니다.

 

 

 

 

 

 

 

 

그 중 3362 시리즈가 많이 쓰는 중 가변 저항 중 하나 입니다.

전자부품 쇼핑몰에서는 개당 250 ~ 280원 정도의 가격이며,

구로중앙유통단지에서는 50개 묶음으로 개당 130원 정도 합니다.(2010년)

 

 

 

 

 

 

 

 

 

 

 

A, B, WIPER 핀 찾기

 

가변저항 노브를 대충 가운데 오게 합니다. (그냥 한 쪽 끝이 아니면 됩니다. ^^)

그 중 2개의 핀 사이의 저항 값을 측정하여 전체 저항 값이 나오면 A, B 가 되는 겁니다.

(가변저항은 극성이 없어서 A, B 순서는 중요하지 않습니다. ^^)

이제 나머지 핀이 WIPER 이 되는 거죠^^

 

 

 

 

'데이터시트' 카테고리의 다른 글

ATMEGA8A-AU  (0) 2012.03.07
Package information - SO16−28 [WIDE]  (0) 2011.08.28
키 패드 제어, 매트릭스 키, 스위치 제어  (0) 2011.07.15
LED ON  (0) 2011.01.30
5101ASR , FND Anode  (0) 2011.01.22
Posted by WhiteAT
,

 

 

 

스위치를 각각 아래처럼 연결하여 각 스위치의 카운터를 LCD에 출력하는 예제입니다.

// PA0 : SW1 연결,

// PA2 : SW2 연결

// PA4 : SW3 연결

// PA6 : SW4 연결

// PA7 : SW5 연결

 

 

 

 

 

WATSIM 시뮬레이션 결과

 

< SW1은 5번, SW2 는 3번, SW3은 1번, SW4는 2번 눌렀을 때의 시뮬레이션 결과입니다. >

 

 

 

 

 

WAT-AVR128 보드에서의 실행

 

 

 





WAT-AVR128 에서의 실행 결과 입니다.

 

 

 

 

 

WAT-AVR128 에서의 실행 결과 입니다. (ZOOM)

 

 

 

 

 

WAT-AVR128 과 WAT-CLCD 조립 사진 입니다.

 

 

 









 

 

메인 소스 AVR Studio 4.18 용

 

 

/**********************************************

 

switch

// PA0 : SW1 연결, SW1 카운터 증가

// PA2 : SW2 연결, SW2 카운터 증가

// PA4 : SW3 연결, SW3 카운터 증가

// PA6 : SW4 연결, SW4 카운터 증가

// PA7 : SW5 연결, 모든 카운터 초기화

 

Character LCD Control

 

PORTB ==> LCD DataLine

LCD_DATA_PORT.5 ==> LCD E

LCD_DATA_PORT.3 ==> LCD RW

LCD_DATA_PORT.1 ==> LCD RS

 

Main Clock : 11.0592Mhz

 

 

 

// Character LCD 에SW 의눌러진카운터표시

 

Tools : AVR Studio 4.16

테스트보드: WAT-AVR128 보드

 

http://avr128.com

 

*********************************************/

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include <stdio.h>

 

#include "wat128.h"

 

 

#define SW1_BIT 0

#define SW2_BIT 2

#define SW3_BIT 4

#define SW4_BIT 6

#define SW5_BIT 7

 

 

 

UINT8 chTemp[17];

int g_PushCount[4] = {0,0,0,0};

 

// 스위치(키)의입력값이변경되었는지와마지막값확인용

unsigned char g_keyvalue = -1; // -1 은입력된값이없을때

unsigned char g_lastkeyvalue = -1; // -1 은입력된값이없을때

 

 

void CheckKey()

{

    g_keyvalue = PINA & 0xFF;

 

    // key 값을처음받을때는카운터하지않는다.

    if(g_lastkeyvalue == -1)

    {

        g_lastkeyvalue = g_keyvalue;

        return;

    }

 

 

// switch 의값이변경되었을때만처리하자.

 

if( g_keyvalue != g_lastkeyvalue)

{

 

if((g_lastkeyvalue& (1<<SW1_BIT)) && !(g_keyvalue & (1<<SW1_BIT)))

{

g_PushCount[0] ++;

if(g_PushCount[0] >999) g_PushCount[0] = 0;

}

 

    if((g_lastkeyvalue& (1<<SW2_BIT)) && !(g_keyvalue & (1<<SW2_BIT)))

{

         g_PushCount[1] ++;

if(g_PushCount[1] >999) g_PushCount[1] = 0;

        }

 

if((g_lastkeyvalue& (1<<SW3_BIT)) && !(g_keyvalue & (1<<SW3_BIT)))

{

             g_PushCount[2] ++;

if(g_PushCount[2] >999) g_PushCount[2] = 0;

}

 

if((g_lastkeyvalue& (1<<SW4_BIT)) && !(g_keyvalue & (1<<SW4_BIT)))

{

g_PushCount[3] ++;

if(g_PushCount[3] >999) g_PushCount[3] = 0;

}

 

if((g_lastkeyvalue& (1<<SW5_BIT)) && !(g_keyvalue & (1<<SW5_BIT)))

{

g_PushCount[0] = 0;

g_PushCount[1] = 0;

g_PushCount[2] = 0;

g_PushCount[3] = 0;

}

 

g_lastkeyvalue = g_keyvalue;

 

}

}

 

 

 

int main()

{

 

    // clcd 초기화

    CLCD_Init();

 

    // sw 초기화

    ClearBit(CLCD_CONTROL_PORT_DIR,SW1_BIT);

    ClearBit(CLCD_CONTROL_PORT_DIR,SW2_BIT);

    ClearBit(CLCD_CONTROL_PORT_DIR,SW3_BIT);

    ClearBit(CLCD_CONTROL_PORT_DIR,SW4_BIT);

    ClearBit(CLCD_CONTROL_PORT_DIR,SW5_BIT);

 

 

 

    while (1)

    {

 

        CheckKey();

 

        sprintf(chTemp,"S1:%4d S2:%4d",g_PushCount[0],g_PushCount[1] );

         CLCD_PutString(0,0,chTemp);

        sprintf(chTemp,"S3:%4d,S4:%4d",g_PushCount[2],g_PushCount[3] );

         CLCD_PutString(0,1,chTemp);

 

    }

 

}

 

 

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

Character LCD – 1EA

AX07001

Switch – 5EA

POWER 5V/1A

 

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.2 이상)으로 패치 하시기 바랍니다.

 

실행파일:

 

 

프로젝트 파일(소스 포함):

 

 

 

 

 

 

Posted by WhiteAT
,

 

PORTC0 -> PORTC7 -> PORTC0 에 연결된 LED 를 무한히 좌우/상하로 이동하는 예제입니다.

 

< 시작화면: PC0 LED 를 ON 합니다. >

 

 

 

 

 

< 100mS경과: PC1 의 LED 를 ON 합니다. >

 

 

 

 

< 200mS경과: PC1 의 LED 를 ON 합니다. >

 

 

 

 

 

< 700mS경과: PC7 의 LED 를 ON 합니다. >

 

 

전체 소스 CodeVision 1.24.0 용

 

 

/*********************************************

LED 좌우(상하)로이동하기

 

PC0 -> PC1 -> PC2 -> PC3 -> PC4 -> PC5 -> PC6 -> PC7

-> PC6 -> PC5 -> PC4 -> PC3 -> PC2 -> PC1 -> PC0 순으로

무한이이동하는예제

 

 

PORTC ==> LED 연결

 

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

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

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    unsigned char byteData=0xFE;

    char bUp= 1; // 1:UP, 0: DOWN

 

    // 포트C 를출력으로설정

    DDRC=0xFF;

      

    // PB0 LED ON

    PORTC = byteData;

 

 

    while (1)

    {

    Delay_ms(100);

         if(byteData == 0x7F)

         {

             bUp = 0; // up -> down

        }

        else if(byteData == 0xFE)

         {

             bUp = 1; // down -> up

        }        

        if(bUp)

        {

        byteData <<= 1;

        byteData |= 1;

    }

    else

    {

    byteData >>= 1;

        byteData |= 0x80;

      

    }

      

      

         PORTC = byteData;

           

 

         

 

 

    }     

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.2 이상)으로 패치 하시기 바랍니다.

 

실행파일:   

 

 

프로젝트 파일(소스 포함):  

 

 

 

 

 

 

 

 

Posted by WhiteAT
,

  

PORTB0 ~ PORTB7 에 연결된 LED 를 교차 ON/OFF 하는 예제입니다.

 

< 시작화면: PB1, PB3, PB5, PB7 의 LED 를 ON 합니다. >

 

 

 

 

 

< 100mS경과: PB0, PB2, PB4, PB6 의 LED 를 ON 합니다. >

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

 

/*********************************************

LED 교차 점소등하기

 

PA0, PA2, PA4, PA6 이 점등되면

PA1, PA3, PA5, PA7 이 소등되어

교차 점소등 함

 

PORTB ==> LED 연결

 

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

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

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

 

    // 포트 B 를 출력으로 설정

    DDRB=0xFF;

      

    // PB1, PB3, PB5, PB7 의 LED 를 ON

    PORTB = 0x55;

 

 

    while (1)

    {

    Delay_ms(100);

        // PB0, PB2, PB4, PB6 의 LED 를 ON

         PORTB = 0xAA;

         

        Delay_ms(100);

        // PB1, PB3, PB5, PB7 의 LED 를 ON

         PORTB = 0x55;

    }     

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.2 이상)으로 패치 하시기 바랍니다.

 

실행파일:

 

 

프로젝트 파일(소스 포함):

 

 

 

 

 

 

Posted by WhiteAT
,

 

PORTA에 연결된 LED 시프트

 

PORTA0 ~ PORTA7 에 연결된 LED 를 시프트하는 예제입니다.

 

< 시작화면: PA0의 LED 를 ON 합니다. >

 

 

 

 

< 500mS 경과: PA1의 LED 가 ON 됩니다. >

 

 

 

 

 

< 2500mS 경과: PA5의 LED 가 ON 됩니다. >

 

 

 

 

 

< 7500mS 경과: PA7의 LED 가 ON 됩니다. >

 

 

 

 

 

< 8000mS 경과: PA0의 LED 가 ON 됩니다. – 초기 상태와 동일 >

 

 

 

 

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

/*********************************************

LED 이동하기

PORTA ==> LED 연결

PA0 -> PA7 시프트

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

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

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    char byteA=0xFE;

 

    DDRA=0xFF;

    PORTA = byteA;

 

 

    while (1)

    {

    Delay_ms(500);

    byteA =     (byteA<<1) | 0x01;     

        if(0xff == byteA)

         byteA=0xFE;

           

PORTA = byteA;

}     

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.1 이상)으로 패치 하시기 바랍니다.

 

실행파일:

 

 

 

프로젝트 파일(소스 포함):

 

 

 

 

 

 

Posted by WhiteAT
,

 

4개의 키를 각각 누를 때마다 누른 횟수 증가 하는 예제

 

 

PORTA0 ~ PORTA3까지 스위치를 연결하고 각 스위치를 누를 때마다 카운터를 증가시켜 LCD에 출력 하는 CodeVisionAVR 예제입니다.

 

< 시작 화면: 모든 값이 0으로 표시됩니다 >

 

 

 

 

< SW1는 5번, SW2는 3번, SW3는 2번, SW4는 4번 눌렀을 때 결과입니다.

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

/*********************************************

Character LCD Control

PORTB ==> LCD DataLine

PORTA.7 ==> LCD E

PORTA.6 ==> LCD RW

PORTA.5 ==> LCD RS

 

PORTA.3 ==> SW1

PORTA.2 ==> SW2

PORTA.1 ==> SW3

PORTA.0 ==> SW4

 

Main Clock : 8Mhz

 

각키를누를때마다누른횟수증가하는예제

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

#include <stdio.h>

//#include <string.h>

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

#define LCD_RS 5

#define LCD_EA 7

#define LCD_DATA_PORT PORTB

#define LCD_CONTROL_PORT PORTA

 

void CLcdXY(BYTE x1, BYTE y1);

void CLcdCommand(BYTE data);

void CLcdOn();

BYTE CLcdBusyCheck();

void CLcdPutStrings(BYTE x, BYTE y, char *str);

void CLcdPutChar(BYTE chr);

void CLcdClear();

 

// time delay for us

void WaitUS(unsigned char time_us)        

{

    register unsigned char i;

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

    {

#asm

        PUSH R0 ;

        POP R0 ;

        PUSH R0 ;

        POP R0 ;

#endasm

    }

}

 

// time delay for ms

void WaitMS(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        WaitUS(250);

        WaitUS(250);

        WaitUS(250);

        WaitUS(250);

    }

}

 

 

char chTemp[17];

unsigned int g_iSwCount[4];

 

 

 

// 스위치(키)의입력값이변경되었는지와마지막값확인용

unsigned char keyvalue = -1; // -1 은입력된값이없을때

unsigned char lastkeyvalue = -1; // -1 은입력된값이없을때

 

 

 

void GetSW()

{

    keyvalue = PINA & 0x0F;

 

    // switch 의값이변경되었을때만처리하자.

    if( keyvalue != lastkeyvalue)

    {

 

        if((lastkeyvalue& 0x08) && !(keyvalue & 0x08))

        {

            g_iSwCount[0] ++;

            if(g_iSwCount[0] >999) g_iSwCount[0] = 0;

        }    

 

        if((lastkeyvalue& 0x04) && !(keyvalue & 0x04))

        {

            g_iSwCount[1] ++;

            if(g_iSwCount[1] >999) g_iSwCount[1] = 0;

        }

        if((lastkeyvalue& 0x02) && !(keyvalue & 0x02))

        {

            g_iSwCount[2] ++;

            if(g_iSwCount[2] >999) g_iSwCount[2] = 0;

        }

        

        if((lastkeyvalue& 0x01) && !(keyvalue & 0x01))

        {

            g_iSwCount[3] ++;

            if(g_iSwCount[3] >999) g_iSwCount[3] = 0;

        }

 

 

        lastkeyvalue = keyvalue;

    }

}

 

void main(void)

{

    DDRA = 0xF0;    

    DDRB = 0xFF;    

 

 

g_iSwCount[0]=0;

g_iSwCount[1]=0;

g_iSwCount[2]=0;

g_iSwCount[3]=0;

    

    SetBit(PORTD,LCD_EA);    // ENABLE

    ClearBit(PORTD,6);

 

 

    CLcdOn();

    CLcdClear();

 

    while (1)

    {

 

         sprintf(chTemp,"S1:%4d,S2:%4d." ,g_iSwCount[0],g_iSwCount[1]);

        CLcdPutStrings(0,0,chTemp);

         sprintf(chTemp,"S3:%4d,S4:%4d." ,g_iSwCount[2],g_iSwCount[3]);

        CLcdPutStrings(0,1,chTemp);

 

         GetSW();

    }

}

 

BYTE CLcdBusyCheck()

{

    WaitMS(1);

    

    return (0);

}

 

 

void CLcdPutStrings(BYTE x, BYTE y, char *str)

{

    int len = 0;

    CLcdXY(x,y);

    while(*str ){

        if(len>16) break;

        CLcdPutChar(*str++);

        len++;

    }

}

 

void CLcdPutChar(BYTE data)

{

    while(CLcdBusyCheck());

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    SetBit(LCD_CONTROL_PORT,LCD_RS);

    WaitUS(2);

    LCD_DATA_PORT= data;

    WaitUS(50);

    SetBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(50);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

}

 

void CLcdClear()

{

    CLcdCommand(1);

    WaitMS(1);

    CLcdCommand(2);

    WaitMS(1);

}

 

void CLcdXY(BYTE x, BYTE y)

{

    BYTE position;

    if(x>16) x = 0;

    switch(y)

    {

    case 0 :

        position = 0x80;

        break;

    case 1 :

        position = 0xC0;

        break;

    }

    CLcdCommand(position + x);

}

 

void CLcdCommand(BYTE data)

{

    while(CLcdBusyCheck()){}

    ClearBit(LCD_CONTROL_PORT,LCD_RS);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(1);

    LCD_DATA_PORT= data;

    WaitUS(50);

    SetBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(20);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(50);

}

 

void CLcdOn()

{

    CLcdCommand(0x01);// dummy

    CLcdCommand(0x38);

    CLcdCommand(0x0C );

    CLcdCommand(0x01);

    CLcdCommand(0x06);

    CLcdCommand(0x01);

    WaitMS(2);

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

ABC016002E57 – 1EA
Character LCD 16x2

Switch – 4EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.0 이상)으로 패치 하시기 바랍니다.

 

 실행파일 ( 0.2.1.0)




 WATSIM 프로젝트 파일과 Codevision 소스 파일



 

 

 

Posted by WhiteAT
,

 

Switch 4개를 각각 누를 때마다 FND 카운터 증가

 

 

Anode 4-digit FND (4401ASR2)를 PORTC 에 연결하고 COM 은 PORT0~ PORT3에 연결하여

스위치를 누를 때마다 각 자리수의 값이 증가하는 예제입니다.

 

 

 

< 시작 화면: 모든 값이 0으로 표시됩니다 >

 

 

 

 

 

< PA7 1번, PA6 2번, PA5는 8 번, PA4 는 5번 눌렀을 경우 >

 

 

 

 

전체 소스 AVR Studio 4.7 용

   

   

     

/**********************************************

 

//PA4~7에switch연결

// PA7 : FND 자리수증가

// PA6 : FND 자리수증가

// PA5 : FND 자리수증가

// PA4 : FND 자리수증가

// 스위치를누르면각각의FND 표시값증가( 0부터9까지반복표시)

 

 

Tools : AVR Studio 4.16

http://watsim.tistory.com

*********************************************/

 

 

#include <avr/io.h>

#include <avr/interrupt.h>

 

 

void DisplayFND();

void InitPort();

void GetSW( );

 

unsigned char g_Dig1=0,g_Dig2=0,g_Dig3=0,g_Dig4=0; // 각자리마다표시할수(범위: 0 ~9)

 

// FND DATA (FND 4401ASR2 용)

const unsigned char num[10]={

    0b00010100,        //0

    0b11010111,        //1

    0b01001100,        //2

    0b01000101,        //3

    0b10000111,        //4

    0b00100101,        //5

    0b00100100,        //6

    0b01010111,        //7

    0b00000100,        //8

    0b00000101        //9

};

 

// 스위치(키)의입력값이변경되었는지와마지막값확인용

unsigned char keyvalue = -1; // -1 은입력된값이없을때

unsigned char lastkeyvalue = -1; // -1 은입력된값이없을때

 

 

int main()

{

    InitPort();

 

    while(1)

    {

        GetSW();

        DisplayFND();

 

    }

}

 

void InitPort()

{

    DDRC = 0xFF;

    DDRA = 0x0F;

    DDRD = 0xFF;

 

    PORTC = 0x00;

    PORTA = 0xF0;

    PORTD = 0x55;

}

 

void DisplayFND()

{

    int i=0;

 

    PORTD = 1;

    PORTC = num[g_Dig1];

 

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

    {

        asm volatile(" PUSH R0 ");        

        asm volatile(" POP R0 ");        

 

    }

 

    PORTD = 2;

    PORTC = num[g_Dig2];

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

    {

        asm volatile(" PUSH R0 ");        

        asm volatile(" POP R0 ");        

 

    }

 

 

    PORTD = 4;

    PORTC = num[g_Dig3];

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

    {

        asm volatile(" PUSH R0 ");        

        asm volatile(" POP R0 ");        

 

    }

 

    PORTD = 8;

    PORTC =num[g_Dig4];

 

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

    {

        asm volatile(" PUSH R0 ");        

        asm volatile(" POP R0 ");        

 

    }

}

 

void GetSW()

{

 

    keyvalue = PINA >> 4;

 

 

    // switch 의값이변경되었을때만처리하자.

 

    if( keyvalue != lastkeyvalue)

    {

 

        if((lastkeyvalue& 0x08) && !(keyvalue & 0x08))

        {

            g_Dig1 ++;

            if(g_Dig1>9) g_Dig1 = 0;

        }    

 

        if((lastkeyvalue& 0x04) && !(keyvalue & 0x04))

        {

            g_Dig2 ++;

            if(g_Dig2>9) g_Dig2 = 0;

        }

        if((lastkeyvalue& 0x02) && !(keyvalue & 0x02))

        {

            g_Dig3 ++;

            if(g_Dig3>9) g_Dig3 = 0;

        }

        

        if((lastkeyvalue& 0x01) && !(keyvalue & 0x01))

        {

            g_Dig4 ++;

            if(g_Dig4>9) g_Dig4 = 0;

        }

 

 

        lastkeyvalue = keyvalue;

    }

 

 

}

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

FND 4401ASR2 ( Anode type ) – 1 EA

Switch – 4EA

POWER 5V/1A

 

 


실행파일 다운로드


이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

4401ASR2
부품을 사용하기 위해서는 패치 하시기 바랍니다.


Posted by WhiteAT
,

 

AT91SAM7S 시리즈 드라이버 설치

 

AT91SAM7S64를 배우기 위해서는 AT91SAM7S64 컨트롤러가 장착된 보드가 필요합니다.^^.

 

그 외에 한가지가 더 필요합니다.^^ (부트로더 사용시)

USB 케이블(5.0V 전원용, 파워 서플라이 대용이죠^^ )

 

 

 

 

드라이버 설치

 

보드 최초 연결 또는 드라이버 정보가 변경되었을 경우 드라이버를 설치해야 합니다.

처음 연결할 때는 아래와 같은 [새 하드웨어 발견] 메시지를 보여줄 겁니다.

 

 

 

 

 

그리고 [새 하드웨어 검색 마법사 시작] 창이 뜹니다.

[일단 한번 거절해 줍니다.^^ 아니오, 지금 연결 안 함]

 

 

 

 

atm6124.Inf 파일이 있는 경로를 지정해 줍니다.

 

 

 

 

 

적당한 드라이버 검색을 시작합니다.

 

 

 

 

 

하드웨어를 설치할 것인지의 물음에 OK 를 해주면

 

 

 

 

 

설치를 시작합니다.

 

 

 

 

설치 완료

 

 

 

 

 

 

 

장치 관리자에서 드라이브가 설치 된 것을 볼 수 있습니다.

(장치 명: atm6124.Sys ATMEL AT91xxxxx Test Board)

 

Posted by WhiteAT
,

 

AT91SAM7S 시리즈 사용시 주의 사항

 

AT91SAM7S64 회로 구성시 주의할 사항을 정리하였습니다.


1. TST, JTAGSEL, ERASE 핀을 사용하지 않을 때에는 GND 에 묶어 두어야 합니다.
      
        - 외부 노이즈에 의해 순간적으로 HIGH가 될 수 있는데,

이럴 경우에 플래시 내용이 삭제 되거나 (TST, EARSE 핀)

동작 중에 정지되는 경우가 있습니다 (JTAGSEL 핀)

 

 

Posted by WhiteAT
,

WATSIM128 이란?

WATSIM:소개 2011. 4. 8. 20:27

 

WATSIM128 이란?

 

ATMEGA128 (AVR) 마이크로 컨트롤러를 가상의 보드에서 시뮬레이션 할 수 있는 툴입니다.

 

 

일정 시간마다 1씩 증가하는 카운터

 

 

 

 

 

스위치 누름 상태에 따른 LED ON/OFF

 

 

 


 

 

 


































필독!!!! 주의 사항(2011 - 04 - 08 현재)

 

- WATSIM128 은 아직 안정화되지 않은 상태입니다.

- switch, LED, Charater LCD, Resister, FND 만 연결할 수 있습니다.

- 시간이 부정확합니다. ( 회로에 따라서 실제시간 1초에 보드 시간 1us 만 실행 될수 있습니다.)

좌측 하단에 00m 00s 062ms 로 나타나는 것이 보드의 경과 시간입니다.

- 오동작할 수 있습니다.

 

현재는 ATMEGA128 공부를 시작하시는 분이나 그냥 맛보기만 하실 분만 사용하시기 바랍니다.

 

 

 

다운로드

 

 설치용 : zip 파일을 압축풀어 설치를 합니다.

 

 실행용 : 아무곳에나 폴더를 만든후 아래 파일을 다운받은 후 실행하면 됩니다.

 

 

 AVR 펌웨어 소스 및 프로젝트 파일





설치 방법

 

압축을 풀면 setup.exe을 실행하면 설치됩니다.

 

 

 

 

에러 발생시

 

http://msdn.microsoft.com/ko-kr/vbasic/bb735936 에서 Visual Basic Power Packs 를 설치해야 합니다.

 

 

 

 

 

버그 및 문의사항

 

여기 댓글로 남겨 주십시오.

 

감사합니다.

Posted by WhiteAT
,