DK128-EXT
기존에 쓰던 스위치와 LED 그리고 적정한 저항이 함께 연결되어 있는 보드이다.
LED 회로도다. R32에서 VCC가 유입되고 있고 J15에 연결하여 사용할 수 있게 8핀의 포트가 있다. J15에서 1의 데이터가 유입되고 있다면 J15와 R32의 전압차가 없기 때문에 LED는 동작을 하지 않는 상태가 된다. 하지만 J15에서 0의 데이터가 유입된다면 J15와 R32의 전압차로 인해 LED가 동작하게 된다.
S/W 회로도다. R31에서 Vcc가 유입되고 있으며 J16 에 연결하여 사용할 수 있는 8핀의 포트가 있다. R31에서 유출되는 VCC는 스위치가 On 되지 않는 이상 J16쪽으로만 흐르게 된다. S/W가 Off 상태인 포트는 J16쪽으로 항상 Vcc 가 흐르게 된다. 하지만 S/W가 On 된다면 R31에서 유출되는 Vcc는 S/W를 지나 GND로 흐르게 되며 S/W와 연결된 J16의 포트는 0의 값을 받게 된다.
예를 들어 S/W6번이 On 된다면 R31 의 2번포트에서 J16 으로 가던 Vcc 는 GND 로 흐르게 된다.
7-segment에 대한 회로도다. 보드의 J19부분으로 연결이 되고, 우선 자세한 설명은 차후에 하겠다.
ATMega2560과 DK128-EXT가 연결된 모습.
smart.h
ATMega2560의 PORTJ로 쓸 포트이다. PCInterrupt로 스위치를 누를 때마다
7-segment에서 카운터 PLUS, MINUS, RESET, START, STOP등에 쓰일 것이다.
INT.c
PCICR(Pin Change Interrupt Control Register)의 PCIE1(Pin Change Interrupt Enable1)은
PCINT의 (15:8)까지 활성화 시킴.
PCMSK1(Pin Change Mask Register1)은 PCINT의 (15:8)까지 열어준다.
smart.c
PCINT1_Init이 실행 될 때 벡터10이 자동으로 실행된다.
#define PINJ (*((volatile unsigned char *)0x103))
#define PIN_J ((~PINJ)&0x1F)
DK128-EXT는 Low일 때 동작하기 때문에 위처럼 PINJ를 틸드 시켜주었다.
여튼 위처럼 PORTJ가 열렸을 때 자동으로 PINJ가 열리게 된다. 이때 0번 비트에 1을 밀어준다.
스위치에 쓰일 PLUS를 열어준다.
ucSec1이 24가 아니면 +1증가 시켜주고, 24가 되면 0으로 초기화된 것을
sevseg_Print1을 통해 seven-segment에 찍어준다.
smart.c
PCINT1_Init이 실행 될 때 벡터10이 자동으로 실행된다.
#define PINJ (*((volatile unsigned char *)0x103))
#define PIN_J ((~PINJ)&0x1F)
DK128-EXT는 Low일 때 동작하기 때문에 위처럼 PINJ를 틸드 시켜주었다.
여튼 위처럼 PORTJ가 열렸을 때 자동으로 PINJ가 열리게 된다. 이때 0번 비트에 1을 밀어준다.
스위치에 쓰일 MINUS를 열어준다.
ucSec1이 0이 아니면 -1감소 시켜주고, 0이 되면 24로 초기화된 것을
sevseg_Print1을 통해 seven-segment에 찍어준다.
smart.c
스위치에 쓰일 RESET을 세팅 후 ucSec1을 24로 초기화 시키고,
TC0_Uims_Reset함수를 호출하여 uiMs를 초기화 시킨 후에 sevseg_Print1을
호출하여 처음부터 다시 7-segment에 출력한다.
스위치에 쓰일 START를 세팅 후에 TIMSK0(Timer/Counter Interrupt Mask Register)에
TOIE0(Timer/Counter Overflow Interrupt Enable) 오버플로우가 발생하면 인터럽트가 발생하는
비트를 활성화 시킨다.
이렇게 스위치를 누르게 되면 인터럽트가 발생하여 START를 하게 된다.
스위치에 쓰일 STOP를 세팅 후에 TIMSK0(Timer/Counter Interrupt Mask Register)에
TOIE0(Timer/Counter Overflow Interrupt Enable) 오버플로우가 발생하면 인터럽트가 발생하는
비트를 틸드를 이용하여 비활성화 시킨다.
이렇게 스위치를 누르게 되면 인터럽트가 발생하여 STOP를 하게 된다.
실행 동영상
'ATMega256' 카테고리의 다른 글
20140605 - TWI(2-Wire Serial Interface) (0) | 2014.06.05 |
---|---|
20140603 - DK-128 EXT 배워보쟈 (0) | 2014.06.03 |
20140530 - EEPROM을 박살내기 (0) | 2014.05.30 |
20140529 - 듀얼 7-segment RESET 스위치 추가하기(수정중) (0) | 2014.05.29 |
20140528 - ATMega2560 인터럽트 처리 및 PCINTerrupt에 대해 (0) | 2014.05.28 |