목차
1. 제목
- Lab8. 프로그램이 가능한 타이머(PIT)
2. 목적
3. 실험결과 및 분석
[Step 2]
[Step 3]
[Step 4]
[Step 5]
[Step 6-8]
[Step 9]
[Step 11]
[Step 12]
[Step 13]
[Step 14]
[Step 16]
[Step 17]
[Step 18]
[Step 19]
[Step 21]
[Step 22]
[Step 23-24]
[Step 25-29]
4. 검토사항
1) 컴퓨터 또는 마이크로프로세서를 이용하는 시스템에서 타이머 또는 카운터의 역할을 알아보자. 일반적으로 널리 사용되는 IBM PC에서의 타이머의 하드웨어적인 연결 관계와 그 역할에 대해 조사해보자.
2) 실험을 통해서 확인한 mode0와 mode 3의 경험을 바탕으로 PIT가 제공하는 나머지 mode들의 동작에 대해 구체적으로 이해해 보자.
3) PIT의 mode 1은 hardware retriggerable one-shot이라고도 불린다. 이 동작은 analog one-shot의 동작과 비교될 수 있는데, 대표적인 analog one shot인 74LS123의 동작과 비교해 보자. pulse의 발생 방법과 그 duration을 조절하는 방법을 구체적으로 비교하고 PIT와 같은 digital one shot이 analog one shot에 대해 갖는 장점을 알아보자.
4) PIT와 같은 programmable counter가 일반 counter (예를 들어 74LS191)에 대해 갖는 장점에 대해 알아보자.
5) 특정도로를 하루에 통과하는 자동차의 수를 세기 위한 간단한 장치를 만들려고 한다. PIT를 이용한다고 가정할 때 이 시스템의 구성도를 그려보자.
6) Lab 7에서, dot matrix를 scan하여 일정 패턴을 표시하는 프로그램에서는 일정 시간의 지연을 프로그램으로 구현했었다. 이 지연을 Program 8.4와 같이 PIT와 interrupt를 이용하여 어떻게 구현할 수 있을지 생각해 보자.
5. 토의
6. 참고 문헌
- Lab8. 프로그램이 가능한 타이머(PIT)
2. 목적
3. 실험결과 및 분석
[Step 2]
[Step 3]
[Step 4]
[Step 5]
[Step 6-8]
[Step 9]
[Step 11]
[Step 12]
[Step 13]
[Step 14]
[Step 16]
[Step 17]
[Step 18]
[Step 19]
[Step 21]
[Step 22]
[Step 23-24]
[Step 25-29]
4. 검토사항
1) 컴퓨터 또는 마이크로프로세서를 이용하는 시스템에서 타이머 또는 카운터의 역할을 알아보자. 일반적으로 널리 사용되는 IBM PC에서의 타이머의 하드웨어적인 연결 관계와 그 역할에 대해 조사해보자.
2) 실험을 통해서 확인한 mode0와 mode 3의 경험을 바탕으로 PIT가 제공하는 나머지 mode들의 동작에 대해 구체적으로 이해해 보자.
3) PIT의 mode 1은 hardware retriggerable one-shot이라고도 불린다. 이 동작은 analog one-shot의 동작과 비교될 수 있는데, 대표적인 analog one shot인 74LS123의 동작과 비교해 보자. pulse의 발생 방법과 그 duration을 조절하는 방법을 구체적으로 비교하고 PIT와 같은 digital one shot이 analog one shot에 대해 갖는 장점을 알아보자.
4) PIT와 같은 programmable counter가 일반 counter (예를 들어 74LS191)에 대해 갖는 장점에 대해 알아보자.
5) 특정도로를 하루에 통과하는 자동차의 수를 세기 위한 간단한 장치를 만들려고 한다. PIT를 이용한다고 가정할 때 이 시스템의 구성도를 그려보자.
6) Lab 7에서, dot matrix를 scan하여 일정 패턴을 표시하는 프로그램에서는 일정 시간의 지연을 프로그램으로 구현했었다. 이 지연을 Program 8.4와 같이 PIT와 interrupt를 이용하여 어떻게 구현할 수 있을지 생각해 보자.
5. 토의
6. 참고 문헌
본문내용
특별한 경우를 제외하고는 자동차일 것이므로 이같은 시스템으로 하루에 통과하는 자동차의 수를 측정할 수 있다.
6) Lab 7에서, dot matrix를 scan하여 일정 패턴을 표시하는 프로그램에서는 일정 시간의 지연을 프로그램으로 구현했었다. 이 지연을 Program 8.4와 같이 PIT와 interrupt를 이용하여 어떻게 구현할 수 있을지 생각해 보자.
#pragma interrupt(\"isr\"=33)
#include \"i86.h\"
#include \"kit.h\"
#define ICW10x13
#define ICW20x20
#define ICW40x03
#define I_MASK0xFD
unsigned intpat;
main()
{
int i,j;
unsigned char pat1[4]=
{0xDF, 0xEF, 0xF7, 0xFB};
unsigned char pat2[4]=
{0xE7, 0x42, 0x42, 0x18};
outbyte(PPI1CONT,0x80); /* initialize PPI1 */
outbyte(PPI1PA,0xFF); /* turn off green LEDs */
outbyte(PPI1PB,0xFF);
outbyte(PPI1PC,0x00);
disable();
outbyte(PIC_0, ICW1);
outbyte(PIC_1, ICW2);
outbyte(PIC_1, ICW4);
outbyte(PIC_1, I_MASK);
outbyte(PIT_CW, 0x76);
outbyte(PIT_C1, 0xFF);
outbyte(PIT_C1, 0x7F);
outbyte(PIT_CW, 0xB6);
outbyte(PIT_C2, 0xBB);
outbyte(PIT_C2, 0x00);
enable();
while(1)
{
for(i=0; i<4; i++)
{outbyte(PPI1PA, pat1[i]);
outbyte(PPI1PC, pat2[i]);
};
}
}
void isr(void)
{int i;
for(i=0; i<5000; i++)
{outbyte(PPI1PC, 0x00);};
}
lab 7에서는 delay함수를 사용하여 일정 시간의 지연을 제공해주었다. 이번에는 PIT와 interrupt를 이용하여 일정 시간의 지연을 주었다. 프로그램의 code는 위의 표와 같다. 카운터2의 OUT 출력에는 IR1이 연결되어 있다. 이를 통해 인터럽트를 처리한다. IR1에 의한 인터럽트가 발생할 때마다 void isr(void)로 정의된 서비스 루틴이 수행된다. 카운터 2 OUT의 주파수는 약 0.4Hz다. 즉, 약 2.5초마다 인터럽트 서비스 루틴을 수행하게 된다. 인터럽트 서비스 루틴은 약간의 시간동안 dot matrix를 전부 끄게 하는 동작을 한다. 이로 인해 일정 패턴은 약 2.5초마다 잠깐씩 꺼지면서 깜빡거리는 동작을 한다. 카운터 1, 2의 초기값을 변경해줌으로써 쉽게 지연시간을 정할 수 있고 서비스 루틴의 프로그램을 변경함으로써 꺼지는 시간 혹은 다른 기능을 수행하게 할 수 있다. PIT를 사용함으로써 일정패턴에는 시간지연을 제공하면서 또 다른 일을 수행하는 효율적인 프로그래밍을 구현할 수 있게 된다.
5. 토의
실험과정과 검토사항을 통해 PIT(8253)의 다양한 동작과 응용에 대해 살펴보았다. 이번에는 8253의 D.C. Characteristic을 살펴봄으로써 노이즈마진에 대해 생각해보았다. 아래 표는 8253의 D.C. Characteristics 정리한 것이다.
노이즈마진이란 신호의 전송과정에서 노이즈로 인해 신호의 level이 원치 않게 바뀌어 destination에서 제대로 인식하지 못할 경우를 대비하여 잡음에 대해 여유를 둔 것을 뜻한다. 8253의 경우를 살펴보면, VOH의 최소값이 2.4V다. 반면 VIH의 최소값은 2.2V다. High level에서의 노이즈 마진은 NM_HI=2.4-2.2=0.2V다. High신호가 전송과정에서 노이즈로 인해 voltage값이 작아질 경우를 생각해서 2.2V까지 들어오는 신호는 High로 인식할 수 있게끔 0.2V의 잡음 여유를 두고 있다. VOL의 최대값은 0.45V다. VIL값의 최대값은 0.8V다. Low level에서의 노이즈 마진은 NM_LO=0.8-0.45=0.35V다. Low신호가 전송과정에서 노이즈로 인해 voltage값이 커질 경우를 생각해서 0.8V까지 들어오는 신호는 low로 인식할 수 있게끔 0.35V의 잡음 여유를 두고 있다. 이러한 노이즈마진이 없다면 신호를 받는 쪽에서는 high도 아니고 low도 아닌 undetermined state가 되어버린다.
더 깊게 생각해보면 노이즈마진 자체의 의미보다는 어느 소자와 다른 소자가 출력-입력의 cascade topology 상태에 있을 때 각각의 출력 및 입력 특성을 아는 것이 노이즈마진의 본질을 이해하는데 무엇보다 중요한 필요조건이 될 것이다. PIT의 일반적인 구동전압은 5.0V정도이므로 VOH또한 5V 근처의 값이 돼야 한다. 하지만 회로설계 잘못으로 출력전류가 많이 흘러나오는 바람에 VOH가 약 2.9V가 되었다고 가정해보자. 이 값은 PIT 입장에서는 High이므로 아무 문제가 없다. 그러나, MCU(Micro controller unit)들은 고속 CMOS 계열의 소자라서 입력특성이 주로 CMOS 특성을 따른다. CMOS의 입력특성은 0.7VDD~0.8VDD가 통상적인 VIH의 최저값이다. 즉, 약 3.5~4.0V가 High로 인식하는 기준이 된다. 이에 PIT에서 나온 신호는 PIT에서는 High지만 MCU에서는 undetermined state로 받게 된다. 이러한 점을 고려하여 서로 다른 디바이스간의 입출력 특성을 고려하여 interfacing을 해야 한다.
6. 참고 문헌
- Brey, Barry B. The Intel Microprocessors, 8th Ed, Prentice Hall, 2008
_ 김경환, 마이크로프로세서응용실험 강의자료, 2010
- 네이버 카페 ; http://cafe.naver.com/gabriel98.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=999
6) Lab 7에서, dot matrix를 scan하여 일정 패턴을 표시하는 프로그램에서는 일정 시간의 지연을 프로그램으로 구현했었다. 이 지연을 Program 8.4와 같이 PIT와 interrupt를 이용하여 어떻게 구현할 수 있을지 생각해 보자.
#pragma interrupt(\"isr\"=33)
#include \"i86.h\"
#include \"kit.h\"
#define ICW10x13
#define ICW20x20
#define ICW40x03
#define I_MASK0xFD
unsigned intpat;
main()
{
int i,j;
unsigned char pat1[4]=
{0xDF, 0xEF, 0xF7, 0xFB};
unsigned char pat2[4]=
{0xE7, 0x42, 0x42, 0x18};
outbyte(PPI1CONT,0x80); /* initialize PPI1 */
outbyte(PPI1PA,0xFF); /* turn off green LEDs */
outbyte(PPI1PB,0xFF);
outbyte(PPI1PC,0x00);
disable();
outbyte(PIC_0, ICW1);
outbyte(PIC_1, ICW2);
outbyte(PIC_1, ICW4);
outbyte(PIC_1, I_MASK);
outbyte(PIT_CW, 0x76);
outbyte(PIT_C1, 0xFF);
outbyte(PIT_C1, 0x7F);
outbyte(PIT_CW, 0xB6);
outbyte(PIT_C2, 0xBB);
outbyte(PIT_C2, 0x00);
enable();
while(1)
{
for(i=0; i<4; i++)
{outbyte(PPI1PA, pat1[i]);
outbyte(PPI1PC, pat2[i]);
};
}
}
void isr(void)
{int i;
for(i=0; i<5000; i++)
{outbyte(PPI1PC, 0x00);};
}
lab 7에서는 delay함수를 사용하여 일정 시간의 지연을 제공해주었다. 이번에는 PIT와 interrupt를 이용하여 일정 시간의 지연을 주었다. 프로그램의 code는 위의 표와 같다. 카운터2의 OUT 출력에는 IR1이 연결되어 있다. 이를 통해 인터럽트를 처리한다. IR1에 의한 인터럽트가 발생할 때마다 void isr(void)로 정의된 서비스 루틴이 수행된다. 카운터 2 OUT의 주파수는 약 0.4Hz다. 즉, 약 2.5초마다 인터럽트 서비스 루틴을 수행하게 된다. 인터럽트 서비스 루틴은 약간의 시간동안 dot matrix를 전부 끄게 하는 동작을 한다. 이로 인해 일정 패턴은 약 2.5초마다 잠깐씩 꺼지면서 깜빡거리는 동작을 한다. 카운터 1, 2의 초기값을 변경해줌으로써 쉽게 지연시간을 정할 수 있고 서비스 루틴의 프로그램을 변경함으로써 꺼지는 시간 혹은 다른 기능을 수행하게 할 수 있다. PIT를 사용함으로써 일정패턴에는 시간지연을 제공하면서 또 다른 일을 수행하는 효율적인 프로그래밍을 구현할 수 있게 된다.
5. 토의
실험과정과 검토사항을 통해 PIT(8253)의 다양한 동작과 응용에 대해 살펴보았다. 이번에는 8253의 D.C. Characteristic을 살펴봄으로써 노이즈마진에 대해 생각해보았다. 아래 표는 8253의 D.C. Characteristics 정리한 것이다.
노이즈마진이란 신호의 전송과정에서 노이즈로 인해 신호의 level이 원치 않게 바뀌어 destination에서 제대로 인식하지 못할 경우를 대비하여 잡음에 대해 여유를 둔 것을 뜻한다. 8253의 경우를 살펴보면, VOH의 최소값이 2.4V다. 반면 VIH의 최소값은 2.2V다. High level에서의 노이즈 마진은 NM_HI=2.4-2.2=0.2V다. High신호가 전송과정에서 노이즈로 인해 voltage값이 작아질 경우를 생각해서 2.2V까지 들어오는 신호는 High로 인식할 수 있게끔 0.2V의 잡음 여유를 두고 있다. VOL의 최대값은 0.45V다. VIL값의 최대값은 0.8V다. Low level에서의 노이즈 마진은 NM_LO=0.8-0.45=0.35V다. Low신호가 전송과정에서 노이즈로 인해 voltage값이 커질 경우를 생각해서 0.8V까지 들어오는 신호는 low로 인식할 수 있게끔 0.35V의 잡음 여유를 두고 있다. 이러한 노이즈마진이 없다면 신호를 받는 쪽에서는 high도 아니고 low도 아닌 undetermined state가 되어버린다.
더 깊게 생각해보면 노이즈마진 자체의 의미보다는 어느 소자와 다른 소자가 출력-입력의 cascade topology 상태에 있을 때 각각의 출력 및 입력 특성을 아는 것이 노이즈마진의 본질을 이해하는데 무엇보다 중요한 필요조건이 될 것이다. PIT의 일반적인 구동전압은 5.0V정도이므로 VOH또한 5V 근처의 값이 돼야 한다. 하지만 회로설계 잘못으로 출력전류가 많이 흘러나오는 바람에 VOH가 약 2.9V가 되었다고 가정해보자. 이 값은 PIT 입장에서는 High이므로 아무 문제가 없다. 그러나, MCU(Micro controller unit)들은 고속 CMOS 계열의 소자라서 입력특성이 주로 CMOS 특성을 따른다. CMOS의 입력특성은 0.7VDD~0.8VDD가 통상적인 VIH의 최저값이다. 즉, 약 3.5~4.0V가 High로 인식하는 기준이 된다. 이에 PIT에서 나온 신호는 PIT에서는 High지만 MCU에서는 undetermined state로 받게 된다. 이러한 점을 고려하여 서로 다른 디바이스간의 입출력 특성을 고려하여 interfacing을 해야 한다.
6. 참고 문헌
- Brey, Barry B. The Intel Microprocessors, 8th Ed, Prentice Hall, 2008
_ 김경환, 마이크로프로세서응용실험 강의자료, 2010
- 네이버 카페 ; http://cafe.naver.com/gabriel98.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=999