August 11, 2020

디바이스마트 미디어:

[5호]왕초보 전자회로 강좌특집 5부 – 2

Scimage0 왕초보 전자회로 강좌특집 5부 – 2

글 |스네일앤 스네이크

※ 상기 내용은 디바이스마트와 스네일앤 스네이크의 협의를
통하여 사용을 득한 내용입니다.

 

내장 부트로더를 이용한 임베디드 프로그램 로딩 (loading)

▶ 회로설명 (circuit description)
“MY 로거” 의 실험에 들어가기 전에 “MY 로거” 내부 소프트웨어인 임베디드 프로그램을 업데이트하는 방법을 설명합니다.
임베디드 프로그램, 즉 펌웨어의 업데이트는 최근의 MP3, PMP등 소형 정보기기에서 지원하고 있는 기능으로, 빠르게 변하는 정보환경에 대응하기 위한 것입니다. 왜냐하면, (마이컴을 사용한) 기기에서 기능을 변화시키려면 내부 소프트웨어의 교체가 필요하기 때문이지요.
마찬가지로 “MY 로거” 도 여러가지 응용사례에 따라, 기능이 변경되거나 추가될 것이 예상되므로 펌웨어의 교체는 필수적입니다. 이를위해 “MY 로거” 는 PIC16F873A 내부 ROM안에 부트로더(bootloader)라는 작은 프로그램을 상주시켜, 펌웨어를 PC에서 다운로드 할 수 있도록 하고 있습니다 (부트로더가 없으면 프로그램 교체는 매번 롬라이터를 사용하여야 합니다) .
부트로더는 마이컴 리셋(reset) 직후에 먼저 (마이컴) RS232C 통신포트를 통해, (PC에 연결된) 다운로더 프로그램의 접속을 확인해 봅니다.
만일 대기하고 있는 다운로더를 발견하면 먼저 새로운 프로그램을 내려 받고나서, (새 프로그램을) 실행시킵니다. 접속된 다운로더를 찾지 못한다면 내장된 예전 프로그램을 실행시킵니다(이 확인 시간은 아주 짧으므로 사용자는 부트로더의 존재를 감지할 수 없습니다).
※ 부트로더의 동작은 작은 OS인, (마이컴 ROM에 내장된) 모니터 프로그램을 연상시키네요.
※ 사용한 PIC 부트로더는 Carlos Buelna씨가 개발/배포한 공개 소프트웨어 입니다. 단 PIC 전용 C 프로그램인 “HI-TECH C”의 컴파일/링크로 생성된 hex 파일만을 사용할 수 있습니다 (다른 어셈블러나 C 컴파일러에서 생성된 hex 파일은 프로그램 실행이 보증되지 않으므로 주의) .
Carlos Buelna씨의 부트로더 자료는 http://www.microchipc.com/PIC16bootload/16F87xA/ 참조.

▶ 회로도 (The circuit diagram) : : 내장 부트로더를 이용한 임베디드 프로그램 로딩 (loading)

“MY 로거” PIC16F873A에는 부트로더가 내장되어 판매되므로 PC에 다운로더 프로그램인 CD2m을 카피하면 준비가 완료됩니다.
오른쪽 그림에 부트로더의 사용법과 CD2m 다운로더의 실행화면을 보였습니다.

05SC008

먼저 PC의 COM 포트와 “MY 로거” 를 RS232C 케이블로 연결시킵니다. 이 때 연결한 PC측 COM 포트의 번호를 확인하고, CD2m 다운로더의 “COM 포트 번호”와 일치시켜 줍니다. (디폴트값은 “COM1”입니다. 즉 COM 1번 포트에 케이블을 연결하면 셋팅을 변경할 필요가 없습니다)
※ RS232C 통신속도를 정의하는 “보오 레이트”는 19200 bps로 변경할 수 없습니다. (따라서 CD2m 다운로더의 보오 레이트도 19200으로 셋팅합니다. 그 이유는 “MY 로거”내의 부트로더 프로그램이 19200 bps 전용이기 때문입니다)

RS232C 케이블 연결과 다운로더 셋팅이 끝나면 그림내 플로우의 ②번부터, 번호 순대로 진행하면 됩니다. 주의점은 ⑤번의 “MY 로거” 리셋 스위치 취급입니다. ⑤번에서 리셋 스위치를 누르고 있는 채로 (스위치를 손에서 떼면 안됨) ⑥번으로 가서 CD2m 다운로더 “Start” 버튼을 클릭합니다. 클릭하자마자 ⑦번으로 진행하여, 누르고 있던 “MY 로거” 리셋 스위치를 떼면 됩니다.
이유는 부트로더는 리셋 직후에 동작하고, 이 때는 PC측의 다운로더가 미리 대기하고 있어야 되기 때문입니다. PB 스위치를 손에서 떼면 리셋이 풀리면서 “MY 로거” 16F873A의 부트로더가 실행되기 시작합니다 (리셋 스위치를 왼손으로 누르고 있는 것이 편리 오른손은 마우스를 사용해야 하니까요).
부트로더와 CD2m 다운로드의 접속이 성공하면 “다운로드 진행바”가 증가하는 것을 볼 수 있습니다. 다운로딩이 끝나면, 바로 “MY 로거” 프로그램이 실행되는 것을 볼 수 있습니다. 한 번에 성공하지 못하면 (당황하지 말고) 두 세번 시도해서 (다운로딩) 감각을 익혀둡니다. 업로딩은 지원하지 않습니다.
※ “MY 로거”의 리셋 버튼을 누르면 (“MY 로거”의) LED 4 가 꺼집니다. LED 1은 전원상태를 체크하며, LED 4 는 녹색으로 PIC16F873A 마이크로 콘트롤러가 “정상적으로 동작하고 있음”을 표시해 줍니다.
※ 다운로드용 임베디드 프로그램은 *.hex 형식의 파일이어야 합니다.
※ 시중에서 구입한 PIC16F873A는 내부 ROM이 비어 있으므로 부트로더도 들어있지 않습니다. 따라서 처음에 한 번은 (롬라이터를 사용해서) 부트로더 프로그램을 PIC16F873A ROM안에 구워 넣어야 합니다.
※ 펌웨어 업데이트용 / MY 로거 Ver. 2.0 펌웨어 프로그램 (임베디드 프로그램) 다운로드는 http://www.circuitry.co.kr/bbs.php?table=beginner&query=view&uid=50&p=1 페이지를 참조하세요.

 

“MY 로거” 통신 프로그램 + mscomm32 (ocx) 설치법

 

▶ 회로설명 (circuit description)
이번 시간에는 PC측에서 원격으로 “MY 로거”를 통제할 수 있는 통신 프로그램을 설명합니다. 먼저 시간의 “MY 로거”의 간단한 사용법에서 설명한 바와 같이, PC측 통신 프로그램은 둘 혹은 세 자리의 명령문자나 두 자리 명령문자 + 한 자리 ASCII 숫자를 사용합니다. (실제 사용법은 나중의 사례에서 살펴 볼 예정입니다) 또 명령의 종류에 따라, “MY 로거”는 결과를 PC측에 (ASCII 문자로) 알려줍니다. “MY 로거” 통신 프로그램은 명령을 송신하고, 돌아온 결과를 수신하고 처리해서 사용자에게 보여줍니다.
※ “MY 로거” 통신 프로그램은 VB 6.0 을 사용하여 작성되었습니다. VB에서는 RS232C 통신을 위해 mscomm32라는 ocx를 사용합니다. MS사에 의하면 ocx는 (유사한 dll과 달리) PC Window에 등록해야 이용할 수 있다고 되어 있습니다. 따라서 통신 프로그램을 사용하기 전에, mscomm32.ocx를 사용하는 PC에 반드시 등록해야 하며, (등록법은) mscomm32.zip 안의 txt 파일이나 아래의 그림을 참조해 주시기 바랍니다.
▶ 회로도 (The circuit diagram) : : PC에서 사용하는 “MY 로거” 통신 프로그램

05SC009

그림에서 처럼, 통신 프로그램의 사용은 정말 간단합니다. 사용자는 “MY 로거”가 연결된 COM 포트를 지정하고 오픈한 후, 송신창에서 원하는 명령을 문자와 숫자로 보냅니다. “MY 로거”는 (필요하다면) 즉각 응답할 것이며 결과는 수신창에 문자와 애스키 숫자의 두 가지 형태로 (분명하게) 나타날 것입니다.
지금까지 “MY 로거”의 복잡한 설명들에 당황하신 분들도 통신 프로그램과 “MY 로거”사이의 사용법이 통합적이고 간단하다는 것을 알게되어 안도하시리라 믿습니다.
필자의 생각으로는(꼼꼼하게) 잘 정의된 전략을 구사한다면, 소프트웨어건 하드웨어건 아니면 이들이 결합한 어떤 것이건 혹은 한 발 더 나아가 실험자체에 이르기까지 최종결과가 단순하고 우아한 형태로 귀착된다고 확신합니다.
“MY 로거”는 일반 DAQ 보드의 성능을 일부 포기하고, 표준 애스키 문자만을 사용한다는 전략과 설계원칙을 고수함으로써 다양한 기능과 간단한 사용법이라는 두 마리 토끼를 잡는 수확을 거두게 되었습니다. 우리는 이 결과를 충분히 활용할 것이며 컴퓨터를 이용한 흥미있는 실험이라는 최종 목적에 가까워졌음을 자축할 수 있게 되었습니다.
※“MY 로거” 통신 프로그램과 VB 소스 (comm_update.zip 10.6k), mscomm32.oxc mscomm32.reg, 등록방법(mscomm32.zip 51k) 다운로드는 http://www.circuitry.co.kr/bbs.php?table=beginner&query=view&uid=51&p=1 페이지를 참조하세요.

 

“MY 로거” Digitial I/O (Logic In/Out) 시험

▶ 회로도 (The circuit diagram) :   “MY 로거” DI/O 단자 동작시험

05SC010

▶ 회로설명 (circuit description)
이번 시간에는 “MY 로거”의 디지털 입/출력 동작을 시험해 보겠습니다. “MY 로거”는 2개의 외부단자 중 (아래쪽의) 2번 외부단자를 디지털 입/출력에 배정하고 있습니다.
“MY 로거”는 (외부단자 2의) 4개의 디지털 단자중 두 개를 입력(DI) 단자에 두 개를 출력(DO) 단자로 배정하고 있으며, 각 단자명은 DI 1/DI 2, DO 1/DO 2, 단자 배치는 아래의 그림과 같습니다.
디지털 출력 명령은 o10, o11, o20, o21의 4가지로, 처음의 ‘o’문자는 output을, 두 번째 1, 2 문자는 단자를, 세 번째 0, 1 문자는 단자상태를의미합니다. 그러므로 “o11” 명령은 DO 1단자의 상태를 High, 5V로 셋트합니다. 명령 후 테스터로 DO 1단자전압을 측정하면, 약 5V가 출력되는 것이 확인됩니다.
다시 “o11”명령으로, DO 1단자상태를 Low. 0V로 환원할 수 있으며 이 때의 단자전압은 약 0V 입니다.
※ 리턴 문자는 없습니다.
※ 전원이 투입되거나, 리셋 버튼을 눌렀다 떼면 DO 1/DO 2출력단자는 각각 Low, 0V 초기상태로 셋트됩니다.

디지털 입력 동작 명령은 i1, i2의 두 가지로, 처음의 ‘i’문자는 input을, 두번째 1, 2문자는 단자를 의미합니다. 그러므로 “i1″ 명령은 DI 1단자의 상태가 High 인지 Low 인지를 “MY 로거”에 문의하게 됩니다. 명령을 받은 “MY 로거”는 DI 1단자상태를 체크한 후, (단자상태가) High, 5V 이면 ‘T’문자로 Low, 0V 이면 ‘F’문자를 보내줍니다(‘T’ 문자는 truth, ‘F’ 문자는 false를 의미) .
“i2”명령은 DI 2입력단자에 적용되며, 명령의 의미는 “i1”에서와 동일합니다. 그림에 “MY 로거” 디지털 입/출력단자와 시험회로가 나와 있습니다. 출력단자를 시험하기 위해서는 달랑 LED만 필요합니다. 전류제한 저항은 “MY 로거” 내부의 330Ω으로 충분합니다 (“MY 로거” 회로도 참조).
입력단자의 시험회로도 스위치만으로 충분합니다 (그냥 선을 잇고 떼는 것으로도 O.K ) .
※ “MY 로거”의 외부출력 단자는 튼튼한 스크류 터미널입니다. 그러므로 납땜없이 선을 연결하고 제거할 수 있어 여러가지 실험에 무척 편리합니다.

실험회로를 보면 내/외부의 전원이 전혀 필요없다는 것을 알 수 있습니다. (외부회로와 GND는 연결하여야 함) 이러한 조건은 외부 응용회로를 “MY 로거”와 무관하게 설계할 수 있도록 만들어 주므로, (인터페이스 회로 설계에서) 무척 중요한 포인트가 됩니다.
DI/O 실험결과 “MY 로거”를 이용해서, PC에서 (원격으로) 디지털 출력전압을 제어하거나 입력단자의 전압을 확인하는 작업이 매우 간단하다는 것을 확인하게 되었습니다. 응용하기에는 입/출력 단자수가 부족하다는 걱정이 든다구요? 응용하기 나름이랍니다. 앞으로 여러가지 사용 예를 보실 테니까요.

 

“MY 로거” A/D (Analog to Digital Conversion) 시험

▶ 회로설명 (circuit description)
이번 시간에는 “MY 로거”의 아날로그 입력 동작들을 시험해 보겠습니다. “MY 로거” 는 2개의 외부단자 중 (위 쪽의) 1번 외부단자를 아날로그 입력들에 배정하고 있습니다.
“MY 로거”는 (외부단자 1의) 4개 단자에서 네 개 전부를 아날로그 입력단자로 배정하고 있으며, 각 단자명은 A/D 1, A/D 2, A/D 3, A/D 4 이고 단자 배치는 아래의 그림과 같습니다.

▶ 회로도 (The circuit diagram)  : “MY 로거” A/D 단자 동작시험

05SC011
아날로그 입력 명령은 a1, a2, a3, a4, a5의 다섯 가지로, 처음의 ‘a’문자는 analog를, 두 번째 1-5 문자는 단자를 의미합니다. 그러므로 ‘a1’명령은 A/D 1단자의 전압을 “MY 로거”에 문의하게 됩니다. 명령을 받은 “MY 로거”는 A/D 1단자의 전압을 체크한 후, 상위 하위의 두 문자를 보내줍니다.
PC측에 위치한 통신 프로그램에서는 “MY 로거”에서 보내온 (상위, 하위) 두 문자를 각각 애스키 숫자로 변환한 후 (필요한) 계산을 거쳐 사용하게 됩니다.
※ “a2”, “a3”, “a4”명령은 각각 A/D 2, A/D 3, A/D 4입력단자에 적용되며, 명령의미는 “a1”과 동일

명령중에 “a5” 명령은 입력 전압을 체크하는데 사용됩니다. 그러나 입력전압의 범위는 7.5 ~ 15V 까지 폭이 넓은 반면에, 16F873A의 A/D 입력범위는 0~5V 이므로 입력 전압과 측정 전압간에 범위가 일치하지 않습니다. 이 문제를 해결하기 위해 “MY 로거”에서는 저항으로 입력 전압을 1/4로 분압하여 측정하고 있습니다. 그러므로 “a5” 명령으로 측정한 전압에 4배를 해 주어야 정확한 입력 전압을 읽을 수 있습니다.
※ “MY 로거”는 데이터 로거(Data Logger)의 특성상 독립적으로 (고립되어) 동작시킬 수 있어야 합니다. 이 경우에 전원으로는 전지나 배터리를 사용하게 되므로 항상 돌발적인 전원 전압 강하에 유의할 필요가 있습니다. 이런 이유로 16F873A의 A/D 단자중 하나를 내부전원 감시용으로 배치하였습니다.

그림에 “MY 로거” 디지털 입/출력단자와 시험회로가 나와 있습니다.
아날로그 입력을 시험하기 위해서는 단지 (터미널 단자끼리) 연결만 하면 충분합니다(“MY 로거”회로도 참조).
※ “MY 로거”의 외부출력 단자는 튼튼한 스크류 터미널입니다. 그러므로 납땜없이 선을 연결하고 제거할 수 있어 여러가지 실험에 무척 편리합니다.

실험 회로를 보면 내/외부의 전원이 전혀 필요없다는 것을 알 수 있습니다. (외부회로와 GND는 연결하여야 함) 이러한 조건은 외부 응용회로를 “MY 로거”와 무관하게 설계할 수 있도록 만들어 주므로, (인터페이스 회로 설계에서) 무척 중요한 포인트가 됩니다.
A/D 실험결과 “MY 로거”를 이용해서, PC에서 (원격으로) 아날로그 입력단자의 전압을 측정하는 작업이 매우 간단하며 결과가 정확하다는 사실을 확인하게 되었습니다. “MY 로거”는 여러 응용에 충분한 4ch A/D를 갖추고 있으므로 이제부터 재미있는 사용들이 예상되지 않으시는지요.
PWM 출력를 이용한 D/A (Digital to Analog Conversion) 시험

▶ 회로설명 (circuit description)

이번 시간에는 “MY 로거” 내부의 PWM 신호를 사용한 아날로그 출력을 시험해 보겠습니다. 단 “MY 로거”에는 외부단자의 부족으로 “MY 로거” 출력단자가 없습니다. 그러므로 시험을 위해 “MY 로거” 내부의 16F873A 12, 13번 단자에서 선을 (외부로) 뽑아내야 합니다.
※ “MY 로거” 내부에서 (외부로) 선을 끌어 내 오는데는 납땜작업이 꼭 필요합니다. 납땜작업전에 반드시 16F873A 칩을 IC 소켓에서 먼저 제거하여야 합니다.(IC 소켓에서 칩을 분리할 때는 전원을 끈 후에, 작은 드라이버를 사용하면 편리합니다. 작업후에는 16F873A 칩의 1번을 확인하고 IC 소켓에 끼우십시요. )

(PWM 신호를 사용한) 아날로그 출력 명령은 d1+숫자, d2+숫자의 두 가지로, 처음의 ‘d’ 문자는 digital to analog의 의미를, 두 번째 1, 2문자는 PWM 출력 핀을, 세 번째 “숫자”는 듀티비를 의미합니다. 듀티비는 명령 중 세 번째인 “숫자” 값 0~127에 의해 0~100%까지 변화합니다. (주파수는 변하지 않습니다) 그러므로 “d1+숫자” 명령은 16F873A 13번, PWM 1단자에서, “숫자” 값으로 듀티비를 셋팅한 펄스열이 출력되도록 “MY 로거”에 지시합니다.
예를들면 “d1+0” 명령은 0%듀티비, “d1+63” 명령은 50% 듀티비, “d1+127” 명령은 100%의 듀티비를 가진 펄스열을 생성하고 PWM 1단자에서 출력되도록 만듭니다.
※ 아날로그 출력 명령의 리턴 문자는 없습니다.
※ 듀티비 = (펄스 1 주기의) ON 시간 / OFF 시간 x 100 (%)

▶ 회로도 (The circuit diagram) :  PWM 출력을 사용한 “MY 로거” D/A 실험

05SC012

(출력된 PWM 펄스를 사용하여 직류전압을 만드는) 아날로그 출력 시험에는 “MY 로거” 외부에 2단 (로우패스) 필터 회로가 필요합니다. 필터회로는 PWM 펄스열을 입력으로 받아서, (펄스열의) 평균값에 해당하는 직류전압(DC)을 출력해 줍니다.
※ 2단 (로우패스) 필터회로를 만들 때 “MY 로거”의 GND와 필터의 GND를 반드시 연결하십시요.
※ 제작시 16F873A의 PWM 신호핀 순서에 주의하여야 합니다.

PWM 펄스에서 변화된 직류전압은 0% 듀티비에서 0V, 50% 듀티비에서 2.5V, 100% 듀티비에서 5V가 출력되며, 출력 직류전압은 (필터의 출력단에서) 테스터로 확인할 수 있습니다.
※ 16F873A에서 출력된 PWM 펄스는 5V의 전압크기를 가집니다. 100%의 듀티비 펄스는 (항상) ON 상태이므로 결과적으로 직류(DC) 5V를 의미합니다. 반면에 0% 듀티비는 (항상) OFF 상태의 펄스입니다. (펄스라고 말하기도 뭐하군요.) 그러므로 0% 듀티비 펄스는 직류(DC) 0V와 같은 의미가 됩니다.

실험회로를 보면 내/외부의 전원이 전혀 필요없다는 것을 알 수 있습니다. (외부회로와 GND는 연결하여야 함) 이러한 조건은 외부 응용회로를 “MY 로거”와 무관하게 설계할 수 있도록 만들어 주므로, (인터페이스 회로 설계에서) 무척 중요한 포인트가 됩니다.
D/A 실험결과 “MY 로거”를 이용해서, PC에서 (원격으로) 아날로그 단자에 원하는 전압을 출력하는 작업이 가능하다는 사실을 확인하게 되었습니다. (외부의 2 단 로우패스 필터회로 필요) “MY 로거”는 두 개의 D/A 기능을 가지고 있으므로 모터 속도제어등의 재미있는 사용들이 예상되는군요.

▶왕초보 전자회로의 기초 로직회로 강의를 종료합니다.
수고하셨습니다.

Leave A Comment

*