Q&A 형식으로 엮은 8051 기초부터 응용까지

들어가는 말

 

8051( AT89C51/52, AT89S51/52, AT89C51ED2/RD2 )에 대한 내용을 질문과 답변 형식으로 꾸며 보았습니다.  내용은 초보적인 것부터 응용 분야까지 다양한 분야를 설명하고자 노력하였습니다. 글을 보시는 분들에게 도움이 되었으면 좋겠습니다..

 

목차

 

Q.01 [내부구조] SFR은 무엇인지요? 왜 그렇게 이름 붙여졌는지요?     

Q.02 [내부구조] SFR를 왜 어드레스 공간에 맵핑시켜 두었나요?

Q.03 [내부구조] PSW(Program Status Word) 또는 플레그 레지스터(flag register)란 무엇인가요?

Q.04 [내부구조] 8051은 어드레스라인의 일부을 데이터 라인과 함께 사용하고 있습니다. 반드시 그래야 하나요?

Q.05 [내부구조] Direct Addressing 과 Indirect Addressing 이 무엇이며, 왜 8051 데이터시트에 이 말이 자주 등장하나요?

Q.06 [내부구조] 워치독 타이머가 무엇이며 어떤 경우에 필요한가요?

Q.07 [응용] 오실로스코프를 이용한 실행시간의 측정

Q.08 [내부구조] 마이콤에 내장된 EEPROM은 왜 있는 것일까요?

Q.09 [응용] 마이콤으로 시계를 만드는 원리

Q.10 [디버깅] 만든 세트가 동작하지 않아요. 어디서부터 체크를 해야 하는지도 모르겠구요.

Q.11 [응용] 마이콤 내부의 프로그램을 다른 사람이 카피하지 못하게 하는 방법이 있나요?

Q.12 [내부구조] AT89C51ED2의 PCA(Programmable Counter Array)가 뭔가요?

Q.13 [응용] 7-seg LED와 char LCD

Q.14 [내부구조] 8051은 왜 명령어 하나를 처리하는데 12 사이클이 필요한가요? (updated)

Q.15 [펌웨어] 무한루프를 도는 마이콤 프로그램

Q.16 [펌웨어] 헤더 파일 reg51.h에는 어떤 내용이 들어가 있나요?

Q.17 [내부구조] 8051의 절전모드

Q.18 [내부구조] 8051의 4개의 포트(P0,P1,P2,P3)는 모두 전기적 특성이 같은가요?

Q.19 [기초] GPIO가 무엇인가요?

Q.20 [응용] 마이콤 프로그램 중 RAM이 부족한 경우가 종종 생기나요?

Q.21 [디버깅] 보드상의 LED를 디버깅 용도로 사용할 수 있나요?

Q.22 [기초] 펌웨어(firmware)와 소프트웨어(software)의 차이점은 무엇인가요?

Q.23 [디버깅] 잘 동작하던 프로그램이 어느 부분을 수정하니 동작하지 않네요. 어떻게 해야 하나요?

Q.24 [기초] 풀업(pull up)과 풀다운(pull down)이란 무엇인가요?

Q.25 [기초] sink current 와 source current 란 무엇인가요?

Q.26 [기초] T89C51RD2의 플레쉬 메모리는 10,000번 지웠다 쓸 수 있는 반면, EEPROM은 100,000번 지웠다 쓸 수 있는데 왜 그럴까요?

Q.27 [기초] 8051의 EA핀의 역할은 무엇인가요?

Q.28 [기초] AT89C51RD2, AT89C51RC2, AT89C51RB2의 차이점은 무엇인가요?

Q.29 [기초] 타이밍 다이어그램은 무엇인지요?

Q.30 [기초] active low와 active high는 무슨 의미인지요?

Q.31 [디버깅] 동작이 불안한 8051 보드(new)

Q.32 [기초] 8051의 WR, RD, PSEN, ALE 핀의 역할은 무엇인지요?(new)

Q.33 [내부구조] UART와 USART는 무엇이 다른지요?(new)

Q.34 [내부구조] fully static design이란 무엇이고, 이 것의 장점은 무엇인지요?(new)

Q.35 [기초] "10 years data retention" 이 무슨 뜻인지요?(new)

Q.36 [내부구조] "brown out reset" 이 무슨 뜻인지요?(new)

Q.37 [비교] AT89C51, AT89S52, AT89C51ED2의 동작가능한 최대 클럭 주파수는 어떻게 되나요?(new)

Q.38 [비교] AT89C51, AT89S52, AT89C51ED2의 동작 전압 범위는 어떻게 되나요?(new)

Q.39 [비교] AT89C51, AT89S52, AT89C51ED2의 플레쉬 메모리에 프로그램을 몇 번까지 지웠다 쓰기를 반복할 수 있나요?(new)

Q.40 [기초] 듀티 50%(duty 50 %) 란 무슨 뜻인가요?(new)

Q.41 [기초] AT89S51/52를 ISP(In System Programming)하기 위해서는 어떤 핀들을 사용해야 하나요?(new)

Q.42 [비교] AT89S52와 AT89C52는 ISP 기능을 제외하고는 완전히 같은 마이콤인가요?(new)

Q.43 [내부구조] 8051에서 클럭과 머신 사이클(machine cycle)과는 어떤 관계가 있나요?(new)

Q.44 [내부구조] 8051에서 리셋 핀에 가해 주는 리셋 신호의 길이에 제약 조건이 있나요?(new)

Q.45 [내부구조] 8051에서 리셋 핀이 출력 핀 역할도 할 수 있나요?(new)

Q.46 [비교] ISP가 되는 8051 중에서 낮은 전압에서 동작되는 것이 있나요? 예전의 AT89LV 시리즈처럼요.(new)

Q.47 [내부구조] 리셋 핀에 붙이는 저항과 커패시터는 왜 붙이는 것일까요? 도대체 리셋 핀 내부 구조는 어떻게 되어 있는 것일까요?(new)

Q.48 [내부구조] 파워온리셋(POR : Power On Reset)이란 무엇인가요? 리셋 핀에 있는 리셋 버튼을 누르는 것과는 무슨 차이가 있는지요?(new)

 

 

 (to be continued)

Q.01 [내부구조] SFR은 무엇인지요? 왜 그렇게 이름 붙여졌는지요?

  

8051의 SFR(Special Function Register)은 말 그대로 특별한 기능을 갖는 레지스터입니다.  우리가 흔히 아는 operand나 연산의 결과를 담아두는 레지스터를 general purpose register라고 합니다. 그럼 어떤 기능이 special function에 속할까요? 마이콤의 주변기기에 해당하는 기능을 8051에서는 special function 이라고 이름 붙였습니다. 즉 타이머, 인터럽트, UART, Power saving mode 등등에 해당하는 주변기기를  제어할 수 있는 레지스터를 SFR이라고 부릅니다. SFR(Special Function Register)는 8051이 아닌 다른 마이콤에서도 사용되는 용어입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 02/24/2004, r/t/e/l/d)

Q.02 [내부구조] SFR를 왜 어드레스 공간에 맵핑시켜 두었나요?

  

8051에서는 SFR를 8051의 어드레스 공간에 배치해 두었습니다. 이 말인 즉 8051의 어드레스 중 특정 번지의 값을 읽거나 씀으로 SFR의 값을 읽거나 쓸 수 있도록 되어있습니다. 마이크로 프로세서나 마이콤을 코아로 사용한는 칩들은 대부분이 이러한 구조로 되었습니다. 좀더 자세히 설명하자면, 8051또는 ARM 코아 주변에 주변 장치(해당  IC의 고유한 기능을 구현하기 위한 주변 장치)를 넣고, 이 주변 장치를 제어하는 콘트롤 레지스터나 상태 레지스터(status register)를 8051또는 ARM의 어드레스 공간에 위치 시킵니다. 이렇게 주변기기를 제어하는 콘트롤 레지스터를 어드레스 공간에 맵핑한 이유는 프로그램에 의해 손쉽게 주변기기를 콘트롤 하기 위해서입니다. 단순히 특정 번지의 값을 읽거나 값을 써넣는 방식으로 주변기기의 상태를 파악하거나, 특정 동작을 하도록끔 할 수 있습니다. 프로그램의 입장에서는 이 방법이 주변기기를 제어하는 가장 편리한 방법이 아닐까 합니다. 만약 이 방법 보다 더 편리한 방법을 생각해 낼 수 있다면 그 사람은 아주 창의력이 뛰어난 사람일 것입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 06/03/2006, r/t/e/l/d)

Q.03 [내부구조] PSW(Program Status Word) 또는 플래그 레지스터(flag register)란 무엇인가요?

  

PSW(Program Status Word)또는 flag register 란 연산 과정 후 캐리가 발생했는지, 오버프로우가 났는지 등등의 정보를 모아 둔 레지스터 입니다. 앞서 설명한 콘트롤 레지스터가 외부에서 이 레지스터에 특정 값(0 또는 1)을 써 넣음으로서 그에 해당하는 주변기기를 콘트롤하는 것이라면, flag register는 마이콤의 내부 상태 또는 방금 전에 했던 연산의 결과로 나타난 상태(즉, 캐리, 오버플로우 등등)를 프로그램에게 알려주기 위한 레지스터입니다. 플레그 레지스터(flag register)의 flag의 의미를 좀 더 설명하자면, 깃발(flag)을 올리거나 내림에 따라 상대방에게 정보를 전달하는 수신호에서 왔다고 생각하면 이해하기 쉬울 것입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.04 [내부구조] 8051은 어드레스라인의 일부을 데이터 라인과 공통으로 사용하고 있습니다. 반드시 그래야 하나요?

  

결론부터 말씀드리면, 반드시 그럴 필요는 없습니다만, 대부분의 마이콤이 어드레스라인의 일부와 데이터라인을 공통으로 사용하고 있습니다. 그 이유는 어드레스라인과 데이터라인에 할당된 핀수를 줄이고자 함이며(8051에서는 이렇게 함으로 24개(8 + 16)에서 16개로 핀 수가 줄어 들었습니다.) 상용 칩 중에서는 8051을 코아로 사용하면서 어드레스 라인과 데이터 라인을 완전히 분리한 칩이 있습니다. 이 경우 외부에 SRAM를 붙이는 작업이 훨씬 간단해 집니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.05 [내부구조] Direct Addressing 과 Indirect Addressing 이 무엇이며, 왜 8051 데이터시트에 이 들이 자주 등장하나요?

  

 

마이크로프로세서 또는 마이콤이 메모리를 억세스하는 방식을 어드레싱 모드(addressing mode)라고 하며, 어드레싱 모드에 관한 내용은 컴퓨터 아키텍쳐 책(예: Hennessy & Peterson)에 자세히 설명되어 있으며 종류 또한 많습니다. 여기서는  8051 데이타 시트에 나오는 direct adressing 과 indirect addressing을 설명합니다.

    1. 먼저 direct adressing이란 주소를 직접 지정하는 것을 말합니다.

            mov 0A0H, #data

    위의 명령어는 #data 값을 0A0H로 옮깁니다. 옮길 주소(target address)를 0A0H 처럼 직접 지정하였습니다.

    2. 반면 indirect addressing은 아래와 같이, 옮길 주소(target address)를 레지스터(아래의 예에서는 R0)에 지정합니다.

            mov @R0, #data

만약 바로 위의 어셈블리 코드에서 R0 에 0A0H 라는 값이 들어 있다고 하면 위의 두 가지의 어셈블리 코드는 동일한 결과를 가져올까요? 8051의 경우에는 답은 "그렇지 않다"입니다. 왜 그렇지 않은지( 상식적으로는 두 결과가 같아야 하지만, 다른 이유는 그만한 사정이 있기 때문입니다.)를 아래에서 간단히 설명하였습니다.

위에서 설명한 두가지 어드레싱은 기계어로 옮겨질 때(즉 어셈블될 때) 서로 다르게 옮겨집니다. 즉 기계가 위의 두가지를 서로 구분할 수 있다는 의미입니다(글자가 틀린데, 기계가 구분을 못할 이유가 없지요. ;-) ). 8051 데이터 시트에 위의 두가지 어드레싱 모드가 설명된 이유는 SFR와 내부 데이터 메모리가 어드레스 공간상 겹쳐 있는데, 어느쪽을 억세스할 것인가가 위의 2가지 어드레싱 모드 중 어느 것을 사용하는가에 의해 결정되기 때문입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.06 [내부구조] 워치독 타이머가 무엇이며 어떤 경우에 필요한가요?

  

8051에는 없지만, AT89S51 / AT89C51ED2에는 워치독 타이머(Watchdog Timer)가 있읍니다. 단어에서 보듯이 "집 지키는 개", "경비원"에 해당하는 일을 합니다. 다음과 같은 경우를 생각해 보겠읍니다. 복잡한 프로그램에서 프로그램이 어느 조건을 만족하면 그냥 무한 루프로 들어가는 버그가 있다고 가정합니다. 프로그램이 복잡해 프로그래머가 이런 버그가 있다는 사실을 깨닫고 있지 못합니다. 이 경우 특별한 조건이 만족하면, 프로그램은 무한 루프로 들어가고, 기계는 먹통(어떠한 입력에도 반응하지 아니하는 상태)이 되어 버릴 것입니다. 기계가 먹통이 되었을 때의 유일한 해결책은 전원을 껐다가 다시 켜거나, 리셋 스위치를 누르는 것입니다. (데스크탑 PC에서도 가끔씩 경험하는 일입니다.)

워치독 타이머는 마이콤안에 있는 타이머로 매 클럭마다 하나씩 증가됩니다. 그리고 오버플로우가 나면, 마이콤에 리셋을 걸어버립니다.(리셋 핀이 마이콤 외부에 있는데, 어떻게 워치독 타이머가 마이콤에 리셋을 걸까하고 궁금해 하시는 분이 계실 줄 모르겠으나, 전혀 불가능해 보이지는 않습니다. ) 프로그램은 워치독 타이머가 오버플로우가 나지 않도록 충분히 자주 워치독 타이머를 제로로 클리어시켜 주어야합니다. 이렇게 제로로 클리어하는 것을 프로그래머의 몫입니다.

여기서 한가지 더 설명해야 할 것은, 마이콤에 리셋을 걸어 다시 동작 시키는 것과, 마이콤이 먹통이 되어 전혀 반응하지 않는 것 중 어느 것이 더 사용자에게 해로운가 하는 점인데, 후자가 더 해롭습니다. (PC의 경우도 마찬가지입니다. 먹통인 상태로 그냥 방치되는 것보다는 리셋 버튼을 눌러 PC를 다시 시작하는 것이 사용자에게 좋습니다.) 마이콤 내부 또는 외부의 EEPROM에 일정 시간 간격 또는 이벤트가 일어날 때 마다 환경 변수나 사용자로 부터 입력 받은 값 등을 저장해 두면, 마이콤에 리셋이 걸리더라도, 그 이전 상태에서 다시 작업을 시작할 수 있습니다. (비유를 들자면, 워드 작업을 할 때, 문서의 내용이 추가되거나 수정될 때 마다 바로 바로 하드디스크에 저장해 두면, PC가 먹통이 되어 리셋을 걸어 다시 시작하여도, 마지막 작업했던 부분부터 다시 시작할 수 있읍니다.)

그리고 마이콤이 리셋이 걸려 시스템을 다시 시작한 경우, 메인 작업에 들어가기 전에 리셋(프로그램이 새로 시작한)이 걸린 횟수를 EEPROM에 기록해 두면, 나중에라도 과연 몇번의 워치독 타이머가 동작했는지를(리셋이 걸린 횟수) 파악할 수 있읍니다. 만약 이 횟수가 예상했던 것 보다 많으면, 프로그램을 다시 검토해야 하겠지요.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.07 [응용] 오실로스코프를 이용한 실행시간의 측정

 

마이콤 프로그램을 짤 때, 어떤 함수에서 실행되는 시간이 얼마나 되는가를 알아야 할 경우가 있습니다.(특히 인터럽트 서비스 루틴의 경우나 1msec의 시간 지연 함수를 만들 경우에 그렇습니다.)  실행 시간을 측정하고자하는 함수의 인스트럭션 갯수를 세면  실행시간을 계산할 수 있으나, 여기서는 오차가 있기는 하나 간단한 방법을 소개합니다.

실행시간을 측정하고자 하는 함수의 제일 첫머리에 8051의 특정 포트(예를 들면 P0)를 하이(high)로 만드는 명령어를 넣고, 제일 마지막에 이 것(P0)을 로우(low)로 만드는 명령어를 넣습니다. 그  다음 프로그램을 실행시킨 뒤 오실로스코프로 P0를 관찰해 이 펄스의 폭을 측정합니다. 측정오차기 있기는 하나 이 방법으로 간단히 실행시간을 알 수 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d )

Q.08 [내부구조] 마이콤에 내장된 EEPROM은 왜 있는 것일까요?

  

8051이나 AT89S52에는 없으나, AT89C51ED2 에는 마이콤 안에 EEPROM이 들어 있습니다. EEPROM이 왜 필요한지 궁금해 하시는 분이 계실 것입니다. 응용 분야에 따라서는 사용자가 입력한 값을 저장해 두어야 하는 경우가 있습니다. 그리고 전원이 나가더라도 그 값을 유지해야 하는 경우가 있습니다. 대표적인 경우가, 유저가 입력한 비밀번호를 시스템안에 기억해 두는 일입니다. 전원이 나갔다고 해서 입력한 비밀번호가 사라져서는 안될 것이고, 비밀번호 변경시에는 새로운 번호를 기억해 두어야 합니다. 이 경우 EEPROM을 사용합니다. 마이콤 내부에 EEPROM이 없는 경우에는 외부에 작은 EEPROM를 붙여서 사용할 수 있습니다. I2C 방식으로 동작하며, 작은 패키지(8핀) EEPROM을 어렵지 않게 구할 수 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.09 [응용] 마이콤으로 시계를 만드는 원리

  

원리만 간단히 설명하고자 합니다. 우선 8051의 타이머를 이용하여, 특정시간 간격으로(예를 들면 100 msec) 타이머 인터럽트가 발생되도록 합니다. 인터럽트 서비스 루틴에서는 가능한 한 긴 int 변수를 마련해 두고, 타이머 인터럽트가 걸릴때 마다 이 변수를 1씩 증가 시킵니다. 여기까지 구현되면 전원이 들어오면, 동작하는 시계가 완성되었읍니다. 필요한 경우에 이 값을 읽어서 초, 분, 시간으로 환산합니다. 여기까지가 골격이고, 여기에 살을 붙여 나가면 됩니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.10 [디버깅] 만든 세트가 동작하지 않아요. 어디서부터 체크를 해야 하는지도 모르겠구요.

  

 만든 마이콤 보드가 동작하지 않는 경우가 있습니다. 좀더 정확히 얘기하자면, 동작하는지 않하는지도 모르는 경우입니다. 이 경우 어느 부분을 체크해야 할까요? 가장 먼저 체크해야 할 것은 전원입니다. 과연 마이콤에 적절한 전압이 인가되고 있는지를 확인합니다. 그 다음은 클럭입니다. 마이콤의 클럭 핀에 클럭이 바르게 공급되는지를 체크합니다. 위의 두 단계를 체크하기 위해서는 테스터기나 오실로스코프가 필요합니다. 즉 파형을 눈으로 확인할 수 있는 장비가 필요한 셈이죠. 그 다음 단계는 마이콤의 모든 핀들이 스펙시트에서 요구하는데로 처리되었는지를 확인합니다. (예를 들어 8051의 EA 핀은 외부 메모리를 사용하느냐, 않느냐에 따라 적절한 값으로 셋팅되어야 합니다.) 그 다음 단계는 아주 간단한 테스트 프로그램을 돌려 보는 것입니다. 예를 들면, 마이콤의 특정 포트를 하이로 만들었다가 로우로 만드는 일을 반복하는 간단한 프로그램을 돌려봅니다.

사실 디버깅은 많이 해 본 사람이 잘 할 수 있는 분야입니다. 경험이 많을수록 더 짧은 시간과 더 작은 노력으로 제대로 동작하는 보드를 만들어 낼 수 있습니다. 몇 마디 더 적자면, 컴파일러의 컴파일 옵션, 특히 실행 파일의 시작번지를 지정하는 방법등은 잘 익혀 두어야 합니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.11 [응용] 마이콤 내부의 프로그램을 다른 사람이 카피하지 못하게 하는 방법이 있나요?

  

 마이콤을 한번도 사용해 보지 않은 분들을 위해 약간의 설명을 하고자 합니다. 롬라이터를 이용하여 마이콤 안의 플레쉬 메모리의 내용을 PC로 읽어 들일 수가 있습니다. 그리고 롬라이터에 새로운 마이콤을 넣고, 앞에서 읽어들인 내용을 써넣으면, 두 개의 마이콤은 똑같은 동작을 합니다. (왜냐면 프로그램의 내용이 같으니까요) 8051에는 Lock bit 이 있어서 이 것을 셋팅하면 마이콤 내부의 플레쉬 메모리의 내용을 읽어 내는 것을 하지 못하도록 할 수 있습니다. Lock bit을 클리어(clear) 하는 방법도 마련되어 있는데, 플레쉬 메모리를 지우면 Lock bit도 자동으로 클리어 됩니다. 즉 제 3자가 마이콤의 내부 메모리의 내용을 읽어보는 방법을 원천적으로 차단한 것이지요. Lock bit 에 대한 자세하고도 정확한 내용은 데이터 시트를 참고하세요.

과연 다른 사람이 카피하지 못하도록 보호할 만한 가치가 있는 코드가 8051의 4K바이트 메모리 안에 들어갈까 하고 생각하시는 분이 있을 수 있습니다. 응용 분야에 따라 다르다고 말씀드리고 싶습니다. 동작이 간단한 기기는 그 동작을 보고 프로그램을 다시 짜는 것이 더 편합니다. 왜냐면, 자신이 직접 짠 소스코드를 가지고 있는 것이 나중에라도 있을 수 있는 프로그램 수정/유지/보수 및 디버깅 시 편리하니까요. 반면 실행 프로그램(소스 코드이든, 실행 파일이든)없이는 그 기기의 동작을 재현하기가 어려운 경우가 있습니다. 쉬운 예로는 입력 비트 스트림(bit stream)을 스크램블하여 출력하는 경우인데, 이 경우는 8051의 4K바이트의 코드 메모리 만으로도 충분히 복잡하여, 소스코드/실행 파일 제공없이는 그 입출력 관계를 파악하기 아주 어려운 프로그램을 만들어 낼 수 있습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.12 [내부구조] AT89C51ED2의 PCA(Programmable Counter Array)가 뭔가요?

  

솔직히 말씀드리면, 글쓴이도 PCA(Programmable Counter Array)를 실무에서 사용해 본 경험이 없습니다. 단지 이것이 특정 기능을 하드웨어로 구현해 두어, 그렇지 않은  경우에 비해 CPU 로드(load)를 줄여준다는 정도로 만 이해하고 있읍니다. 데이터시트의 설명에 따르면 PCA는 5개의 16 비트 카운터 모듈로 구성되어 있으며, 각각의 카운터 모듈은 rising/falling edge capture, software timer, high-speed output, pulse width modulation(PWM) 모드 중 하나로 동작하도록 프로그램 될 수 있다고 합니다. 스펙 시트만 봐서는 아마도 무슨 말인지 이해하지 못하실 것으로 생각됩니다. 글쓴이 역시도 PCA를 사용하는 응용 분야를 접하기 전까지는 이 정도로 이해하는 수준에서 머물러 있을 것 같습니다.

T89C51RD2 데이타시트에는 PCA를 무척 어렵게 설명해 둔 것 같습니다.  다른 회사에서 만든 어플리케이션  노트를 첨부하니, 필요하신분은 참고 하세요. C로 짜여진 예제 프로그램이 실려 있어서, 당장 실무에 PCA를 사용하셔야 되는 분들에게는 도움이 되리라 생각됩니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.13 [응용] 7-seg LED와 char LCD

  

 간단한 마이콤 응용 보드의 출력으로 흔히 사용하는 것이 7 segment LED와 character LCD입니다. 여기서는 사용해 보지 않은 분들을 위해 간단히 설명해 보겠습니다. 마이콤 프로그래밍 측면에서 보면, character LCD 가 사용하기 편리합니다. 7 segment LED는 특히 여러 개의 digit을 갖고 있을 때 프로그램하기가 조금 더 까다롭습니다. 이름에서 알 수 있듯이 7 segment LED는 7개의 핀이 마이콤의 핀과 맞물려야 합니다. 그리고 소수점(dot)을 나타내고자 할 때는 모두 8개의 신호선이 마이콤과 연결되어야 합니다. 만약 시간을 나타내기 위해서 4자리(digit)를 갖는 7 segment LED를 사용한다면, 8*4 = 32 개의 신호선이 마이콤과 연결되어야 하는데, 이 경우 마이콤의 사용가능한 핀을 거의 다 사용해 버리게 됩니다. 고로 4자리(digit)를 갖는 7 segment LED는 각 숫자를 번갈아 가면서 켜는 구조로 되어 있습니다. 이 경우 필요한 핀수는 12개로 줄어 듭니다.(한자리를 표시하기 위한 8개의 신호선과 4개의 숫자중 하나를 선택하기 위한 4개의 신호선) 4개의 digit 이 모두 켜져 있는 것 처럼 보이지만, 실제로는 어느 한 순간에는 하나의 digit만이 켜져 있습니다. 사람 눈의 잔상에 의해 4개가 모두 켜져 있는 것 처럼 보이는 것이지요.

반면 character LCD에는 LCD 콘트롤러가 내장이 되어 있어 위에서 설명한 일을 콘트롤러가 대신해 줍니다. 즉 마이콤에서 해야 할 일을 character LCD의 콘트롤라가 대신해 주어 마이콤 프로그램이 단순해지며, 나타낼 수 있는 글자의 범위도 7-seg LED 보다 훨씬 넓습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 06/01/2006, r/t/e/l/d) 

Q.14 [내부구조] 8051은 왜 명령어 하나를 처리하는데 12 사이클이 필요한가요?

  

8051이 오래 전에 설계되어서 그렇다고 말할 수 있습니다. 그럼 왜 요즘에 나오는 Atmel사의 8051도 하나의 명령어를 실행하는데 12사이클이 필요한가라고 물으면, Intel사에서 받은 8051 자료를 가지고 기존의 8051과 사이클 레벨까지 똑 같은 마이콤을 만들려고 하다 보니 그렇게 되었다라고 하면 크게 틀리지 않을 듯합니다. 여기서 사이클이란 클럭 하나를 의미합니다. 하나의 명령어를 처리하는데 12사이클이 걸리는 것은 단점으로 작용할 수 있는데, 8051을 24MHz에서 동작시키는 것이나, 하나의 명령어를 한 사이클에 처리하는 마이콤을 2MHz로 동작시는 것이나 성능은 비슷합니다. 단순히 마이콤의 동작 주파수를 비교하는 것 만으로는 서로 다른 마이콤의 성능을 비교할 수 없습니다.

최근(2005년 3월) Atmel사에서 하나의 명령어를 한 사이클에 처리하는 8051칩을 발표했다는 뉴스가 있었습니다. AT89LP 시리즈가 그것이며, 이 시리즈 중 일부가 현재(2005년 3월) 샘플 공급가능하다고 합니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 03/27/2005, r/t/e/l/d) 

Q.15 [펌웨어] 무한루프를 도는 프로그램

  

 PC 상에서 실행되는 프로그램의 경우 프로그램의 실행이 끝나면, 제어권을 O/S에게 넘겨줍니다. 그러나 마이콤 프로그램의 경우는 실행권을 넘겨줄 곳이 없습니다. 그럼 어떻게 해야 할까요? 프로그램이 끝났으니 마이콤 스스로 절전 모드로 들어갈까요? 사실 마이콤의 경우 프로그램이 끝나도 갈 곳이 없습니다. 마이콤의 동작을 멈출 수도 없고요. 따라서 컴파일된 프로그램을 자세히 보면 프로그램이 main() 함수의 마지막 라인에 도달한 다음에 프로그램이 멈추어 서는 구조로 되어있지 않습니다. 경우에 따라서는 프로그래머의 의도와는 달리 무한 루프를 도는 경우도 접할 수 있습니다. 이 경우 프로그래머는 왜 이 프로그램이 시키지 않은 무한루프를 돌까하고 곰곰히 생각에 잠기게 됩니다. 프로그래머는 잘못한 것이 없습니다. 단지 프로그램이 끝난 뒤 갈 곳이 없다는 것을 생각하지 못한 것 말고는요.

마이콤 프로그램은 PC상에 돌아가는 과학 계산 프로그램처럼 결과 값을 출력하고는 멈추기 보다는 main() 프로그램 자체가 무한 루프로 구성되어 있는 경우가 많습니다. 마이콤에 전원이 들어와 있는 동안은 무한루프를 돌면서, 입력을 체크하고, 거기에 따르는 적절한 반응을 하도록 프로그램되어져 있는 경우가 많습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 06/01/2006, r/t/e/l/d) 

Q.16 [펌웨어] 헤더 파일 reg51.h에는 어떤 내용이 들어가 있나요?

  

별 관심없이 사용하는 헤더파일 reg51.h에는 어떤 내용이 들어가 있을까요? 헤더 파일을 열어보면 아시겠지만, SFR의 이름과 해당 어드레스가 정의되어 있읍니다.즉 P0는 몇번지 하는 식으로 각각의 SFR에 심볼릭 네임(symbolic name)을 부여해 두었습니다.  

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.17 [내부구조] 8051의 절전모드

  

베테리로 동작하는 기기에서는 베테리의 수명을 연장하기 위한 절전모드가 요긴하게 쓰입니다. 8051에는 두개의 절전 모드(power saving mode)가 제공됩니다. 아이들 모드(Idle mode)와 파워다운 모드(powerdown mode)가 그것입니다.

1. 아이들 모드(Idle mode)

    아이들 모드로 들어가기 위해서는 PCON레지스터의 bit 0(이하 PCON.0 로 표기)를 셋팅합니다. 아이들 모드에서는 내부 RAM 과 SFR의 값들이 그대로 유지됩니다. 아이들 모드에서 벗어나는 방법은 인터럽트와 하드웨어 리셋이 있습니다. 하드웨어 리셋에 의해 아이들 모드에서 벗어나면, 아이들 모드로 들어가기 전에 실행했던 명령어 다음부터 계속 실행합니다.

    (리셋에 의해 아이들 모드를 벗어났을 경우 주의해야 할 점을 데이타시트에서 설명해 두고 있읍니다. 마이콤을 실제 제품에 적용하면서 아이들 모드를 사용하시는 분들은 이 부분을 주의깊게 보기를 권해드립니다.)

2. 파워다운 모드(Power down mode)

    아이들 모드로 들어가기 위해서는 PCON.1을 셋팅합니다.이 모드에서는 마이콤 내부의 클럭이 멈춥니다. 이 모드를 벗어나는 유일한 방법은 하드웨어 리셋입니다. 리셋을 건 경우 SFR은 초기값(reset value)으로 셋팅됩니다. 그러나 내부 RAM의 값은 이전 값을 그대로 유지합니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.18 [내부구조] 8051의 4개의 포트(P0,P1,P2,P3)은 모두 전기적 특성이 같은가요?

  

그렇지 않습니다. 데이타 시트를 보면, P0는 open-drain bi-directional I/O port이고, P1, P2, P3은 bi-directional I/O port라고 설명되어 있습니다. 즉 P0 를 GPIO(General purpose Input / Output)으로 사용할 때는 P0 에 풀업 저항을 붙여야 합니다. 만약 외부 메모리를 사용한다면, P0, P2를 사용하여 외부메모리(SRAM 또는 플레쉬메모리)에 연결하게 되는데, 이 경우에는 P0 에 내부 풀업 저항이 연결되어 별도의 풀업저항을 붙일 필요가 없습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.19 [기초] GPIO가 무엇인가요?

  

글쓴이도 GPIO(General Purpose Input Output)가 무엇인지 모르던 시절이 있었기에, 여기서 간단히 설명해 보고자 합니다.  마이콤의 핀들 중 어떤 것은 그 용도가 이미 결정되어서 변경할 수 없는 것이 있는 반면, 어떤 것은 특정한 용도없이 일반적인 입출력으로 사용할수 있는 것들이 있습니다. 후자를 GPIO 핀이라고 합니다. GPIO 핀들 중에는 다른 특정기능(인터럽트, UART, 카운터)을 겸하고 있는 것도 있습니다.(8051의 P3가 그 예입니다.)

GPIO 핀은 입력 핀으로 사용될 수도 있고 출력 핀으로 사용될 수도 있습니다. 입력 핀으로 사용되는 경우는 그 핀의 값을 읽으면, 그 핀의 상태, 즉 그 핀이 현재 하이(high)인가 로우(low)인가를 알 수 있습니다. 반면 출력으로 사용되는 경우는 그  핀에 1이라는 값을 쓰면, 그 핀이 하이(high)가 되고 0을 쓰면, 로우(low)가 됩니다.

아울러 포트(port)라는 용어도 설명해 볼까 합니다.  여러 핀(pin)들의 모음(보통은 8개 이나, 반드시 8개가 아닌 경우도 있읍니다.)을 포트라고 부릅니다. 8 비트 마이콤에서는 한번에 8 비트의 데이터를 다루므로 8 개의 핀을 하나이 포트라고 부르는 것이 자연스럽습니다. 8051에서도 그렇게 하고 있고요. 앞서 하나의 핀의 값을 읽어서 그 값이 0 인지 1인지에 따라 그 핀이 하이 상태인지 로우 상태인지를 알 수 있다고 하였는데, 사실을 핀 하나의 값을 읽는다기 보다는 포트(8개의 핀)값을 읽습니다. 이렇게 읽은 1바이트의 값을 가지고, 어느 핀이 하이(high)이고 어느핀이 로우(low)인지를 알 수 있습니다. (비트 마스킹(bit masking)이 이 과정에서 유용하게 쓰입니다.)

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d ) 

Q.20 [응용] 마이콤 프로그램 중 RAM이 부족한 경우가 종종 생기나요?

  

 종종 있습니다. 특히 크기가 큰 배열을 선언한 경우는 더욱 더 그러합니다. 코드메모리가 모자라는 경우보다 RAM이 부족한 경우를 더 많이 접하는 것 같습니다. PC상에서 프로그램할 때와는 달리, 꼭 필요한 변수를 꼭 필요한 크기(bit, byte, word)만큼 선언하여 사용하는 것이 좋습니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.21 [디버깅] 보드상의 LED를 디버깅 용도로 사용할 수 있나요?

  

예, 유용하게 사용할 수 있읍니다. 마이콤 프로그램밍을 해 보신분은 아시겠지만, 마이콤 상의 프로그램은 인간의 생각보다 빠르게 동작하여 오동작을 하게 되면, 어디서부터 손을 봐야 하는지 난감한 경우가 있습니다. 즉 프로그램의 실행이 순식간에 일어나기 때문에, 프로그램이 어디까지 제대로 동작하다가 멈추었는지 파악하기가 힘듭니다.

이 경우 보드상의 LED가 유용하게 쓰일 수 있읍니다. 먼저 프로그램을 처음 마이콤에 로딩했는데 동작하는지 않하는지를 파악하기 어려울때, main()함수의 제일 앞부분에 LED를 깜박이도록(또는 on 시키는) 하는 코드를 넣습니다. 그 다음 프로그램을 컴파일 한 뒤 마이콤에 로딩한 뒤 리셋버튼을 눌러 실행시킵니다. LED가 의도한 데로 깜빡이면(또는 on 이 되면), 일단 프로그램의 LED를 건드리는 부분까지는 정상적으로 동작한 것입니다. 만약 그렇지 않다면, 어디서 부터 손봐야 할지 더욱 난감해 지는데, 하드웨어쪽 체크는 여기를 참고하시고, 컴파일러 쪽으로는 프로그램의 시작 위치 등등을 체크해 보기 바랍니다.

그 다음 단계로는 main()함수의 중간 중간에 LED를 하나씩 켜는 부분을 만들어 두는 것입니다. 보드상에 LED가 8개 있는 경우 main()함수의 중간 중간에 LED를 하나씩 켜도록하는 코드를 삽입합니다. 이 것을 통해 프로그램이 어디까지 진행되는지를 알 수 있읍니다.

단순히 on/off 기능 밖에 없는 LED도 잘 활용하면  디버깅 용도로 유용하게 사용될 수 있읍니다. 바꾸어 말하면, LED는 Man-Machine Interface의 가장 원시적인 형태입니다.

(처음 글 올린 날 : 11월/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d) 

Q.22 [기초] 펌웨어(firmware)와 소프트웨어(software)의 차이점은 무엇인가요?

  

하드웨어와 소프트웨어의 차이점은 다 아실 것입니다. 펌웨어와 소프트웨어의 차이점은 다음과 같이 생각하시면 됩니다. 마이콤 프로그램을 펌웨어라고 부르고, PC나 워크스테이션(workstation) 상에서 돌아가는 프로그램을 소프트웨어라고 부른다. 펌웨어는 하드웨어에 대한 지식을 더 필요로 하는 반면, 소프트웨어는 하드웨어에 관련된 부분을 O/S가 맡아서 처리해주기 때문에 프로그램하기가 더 편하다고 할 수 있습니다.(예를 들어 하드디스크에 데이터를 기록할 때도 PC 프로그램은 HDD가 한번에 512 바이트씩 데이터를 옮긴다는 것을 생각하지 않고, 파일 단위로 기록할 수 있읍니다.) 마이콤과 PC의 중간 정도에 위치하는 PDA 상의 프로그램은 펌웨어라고 부르기 보다는 소프트웨어라고 부르는 경우가 많은 것 같습니다.

한편, 글쓴이가 생각컨데는 펌웨어(firmware)의 어원은 firm이란 단어가 hard 와 soft 사이에 위치하는데서 온 것 같습니다.

(처음 글 올린 날 : 12/07/2004, 마지막 수정 : 03/23/2005, r/t/e/l/d)

Q.23 [디버깅] 잘 동작하던 프로그램이 어느 부분을 수정하니 동작하지 않네요. 어떻게 해야 하나요?

  

이 경우 어떻게 하는 방법을 말씀드리가 보다는 어떻게 하면 앞으로 이런 일을 덜 겪을 수 있는가를 설명해 볼까 합니다. 많은 경우의 마이콤 프로그램 개발은 작은 프로그램에서부터 시작하여 여기에 조금씩 살을 붙여 원하는 기능을 하는 프로그램으로 만들어 가는 경우가 많습니다. 이 경우 반드시 잘 동작되는 프로그램을 백업해 둘 것을 권합니다. 프로그램을 수정하다 제대로 동작이 안될 경우, 이 프로그램을 다시 고쳐 동작되도록 만들기 보다는, 처음에 잘 동작되던 프로그램에서부터 다시 시작하는 경우가 빠르고 쉬운 경우가 종종 있습니다.

글쓴이의 경험에 의하면, 마이콤 프로그램이 PC 상에서 프로그램 하는 것보다 훨씬 더 "상식으로 이해가 되지 않는 행동을 하는 프로그램"을 만나기 쉬운 것 같습니다. 그 원인 중의 하나는 마이콤의 부족한 리소스(RAM 사이즈, 코드 메모리 사이즈 등)라고 생각합니다. PC상에서 프로그램 할 때는 char로 선언하던 int로 선언하던 상관이 없는데 반해, 마이콤에서는 제한된 RAM 용량으로 인해, 꼭 필요한 크기의 변수를 사용하는 것이 좋습니다. (바이트로 충분한 변수를 정수형으로 선언하지 마세요.)

 

(처음 글 올린 날 : 12/07/2004, 마지막 수정 : 12/09/2004, r/t/e/l/d)

Q.22 [기초] 풀업(pull up)과 풀다운(pull down)이란 무엇인가요?

  

풀업(pull up), 풀다운( pull down)이란 신호선을 약하게 Vcc(풀업의 경우) 또는 GND(풀다운의 경우)로 묶어두는 것을 말합니다. 여기서약하게 묶어 두었다는 것의 의미는, 신호선의 다른 쪽에 물려 있는 디바이스(칩)에서 이 신호선을 low 또는 high로 만들고자 하면, 그렇게 할 수 있다는 것을 의미합니다. 풀업(pull up), 풀다운( pull down)은 비교적 큰 값의 저항을 통해 신호선을 Vcc나 GND에 묶어둠으로 구현됩니다. (만약 신호선을 Vcc 나 GND에 바로 연결하면, 신호선의 다른 쪽에 연결된 디바이스(칩)에서 이 신호선의 상태를 바꿀 수 없습니다.)

한편, 8051 데이터 시트에 보면 "internal pullup" 이라는 말이 나오는데 이것은 풀업 저항이 8051 칩 안에 있는 것을 의미합니다.

풀업 풀다운이 사용되는 한가지의 예는, 특정 칩에서 전원의 인가, 또는 리셋에서 풀려날 당시에 특정 핀의 전압이 high 인지 low 인지에 따라 칩의 동작 모드가 다르게 셋팅하는 경우, 특정 핀을 high, low로 약하게 묶어 두기 위하여, 풀업 풀다운을 사용합니다.

 

(처음 글 올린 날 : 03/24/2005, 마지막 수정 : 03/24/2005, r/t/e/l/d)

Q.25 [기초] sink current 와 source current 란 무엇인가요?

  

sink current는 칩의 특정 핀이  외부에서 이 핀을 통해 칩 안으로 끌어 들일 수 있는 전류를 나타내고, source current는 특정 핀이  이 핀에서 외부로 공급해 줄 수 있는 전류를 나타냅니다. 얼핏 생각하면, sink current 와 source current 는 크기가 거의 같을 것 처럼 생각되나, 사실을 그렇지 않은 경우가 있읍니다. 8051의 경우가 그러합니다. 이러한 sink current 와 source current의 크기의 비대칭성은 8051의 외부에 다른 장치를 연결하는 방식에 영향을 미칩니다. 예를 들어 8051 칩에 LED를 붙이는 경우, Vcc에서 나온 전류가 보호 저항과 LED를 거친 뒤 8051 칩안으로 들어가겠끔 설계되지, 그 반대의 경우는 찾아보기 힘듭니다. 그 이유인 즉은, 8051의 source current가 sink current에 비해 미약하기 때문입니다.

 

(처음 글 올린 날 : 03/24/2005, 마지막 수정 : 03/24/2005, r/t/e/l/d)

Q.26 [기초] T89C51RD2의 플레쉬 메모리는 10,000번 지웠다 쓸 수 있는 반면, EEPROM은 100,000번 지웠다 쓸 수 있는데 왜 그럴까요?

  

T89C51RD2의 플레쉬 메모리에는 (주로) 프로그램이 저장 됩니다. 일단 개발 과정이 끝나면 프로그램은 확정되고, 프로그램을 변경할 경우는 드물어 집니다. 그러나, T89C51RD2의 EEPROM에는 프로그램이 동작하면서, 저장해야 할 데이터들을 기록됩니다. 즉, 쓰고 지우는 횟수가 플레쉬 메모리 보다는 EEPROM이 더 많은 응용 분야가 더 많다는 것입니다. 이러한 이유로, EEPROM의 수명을 플레쉬 메모리 보다 늘려 둔 것으로 생각됩니다.

그러면, 100,000번의 지웠다 쓸 수 있는 횟수는 대부분의 어플리케이션에서 충분한 것일까요? 예를 들어 생각해 보겠습니다. AT89C51ED2를 이용하여 만들어진 시스템이 있다고 합시다. 이 시스템의 예상 수명을 20년이라고 가정하면, 20년간 EEPROM에 100,000번의 데이터를 썼다 지웠다한다면, 얼마의 시간 간격으로 데이터를 썼다 지웠다 할 수 있는 것일까요?

                         ( 20 년 * 365 일/년 * 24 시간/일) / 100,000    = 1.75 시간

즉 2시간 간격으로 데이터를 EEPROM에 저장해 두어야 하는 AT89C51ED2를 이용한 시스템이 있다고 하면, 이 시스템은 EEPROM의 수명이 다할 때 까지 20 여년간을 견달 수 있습니다.

만약 5분 간격으로 데이터를 EEPROM에 저장해야 하는 응용분야가 있다고 하면, 이 시스템(정확히는 T89C51RD2 칩 안의 EEPROM)의 수명은 위에서 계산한 시간보다는 작을 것입니다. 그러나 한편으로 왜 데이터를 내부 RAM에 저장하지 않고 EEPROM에 저장해야 하는가 하는 생각도 해 불 수 있습니다.

여기서 말하고자 하는 바는, 100,000번의 EEPROM의 지웠다 쓰기 수명은, 대부분의 응용분야에 있어서 충분히 크다라는 것입니다.

참고로 AT89C51ED2의 플레쉬 메모리는 100,000만 번까지 지웠다 쓰는 것이 가능합니다. EEPROM도 100,000번 지웠다 쓰는 것이 가능합니다.

(처음 글 올린 날 : 03/24/2005, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.27 [기초] 8051의 EA핀의 역할은 무엇인가요?

  

EA 핀은 실행할 프로그램(code)을 8051 칩 내부에 있는 플레쉬 메모리의 것을 사용할 것인가, 아니면 8051 외부에 있는(만약 있다고 하면) 플레쉬 메모리를 사용할 것인가를 결정하는 핀입니다.

 

(처음 글 올린 날 : 03/24/2005, 마지막 수정 : 03/24/2005, r/t/e/l/d)

Q.28 [기초] AT89C51RD2, AT89C51RC2, AT89C51RB2의 차이점은 무엇인가요?

  

AT89C51Rx2( 여기서 x는 D,C,B)는 Atmel사의 ISP를 지원하는 8051칩입니다. AT89C51RB2는 16 KByte, RC2는 32 KByte,  RD2는 64 KByte의 플레쉬 메모리를 내장하고 있읍니다. AT89S시리즈와는 달리 ISP는 UART를 이용합니다.
이 칩들의 형명을 자세히 보면, 규칙이 존재하는 것을 알 수 있는데, 형명 중 끝에서 두 번째 글자가 B, C, D 로 변함에 따라, 플레쉬 메모리의 크기가 16 K, 32 K, 64 K로 늘어 납니다.

 

(처음 글 올린 날 : 03/24/2005, 마지막 수정 : 03/24/2005, r/t/e/l/d)

Q.29 [기초] 타이밍 다이어그램은 무엇인가요?

  

타이밍 다이어그램은 보통 데이터 시트의 뒷 부분에는 나옵니다. 이 것은 그 만큼 덜 중요하다는 얘기가 될 수도 있고, 모든 개발자가 타이밍 다이어그램을 필요로 하지 않는다는 얘기도 될 수 있습니다. 어느 레벨에서 개발을 하는가에 따라 다르겠지만, 보드 레벨의 개발에 있어서는 실제로 타이밍 다이어그램이 필요한 경우는 생각보다 그리 많지는 않은 것 같습니다. 어지간한 응용 회로는 레퍼런스 회로도에 있는데로 꾸미면, 무리 없이 잘 동작하는 경우가 대부분입니다. 만약 레퍼런스 회로에 없는 무언가 새로운 것을 추가하였는데 제대로 동작이 안된다고 할 때, 이 것 저 것 해보다 안되면, 그 때서야 타이밍 다이어그램을 보는 경우가 많은 것 같습니다. (잘못된 관행을 이야기한 것입니다.)

서론이 길어진 것 같습니다. 타이밍 다이어그램이란 IC(디바이스)가 외부와 데이터를 주거나 받기 위한 과정에서 지켜야 할 각각의 신호의 시간적 변화를 그림으로 나타낸 것입니다. 디지털의 세계에서는 신호가 가질 수 있는 상태를 크게 high, low, high impedance 이 세가지로 나눌 수 있습니다. 해당 IC가 외부 세계와 데이터를 주고 받기 위해서 각각의 신호가 어떤 순서대로 어떻게 변해야 하는가를 나타낸 그림이 타이밍 다이어그램입니다. 즉 다시 말해 외부와의 통신을 위하여 지켜야 할 각각의 신호의 파형을 규정해 둔 그림이라도 할 수 있습니다. SRAM을 예를 들어 설명하면, SRAM에 데이터를 써넣기 위해서는 어드레스 라인에 어드레스를 인가하고, 데이터 라인에 쓰고자하는 데이터를 가한 다음, WR 신호를 적절한 시기에, 그리고 적절한 시간 동안 인가해야 하는데, 여기서 애매하게 표현된 "적절한"를 명확하게 규정한 것이 타이밍 다이어그램입니다.

 

(처음 글 올린 날 : 04/05/2005, 마지막 수정 : 04/05/2005, r/t/e/l/d)

Q.30 [기초] active low와 active high는 무슨 의미인지요?

  

타이밍 다이어그램을 설명하면서 신호가 가질 수 있는 상태를 크게 나누면, high, low, high impedance 이 세가지로 나눌 수 있다고 하였습니다. high 와 low 중 어느쪽에 특별한 의미를 부여했는가에 따라, active high, active low로 나눕니다. 예를 들어 설명해 보겠습니다. 연기로 적군이 침략해 왔는지를 알리는 봉화의 경우, 평상시에는 연기를 피우지 않다가, 적군이 오면 연기를 피우는 방식이 있을 수 있고, (약간 비현실적으로 생각될 수 있지만) 평상시에는 늘 연기를 피우다, 적군이 오면, 연기를 피우지 않는 방식이 있을 수 있습니다.

디지털 신호의 경우에도, "평상시"와 "특별한 사건이 일어난 또는 일어나는 경우"를 표시하는 방법에 있어서 평상시를 low로 "특별한 사건이 일어난 경우"를 high로 표시하기로 약속하였으면, 이것을 active high라 부릅니다. (active low는 그 반대의 경우입니다. )

그럼 "평상시"와 "특별한 사건이 일어난 경우"를 구분하는 기준은 무엇일까요? 여러 가지를 생각해 볼 수 있겠지만, 어느 쪽이 더 드물게 일어나는가를 기준으로 할 수 있읍니다. 가끔씩 일어나는 일을 특별한 사건이라고 부르는 것이 자연스럽습니다. 따라서 active high 신호는 low로 머물러 있는 시간이 high 인 시간 보다 많은 것이 자연스럽습니다. ( (부자연스럽긴 해도)그 반대의 경우도 있을 수 있으며, 이것을 틀렸다라고는 말 할 수 없습니다. Active high / low 모두 사람이 정한 약속에 불과 하니까요.)

(처음 글 올린 날 : 04/05/2005, 마지막 수정 : 04/05/2005, r/t/e/l/d)

Q.31 [디버그] 동작이 불안한 8051 마이콤 보드

  

동작이 전혀 안되는 보드 보다는, 어느 때는 동작하다가, 어느 때는 동작하지 않는 보드를 디버깅하는 것이 더 어렵습니다. 디버깅의 일반적인 방법에 대해서는 다른 곳에서 설명하였습니다. 여기서는 직접 경험한 이야기를 하나 해 볼까 합니다. 만능 기판에 조립된 AT89S51 보드였는데, 전원을 가하니 동작이 되었다가 안되었다가하는 것이었습니다. 전원과 클럭을 체크하였느데 모두 정상적이었습니다. 왜 그럴까하고, 마이콤 핀들을 하나 하나 체크해 보니, EA 핀을 그냥 둔 것이었습니다. (floating 상태)

그 때는 "아 EA핀을 그냥 두면, 보드 동작이 불안해 지는구나"라고 생각했었고, 이 글을 적는 지금에는 왜 보드 동작이 불안정했는지를 알 수 있을 것 같습니다. EA 핀이 floating 되어서 마이콤이 내부 플레쉬와 외부 메모리 중 어느 한쪽을 일관성있게 억세스하지 못함으로 생긴 일이라는 것을.

(처음 글 올린 날 : 06/03/2006, 마지막 수정 : 06/03/2006, r/t/e/l/d)

Q.32 [기초] 8051의 WR, RD, PSEN, ALE 핀의 역할은 무엇인지요?

  

8051에 외부 메모리를 연결하여 사용하는 경우가 있을 수 있습니다. 이때 사용되는 핀이 WR, RD, PSEN, 그리고 ALE 핀 입니다. 보통의 경우 8051 외부에 롬(요즘은 플레쉬 메모리가 대부분)과 SRAM을 연결하게 되는데, 플레쉬 메모리쪽으로 연결하는 핀이 PSEN 핀이고, SRAM으로 연결하는 핀이 WR 과 RD  핀입니다. 그리고 ALE 핀은 8051을 외부 메모리와의 연결할 때 사용하는 핀수를 줄이기 위해 어드레스 라인의 일부와 데이터라인을 함께 사용하는데, 이 것들을 구분하기 위한 신호입니다.

조금 더 설명을 하면, 플레쉬 메모리(NOR 타입)과 SRAM의 핀들은 데이터, 어드레스, 콘트롤 이렇게 3가지로 나누어지는데, 데이터와 어드레스는 별도의 설명이 필요없을 듯하며, 콘트롤 신호에는 CS(칩 셀렉트), RD(Read, 읽기), WR(Write,쓰기) 이렇게 3가지가 있습니다. CS(칩 셀렉트)신호는 보드상에 메모리가 여러 개 있을 때, 그 중의 어느 것을 억세스할 것인지를 선택하는 핀이며, RD, WR 핀은 각각 메모리에서 읽거나, 쓸 때 사용하는 핀입니다. 거의 대분의 경우에, 마이콤과 메모리의 핀들은 1:1로 연결할 수 있도록 되어 있습니다. 즉 마이콤 설계자가 마이콤의 핀을 메모리에 연결하기만 하면, 메모리에서 데이터를 읽거나 쓸 수 있도록 메모리의 읽기,쓰기 동작에 필요한 신호의 타이밍을 미리 다 맞추어 두어서, 사용자는 그저 프로그래밍(명령어)를 통해 외부 메모리에 쓰거나 읽는 동작을 쉽게 할 수 있습니다.

8051의 경우 플레쉬 메모리 1개, SRAM 1개를 사용하는 것이 대부분의 경우이므로, 각각의 CS 핀은 그라운드로 묶어 둡니다. 그리고 앞서 설명한 데로 SRAM의 경우는 8051의 RD, WR신호를 SRAM의 RD(또는 OE라고도 표기하는 경우도 있음), WR에 연결하면 되고, 플레쉬 메모리의 경우에는 플레쉬 메모리의 RD(OE) 핀은 8051의 PSEN 핀에 연결합니다. 사실 플레쉬 메모리의 경우에는 3개의 콘트롤 선 중 하나만이 8051 마이콤에 연결되는데, 플레쉬 메모리의 WR 핀은 플레쉬메모리에 쓰기 동작을 행할 때 사용되는 핀이므로, 8051 보드에서는 8051과 연결되지 않습니다. 이 핀을 High로 묶어 두어야, 제대로 동작합니다. 사실 플레쉬 메모리 안에는 8051 이 실행할 코드(프로그램)가 들어가 있습니다. 실행 중 코드(프로그램)을 변경시키지는 않으므로, 8051에서는 플레쉬 메모리의 WR핀에 연결되는 신호를 제공하지 않는 것입니다.

 

(처음 글 올린 날 : 06/09/2006, 마지막 수정 : 06/09/2006, r/t/e/l/d)

Q.33 [기초] UART와 USART는 무엇이 다른지요?

  

마이콤 데이터 시트에 보면, UART라는 표현도 나오고 USART라는 표현도 나옵니다. 두 개가 같은 것인가라고 생각하시는 분도 계실 것이고, 둘이 어떻게 다른가하고 생각하시는 분도 계실 것입니다. UART는 Universal Asynchronous Receiver Transmitter의 준말입니다. Receiver와 Transmitter라는 말에서 양방향 통신을 할 수 있는 어떤 것이라는 것을 짐작할 수 있고, Universal이라는 말에서, 고정된 것이 아닌 가변적인 어떤 것이어서 범용성을 가지겠다라고 생각해 볼 수 있습니다. 그리고 마지막으로 Asynchronous라는 말에서 별도의 기준이 되는 클럭없이 서로간에 통신을 한다는 것을 짐작해 볼 수 있습니다. Asynchronous라는 말을 좀 더 설명하겠습니다. 한 곳에서 다른 곳으로 데이터를 보낼 때, 데이터만 딸랑 보내는 경우가 있으며, 기준이 되는 클럭을 데이터와 함께 보내는 경우가 있습니다. 클럭을 데이터와 같이 보내는 경우는 그렇지 않은 경우보다 클럭을 보낼 선이 한가닥 더 필요합니다. 그러나, 데이터를 받는 쪽에서는 상당히 일이 간단해 집니다. 다시 말해 클럭의 상승 에지(또는 하락 에지)에 맞추어 데이터를 거두어(읽어) 들이기만 하면 됩니다. (D 플립플럽이 클럭의 상승(하강)에지에서 데이터를 캡쳐하는 것을 기억해보세요.) 기준 클럭 없이 데이터만 보내는 경우, 보내는 측에서야 간단하겠지만, 받는 측에서는 여러 가지 어려운 점들이 있습니다. 즉 보내는 측이 언제 데이터를 보내는지 알 수 없으므로, 데이터의 시작 위치를 알아내는 것이 그리 쉽지 않습니다. 예를 들어 보내는 측에서 0001을 보냈는데, 받는 측에서는 이 것이 0001인지, 001인지 01인지 1인지, 구분을 하기가 쉽지 않습니다. 이러한 문제로 인해, 데이터를 주고 받는 방법에 대한 여러 가지 정교한 약속들을 보내는 측과 받는 측에서 하게 됩니다. 이러한 약속은 데이터를 보내면서 클럭을 함께 보내면, 그렇지 않은 경우보다 간소화될 수 있습니다.

USART는 UART에 비해 S라는 글자하나가 더 있는 것만 다릅니다. 여기서 S는 Synchronus의 약자입니다. 즉 USART는 UART이면서 경우에 따라서는 클럭에 맞추어 데이터를 보내거나 받을 수 있도록되어 있습니다. 즉 동기화된 통신을 지원합니다. 클럭을 함께 보내면, 앞서 설명한 것처럼 데이터 받는 쪽에서의 일이 단순해지며, 이는 더 빠른 속도로 데이터를 주고 받는 것을 가능하게합니다.

 

(처음 글 올린 날 : 06/09/2006, 마지막 수정 : 06/09/2006, r/t/e/l/d)

Q.34 [내부구조] fully static design이란 무엇이고, 이 것의 장점은 무엇인지요?

  

마이콤 데이터 시트에 보면, fully static design이라는 표현이 나옵니다. 무슨 자랑거리라도 되는 듯 데이터 시트의 첫 페이지에 큰 글자로 적어 두었는데, 과연 fully static design의 장점이 무엇일까요? 과연 장점이 있기는 한 걸까요? 우선 fully static design이 무엇인지는 기술자료의 다른 부분에서 설명하였으므로 여기서는 다시 설명하지 않겠습니다. CMOS 칩의 경우, 소비 전력을 낮추는 방법 중의 하나가 동작 주파수를 낮추는 것이라는 것도 다른 부분에서 설명하였습니다. 그리고 소비전력이 적은 것이 배터리로 동작하는 제품의 큰 장점이 되는 것은 잘 알고 계실 것입니다. (예를 들어 MP3 플레어어의 중요 스펙 중의 하나가 건전지 하나 또는 한번 충전으로 플레이 할 수 있는 시간입니다.)

Fully static design의 장점은 마이콤의 동작 주파수를 DC(주파수 == 0 Hz)까지 낮출 수 있다는 것입니다. 사실 정확히 DC까지 낮추면, 칩을 동작시키지 않는 것이나 다름없으니까, 그렇게 할 리는 없을 것이고요, 동작 주파수를 원하는 만큼 낮출 수 있습니다. 그럼 다른 마이크로 프로세서는 동작주파수가 높은 것이 해마다 출시되는데, 여기서는 왜 동작 주파수를 낮추려고 할까요? 가장 큰 이유는 소비 전력을 줄여 배터리 사용 시간을 늘리기 위함입니다. 다른 부분에서 설명했듯이, 동작 주파수를 낮춘 만큼 소비전력이 줄어듭니다. 그리고 한 가지 더 설명이 필요한 부분은 동작 주파수를 낮추어도 기계가 동작하는데 또는 사람이 사용하기에 (전혀 또는 크게) 불편함을 느끼지 않는 응용 분야가 있다는 것입니다. 예를 들어 10초에 한번씩 주변의 온도와 습도를 읽어서 메모리에 기록하는 배터리로 동작되는 시스템이 있다고 했을 때, 이 시스템을 30MHz로 동작시키든 3MHz로 동작시키든 동작하는데는 차이가 없을 것입니다. 이 시스템은 대부분의 시간을 할 일 없이 시간을 보내다가, 10초에 한 번씩만 제 할 일을 할 따름입니다. 이 경우 동작 주파수를 1/10 로 낮추면, 배터리 동작 시간이 10 배로 늘어납니다. (적어도 이론상으로는요.)

그럼 동작주파수를 어떻게 낮출까요? 8051의 경우에는 외부에 붙이는 크리스탈, 또는 오실레이터를 낮은 주파수의 것으로 붙이는 방법이 있습니다. 그리고 저전력(power saving)을 염두에 두고 설계된 최근의 마이콤들의 대부분은 칩 내부에서 클럭을 콘트롤 할 수 있는 수단을 제공하거나, 동작 주파수를 조절하여 소비전력을 줄일 수 있는 수단을 제공하고 있습니다. 클럭 주파수를 칩 내부에서 낮추는 방식은 마이콤 회로가 fully static 하게 설계되었을 때 적용가능합니다.

 

(처음 글 올린 날 : 06/10/2006, 마지막 수정 : 06/10/2006, r/t/e/l/d)

Q.35 [기초] "10 years data retention" 이 무슨 뜻인지요?

  

마이콤의 데이터 시트의 플레쉬 메모리를 설명하는 부분에서 "10 years data retension"이라는 말이 나오는 데 이 말의 정확한 의미는 무엇일까요? 잘 아시겠지만 플레쉬 메모리가 10 년 동안 데이터를 보존한다는 의미입니다. 여기서 데이터는 대부분의 경우에 있어서 개발자가 작성한 프로그램을 지칭합니다. "10 years data retension"라는 말을 뒤집어서 생각해 보면, 이 마이콤을 이용하여 개발한 시스템은 10년 후에는 제대로 동작하지 않을 수도 있다는 것입니다. 즉 마이콤의 내부 플레쉬에 기록한 프로그램이 10 년 후에는 (자연적으로) 일부가 변경되어 제대로 동작하지 않을 수도 있다는 것입니다. 좀 더 명확히 말하면, 10 년 후에는 이 마이콤을 이용하여 개발한 시스템이 반드시 오동작한다는 의미가 아니고, 마이콤 제조사에서는 이 기간(여기서는 10년) 동안 마이콤의 플레쉬 메모리의 내용이 그대로 유지됨(자연적으로 지워지지(변경되지) 않음)을 보장한다는 것입니다.

Data retention 기간은 마이콤, 플레쉬 메모리 마다 차이가 있습니다. 다시 말해 모든 마이콤, 플레쉬 메모리의 data retention 기간이 10년이 아니라는 말입니다. 만약 아주 오랜 시간 동안 고장없이 동작해야하는 시스템을 개발한다면, 마이콤 또는 플레쉬 메모리의 data retention 기간과  고장시 유지/보수 방법도 함께 고려를 해야할 것으로 생각됩니다.

(처음 글 올린 날 : 06/11/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.36 [내부구조] "brown out reset" 이 무슨 뜻인지요?

  

먼저 "브라운 아웃"이라라는 말에 앞서서, "블랙 아웃(black out)" 이라는 말부터 설명드려야 할 것 같습니다. 사전을 찾아보면 정전(전기가 나가는 것), 소등(불을 끄는 것) 등의 의미가 있습니다. 여담입니만, UFO에 납치되었다고 주장하는 사람들이  어느 순간 이후로는 기억이 상실되었다라고 말할 때도 블랙아웃이라는 표현을 씁니다. 즉 전기가 나간 것처럼, 기억이 사라졌다는 느낌을 이렇게 표현한 것 같습니다.

그러면 "브라운 아웃"이란 "블랙 아웃"의 동생 정도될 것이라고 짐작을 해 볼 수 있을 텐데, 블랙(검은색) 보다는 브라운(갈색)이 색상이 연하니까 위에서 설명한 블랙 아웃 보다는 정도가 약한 어떤 것이다라고 미루어 짐작해 볼 수 있겠습니다. 사전을 찾아 보면, "등화 관제를 하다. 어둠 침침하게 하다."라고 설명하고 있습니다. 아니나 다를까, 전기을 완전히 끄는 블랙아웃보다는 어둠침침하게 만드는 브라운아웃이 정도가 약하다는 것을 알 수 있습니다.

마이콤으로 돌아오겠습니다. 마이콤의 전원(Vcc)가 어느 레벨 아래로 내려가서 지정된 시간 만큼 있으면, 브라운 아웃 리셋 신호를 발생시키도록 할 수 있습니다. "발생시키로록 할 수 있다"는 말은 이 상황에서 리셋 신호를 발생시킬지 아니면 그렇게 하지 않을지를 사용자가 셋팅할 수 있다는 말입니다. 처음 부분에 설명한 것처럼, 마이콤의 전원 전압을 전등으로 비유하면, 전기가 완전히 나가서 전등이 깜깜해지기 전, 어둑어둑해지는 정도가 되면 미연에 마이콤에 리셋을 걸어 마이콤의 동작을 중지시키는 것입니다. 이 것을 브라운아웃 리셋이라고 합니다. 여기서는 브라운아웃 리셋의 의미 정도만 설명하고자 합니다. 기회가 되면, 다른 곳에서 좀 더 자세히 설명해 보겠습니다.

(처음 글 올린 날 : 06/12/2006, 마지막 수정 : 06/12/2006, r/t/e/l/d)

Q.37 [비교] AT89C51, AT89S52, AT89C51ED2의 동작가능한 최대 클럭 주파수는 어떻게 되나요?

  

마이콤의 데이터 시트에 따르면, AT89C51은 24 MHz, AT89S52는 33 MHz, AT89C51ED2는 60 MHz까지 동작시킬 수 있습니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.38 [비교] AT89C51, AT89S52, AT89C51ED2의 동작 전압 범위는 어떻게 되나요?

  

마이콤의 데이터 시트에 따르면, AT89C51은 5V +/- 20%, AT89S52는 4.0~5.5V, AT89C51ED2는 2.7~5.5V 까지 동작시킬 수 있습니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.39 [비교] AT89C51, AT89S52, AT89C51ED2의 플레쉬 메모리에 프로그램을 몇 번까지 지웠다 쓰기를 반복할 수 있나요?

  

마이콤의 데이터 시트에 따르면, AT89C51은 1000번, AT89S52는 1000번, AT89C51ED2는 100,000번 까지 지웠다 쓰기를 반복할 수 있습니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.40 [기초] 듀티 50%(duty 50 %) 란 무슨 뜻인가요?

  

주기적으로 0, 1 이 반복되는 신호(예를 들면, 클럭 라인)의 high(1)와 low(0)의 시간의 비를 듀티(duty)라고 부릅니다. Duty 50%면 신호가 high상태로 머무르는 시간과 low 상태로 머무르는 시간이 같다는 것을 의미합니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.41 [기초] AT89S51/52를 ISP(In System Programming)하기 위해서는 어떤 핀들을 사용해야 하나요?

  

P1.5인 MOSI(Master Out Slave In), P1.6인 MISO(Master In Slave Out), P1.7인 SCK,  그리고 RESET 핀, 이렇게 4개의 핀을 이용합니다. 더 구체적인 방법은 제품소개 코너의 회로도를 참고하세요.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.42 [비교] AT89S52와 AT89C52는 ISP 기능을 제외하고는 완전히 같은 마이콤인가요?

  

그렇지는 않습니다. ISP 기능을 제외하고도, AT89S52에는 AT89C52에는 없는 워치독 타이머가 있습니다. 두 마이콤에 대한 제조사에서 만든 마이그레이션(migration) 노트에 보면 둘 사이의 차이점에 대한 자세한 비교를 보실 수 있습니다. AT89S52는 AT89C52에 비해 ISP를 제외하고도 몇몇 기능들이 더 들어가 있습니다.. 그리고 동작 주파수 역시 24MHz에서 33MHz로 높아졌고요.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.43 [내부구조] 8051에서 클럭과 머신 사이클(machine cycle)과는 어떤 관계가 있나요?

  

8051에서는 12개의 클럭이 하나의 머신 사이클(machine cycle)을 구성합니다. 다시 말해 8051의 기본이 되는 동작 하나를 수행하기 위해 12개의 클럭을 사용한 다는 의미입니다. 여기서 클럭이란, 8051에 연결한 크리스탈(X-tal)을 의미합니다. 클럭이 12MHz라면, 실질적으로 8051은 1MHz로 동작하는 셈입니다. 이러한 사실을 감안한다면, 단순히 마이콤에 공급되는 클럭 주파수 만으로 서로 다른 마이콤의 성능을 평가하는 것이 무의미함을 알 수 있습니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.44 [내부구조] 8051에서 리셋 핀에 가해 주는 리셋 신호의 길이에 제약 조건이 있나요?

  

AT89S52 데이터 시트에 보면, 리셋 핀에 2개의 머신 사이클 기간동안 리셋 핀이 high 상태가 되면, 마이콤에 리셋이 걸린다고 설명하고 있습니다. 에서 설명한 것 처럼, 2개의 머신 사이클이면, 2 x 12 = 24 클럭 사이클에 해당합니다. 예를 들어 10MHz 크리스탈을 사용한다면, 하나의 클럭의 주기가 100 usec 이므로 100 x 24 = 2.4 msec 동안 리셋 핀에 high를 인가하면 마이콤에 리셋이 걸리게 됩니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.45 [내부구조] 8051에서 리셋 핀이 출력 핀 역할도 할 수 있나요?

  

경우에 따라서는 리셋핀이 출력 핀 역할을 하기도 합니다. 예를 들어 어떤 시스템(보드)이 하나의 마이콤과 여러개의 IC로 구성되어 있는데, 이 IC중 일부는 리셋 핀을 가지고 있습니다. 만약 마이콤이 시스템 전체에 리셋을 걸어야 할 경우 어떻게 해야 할까요? 그냥 에라가 났다는 표시의 LED만 켜 두고, 사람이 보드 상에 있는 (시스템 전체의)리셋 버튼을 누르도록 할까요? 워치독 타이머가 있는 8051 마이콤의 경우, 리셋을 걸어야 할 경우가 생기면, 리셋 핀을 통해 리셋 신호를 내 보낼 수 있는 기능이 있습니다. 이 경우 마이콤의 주도하에서 시스템 전체에 리셋을 걸 수 있는 장점이 있습니다.

(처음 글 올린 날 : 06/19/2006, 마지막 수정 : 06/19/2006, r/t/e/l/d)

Q.46 [비교] ISP가 되는 8051 중에서 낮은 전압에서 동작되는 것이 있나요? 예전의 AT89LV 시리즈처럼요.

  

에서 각 8051 마이콤의 동작 전압을 비교했는데, AT89S 시리즈의 경우는 동작 전압이 4.0~5.5V입니다. 경우에 따라서는 더 낮은 전압에서 마이콤을 동작시켜야 할 필요가 있는 경우에는 AT89LS 시리즈를 사용하시기 바랍니다. 이 시리즈는 2.7~4.0 V의 동작 전압 범위를 가지고 있습니다.

(처음 글 올린 날 : 06/20/2006, 마지막 수정 : 06/20/2006, r/t/e/l/d)

Q.47 [내부구조] 리셋 핀에 붙이는 저항과 커패시터는 왜 붙이는 것일까요? 도대체 리셋 핀 내부 구조는 어떻게 되어 있는 것일까요?

  

8051의 데이터 시트에는 리셋단에 대한 간단한 설명 밖에는 없습니다. (반면, AVR의 경우에는 보다 상세한 설명이 데이터 시트에 있습니다.) 하지만 어플리케이션 노트와 AVR 마이콤의 리셋단 설명을 통해 8051리셋부의 동작을 유추하 볼 수는 있습니다. 리셋 핀에 붙이는 저항과 커패시터는 마이콤에 가해진 전압과 크리스탈의 발진(oscillation)이 안정될 때 까지 마이콤의 동작을 중지(또는 연기(delay))시키는 역할을 합니다. 비유를 들자면, 자동차 시동은 건 다음, 약간의 시간 여유를 두고 차를 출발시키는 것과 같습니다. 좀 더 상세한 설명이 8051의 리셋동작에 대한 ATMEL 사의 어플리케이션 노트에 있으니, 관심 있으신 분은 참조하세요.

너무 오래된 일이라 기억이 가물가물하지만, 글쓴이도 리셋 버튼을 눌러도 리셋이 걸리지 않는 경우를 경험해 본 것 같습니다.

(처음 글 올린 날 : 06/20/2006, 마지막 수정 : 06/20/2006, r/t/e/l/d)

Q.48 [내부구조] 파워온리셋(POR : Power On Reset)이란 무엇인가요? 리셋 핀에 있는 리셋 버튼을 누르는 것과는 무슨 차이가 있는지요?

  

마이콤에 프로그래밍을 넣은 다음, 리셋 버튼을 누르면(더 정확히는 눌렸다가 떼면) 마이콤 안의 프로그램이 동작합니다. 반면에 마이콤 보드의 전원을 끈 다음, 다시 전원을 넣으면 역시 마이콤이 동작합니다. 이렇게 마이콤에 전원을 투입하면, 마이콤이 "제대로" 동작하는 것을 파워온리셋(POR : Power On Reset)이라고 부릅니다. 말 그대로 파워가 온(on) 되면 리셋이 걸리겠끔 만들어졌다는 뜻입니다. 반면 리셋 버튼을 누르는 것은 마이콤의 리셋 핀에 리셋을 위한 신호(펄스)를 입력시키는 것과 같습니다. 8051 데이터 시트에는 파워온리셋과 리셋 버튼을 눌렸을 때의 내부 리셋 신호에 대한 자세한 설명이 없는데 반해 AVR의 경우에는 비교적 상세한 설명이 데이터 시트에 있습니다.

에서도 설명했듯이, 내부 리셋회로는 마이콤에 공급되는 전원과 크리스탈의 발진이 안정될 때까지 마이콤의 동작을 지연시키는(다시 말해 마이콤이 동작하지 않도록 붙잡아 두는) 역할을 합니다.

(처음 글 올린 날 : 06/20/2006, 마지막 수정 : 06/20/2006, r/t/e/l/d)

홈페이지 링크 모음

  

홈페이지로 가기

기술자료 페이지로 가기

 

(처음 글 올린 날 : 04/07/2005, 마지막 수정 : 04/07/2005, r/t/e/l/d)

 (마지막으로 수정한 날자 : 06/19/2006)

 

blue22_nextup.gif