임베디드랜드

    ▶ 회로설명 (circuit description) : 이전 시간의 설명들에서... PC에 RS232 (통신)방식으로 연결해서 원격으로 조종할 수 있는, 원격 로거/콘트롤러의 필요과 사양등의 전체윤곽을 이해하셨을 것입니다. ^^
    이번 시간에는 (설명한 개념으로 설계/제작된) "MY 로거"의 사용법을 설명합니다. 옛 속담에 "구슬이 서 말이라도 꿰어야 보배" 라는 말이 있습니다. 그러므로 만들어진 "MY 로거"가 진가를 발휘하려면... 적절한 성능에 더해서, 쉽게 사용할 수 있으며 깔끔한 동작이 보증되어야 할 것입니다. ^^

    (설계/제작한) "MY 로거"는 RS232C 통신을 이용한 원격조정이 목적이므로, 가장 간단하면서도 보편적으로 널리 사용되는 애스키 코드(ASCII code) 형식을 명령과 데이터 전달에 사용합니다.

    ※ 애스키 코드(ASCII code) : ASCII는 American Standard Code for Information Interchange의 약자로 1963년에 미국에서 제정된 (정보교류용) 표준코드 입니다. 그 목적은 각 시스템간에 정보를 교류한다는 것이었지만, 이것이 자리잡는데에는 무려 15년이라는 시간이 소요 되었습니다. ASCII code는 컴퓨터 코드체계를 선점하여, 가장 큰 영향력을 발휘하였으며 현재까지도 호환성이 좋으며... 나중에는 확장판(Latin-1, Extended ASCII)이 발표 되기도 하였습니다.
    애스키 코드의 형식은... 영문 알파벳을 컴퓨터가 인식하도록 하기 위해, (각 문자마다 정해진) 8 비트 이진법 숫자체계를 약속한 것으로, 현재 영문 텍스트포맷의 표준으로 되어 있습니다. ^^

    ▶ 회로도 (The circuit diagram) : "MY 로거"의 초 간단 사용법 (MY Logger Command) ^^

    "MY 로거" 사용법은 간단합니다. 먼저 준비작업으로 PC COM 포트와 "MY 로거"를 (RS232C 통신) 케이블로 연결하고, "MY 로거"에 전원을 연결하면 O.K 입니다. ^^ (케이블 길이는 10m 까지 허용)
    준비가 끝나면... PC에서 정해진 문자열을 (케이블이 연결된) COM 포트로 보내면, "MY 로거"가 수신하고 명령을 해독해서 수행하고, 신속하게 결과를 보내 줍니다. ^^
    예로 "MY 로거"의 1 번 디지털 입력핀의 상태를 알고 싶으면... ("MY 로거"로) "i1" 문자열을 보냅니다. 그러면 "MY 로거"는 1 번 디지털핀의 전압을 검사해서 High면 'T', Low면 'F' 문자를 보내옵니다. 만일 1 번 디지털 출력핀을 High 상태로 셋팅하고 싶으면, "o11" 문자열을 보내면 끝입니다. (간단하지 않나요? ^^)

    "MY 로거" 명령어는 2 개 또는 3 개의 문자들로 이루어집니다. 첫 번째는 명령의 종류를, 두 번째는 포트번호를, 세 번째 문자는 데이터를 의미합니다. (그림참조)
    No
    명령 문자열
    응답 문자(열)
    명령의 의미
    1 rr r (로거) 명령처리 루틴 리셋 (reset)
    2 i1, i2 T or F (주1) 1, 2 번 디지털 입력포트 상태
    3 o10, o11, o20, o21 없음 1, 2 번 디지털 출력포트 상태 변경
    4 a1, a2, a3, a4, a5 문자열 응답 (주2) 1-4 번 아날로그 입력포트 전압 (주3)
    5 d1, d2 + '테이터' (주4) 없음 1, 2 번 출력포트 PWM 듀티비 변경


    ※ 주1 : 'T'는 입력단자가 High 상태 (약 5 V), 'F'는 입력단자가 Low 상태 (약 0 V) 임을 의미합니다.

    ※ 주2 : "MY 로거"는 0~5V 입력전압을 10 bit A/D로 변환한 후... 상위, 하위의 두 문자로 나누어 보내줍니다. 측정된 전압값은 (보내진 상위, 하위) 두 문자를 애스키 (10진 값에 해당하는) 숫자로 변환하고 약간의 수정을 거치고, 계산하여 구합니다. (전압값 계산과정은 PC에서 이루어집니다)

    ※ 주3 : "a5" 명령으로... "MY 로거"의 입력 잭에 공급되는 전압의 1/4 값을 측정합니다. 전압을 다운하여 측정하는 이유는 공급전압이 5V 보다 훨씬 높을 수 있기 때문입니다.

    ※ 주4 : 테이터로 0~127 값에 대응하는 ASCII 문자를 ("MY 로거"로) 보냅니다. "MY 로거"에서는 데이터 문자의 애스키 숫자에 비례하는 PWM 듀티비를 계산한 후, 지정된 포트에 펄스열을 출력합니다. 0~5V 범위의 아날로그 전압은... PWM 출력펄스를, 한 번 더 (RC 로우패스)필터를 거쳐 만들어집니다.


    ※ 명령은 아니지만... 리셋버튼이 눌렸다 떼어지거나 전원이 새로 투입되면, "MY 로거"는 (정해진) "초기 문자열"을 보내옵니다. (Ex : Logger! Ver 2.0)

    ※ 'rr' 리셋 명령은... 잘못된 명령을 보냈거나 또는 (노이즈와 같은) 이유로 "MY 로거"가 응답하지 않을 때 사용합니다. 리셋 명령은 "MY 로거"의 명령 해석루틴을 초기화시켜 새로 시작하도록 합니다.

    ※ 명령 문자열은 필요에 의해 추가/삭제될 수 있습니다. ^^ (임베디드 프로그램 변경이 필요함)


    ※ "MY 로거" RS232 통신사양 : 19200 bps (bit per second), 8 bit data, 1 stop bit, No parity
     
    ▶ 회로도 (The circuit diagram) : 애스키 코드 (ASCII code)와 RS-232C 통신의 테이터 구조

    PC와 "MY 로거"의 통신에서... 명령어와 데이터에 사용되는 애스키 코드(ASCII code)에 대해 설명하겠습니다. 그림의 표를 보면, (128개의) 애스키 코드는 키보드에서 표현여부에 따라 특수문자와 보통문자로 나누어집니다. 그리고 각 문자에는 0 에서 127 사이의 고유번호가 부여되어 있습니다.
    PC나 마이컴은 모두 디지털 로직을 바탕으로 동작하므로, 모든 데이터는 High와 Low의 이진 데이터로 표현됩니다. 그러므로 0~127의 10진 숫자는, 7 비트의 2 진 숫자로 바뀌어 사용됩니다. (2^7=128)
    ※ 마이컴의 자료이동에 사용되는 최소 데이터 단위는 관례적으로 "8 비트" 이므로, 부득이 여분의 최상위 비트는 표준 애스키 코드에 사용되지 않습니다. ^^

    애스키 코드(ASCII code)에 의하면 'A'라는 문자는 10 진수 65로, 'A' = 65 라는 식이 성립됩니다. 즉 숫자가 문자로 대치되는 것이며, 반대로 문자도 숫자로 표현될 수 있습니다. 명백히 이런 변환이 필요한 이유는... 인간(人間)은 문자로 표현해야 이해가 가능하지만, 컴퓨터는 (문자를 다룰 수 없으며...) 오직 숫자로만 의사전달과 계산이 가능하기 때문입니다. 그러므로 컴퓨터와 인간, 서로간의 차이를 극복하기 위해서 문자와 숫자 사이의 관계를 약속한 문서가 필요해 집니다. 바로 애스키 코드(ASCII code)입니다. ^^


    애스키 코드(ASCII code)에 의해 "문자 = 숫자"가 되므로 혼란스러운 일이 많이 발생합니다. 예를들면 문자끼리 더하기를 할 수 있습니다. 'A' + '*' = 65 + 42 = 107 = 'k' 가 됩니다. 문자 '0' 은 10진 숫자로 48 입니다. 따라서 '0' + '1' = 48 + 49 = 97 = 'a' 가 되고 맙니다. 원래 문자끼리 더할 수는 없는 것이므로, 내용을 모르는 사람에게는 이해할 수 없는 수수께끼로 되는 것입니다. 세상에는 이와 같은 일이 많습니다.

    또 하나의 중요한 점은... 이제 한 쪽에서 문자를 보내도, 받는 쪽에서 숫자로 사용할 수도 있다는 것입니다. 반대의 경우도 발생합니다. 이제 컴퓨터 (논리) 세계에서, 숫자와 문자는 같은 의미를 같는다는 점을 반드시 마음속에 새겨 두어야 혼란을 피할 수 있습니다.
    ※ 키보드로 표현되지 않는 특수문자는, 오로지 숫자로 표현하여야 합니다. "MY 로거"에서는 숫자 데이터를 전송하기 위해 애스키 문자를 이용하므로, 0~127 사이의 모든 문자를 사용하고 있습니다. 따라서 특수문자를 표현에는 (해당하는 애스키) 숫자를 기입합니다.

    "MY 로거" 사용법을 설명하면서... 간단하게 사용한다는 것과, 기술의미을 설명한다는 것은 다르다는 것을 느꼈습니다. 성능이 약하다고는 하나, 고가의 DAQ 보드를 대체하려는 로거가 간단하기만 하다면, 이 또한 앞 뒤가 맞지 않습니다. ^^ 그러나 사용자의 입장에서 보면... (굳이 어려운 내부기술을 모르더라도) 재미있고 유용하게 사용할 수 있으면 충분하다고 생각합니다.
    다만 설계자의 입장에서, 자세한 내부구조를 설명해 두는 것이 여러모로 유용하리라고 믿고 있습니다. 특히 PC측 소프트웨어를 작성하려면... 이 정도의 예비지식은 반드시 필요하리라고 생각하므로, 초보자께서는 이해하여 주시기 부탁 드립니다. ^^

    ※ (표준) 애스키 테이블 (ASCII Table.zip 99k) <다운로드>

    http://www.devicemart.co.kr/mart7/circuitry/bbs.php?table=beginner&query=view&uid=49&p=1
Posted by suvisor