로터리(Rotary) 스위치 값을 FND(4401ASR)에 표시하는 예제입니다. 회로는 아래와 같이 구성합니다.

 

PORTA.0: 로터리 0에 연결 (입력)

PORTA.1: 로터리 0에 연결 (입력)

PORTA.2: 로터리 0에 연결 (입력)

PORTA.3: 로터리 0에 연결 (입력)

 

 

PORTA.4 : FND 1자리에 SEL 신호 (출력)

PORTA.5 : FND 2자리에 SEL 신호 (출력)

PORTA.6 : FND 3자리에 SEL 신호 (출력)

PORTA.7 : FND 4자리에 SEL 신호 (출력)

 

 

PORTB: FND 데이터 신호(출력)

 

 

 

 

 

WAT-AVR128, WAT-IO&ADC 보드에서의 실행

 

 

 

WAT-AVR128와 WAT-IO&ADC 보드에서의 실행 결과 입니다.

 

 





 

초기 상태 – 로터리 스위치가 0 이라 FND 에 0234을 표시합니다.

 

 

 

 

 

 

4 – 로터리 스위치가 4 라서 FND 에 4234을 표시합니다.

 

 

 

 

 

7 – 로터리 스위치가 7 이라서 FND 에 7234을 표시합니다.

 

 

 

 

 

 

 

 

메인 소스 AVR Studio 4.18 용

 

 

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

 

로터리(Rotary) 스위치값을FND(4401ASR)에표시하는예제

 

PORTA.0 : 로터리0에연결(입력)

PORTA.1 : 로터리0에연결(입력)

PORTA.2 : 로터리0에연결(입력)

PORTA.3 : 로터리0에연결(입력)

 

 

PORTA.4 : FND 1자리에SEL 신호(출력)

PORTA.5 : FND 2자리에SEL 신호(출력)

PORTA.6 : FND 3자리에SEL 신호(출력)

PORTA.7 : FND 4자리에SEL 신호(출력)

 

 

PORTB : FND 데이터신호(출력)

 

 

 

 

Main Clock : 11.0592Mhz

 

 

 

 

 

Tools : AVR Studio 4.16

테스트보드: WAT-AVR128 보드+ WAT IO&ADC

 

http://avr128.com

 

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

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include <stdio.h>

 

#include "wat128.h"

 

 

 

int main()

{

 

    // FND4 초기화

    InitFND4();

 

    // 로터리초기화

    InitRotary();

 

 

    while (1)

    {

        // 로터리스위치값을int 형으로받기            

        g_FND[0] = GetRotaryInt();

 

        // FND 4자리표시

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

 

    }

 

}

 

 

 

 

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

 

 

주요 부품

ATMEGA128 - 1EA

로터리 스위치 – 1EA

SSR-10

POWER 5V/1A

 

 

 


프로젝트 파일(전체 소스) 다운로드

 





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
,