마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 19. 전자 룰렛의 게임
첨부파일

 

                  PIC 활용으로서는 기본적인 발광 다이오드의 점멸 제어
                  (을)를 사용한 게임입니다.
                  
전자 룰렛 하드웨어편
                  
전자 룰렛 소프트웨어편

 


전자 룰렛의 제작

마이크로칩사의 마이크로 컴퓨터 PIC16C/F84를 사용한 제작 예의
하드웨어 제작 방법의 소개입니다. ( 「게임 레버러토리'98/5월호에 게재)



1. 개요

 그런데 이번으로부터 PIC 마이크로칩의 사용법을 실제의 제작을 하면서 소개해
갑니다. 이번은 「입출력 핀의 사용법」을 「전자 룰렛」을 만들면서
설명해 갑니다.
 그런데 전자 룰렛이란 무엇입니까?
전자 룰렛은, start 스윗치를 누르면(자) 12개의 발광 다이오드(LED)로 완성되었다
룰렛이 빛나면서 돌기 시작해 키를 떼어 놓으면(자) 잠시 후 있는 곳에서 정지
그러자(면) 하는 동작을 합니다.
다만 빛나는 것 만으로는 시시하기 때문에 버저도 울도록(듯이) 해 보았습니다.

2. PIC의 입출력 핀의 사용법

PIC를 전자 공작으로 사용하려면 , 우선 입출력 핀의 사용법을 알 필요가 있습니다.
여하튼 PIC는 발진 회로용과 전원용을 제외하면 입출력 핀 밖에 없기 때문에.
이 입출력 핀은 문자 대로 입력에도 출력에도 어느 쪽에도 사용할 수 있습니다.
게다가 프로그램으로 어느 쪽으로 하는지를 설정 할 수 있으므로, 프로그램을 실행해
있는 한중간에 입출력을 바꾸어 사용하는 일도 생기게 됩니다.

이 입출력 핀의 입출력이, 프로그램의 무엇에 관계하는가 하면(자), 그림-1에
가리키도록(듯이), PORTA라든지 PORTB라든지의 명칭으로 불리는 「레지스터」로서
취급할 수 있는 것처럼 되어 있습니다.
이 레지스터라는 말은, 마이크로컴퓨터를 사용하게 되면(자) 빈번하게 나옵니다만,
이것은, 마이크로컴퓨터안에 있는 일시 메모리로, 연산이나 입출력때의 고속의
데이터 일시 기억 장소로서 사용됩니다.

예를 들면 그림-1에 나타내도록(듯이), PORTA상으로부터 2비트째의 출력 핀을 「1」의
상태로 하려면 , PORTA 레지스터의 2비트째에"1"를 설정하면 좋은 일
(이)가 됩니다. 출력 핀이 「1」 상태라고 하는 것은, 전원 전압과 거의 같은 전압
상태입니다. 반대로 「0」(이)라고 하는 상태는 거의 0 Volt가 됩니다.
이것으로 출력 핀을 0 Volt로 하거나 5 Volt(전원 전압)로 하거나 하는 것이 성과
것이 됩니다.



 그러면, 이 입출력 핀의 IC내부 회로는 어떻게 되어 있겠지요?
간단하게 나타낸다고 그림-2와 같이 되어 있습니다. 이 회로의 구성은 트랜지스터
2개가 상하의 상보 하는 것 같은 모습으로 접속되고 있기 (위해)때문에, 상보 접속 구성
(토템폴)(으)로 불리고 있습니다.



이 동작은, 우선입력 모드로 설정되면(자), P, N양쪽 모두의 트랜지스터가
OFF 상태가 되기 (위해)때문에, 외부로부터 더해지는 전압인 만큼 영향을 받도록(듯이)
되어, 아래 쪽의 TTL 게이트를 개입시켜 데이터 입력을 합니다.
즉 밖으로부터 입출력 핀에 접속되고 있는 상대가, 2 V이상의 전압이
있으면(자)"1"로서 0.4 V이하라면"0"로서 PORT 레지스터에 읽힙니다.

 출력 모드로 설정되었을 때에는, PORT 레지스터에"1"를 설정하면(자),
그림의 P의 트랜지스터가 ON가 되기 (위해)때문에, 입출력 핀은 Vdd(5V) 측의 전압과
되어, 그림의①와 같이, Vdd로부터 입출력 핀에 전류가 흘러나오는 것처럼 동작해
.
반대로, "0"를 PORT로 설정하면(자), 그림중의 N의 트랜지스터가 ON가 되기 (위해)때문에,
입출력 핀은 Vss(0V) 측의 전압이 되어, 그림의②와 같이 입출력 핀으로부터 Vss
에 전류가 흘러들게 됩니다.


3. 발광 다이오드의 점등 제어

 이번 룰렛 제작에서는, 발광 다이오드(LED)를 점등/소등시키고
가, LED를 윗 그림의 그림-2와 같이 접속합니다.
이렇게 하면(자), 출력 모드로 PORT에"0"를 설정하면(자),

  Vdd(5V)→저항→LED→입출력 핀→N트랜지스터→Vss(0V)

(와)과 같이 전류가 흐름 LED가 빛납니다.
반대로"1"가 설정되면(자) 양단이 Vdd 전압이 되기 (위해)때문에 전류는 흐르지 않습니다
의로, LED는 사라지게 됩니다.
이 흐르는 전류의 양은 그림중의 저항으로 제한합니다만, 이 저항의 값은 개략
아래와 같이로 정해집니다.

  R = (Vdd - Vled) /I = (5 - 2) /15mA = 200Ω

여기서 Vdd:전원 전압(통상은 5V)
     Vled:LED내 강하 전압(통상은 약 2V)
     I:LED에 흘리는 전류(5~20 mA 정도)
 LED에 흘리는 전류가 큰 만큼 밝게 빛납니다만, PIC의 입출력 핀에 흘린다
일을 할 수 있는 최대 전류는 25 mA에 제한되고 있기 때문에, 더 이상의 다이덴
류를 흘리면(자), PIC 내부의 입출력 핀으로 연결되어 있는 트랜지스터가 망가져
끝내기 때문에 조심해 주세요.


4. 키의 접속 방법

 이번 룰렛은 start 키를 PIC의 입력 소자로서 사용합니다.
이것은 어떻게 접속하면 좋은 것일까요? 대답은도-3과 같이 합니다.



이렇게 하면(자) 입출력 핀에는, 스윗치가 off때는 저항을 개입시켜 Vdd의 전압이
더해지고 있으므로, PORT에 읽어들이면(자)"1"됩니다.
키가 밀리면(자), 입출력 핀은 Vss(0V)의 전압이 되어 버리기 때문에,
PORT에는"0"로서 읽힙니다.
이것으로 키를 눌렀던 것이 구별되게 됩니다. 이 때의 저항은 전류를
거의 흘리지 않아도 전압만 구별할 수 있으면 좋기 때문에 고저항으로 OK입니다만,
나머지 전류가 적으면 키가 접촉 불량을 일으켜 완전하게 Vss가 되지 않기 때문에
0.5 mA 정도는 흘려 줍시다. (결국 10KΩ위)


5. 입출력 핀의 제어 방법

 그러면 이 입출력 핀을 제어하는 프로그램의 쓰는 법을 설명합시다.
우선 입출력의 설정 방법법으로가, 이것에는 입출력 설정 전용의 레지스터 「TRIS
레지스터」가 준비되어 있습니다.
예를 들면 PORTA라면 TRISA PORTB라면 TRISB와 같이 대응해, 한편 그것
의 비트도 대응하고 있습니다. 이 TRIS 레지스터에"1"를 세트 하면(자),
거기에 대응하는 입출력 핀은 입력 모드에, "0"를 세트 하면(자) 출력 모드
(이)가 됩니다.
 예를 들면, 이번 룰렛에서는, 키 입력은 PORTA의 RA4에, RA0~RA3와
PORTB의 RB0~RB7는 LED용의 출력으로 하고 있기 때문에, 리스트 1과 같이 프로
그램을 씁니다.



여기서 TRIS 레지스터에 세트 하기 위해서는, TRIS 레지스터가 있는 데이타메모리
하지만 「Bank1」에 있으므로 Bank의 변환이 필요합니다.
이 Bank와는 데이타메모리를 128바이트 마다의 4개의 공간으로 나눈 것으로,
그것들을, 각각 Bank0로부터 Bank3라고 불러, STATUS 레지스터에 설치되었다
RP0, RP1 비트로 바꾸어 사용합니다.
이 Bank와 RP0, RP1, 및 명령의 관계는 그림-4로 나타내집니다.
즉, STATUS안에 있는 RP0와 RP1로 Bank를 지정해, 그 후 범용 레지스터
의 장소를 지정하기 위해서 명령의 작동코드(opcode) 부분을 사용합니다.



다음에 실제의 입출력 핀에의 출력을 하는 프로그램의 쓰는 법입니다만, 리스트 2
에 나타내도록(듯이) 범용 레지스터와 동일 취급으로 입출력 명령을 쓸 수가 있습니다.



6. 전체 하드웨어의 구성

이 전자 룰렛을 PIC로 실현되기 위한 회로도는 그림 5, 파츠 리스트는
표 1입니다.


회로를 간단하게 설명하면(자), 6개씩의 빨강과 초록의 LED가, PIC의 입출력 핀
에 1개씩 접속되고 있습니다.
전류 제한용의 저항은, 본래이라면 각 LED에 1개씩 필요합니다만,
이번은, 상시 반드시 1개 밖에 점 켜 없기 때문에, 6개씩 정리해 2개의 저항
그리고 끝마치고 있습니다.
남은 1개의 입출력 핀(RA4)에는, start 스윗치와 버저를 울리기 (위해)때문에
의 타이머 IC(μA555)를 접속합니다.
이 RA4 핀은, 상시는 입력 모드로서 키의 입력을 받아들여 버저
(을)를 울릴 때만 출력 모드로 해, 일순간의 사이만"0"를 출력합니다.
그렇다면, 앞으로는 타이머 IC의 one-shot 동작의 기능으로, 일정시간만
타이머의 출력 핀 3이 「High」가 되어 버저가 웁니다.
이 일정시간을 결정하는 것이 IC에 접속되고 있는 10μF의 콘덴서와 10KΩ
의 저항입니다. (자세하게는 타이머 IC의 데이터 쉬트에 의)
 또 start 스윗치가 ON의 사이는, 타이머의 2 핀이"0"인 채되므로
버저는 연속해 웁니다.

그리고는, 전원 회로입니다만, 5 V의 3 단자 레귤레이터만으로 구성해 있습니다.
이번은 휴대용을 생각해 9 V의 전지를 공급 전원으로 하고 있습니다. 소비 전류는
20 mA 정도이기 때문에 상당히 길게 사용할 수 있습니다.
버저에는 압전 버저를 사용하고 있습니다만, 구입시에는 발진 회로 내장 타입
그렇다고 하는 것으로 전원만 접속하면 소리가 나오는 타입을 구입해 주세요.

겉(표)-1 파츠 리스트

기호   설명  규격, 품명 수량
  아크릴 케이스 100x80x35 1
  프린트 기판 or범용 기판 10cmx7. 5cm 1
SKT1-4 IC소켓 8,18pin 각 1
BZ 압전 버저 FUJI EB20 1
REG 3 단자 레귤레이터 S81350 또는 78L05 1
BAT 9 V전지 건전지 006P 1
  전지 어댑터 리드 선 첨부 1
LED1~12 발광 다이오드 빨강, 초록 6개씩 12
XTAL 크리스탈 발진자 10MHz 1
IC1 마이크로칩 PIC16F84-10 1
IC2 타이머 IC μA555 상당 1
  저항 1/4W 2.2KΩ 1
    〃 200Ω 2
    〃 10KΩ 1
    〃 470Ω 1
     〃 5.1KΩ 1
  콘덴서 0.1μF(104) 1
    〃 20pF 2
  전해 콘덴서 10μF16V 2
    〃 47μF10V 1
SW1 기판용 3 P토글스위치 AC125V 0.3A 1
SW2 기판용 누르는 보턴 스윗치   1
그 외 스페이서, 나사, 나트   조금



7. 제작하자!

 그런데 실제의 공작입니다만, 기판은 제작예는 프린트 기판을 사용했습니다만,
사용한 프린트 기판의 패턴도와 회로도의 CAD 데이터를 아래와 같이에
놓아두기 때문에, 다운로드해 사용해 주세요.
이것들을 보려면 ,HiWIRE Ⅱ를 사용해 주세요.

전자 룰렛 회로도
전자 룰렛 패턴도


사진과 같이 전체를 1매의 기판에 편성,
IC에는 IC소켓을 사용해, 버저는 양면 접착
테이프로 기판에 고정했습니다.
12개의 LED는 원주상에 등간격으로 배치합니다.

케이스에는 투명 아크릴 케이스를 사용해, 2개의
스윗치용의 구멍과 기판 고정용의 나사 구멍을 뚫는다
만일 수 있는이므로 간단하다고 생각합니다.
부품류로 키가 큰 크리스탈 발진자만은 잠인가
키라고 답니다.

기판을 스페이서로 띄워 달아 발광 다이
오드가 꼭 좋은 높이가 되도록(듯이) 하고 있습니다.
패턴은 대폭으로 되어있으므로 안심해
사용할 수 있습니다.


조립 후의 하드웨어의 동작 체크 방법은, PIC를 실장하지 않고 전원
ON 후, 테스터로 전원의 5 V가 정상적인지 어떤지 체크해, 다음에, PIC의 소켓
의 입출력 포토에 상당하는 곳을, 마이너스 전원에 클립 케이블등으로
가접속해 LED가 점등 하면 정상적입니다. 이것을 12개분확인합니다.
그 후는, 타이머 IC를 실장한 뒤, start 키를 눌러 버저가 울면
이것도 정상적입니다.


 

 


전자 룰렛의 제작 SW편

마이크로칩사의 마이크로 컴퓨터 PIC16C/F84를 사용한 제작 예의
소프트웨어 제작 방법의 소개입니다. ( 「게임 레버러토리'98/6월호에 게재)



1. 개요

 그런데 전회 제작한 전자 룰렛의 프로그램을 만드는 방법을 소개합니다.
PIC 마이크로칩의 기본적인 프로그램을 만드는 방법을, 실제의 제작을
하면서 소개해 갑니다.

2. PIC의 프로그램

PIC의 명령은 어떻게 실행되는 것일까요? 
우선 PIC는 프로그램을 격납하는 프로그람메모리를 내장하고 있습니다.
게다가, PIC16C/F84는 이 프로그람메모리가 몇회에서도 쓰거나 지우거나
할 수가 있다고 하는, 매우 편리한 원칩 마이크로컴퓨터입니다.

이 프로그램을 「쓰거나 지우거나」라고 하는 것은 무슨 일입니까?
PIC의 이 메모리는 전기가 없어져도 사라지지 않는 메모리가 되고 있습니다.
즉, 전기를 넣은 순간에 0번지로부터 명령이 실행되게 됩니다.
그러나, 전기를 꺼도 사라지지 않는 메모리도, 어느 특정의 전기적 조건을
채워 주면(자) 자유롭게 변경할 수가 있게 됩니다.
이 조건을 정돈하는 것이 제1회로 제작한 「PIC 라이터」인 것입니다.

이 PIC 라이터로 프로그램을 메모리에 기입합니다. 프로그램은 명령의
모임에서 되어있는 것으로, 메모리의 0번지로부터 차례차례 꺼내져 실행되어
갑니다.
이 명령에는 크게 나누어 (1) 아르바이트 처리 명령 (2) 비트 처리 명령 (3) 리테
랄(정수) 처리 명령 (4) 점프 명령 (5) 제어 명령의 5 종류가 있습니다.
(1)~(3)는 레지스터를 사용한 연산 처리를 하는 명령으로, (4)는 프로그램의 실행
의 흐름을 변경하는 명령, (5)는 타이머등의 하드 제어를 합니다.
PIC는, 이것들 전부를 맞추어도 겉(표)-1의 35 종류의 명령 밖에 없기 때문에,
기억하기 쉽게 사용하기 쉬운 마이크로컴퓨터입니다.

겉(표)-1
nemonic : 내용       : 영향 Phrack″ :사이클 :작동코드
---------------------------------------------------------------------
ADDLW k  : w + k -> w    : C, DC, Z  :  1 : 11 111x kkkk kkkk
ADDWF f, d : w + f -> dest   : C, DC, Z  :  1 : 00 0111 dfff ffff
ANDLW k  : w AND k -> w   : Z     :  1 : 11 1001 kkkk kkkk
ANDWF f, d : w AND f -> dest : Z     :  1 : 00 0101 dfff ffff
BCF f, b  : 0 -> f     : None   :  1 : 01 00bb bfff ffff
BSF f, b  : 1 -> f     : None   :  1 : 01 01bb bfff ffff
BTFSC f, b : skip if f=0  : None   : 1(2) : 01 10bb bfff ffff
BTFSS f, b : skip if f=1  : None   : 1(2) : 01 11bb bfff ffff
CALL adr : Subroutine Call  : None   :  2 : 10 0kkk kkkk kkkk
       PC+1 -> TOS  k -> PC<10:0> PCLATH<4:3> -> PC<12:11>
CLRF f   : 00h -> f     : Z(=1)   :  1 : 00 0001 1fff ffff
CLRW    : 00h -> w     : Z(=1)   :  1 : 00 0001 0xxx xxxx
CLRWDT   : 00h -> WDT    : PD, TO   :  1 : 00 0000 0110 0100
       0 -> WDT prescaler 1 -> PD(STATUS<3>) 1 -> TO(STATUS<4>)
COMF f, d  : f -> dest     : Z     :  1 : 00 1001 dfff ffff
DECF f, d  : f - 1 -> dest   : Z     :  1 : 00 0011 dfff ffff
DECFSZ f, d : f - 1 -> dest,  : None   : 1(2) : 00 1011 dfff ffff
       skip if result=0
GOTO k   : k -> PC<10:0>   : None   :  2 : 10 1kkk kkkk kkkk
       PCLATH<4:3> -> PC<12:11>
INCF f, d  : f + 1 -> dest   : Z     :  1 : 00 1010 dfff ffff
INCFSZ f, d : f + 1 -> dest,  : None   : 1(2) : 00 1111 dfff ffff
       skip if result=0
IORLW k  : w OR k -> w    : Z     :  1 : 11 1000 kkkk kkkk
IORWF f, d : w OR f -> dest  : Z     :  1 : 00 0100 dfff ffff
MOVLW k  : k -> w      : None   :  1 : 11 00xx kkkk kkkk
MOVF f, d  : f -> dest     : Z     :  1 : 00 1000 dfff ffff
MOVWF f  : w -> f      : None   :  1 : 00 0000 1fff ffff
NOP    : No Operation   : None   :  1 : 00 0000 0xx0 0000
RETFIE   : 세치기 처리로부터 : None   :  2 : 00 0000 0000 1001
       의 리턴     TOS -> PC,   1 -> GIE(INTCON<7>)
RETLW k  : k -> w 해    : None   :  2 : 11 01xx kkkk kkkk
      리턴      TOS -> PC
RETURN   : 써브루틴   : None   :  2 : 00 0000 0000 1000
       (으)로부터의 리턴   TOS -> PC
RLF f, d  : 좌회전      : C     :  1 : 00 1101 dfff ffff
       f -> d f<7> -> C C -> d<0>
RRF f, d  : 오른쪽 회전      : C     :  1 : 00 1100 dfff ffff
       f -> d f<0> -> C C -> d<7>
SLEEP   : sleep 모드  : PD, TO   :  1 : 00 0000 0110 0011
       00h -> WDT  1 -> PD(STATUS<3>)  0 -> TO(STATUS<4>)
SUBLW k  : k - w -> w    : C, CD, Z  :  1 : 11 110x kkkk kkkk
SUBWF f, d : f - w -> dest   : C, CD, Z  :  1 : 00 0010 dfff ffff
SWAPF f, d : f<0:3> -> d<4:7>, : None   :  1 : 00 1110 dfff ffff
       f<4:7> -> d<0:3>
XORLW k  : w XOR k -> w   : Z     :  1 : 11 1010 kkkk kkkk
XORWF f, d : w XOR f -> dest  : Z     :  1 : 00 0110 dfff ffff



3. 레지스터란?

PIC등의 마이크로컴퓨터에는 반드시 레지스터로 불리는 것이 있습니다.
이것은, 명령의 실행을 할 때의 데이터를 일시적으로 격납하는 메모리로, 일반적으로
데이터를 격납하는 메모리보다 고속의 동작을 합니다. 그러나 PIC의 경우는 특수해,
이 레지스터와데이타메모리가 함께의 내장 데이타메모리가 되고 있습니다.

예를 들면 그림-1은 PIC16F84의 경우의레지스터 일람입니다.



그림에 있는 주소를 명령 중(안)에서 지정합니다. 예를 들면, 「MOVWF 3」(이)라고 쓰면(자)
working register(연산용의 중계 레지스터)로부터, 3번지에 있는 STATUS
레지스터에 8비트의 데이터가 전송 된다고 하는 동작을 합니다.

그러나 이와 같이 수치로 번지를 직접 지정해 있어서는, 프로그램을 읽는 것이
어려워져 버리므로, 프로그램의 최초로 「STATUS EQU  3」(이)라고 하는 명령
그리고라벨(을)를 지정해 「MOVWF STATUS」라고 하도록(듯이), 번지 대신에 라
벨로 쓰도록(듯이) 합니다.
이것으로 군과 프로그램이 읽기 쉬워집니다. 게다가 이러한 라벨의
정의를 매회 쓰고 있는 것은 귀찮아서, 일괄해 정의하는 것이 성과
. 이것이 「인클루드 파일」이라고 불리는 것입니다.
시스템 공통으로 사용하는 레지스터의 라벨을 정의한 인클루드 파일이,
미리 준비되어 있습니다. 이 파일을 이용해 프로그램의 최초로
「INCLUDE  P16F84.INC」이라고 하는 1행을 추가하면(자), 시스템으로 매회 필요한
라벨은 정리해 정의됩니다.


4. 사이클이란?

PIC 중(안)에서는 명령은,페치(메모리로부터 꺼내)와실행의 2 사이클의
스텝에서 실제의 처리가 이루어집니다.
한층 더파이프라인 처리라고 해, 전의 명령의 실행중에 다음의 명령의 페치
(을)를 해 버리기 (위해)때문에, 외관상, 대부분의 명령은 1 사이클로 실행이 완료합니다.
단,점프 명령(CALL, GOTO)(와)과판단 명령(BTFSS, BTFSC, DECFS, DECFSC)
에 대해서는, 실효 번지가 돌연 스킵 하기 위한(해), 페치 해 수선이 되기 (위해)때문에
2 사이클 필요로 합니다.
이 명령의 실행에 필요한 시간, 즉사이클의 시간을 프로그램으로 타이미
그를 취할 때에 이용합니다.

이번 룰렛으로도, 발광 다이오드를 번뜩거릴 수 있는 시간 간격을 프로그램으로
만들고 있습니다만, 그 만드는 방법은,

  (사이클수)=(필요한 시간)÷(사이클 시간)

그리고 요구한 사이클수가 되도록(듯이) 명령 실행을 반복하는 것으로 필요한 시간을 만들어
냅니다.
실제의 세는 방법의 예는, 리스트의 마지막 (분)편에게 있는 타이머 써브루틴으로,
아래와 같이 리스트가 됩니다. 코멘트되어 있기 때문에 참고로 해 주세요.

;******************************************
; 타이머 써브루틴
; TIM04 : 0.4msec TIM100:100msec
;******************************************
;**** 간격 대기 써브루틴 ****
WAIT
     MOVWF  CNT3    ;간격 보존
WAITLP
     MOVF  CNT3, W   ;카운터 get
     BTFSC  STATUS, Z  ;마지막인가?
     RETURN       ;종료, 돌아온다
     CALL  TIM04   ;0. 8 msec 기다린다
     CALL  TIM04
     DECF  CNT3, F   ;카운터 1
     GOTO  WAITLP
;*** 0.4 msec 타이머 써브루틴 ****
TIM04
     MOVLW  0F9H    ;249회
     MOVWF  CNT1
TIMLP1
     NOP
     DECFSZ CNT1, F
     GOTO  TIMLP1   ;2+4*249-1=997
     RETURN       ;997+1=998*0. 4 usec= 약 0.4msec
;**** 100 msec 타이머 써브루틴 ****
TIM100
     MOVLW  0F9H    ;249회
     MOVWF  CNT2
TIMLP2
     CALL  TIM04   ;2+1003*249-1
     DECFSZ CNT2, F
     GOTO  TIMLP2
     RETURN       ;+1=249749*0. 4 usec= 약 100msec


5. 룰렛의 프로그램

 그런데 그러면 실제의 전자 룰렛의 프로그램을 보고 갑니다.
프로그램 리스트는 아래와 같이로 다운로드할 수 있습니다. 리스트에는 일본어의 설명
(을)를 붙인 것도 있기 때문에 참고로 해 주세요.
(프로그램을 어셈블(assemble) 할 때는 일본어가 없는 것을 사용해 주세요. )

전체의 흐름은, 우선 초기화로 입출력 핀의 모드 설정을 실시합니다.
RA4 이외는 모두 출력 모드입니다.
그 다음은 start 키의 입력 체크의 반복 루프로, 아무것도 없을 때는
항상 여기를 루프 하고 있습니다.
일단 start 키의 입력을 검출하면(자), 100 msec 기다리고 나서 키 입력을 재확인
하고 있습니다. 이것은 chattering를 피하기 위한 키 입력 프로그래밍의
기본입니다.
chattering란 무엇인가라고 하면(자), 스윗치나 릴레이류에 반드시 있는 것으로,
밑그림과 같이 스윗치 동작때, 일단 스윗치의 접점이 접촉해도, 용수철의
탄력으로 단시간의 사이 붙거나 멀어지거나를 반복하는 것을 말합니다.
보통 이 시간은 10 msec 이하입니다.



이 불안정한 시간을 기다리고 나서 재차 키 입력이 계속되고 있는지를 확인한다
일로, 실제로 키 입력이 있었다고 판단합니다.

다음에서는, 이 키 입력이 계속되고 있는 동안, 「INTERVAL」라고 하는 변수를 카운트
다운하면서 LED를 차례로 쉬프트 시켜 점 켜고 있습니다.
(버저는 스윗치에 의해 하드웨어로 자동적으로 연속명 동요합니다. )

그리고 start 키 입력이 없어지면(자), 거기로부터 룰렛 동작이 시작됩니다.
우선, 버저를 울리기 위해서(때문에) RA4를 출력 모드로 설정 변경합니다.
다음에 INTERVAL의 값x0. 8 msec의 사이만, LED를 점 켜게 하면(자), INTERVAL를
+1만 카운트업해, 다음의 LED를 점 켜게 해 또 INTERVAL분만큼
번뜩거릴 수 있으면(자) 다음을 점등 한다. (와)과 같이 차례차례 점등을 쉬프트 시켜, INTERVAL
하지만 FF(16 진수)가 되면 거기서 정지한 채로로 합니다.
즉 차례차례 점등 쉬프트가 느리게 됩니다. 또 LED를 점 켜게 할 때에는,
직전에 버저를 울리기 (위해)때문에, RA4에 트리거 펄스 신호를 출력합니다.
순간만 신호를 내면, 나머지는 타이머 IC가 0.1초간만 버저를 울려 줘
. 

정지시킬 때는, RA4 포토의 모드를 원래의 입력에 되돌리고 나서, 최초의
키 입력 기다리는 루프로 돌아옵니다. 이것으로 반복해 같은 동작을 하는 것에
됩니다.
키를 누르고 있는 동안은 매우 고속으로 LED의 차례차례 점등을 하기 (위해)때문에, 인간
하지만 키를 떼어 놓는 순간을 같은 위치로 하는 것은 불가능합니다.
이것에 의해, 매회 스윗치를 떼어 놓은 순간의 LED의 위치가 다르기 (위해)때문에, 최후
의 정지 위치도 매회 다르게 되어 갬블로 할 수가 있습니다.

 ★ 전자 룰렛 프로그램 리스트(일본어 설명 코멘트 첨부)
   (다운로드 할 수 있습니다, 디스크에 보존해 인쇄해 사용해 주세요)


6. 프로그램 작성

드디어 프로그램 작성입니다. 작성과 테스트에는 「MPLAB」라고 하는 소프트의 도구
(을)를 사용합니다.
입수방법은 마이크로칩사의 홈 페이지로부터 다운로드합니다.
아래와 같이 프로그램 리스트를 소스 리스트로서 「MPLAB」를 사용해 PC상에서 편집
합니다.
편집 후, MPLAB로어셈블(assemble)합니다. 어셈블(assemble) 에러가 없어지면(자) PIC에 책
붐비기 위한 「HEX 파일」이라고 하는 것이 생성됩니다.
이것을 전회 작성한 PIC 라이터를 사용해 PC로부터 PIC에 기록.
이 기록이 완료한 PIC를 룰렛의 IC소켓에 실장해 전원을 ON와
하면, 동작을 개시합니다.
정상적으로 개시하지 않으면, 프로그램의 어딘가가 잘못되어 있기 때문에 재차
체크합니다. 프로그램의 체크는 MPLAB의시뮬레이터 기능을 사용합니다.
PC상에서 의사적으로 작성 프로그램을 실행시키고 내부 동작의 확인을 합니다.
이 시뮬레이션은 조금 귀찮습니다만, 눈에 보이는 형태로 프로그램의
테스트를 할 수 있기 때문에 매우 편리합니다. 반드시 사용합시다.

 ★ 전자 룰렛 프로그램 리스트
   (다운로드해 사용해 주세요)

목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com