4x4 배열의 스위치를 제어하는 방법을 알아 보겠습니다.

 

여러 가지 방법이 있지만 그 중 간단한 방법으로 회로를 구성할 수 있습니다.

 

 

 

 

 

 

 

하나의 스위치 값 읽기

 

먼저 회로를 살펴 보면 SET 이 4개, VALUE 가 4개 있습니다.

SET 으로 '1', '0' 신호를 주고 VALUE 로 '0'인지, '1'인지 판단 할 수 있습니다.

스위치가 모두 눌러지지 않은 상태라면 VALUE 는 모두 '1'이 됩니다.

 

 

우측하단의 SW16 의 값을 읽으려면 어떻게 해야 할까요?

KEY_SET3을 LOW 로 설정하고 KEY_VAL3을 읽어서

HIGH 이면 키가 눌리지 않았고, LOW이면 키가 눌리지 않았음을 확인 할 수 있습니다.

 

SW15 를 확인하려면 KEY_SET3을 LOW 로 설정하고 KEY_VAL2 를 읽으면 알 수 있습니다.

 

SW6 를 확인하려면 KEY_SET1을 LOW 로 설정하고 KEY_VAL1 를 읽으면 알 수 있습니다.

 

 

 

 

한 줄(4개)의 스위치 값 읽기

 

스위치를 하나하나 체크하면 많은 시간이 걸립니다. 한번에 1줄 모두의 스위치 값을 읽는 방법을 알아보겠습니다.

위의 회로를 그대로 사용하며 ATMEGA128 의 PORTA 에 연결하는 예입니다.

KEY_VAL3, KEY_VAL2, KEY_VAL1, KEY_VAL0 을 각각 PORTA.3, PORTA.2, PORTA.1, PORTA.0에 연결하였습니다.

 

 

 

 

 

 

KEY_SET3을 LOW 로 하고 PINA 를 읽으면 SW13, SW14, SW15, SW16 의 상태를 알 수 있습니다.

 

 

 

    BYTE byteKEY = PINA & 0x0F;// PORTA3 ~ PORTA0 값 읽기

 

 

 

byteKEY 가 0x0F 이면 모든 키가 눌러지지 않은 상태이고 0x00 이면 모든 키가 눌러진 것입니다.

 

 

 

< byteKEY 값에 따른 스위치 누름 상태 >

byteKEY 값

SW13

SW14

SW15

SW16

0x0F

안 눌림

안 눌림

안 눌림

안 눌림

0x0E

눌림

안 눌림

안 눌림

안 눌림

0x0D

안 눌림

눌림

안 눌림

안 눌림

0x0C

눌림

눌림

안 눌림

안 눌림

0x0B

안 눌림

안 눌림

눌림

안 눌림

0x0A

눌림

안 눌림

눌림

안 눌림

0x09

안 눌림

눌림

눌림

안 눌림

0x08

눌림

눌림

눌림

안 눌림

0x07

안 눌림

안 눌림

안 눌림

눌림

0x06

눌림

안 눌림

안 눌림

눌림

0x05

안 눌림

눌림

안 눌림

눌림

0x04

눌림

눌림

안 눌림

눌림

0x03

안 눌림

안 눌림

눌림

눌림

0x02

눌림

안 눌림

눌림

눌림

0x01

안 눌림

눌림

눌림

눌림

0x00

눌림

눌림

눌림

눌림

 

 

관련 제품입니다.


 http://kit128.com/goods/view.php?seq=6




키 매트릭스(4x4)

 





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

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

댓글을 달아 주세요

 

 

로터리(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

댓글을 달아 주세요

 

가변저항의 변화에 따라 PORTA 에 연결된 LED 상태를 변화시키는 예제(소스)입니다.

 

PF1(ADC1) 핀에 연결된 가변 저항(5K) 값을 읽어

PORTA 에 연결된 LED에 출력

 

가변저항 0.6K 이하 => LED1개 ON

가변저항 1.2K 이하 => LED2개 ON

가변저항 1.8K 이하 => LED3개 ON

가변저항 2.4K 이하 => LED4개 ON

가변저항 3.0K 이하 => LED5개 ON

가변저항 3.6K 이하 => LED6개 ON

가변저항 4.2K 이하 => LED7개 ON

가변저항 4.2K 초과 => LED8개 ON

 

 

 

 

WATSIM 시뮬레이션 결과

 

WATSIM 에서는 ADC 기능을 추가할 예정이라

현재는 시뮬레이션이 안됩니다.

 

 

 

 

 

WAT-AVR128 보드에서의 실행

 

 

WAT-AVR128 과 WAT-IO&ADC 보드를 연결한 결과 입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

메인 소스 AVR Studio 4.18

 

 

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

 

PF3(ADC3) 핀에연결된가변저항(5K) 값을읽어

PORTA 에연결된LED에출력

 

가변저항0.6K 이하=> LED1ON

가변저항1.2K 이하=> LED2ON

가변저항1.8K 이하=> LED3ON

가변저항2.4K 이하=> LED4ON

가변저항3.0K 이하=> LED5ON

가변저항3.6K 이하=> LED6ON

가변저항4.2K 이하=> LED7ON

가변저항4.2K 초과=> LED8ON

 

 

 

 

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"

 

 

// AD 값보관

UINT16 g_adc1;

 

int main()

{

           INT16 uiTemp; // 임시변수

 

           // LED 출력용포트

           DDRA = 0xFF;

 

           // ADC 초기화

           InitADC();

 

 

           while (1)

           {  

 

                     g_adc1 = 0;

 

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

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

                                ADMUX=0x40 | 0x01;

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

                                g_adc1 += ADCL + (ADCH*256);

                     }

                     g_adc1>>=4;

                    

                     if( g_adc1 <128)                       // 1/8 회전

                                PORTA = 0xFE;

                     else if( g_adc1 <256)                 // 2/8 회전

                                PORTA = 0xFC;

                     else if( g_adc1 <384)                 // 3/8 회전

                                PORTA = 0xF8;

                     else if( g_adc1 <512)                 // 4/8 회전

                                PORTA = 0xF0;

                     else if( g_adc1 <640)                 // 5/8 회전

                                PORTA = 0xE0;

                     else if( g_adc1 <768)                 // 6/8 회전

                                PORTA = 0xC0;

                     else if( g_adc1 <896)                 // 7/8 회전

                                PORTA = 0x80;

                     else 

                                PORTA = 0x00;

 

 

 

           }

 

}

 

 

 

 

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED 8EA

가변저항 5K – 1EA

POWER 5V/1A

 

 

 

 



프로젝트 파일 다운로드

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






가변저항에 대해 정리하였습니다.

http://avr128.com/23

 

 

Posted by WhiteAT

댓글을 달아 주세요

  1. 2011.07.07 21:25  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. 2011.07.08 17:21  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

 

가변저항은 저항 값을 변경할 수 있는 저항입니다. 주로 고정되지 않은 저항 값이 필요할 때 사용되며 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
가변저항(Potentiometer) 3362  (1) 2011.07.07
LED ON  (0) 2011.01.30
5101ASR , FND Anode  (0) 2011.01.22
Posted by WhiteAT

댓글을 달아 주세요

  1. 안녕하세요 2015.06.04 16:42  댓글주소  수정/삭제  댓글쓰기

    도움이 많이 됐어요 감사합니다^^