뉴스
뉴스
MCU 최고의 대중 과학 요약
2022-03-16 529

MCU는 마이크로컨트롤러 유닛의 약자로, 일반적으로 단일 칩 마이크로컴퓨터라고 불립니다. 이는 CPU의 주파수와 사양을 적절히 낮추고 메모리, 카운터, USB, A/D 변환기, UART, PLC, DMA, 심지어 LCD 드라이버 회로와 같은 주변 장치 인터페이스를 단일 칩에 통합하여 칩 수준의 컴퓨터를 구현한 것입니다. MCU는 휴대폰, PC 주변기기, 리모컨, 자동차 전자 장치, 산업용 스테퍼 모터, 로봇 팔 제어 등 다양한 응용 분야에서 여러 가지 제어 조합을 수행할 수 있습니다. 그림에서 MCU를 확인할 수 있습니다.




마이크로컨트롤러 개발의 간략한 역사



마이크로컨트롤러의 역사는 그리 길지 않지만, 매우 빠르게 발전해 왔습니다. 마이크로컨트롤러의 생산과 개발은 일반적으로 마이크로프로세서(CPU)의 생산 및 개발과 궤를 같이합니다. 미국의 인텔사가 1971년 최초로 4비트 마이크로프로세서를 출시한 이후, 그 발전 과정은 크게 다섯 단계로 나눌 수 있습니다. 다음은 인텔사의 마이크로컨트롤러 개발 과정을 간략하게 소개합니다.


1971 ~ 1976


마이크로컨트롤러 개발의 초기 단계. 1971년 11월, 인텔은 2,000개의 트랜지스터를 칩당 집적한 4비트 마이크로프로세서인 인텔 4004를 최초로 설계했습니다. 이 제품은 RAM, ROM, 시프트 레지스터를 탑재한 최초의 MCS-4 마이크로프로세서였습니다. 이후 인텔은 8비트 마이크로프로세서인 인텔 8008을 출시했고, 다른 회사들도 8비트 마이크로프로세서를 출시했습니다.


1976 ~ 1980


저성능 마이크로컨트롤러 단계는 인텔이 1976년에 출시한 MCS-48 시리즈로 대표되며, 8비트 CPU, 8비트 병렬 I/O 인터페이스, 8비트 타이머/카운터, RAM 및 ROM을 하나의 반도체 칩에 통합한 모놀리식 구조를 사용합니다. 주소 지정 범위가 제한적이고(최대 4KB), 직렬 I/O가 없으며, RAM과 ROM 용량이 작고, 인터럽트 시스템이 비교적 단순하지만, 일반적인 산업 제어 및 지능형 계측기의 요구 사항을 충족할 수 있습니다.


1980 ~ 1983


고성능 마이크로컨트롤러 단계. 이 단계에서 출시된 고성능 8비트 마이크로컨트롤러는 일반적으로 시리얼 포트, 다단계 인터럽트 처리 시스템, 그리고 여러 개의 16비트 타이머/카운터를 갖추고 있습니다. 온칩 RAM과 ROM 용량이 증가했으며, 주소 지정 범위는 최대 64KB에 달합니다. 일부 칩은 A/D 변환 인터페이스도 제공합니다.


1983년~1980년대 후반


16비트 마이크로컨트롤러 시대. 1983년 인텔은 고성능 16비트 마이크로컨트롤러인 MCS-96 시리즈를 출시했습니다. 최신 제조 기술을 채택하여 칩 집적도가 칩당 최대 120,000만 개의 트랜지스터에 달했습니다.


1990s


마이크로컨트롤러는 통합, 기능, 속도, 신뢰성 및 응용 분야 등 모든 측면에서 더욱 높은 수준으로 발전하고 있습니다.




단일 칩 마이크로컴퓨터의 분류 및 응용



마이크로컨트롤러(MCU)는 메모리 종류에 따라 온칩 ROM이 없는 칩과 온칩 ROM이 있는 칩의 두 가지 유형으로 나눌 수 있습니다. 온칩 ROM이 없는 칩은 사용하기 전에 외부 EPROM을 연결해야 합니다(일반적으로 8031). 온칩 ROM이 있는 칩은 온칩 EPROM 타입(대표적인 칩은 87C51), MASK 온칩 마스크 ROM 타입(대표적인 칩은 8051), 온칩 플래시 타입(대표적인 칩은 89C51) 및 기타 타입으로 구분됩니다.


용도에 따라 범용형과 특수용형으로 나눌 수 있으며, 데이터 버스의 폭과 동시에 처리할 수 있는 데이터 바이트 수에 따라 8비트, 16비트, 32비트 MCU로 나눌 수 있다.


현재 국내 MCU 응용 시장이 가장 활발한 분야는 소비자 가전이며, 그 다음으로 산업 분야와 자동차 전자 시장이 뒤를 잇습니다. 소비자 가전에는 가전제품, 텔레비전, 게임 콘솔, 오디오 및 비디오 시스템 등이 포함됩니다. 산업 분야에는 스마트 홈, 자동화, 의료 애플리케이션, 신에너지 생산 및 유통 등이 있습니다. 자동차 분야에는 자동차 파워트레인 및 안전 제어 시스템이 포함됩니다.




마이크로컨트롤러의 기본 기능



대부분의 MCU에서 다음과 같은 기능들이 가장 일반적이고 기본적인 기능입니다. MCU마다 설명 방식은 다를 수 있지만, 본질적으로는 동일합니다.


1. 타이머(Timer): 타이머에는 여러 종류가 있지만 크게 두 가지 범주로 나눌 수 있습니다. 첫 번째는 고정 시간 간격 타이머로, 타이밍 시간이 시스템에 의해 설정되며 사용자 프로그램에서 제어할 수 없습니다. 시스템은 사용자 프로그램이 선택할 수 있는 몇 가지 고정 시간 간격(예: 32Hz, 16Hz, 8Hz 등)만 제공합니다. 이러한 유형의 타이머는 4비트 MCU에서 흔히 사용되며, 클록, 타이밍 및 기타 관련 기능을 구현하는 데 사용됩니다.


다른 유형은 프로그래머블 타이머입니다. 이름에서 알 수 있듯이, 이 유형의 타이머는 사용자가 프로그램으로 타이밍을 제어할 수 있습니다. 제어 방법에는 클록 소스 선택, 주파수 분할(프리스케일) 선택, 프리셋 번호 설정 등이 있습니다. 일부 MCU는 이 세 가지 기능을 모두 동시에 지원하는 반면, 다른 MCU는 한두 가지 기능만 지원할 수 있습니다. 이러한 유형의 타이머는 활용도가 매우 높으며, 실제 사용 사례 또한 끊임없이 변화하고 있습니다. 가장 일반적인 응용 분야 중 하나는 PWM 출력을 구현하는 것입니다.


클럭 소스를 자유롭게 선택할 수 있으므로 이러한 유형의 타이머는 일반적으로 이벤트 카운터와 함께 사용됩니다.


2. IO 포트: 모든 MCU는 일정 개수의 IO 포트를 가지고 있습니다. IO 포트가 없으면 MCU는 외부와의 통신 채널을 잃게 됩니다. IO 포트는 구성 가능성에 따라 다음과 같은 유형으로 나눌 수 있습니다.


순수 입력 또는 순수 출력 포트: 이 유형의 IO 포트는 MCU 하드웨어 설계에 따라 결정됩니다. 입력 또는 출력으로만 사용될 수 있으며, 소프트웨어를 통한 실시간 설정은 불가능합니다.


직접 읽기/쓰기 IO 포트: 예를 들어, MCS-51의 IO 포트는 이러한 유형의 IO 포트에 속합니다. IO 포트 읽기 명령이 실행되면 입력 포트가 되고, IO 포트 쓰기 명령이 실행되면 자동으로 출력 포트가 됩니다.


입력 및 출력 방향 설정 프로그래밍: 이 유형의 IO 포트의 입력 또는 출력은 실제 필요에 따라 프로그램에서 설정합니다. 적용 범위가 비교적 넓어 I2C 버스, 다양한 LCD, LED 드라이버 제어 버스 등과 같은 버스 레벨 애플리케이션을 구현할 수 있습니다.


IO 포트를 사용할 때 명심해야 할 중요한 사항은 다음과 같습니다. 입력 포트의 경우, 신호 레벨이 안정적이어야 플로팅 현상이 발생하지 않습니다(풀업 또는 풀다운 저항을 추가하여 이를 확보할 수 있습니다). 출력 포트의 경우, 출력 상태 레벨은 외부 연결 상태를 고려해야 하며, 대기 또는 정적 상태에서 전류 유입이나 유출이 발생하지 않도록 해야 합니다.


3. 외부 인터럽트: 외부 인터럽트 또한 대부분의 MCU에서 기본적으로 제공되는 기능입니다. 일반적으로 신호의 실시간 트리거링, 데이터 샘플링 및 상태 감지에 사용됩니다. 인터럽트 방식에는 상승 에지 트리거, 하강 에지 트리거 및 레벨 트리거가 있습니다. 외부 인터럽트는 일반적으로 입력 포트를 통해 구현됩니다. IO 포트인 경우 입력으로 설정될 때만 인터럽트 기능이 활성화되고, 출력 포트인 경우 외부 인터럽트 기능은 자동으로 비활성화됩니다(ATMEL의 ATiny 시리즈는 출력 포트일 때도 인터럽트 기능을 활성화할 수 있는 예외가 있습니다). 외부 인터럽트의 응용 분야는 다음과 같습니다.


외부 트리거 신호 감지: 하나는 사이리스터 제어, 돌발 신호 감지 등과 같은 실시간 요구 사항에 기반한 것이고, 다른 하나는 전력 절감 필요성에 기반한 것입니다.


신호 주파수 측정: 신호 누락을 방지하기 위해 외부 인터럽트가 이상적인 선택입니다.


데이터 디코딩: 원격 제어 애플리케이션 분야에서는 설계 비용을 절감하기 위해 맨체스터 인코딩 및 PWM 인코딩과 같은 다양한 인코딩된 데이터를 디코딩하는 데 소프트웨어를 사용하는 경우가 많습니다.


키 감지 및 시스템 깨우기: 절전 모드에 들어간 MCU는 일반적으로 외부 인터럽트를 통해 깨워야 합니다. 가장 기본적인 형태는 키 입력으로, 키 입력 동작에 따라 레벨이 변경됩니다.


4. 통신 인터페이스: MCU가 제공하는 통신 인터페이스는 일반적으로 SPI 인터페이스, UART, I2C 인터페이스 등을 포함하며, 각각에 대한 설명은 다음과 같습니다.


SPI 인터페이스: 이 인터페이스는 대부분의 MCU에서 제공하는 가장 기본적인 통신 방식입니다. 데이터 전송은 동기식 클록에 의해 제어됩니다. 신호에는 SDI(직렬 데이터 입력), SDO(직렬 데이터 출력), SCLK(직렬 클록) 및 Ready 신호가 포함됩니다. 경우에 따라 Ready 신호가 없을 수도 있습니다. 이 인터페이스는 마스터 모드 또는 슬레이브 모드로 작동할 수 있습니다. 일반적으로 클록 신호를 제공하는 쪽이 마스터이고, 클록을 제공하지 않는 쪽이 슬레이브입니다.


UART(범용 비동기 수신/송신): 가장 기본적인 비동기 전송 인터페이스입니다. 수신(Rx)과 송신(Tx) 두 개의 신호선만 사용합니다. 기본 데이터 형식은 시작 비트 + 데이터 비트(7비트/8비트) + 패리티 비트(짝수, 홀수 또는 없음) + 정지 비트(1~2비트)입니다. 데이터 1비트를 전송하는 데 걸리는 시간을 보드율이라고 합니다.


대부분의 MCU는 데이터 비트 길이, 데이터 검사 모드(홀수 검사, 짝수 검사 또는 검사 없음), 정지 비트 길이 및 보드율을 프로그램 프로그래밍을 통해 유연하게 설정할 수 있습니다. 이러한 유형의 인터페이스에서 가장 일반적으로 사용되는 방법은 PC의 직렬 포트를 통해 통신하는 것입니다.


I2C 인터페이스: I2C는 필립스에서 개발한 데이터 전송 프로토콜입니다. SDAT(직렬 데이터 입력 및 출력)와 SCLK(직렬 클록)라는 두 개의 신호를 사용하여 구현됩니다. I2C의 가장 큰 장점은 여러 장치를 이 버스에 연결하고 주소를 통해 식별 및 액세스할 수 있다는 점입니다. 또한 I2C 버스의 가장 큰 장점 중 하나는 IO 포트를 통해 소프트웨어로 구현하기가 매우 편리하다는 것입니다. 데이터 전송 속도는 SCLK에 의해 완전히 제어되며, UART 인터페이스처럼 엄격한 속도 요구 사항이 있는 것이 아니라 SCLK를 빠르게 또는 느리게 설정할 수 있습니다.


5. 워치독(Watchdog) 타이머: 워치독은 대부분의 MCU에서 기본적으로 제공되는 기능입니다(일부 4비트 MCU는 이 기능이 없을 수 있습니다). 대부분의 MCU에서 워치독은 프로그램이 리셋만 할 수 있고 끌 수는 없습니다(마이크로칩 PIC 시리즈 MCU처럼 프로그램 등록 시 설정되는 경우도 있고, 삼성 KS57 시리즈처럼 특정 방식을 사용하여 켜짐 여부를 결정하는 경우도 있습니다). 프로그램이 워치독 레지스터에 접근하는 한, 워치독은 자동으로 켜지고 다시 끌 수 없습니다. 일반적으로 워치독 리셋 시간은 프로그래밍 방식으로 설정할 수 있습니다. 워치독의 가장 기본적인 용도는 예기치 않은 오류로 인해 MCU가 다운될 경우 자체 복구 기능을 제공하는 것입니다.




글로벌 주류 마이크로컨트롤러 제조업체

(순위는 특별히 정해져 있지 않으며, 주요 제조업체 순으로 정리했습니다. 누락된 항목이 있으면 댓글란에 추가해 주세요.)




유럽과 미국




1. 프리스케일+NXP(Freescale+NXP): 네덜란드 소재로, 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, LED 및 일반 조명, 의료, 멀티미디어 융합, 가전 제품 및 전동 공구, 빌딩 자동화 기술, 모터 제어, 전원 공급 장치 및 전력 변환기, 에너지 및 스마트 그리드, 자동화, 컴퓨터 및 통신 인프라.




2. 마이크로칩+앳멜(마이크로칩 테크놀로지 + 앳멜): 미국에 본사를 두고 있으며, 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, 산업용, 모터 제어, 자동차, 빌딩 자동화, 가전 제품, 홈 엔터테인먼트, 산업 자동화, 조명, 사물 인터넷, 스마트 에너지, 모바일 전자 기기, 컴퓨터 주변기기.




3. 사이프러스+스팬션(Cypress + Spansion Semiconductor): 미국에 본사를 두고 있으며, 주로 8비트, 16비트, 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, 가전 제품, 의료, 소비자 전자 제품, 통신 및 전기통신, 산업, 무선 통신.




4. ADI(Analog Devices): 미국 기업으로, 주로 8비트, 16비트, 32비트 MCU를 제공합니다. 응용 분야: 항공우주 및 방위, 자동차, 건축 기술, 통신, 가전제품, 에너지, 의료, 계측 및 측정, 모터, 산업 자동화, 보안.




5. 인피니언: 독일 기업으로 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, 가전 제품, 엔지니어링, 상용 및 농업용 차량, 데이터 처리, 전기 운송, 산업 응용 분야, 의료 장비, 모바일 장비, 모터 제어 및 구동, 전원 공급 장치, 오토바이, 전기 자전거 및 소형 전기 자동차, 스마트 그리드, 조명, 태양광 시스템 솔루션, 풍력 에너지 시스템 솔루션.




6. ST 마이크로일렉트로닉스: 이탈리아/프랑스 소재로 주로 32비트 MCU를 제공합니다. 응용 분야: LED 및 일반 조명, 운송, 의료, 멀티미디어 융합, 가전제품 및 전동공구, 빌딩 자동화 기술, 모터 제어, 전원 공급 장치 및 전력 변환기, 에너지 및 스마트 그리드, 자동화, 컴퓨터 및 통신 인프라.




7. 퀄컴: 미국에 본사를 두고 있으며, 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 스마트폰, 태블릿, 무선 모뎀.




8. 텍사스 인스트루먼트: 미국 소재 기업으로, 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, 가전 제품, 의료 기기, 모바일 기기, 통신.




9. Maxim (맥심): 미국 기업으로, 주로 32비트 MCU를 제공합니다. 적용 분야: 자동차 전자 장치, 가전 제품, 산업 응용 분야, 보안.




일본과 한국  




1. 르네사스: 일본 기업으로 주로 16비트 및 32비트 MCU를 제공합니다. 적용 분야: 컴퓨터 및 주변기기, 가전제품, 의료 및 건강 전자제품, 자동차 전자제품, 산업 및 통신.




2. 도시바: 일본 기업으로 주로 16비트 및 32비트 MCU를 제공합니다. 적용 분야: 자동차 전자 장치, 산업용, 모터 제어, 무선 통신, 휴대폰, 컴퓨터 및 주변기기, 영상 및 오디오/비디오 장비, 가전제품, LED 조명, 보안, 전력 관리, 엔터테인먼트 장비.




3. 후지쓰: 일본 기업으로 주로 32비트 MCU를 공급합니다. 적용 분야: 자동차, 의료, 기계, 가전제품.




4. 삼성전자: 대한민국에 본사를 두고 있으며, 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차 전자 장치, 산업용, 모터 제어, 자동차, 빌딩 자동화, 가전 제품, 홈 엔터테인먼트, 산업 자동화, 조명, 사물 인터넷, 스마트 에너지, 모바일 전자 기기, 컴퓨터 주변기기.




중국 지역  




중국 본토  




1. 시그마 마이크로일렉트로닉스: 주로 32비트 MCU를 제공하며, 적용 분야는 통신, 제조, 에너지, 운송, 전력 등입니다.




2. 주하이 오빗: 주로 32비트 MCU를 제공하며, 응용 분야는 항공우주(위성, 우주 정거장, 선박, 항공기), 고급 산업 제어(임베디드 컴퓨터, 선박 제어, 산업 제어, 전력 장비, 환경 모니터링)입니다.




3. 기가디바이스 혁신: 주로 32비트 MCU를 제공하며, 응용 분야는 산업 자동화, 인간-기계 인터페이스, 모터 제어, 보안 모니터링, 스마트 홈, 사물 인터넷 등입니다.




4. Shengsi Microelectronics: 주로 8비트 및 32비트 MCU를 제공합니다. 적용 분야: 소형 가전제품, 소비자 전자제품, 리모컨, 마우스, 리튬 배터리, 디지털 제품, 자동차 전자제품, 의료기기 및 측정기기, 장난감, 산업 제어, 스마트 홈 및 보안 등 다양한 분야.




5. 칩시 테크놀로지: 주로 16비트 및 32비트 MCU를 제공합니다. 적용 분야: 계측기, 사물 인터넷, 소비자 전자 제품, 생활 가전 및 자동차 전자 장치.




6. 롄화 집적 회로(Lianhua Integrated Circuit): 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 소비자 가전, 백색 가전, 산업 제어, 통신 장비, 자동차 전자 장치 및 컴퓨터.




7. 주하이 젠룽: 주로 8비트 MCU를 제공하며, 적용 범위는 가전제품, 휴대용 전원 공급 장치 등입니다.




8. 액션 테크놀로지: 주로 8비트에서 32비트 MCU를 제공하며, 응용 분야는 태블릿 컴퓨터, 스마트 홈, 멀티미디어, 블루투스, 와이파이 오디오 등입니다.




9. 아이스코 마이크로일렉트로닉스: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 소비자용 칩, 통신 칩, 정보 칩 및 가전 제품.




10. 화신 마이크로일렉트로닉스: 주로 8비트 및 4비트 MCU를 제공합니다. 응용 분야: 위성 수신기, 휴대폰 충전기, 만년 달력, 올인원 리모컨.




11. 상하이 벨링(화다 반도체 홀딩스): 주로 8비트, 16비트, 32비트 MCU를 제공합니다. 응용 분야: 컴퓨터 주변기기, HDTV, 전력 관리, 소형 가전제품, 디지털 가전제품.




12. 하이얼 집적 회로: 주로 14비트, 15비트, 16비트 MCU를 제공합니다. 적용 분야: 가전제품, 자동차 전자제품, 산업 및 스마트 기기.




13. 베이징 인제닉: 주로 32비트 MCU를 제공하며, 적용 분야는 웨어러블 기기, 사물 인터넷, 스마트 가전, 자동차, 소비자 전자 제품, 태블릿 컴퓨터 등입니다.




14. 차이나 마이크로일렉트로닉스: 주로 8비트 MCU를 제공합니다. 응용 분야: 스마트 가전, 자동차 전자 장치, 보안 모니터링, LED 조명 및 조경, 스마트 장난감, 스마트 홈 및 소비자 전자 제품.




15. 선저우 룽손 집적 회로: 주로 32비트 MCU를 제공하며, 응용 분야는 전력 모니터링, 스마트 그리드, 산업 디지털 제어, 사물 인터넷, 스마트 홈, 데이터 모니터링입니다.




16. 지광 마이크로일렉트로닉스: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 스마트 가전 제품.




17. 타임스민신: 주로 32비트 MCU를 제공하며, 응용 분야는 자동차 내비게이션, 교통 모니터링, 어선 감시, 전력 통신 네트워크 등입니다.




18. 차이나 리소시스 실리콘 마이크로일렉트로닉스(차이나 리소시스 마이크로일렉트로닉스의 자회사): 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 소비자 가전, 산업 제어 및 생활 가전.




19. 국가 핵심 기술: 주로 32비트 MCU를 제공하며, 응용 분야는 정보 보안 분야, 사무 자동화 분야, 통신 네트워크 분야, 정보 보안 분야입니다.




20. 중톈마이크로(Zhongtian Micro): 주로 32비트 MCU를 제공합니다. 응용 분야: 스마트폰, 디지털 TV, 셋톱박스, 자동차 전자 장치, GPS, 전자책 단말기, 프린터.




21. 차이나 리소스 마이크로일렉트로닉스: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 범위: 가전제품, 소비자 전자제품 및 산업 자동화 제어용 일반 제어 회로.




22. 중잉 전자: 주로 4비트, 8비트, 16비트 및 32비트 MCU를 제공합니다. 적용 범위: 가전 제품 및 모터.




23. 링동 마이크로일렉트로닉스: 주로 32비트 제품을 제공하며, 응용 분야는 모터 제어, 블루투스 제어, 고화질 디스플레이, 무선 충전, 드론, 마이크로 프린터, 스마트 라벨, 전자 담배, LED 도트 매트릭스 스크린 등입니다.




24. 누보톤 테크놀로지: 주로 8비트 MCU를 제공하며, 응용 분야는 조명, 사물 인터넷 등입니다.




25. Neusoft Carrier: 주로 8비트 및 32비트 MCU를 제공합니다. 응용 분야: 가전제품, 스마트홈, 계측기, LCD 패널 컨트롤러, 산업 제어 등.




26. 베틀리: 주로 32비트 MCU를 제공하며, 적용 분야는 스마트 홈, 산업 제어 및 소비자 제품입니다.




27. Shengquan Technology: 주로 8비트 MCU를 제공하며, 적용 범위는 자동차, 교육, 산업 제어, 의료 등에 사용되는 소형 및 중형 디스플레이 패널입니다.




28. 항순칩: 주로 8비트 및 32비트 MCU를 제공합니다. 응용 분야: 자동차, 사물인터넷 등.




29. 푸단 마이크로일렉트로닉스: 주로 16비트 및 32비트 MCU를 제공합니다. 응용 분야: 스마트 미터, 스마트 도어록 등.




30. 화다 반도체: 주로 8비트, 16비트, 32비트 MCU를 제공합니다. 응용 분야: 산업 제어, 지능형 제조, 스마트 라이프, 사물 인터넷.




대만, 중국  




1. 홍징 테크놀로지: 주로 32비트 MCU를 제공합니다. 적용 분야: 통신, 산업 제어, 정보 기기 및 음성.




2. 홀텍 반도체: 주로 8비트 및 32비트 MCU를 제공합니다. 적용 분야: 가전제품, LED 조명 등.




3. 링양 테크놀로지: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 가정용 오디오 및 비디오.




4. 중잉 전자: 주로 4비트 및 8비트 MCU를 제공합니다. 적용 분야: 충전기, 휴대용 보조 배터리, 가전 제품, 산업 제어.




5. 송한테크놀로지: 주로 8비트 및 32비트 MCU를 제공합니다. 적용 분야: 리모컨, 스마트 충전기, 대형 및 소형 시스템, 전자저울, 귀 체온계, 혈압계, 타이어 공기압 측정기, 각종 측정 및 의료 장비.




6. 윈본드 일렉트로닉스: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 자동차 전자 장치, 산업 전자 장치, 네트워크, 컴퓨터, 소비자 전자 제품, 사물 인터넷.




7. 10단 속도 기술: 주로 4비트, 8비트, 51비트 MCU를 제공합니다. 적용 범위: 리모컨, 소형 가전제품.




8. 유화 마이크로일렉트로닉스: 주로 4비트 및 8비트 MCU를 제공합니다. 적용 분야: 기록 집적 회로 제품, 소비자 전자 제품, 생활용품.




9. 잉광 테크놀로지 마이크로컨트롤러: 주로 4비트 및 8비트 MCU를 제공합니다. 적용 분야: 기계, 자동화, 가전제품, 로봇.




10. 엘란 일렉트로닉스: 주로 8비트 및 16비트 MCU를 제공합니다. 적용 분야: 가전제품, 컴퓨터, 스마트폰.
 




다섯
마이크로컨트롤러 학습 팁
   




모든 마이크로컨트롤러(MCU)의 기본 원리와 기능은 유사합니다. 유일한 차이점은 주변 기능 모듈, 명령어 시스템 등의 구성 및 개수입니다.




명령어 체계는 형태는 매우 다르게 보이지만, 실제로는 단지 서로 다른 기호일 뿐입니다. 그것들이 나타내는 의미, 수행해야 할 기능, 그리고 주소 지정 방식은 기본적으로 유사합니다.




MCU를 이해하려면 먼저 ROM 공간, RAM 공간, IO 포트 수, 타이머 수 및 타이밍 방식, 제공되는 주변 기능 모듈(주변 회로), 인터럽트 소스, 동작 전압 및 전력 소비량 등을 알아야 합니다.




MCU의 특징을 이해한 후에는 선택한 MCU의 기능과 실제 프로젝트 개발에 필요한 기능을 비교하여 현재 필요한 리소스와 사용하지 않는 리소스를 명확히 해야 합니다.




프로젝트에서 사용해야 하지만 선택한 MCU에서 제공하지 않는 기능이 있는 경우, 해당 MCU의 관련 정보를 주의 깊게 파악하여 간접적인 방법을 통해 구현해야 합니다. 예를 들어, 개발 중인 프로젝트가 PC COM 포트와 통신해야 하는데 선택한 MCU에 UART 포트가 없는 경우, 외부 인터럽트를 사용하여 구현하는 것을 고려할 수 있습니다.




프로젝트 개발에 필요한 자료를 얻으려면 매뉴얼*을 꼼꼼히 읽고 이해해야 하며, 불필요한 기능 모듈은 무시하거나 훑어보셔도 됩니다. MCU 학습의 핵심이자 주된 목적은 응용입니다.




MCU의 관련 기능을 명확히 이해한 후에는 프로그래밍을 시작할 수 있습니다.




이 MCU를 처음 사용하는 초보자나 설계자는 MCU 기능에 대한 설명이 불분명한 경우가 많다는 것을 알게 될 것입니다. 이러한 문제를 해결하는 방법은 두 가지가 있습니다. 하나는 데이터에 설명된 기능을 이해하기 위한 특별한 검증 프로그램을 작성하는 것이고, 다른 하나는 일단 해당 설명을 무시하고 현재 이해한 내용을 바탕으로 MCU 프로그램을 작성한 후 디버깅 과정에서 수정하고 개선하는 것입니다. 전자는 시간적 여유가 있는 프로젝트나 초보자에게 적합하고, 후자는 마이크로컨트롤러 개발 경험이 있는 사람이나 프로젝트 일정이 빠듯한 경우에 적합합니다.




명령어 체계를 이해하는 데 특별히 시간을 쏟지 마세요. 명령어 체계는 논리적 설명을 나타내는 기호일 뿐입니다. 프로그래밍을 하다 보면 자신의 논리와 프로그램의 논리적 요구 사항에 따라 필요한 명령어를 찾아 사용하면 됩니다. 프로그래밍 경험이 쌓일수록 명령어 체계에 점점 익숙해지고, 심지어 무의식적으로 암기하게 될 수도 있습니다.




여섯
마이크로컨트롤러 프로그래밍




MCU 프로그래밍과 PC 프로그래밍에는 큰 차이가 있습니다. C 기반 MCU 개발 도구가 점점 더 보편화되고 있지만, 효율적인 프로그램 코드를 선호하고 어셈블리 언어를 사용하는 것을 좋아하는 설계자에게는 어셈블리 언어가 여전히 가장 간결하고 효과적인 프로그래밍 언어입니다.




MCU 프로그래밍의 기본 프레임워크는 대체로 유사하다고 할 수 있습니다. 크게 초기화 부분(이 부분이 MCU 프로그래밍과 PC 프로그래밍의 가장 큰 차이점입니다), 메인 프로그램 루프 본문, 그리고 인터럽트 처리기의 세 부분으로 나뉩니다. 각 부분에 대한 설명은 다음과 같습니다.




1. 초기화: 모든 MCU 프로그램 설계에서 초기화는 가장 기본적이고 중요한 단계이며, 일반적으로 다음과 같은 내용을 포함합니다.




모든 인터럽트를 마스킹하고 스택 포인터를 초기화합니다. 초기화 단계에서는 일반적으로 인터럽트가 발생하지 않도록 해야 합니다.




시스템의 RAM 영역과 표시 메모리를 정리합니다. 때로는 완전히 필요하지 않을 수도 있지만, 특히 예기치 않은 오류를 방지하고 안정성과 일관성을 확보하는 측면에서 좋은 프로그래밍 습관을 기르는 것이 좋습니다.




IO 포트 초기화: 프로젝트의 애플리케이션 요구 사항에 따라 해당 IO 포트의 입력 및 출력 모드를 설정하십시오. 입력 포트의 경우 풀업 또는 풀다운 저항을 설정해야 하며, 출력 포트의 경우 불필요한 오류를 방지하기 위해 초기 출력 레벨을 설정해야 합니다.




인터럽트 설정: 프로젝트에서 사용해야 하는 모든 인터럽트 소스는 활성화하고 인터럽트 발생 조건을 설정해야 합니다. 사용하지 않는 중복 인터럽트는 비활성화해야 합니다.




다른 기능 모듈 초기화: 사용해야 하는 MCU의 모든 주변 기능 모듈에 대해 프로젝트 응용 프로그램의 요구 사항에 따라 해당 설정을 해야 합니다. 예를 들어, UART 통신의 경우 보드율, 데이터 길이, 검증 방식 및 정지 비트 길이를 설정해야 합니다. 프로그래머 타이머의 경우 클록 소스, 주파수 분할 수 및 재로드 데이터를 설정해야 합니다.




매개변수 초기화: MCU 하드웨어 및 리소스 초기화가 완료되면 프로그램에서 사용되는 일부 변수와 데이터를 초기화해야 합니다. 이 부분의 초기화는 특정 프로젝트 및 프로그램의 전체적인 구성에 따라 설계해야 합니다. 프로젝트에서 미리 만들어진 데이터를 저장하기 위해 EEPROM을 사용하는 일부 애플리케이션의 경우, 프로그램의 데이터 접근 속도를 향상시키고 시스템의 전력 소비를 줄이기 위해 초기화 중에 관련 데이터를 MCU의 RAM으로 복사하는 것이 좋습니다(원칙적으로 외부 EEPROM에 접근하면 전원 공급 장치의 전력 소비가 증가합니다).




2. 메인 프로그램 루프 본문: 대부분의 MCU는 장시간 연속적으로 작동하므로 메인 프로그램 본문은 기본적으로 루프 형태로 설계됩니다. 여러 작동 모드를 가진 애플리케이션의 경우, 상태 플래그를 통해 전환되는 여러 개의 루프 본문이 있을 수 있습니다. 메인 프로그램 본문은 일반적으로 다음과 같은 모듈로 구성됩니다.




계산 프로그램: 계산 프로그램은 일반적으로 시간이 많이 소요되므로, 특히 곱셈 및 나눗셈 연산의 경우 인터럽트 처리에 강력히 반대합니다.




실시간 요구 사항이 낮거나 없는 프로그램 처리;
 




디스플레이 전송 프로그램: 주로 외부 LED 및 LCD 드라이버를 사용하는 애플리케이션용입니다.




3. 인터럽트 처리기: 인터럽트 프로그램은 주로 외부의 갑작스러운 신호 감지, 버튼 감지 및 처리, 타이밍 카운팅, LED 디스플레이 스캔 등과 같이 높은 실시간성을 요구하는 작업 및 이벤트를 처리하는 데 사용됩니다.




일반적으로 인터럽트 프로그램은 코드를 최대한 간결하고 짧게 유지해야 합니다. 실시간으로 처리할 필요가 없는 기능의 경우, 인터럽트에서 트리거 플래그를 설정하고 메인 프로그램에서 특정 작업을 수행하도록 할 수 있습니다. 이는 특히 모든 인터럽트에 신속하게 응답해야 하는 저전력, 저속 MCU에서 매우 중요합니다.




4. 서로 다른 작업 본체의 배열을 위해, 서로 다른 MCU는 서로 다른 처리 방식을 가지고 있습니다.




예를 들어, 저속, 저전력 MCU(Fosc=32768Hz) 애플리케이션의 경우, 휴대용 기기에서 일반 LCD 디스플레이를 사용하는 프로젝트라면 키 입력 및 화면 표시 응답에 높은 실시간 성능이 요구되므로 일반적으로 타이밍 인터럽트를 사용하여 키 입력 동작 및 데이터 표시를 처리합니다. 반면, Fosc>1MHz와 같은 고속 MCU 애플리케이션의 경우, MCU가 메인 프로그램 루프 본문을 실행할 충분한 시간이 있으므로 해당 인터럽트에 다양한 트리거 플래그만 설정하고 모든 작업을 메인 프로그램 본문에 넣어 실행할 수 있습니다.




5. MCU 프로그래밍에서 특별히 주의해야 할 점은 다음과 같습니다.

인터럽트와 메인 프로그램 본문에서 동일한 변수나 데이터에 동시에 접근하거나 값을 설정하는 것을 방지해야 합니다. 효과적인 방지 방법은 이러한 데이터 처리를 모듈로 분리하고, 트리거 플래그를 통해 관련 연산 수행 여부를 결정하는 것입니다. 다른 프로그램 본문(주로 인터럽트)에서는 데이터 처리가 필요한 부분에만 트리거 플래그를 설정합니다. 이렇게 하면 데이터 실행이 예측 가능하고 고유하게 이루어집니다.




일곱   마이크로컨트롤러 프로그래밍에 대한 엔지니어의 요약  




1. 요약하는 좋은 습관을 기르세요. 요약은 단순히 자신의 학습 내용을 정리하는 것뿐만 아니라, 학습 과정을 복습하고 심화하는 데에도 도움이 됩니다. 또한, 같은 실수를 반복하지 않도록 해줍니다.


2. 프로그램을 작성하기 전에 먼저 프로젝트를 충분히 이해하고, 전체적인 틀을 구상해야 합니다. 레이아웃을 어떻게 구성할지, 가장 합리적인 레이아웃은 무엇일지 신중하게 고려하는 것이 매우 중요합니다. 어떤 모듈부터 개발할지, 해당 모듈의 구체적인 단계는 무엇인지, 각 함수의 이름은 어떻게 지을지, 다른 모듈과의 연관성은 무엇인지 등을 분석해야 합니다. 중요한 과정을 적어두는 것도 좋은 방법입니다.


3. C 언어에서 모듈식 프로그래밍을 하려면 먼저 각 모듈을 나누고, 모듈별로 프로그래밍하며, 순서를 정하고, 그 순서를 따라야 합니다. 모듈 작성이 완료되면 다음 모듈로 넘어가야 합니다. 헤더 파일의 경우, 모듈 작성이 끝난 후에 해당 모듈의 헤더 파일을 작성해야 합니다.


4. 경고 메시지가 나타나면 무시하지 마세요. 프로그램에 뭔가 문제가 있다는 뜻입니다. 원인을 찾아 해결해야 합니다. 원인을 찾을 때는 구체적으로 접근하세요. 인터넷에서 관련 정보를 검색하거나 다른 사람에게 조언을 구할 수 있습니다. 예를 들어, 다른 프로젝트의 main 함수가 이 프로젝트에 추가된 경우처럼 함수 이름이 중복되는 경우도 있습니다. 이처럼 실험적인 현상을 분석하고 단계적으로 진행하는 것이 중요합니다. 포트를 정의할 때 잘못된 인터페이스를 선택한 경우도 있을 수 있습니다. 정말 해결할 수 없다면 잠시 쉬면서 생각해 보는 것도 좋습니다. 아무리 간단한 문제라도 실수를 발견할 수 있으므로 주의해야 합니다.   
마이크로컨트롤러 응용 프로그램 개발에는 코드 사용 효율성, 간섭 방지 성능, 마이크로컨트롤러의 신뢰성 등의 문제가 여전히 해결해야 할 과제로 남아 있습니다. 본 글에서는 마이크로컨트롤러 개발에 있어 반드시 숙달해야 할 몇 가지 기본 기술을 정리했습니다.        
 
  여덟
  마이크로컨트롤러 개발 기술  
1. 프로그램의 버그를 줄이는 방법
프로그램 버그를 줄이는 방법에 관해서는 시스템 운영 중에 고려해야 할 다음과 같은 범위 초과 관리 매개변수를 먼저 살펴보아야 합니다.  
 
  • 물리적 매개변수: 이러한 매개변수는 주로 시스템의 입력 매개변수이며, 여기에는 여기 매개변수, 데이터 수집 처리 중 작동 매개변수 및 처리 완료 후 결과 매개변수가 포함됩니다.
  • 리소스 매개변수: 이러한 매개변수는 주로 시스템 내 회로, 장치 및 기능 단위의 리소스이며, 메모리 용량, 저장 장치 길이 및 적층 깊이 등이 포함됩니다.
  • 응용 프로그램 매개변수: 이러한 응용 프로그램 매개변수는 종종 일부 마이크로컨트롤러 및 기능 장치의 응용 프로그램 조건으로 나타납니다. 프로세스 매개변수: 시스템 작동 중에 순차적으로 변화하는 매개변수를 말합니다.

2. C 언어 프로그래밍 코드의 효율성을 향상시키는 방법
마이크로컨트롤러 개발 및 응용 분야에서 C 언어를 이용한 프로그래밍은 필연적인 추세입니다. C 프로그래밍 효율을 극대화하려면 사용 중인 C 컴파일러에 익숙해지는 것이 중요합니다. 먼저 각 C 언어 컴파일러의 컴파일 효율을 확인하기 위해 어셈블리 언어 명령문의 줄 수를 측정해 보는 것이 좋습니다. 이를 통해 컴파일 효율이 가장 높은 명령문을 선택하여 프로그래밍을 진행하십시오. 각 C 컴파일러마다 컴파일 효율이 다르기 때문에 컴파일 효율 또한 차이가 발생할 수 있습니다. 임베디드 시스템용으로 성능이 우수한 C 컴파일러를 사용했을 때, 동일한 기능을 어셈블리 언어로 작성했을 때보다 코드 길이와 실행 시간이 5~20% 정도만 더 길어지는 것을 확인할 수 있습니다.  
개발 시간이 촉박한 복잡한 프로젝트의 경우 C 언어를 사용할 수 있지만, MCU 시스템의 C 언어 및 C 컴파일러에 대한 충분한 이해가 필수적입니다. 특히 C 컴파일 시스템에서 지원하는 데이터 유형과 알고리즘에 주의해야 합니다. C 언어는 가장 널리 사용되는 고급 언어이지만, MCU 제조사마다 C 언어 컴파일 시스템이 다르고, 특히 일부 특수 기능 모듈의 동작 방식이 다를 수 있습니다. 따라서 이러한 특징을 제대로 이해하지 못하면 디버깅 과정에서 많은 문제가 발생하여 어셈블리 언어보다 실행 효율이 떨어질 수 있습니다.


3. 마이크로컨트롤러의 간섭 방지 문제 해결 방법
간섭을 방지하는 가장 효과적인 방법은 간섭원을 제거하고 간섭 경로를 차단하는 것이지만, 현실적으로 그렇게 하기가 어려운 경우가 많습니다. 따라서 마이크로컨트롤러의 간섭 방지 능력이 충분한지 여부만 확인할 수밖에 없습니다. 하드웨어 시스템의 간섭 방지 능력을 향상시키는 동시에, 소프트웨어 간섭 방지 기술은 유연한 설계, 하드웨어 자원 절약, 그리고 높은 신뢰성 덕분에 점점 더 주목받고 있습니다.  
마이크로컨트롤러 간섭의 가장 흔한 현상은 리셋입니다. 프로그램이 폭주하는 경우, 소프트웨어 트랩과 워치독을 사용하여 프로그램을 리셋 상태로 되돌릴 수 있습니다. 따라서 마이크로컨트롤러 소프트웨어가 간섭에 강하려면 리셋 상태를 제대로 처리하는 것이 가장 중요합니다.  
일반적으로 마이크로컨트롤러에는 리셋 원인을 판별하는 데 사용할 수 있는 플래그 레지스터가 있습니다. 또한, 사용자가 직접 RAM에 플래그를 저장할 수도 있습니다. 프로그램이 리셋될 때마다 이러한 플래그를 통해 리셋 원인을 파악하고, 각 원인에 따라 해당 프로그램으로 바로 점프할 수 있습니다. 이를 통해 프로그램은 중단 없이 계속 실행될 수 있으며, 사용자는 프로그램 실행 중에 리셋되었다는 사실을 인지하지 못하게 됩니다.  
4. 마이크로컨트롤러 시스템의 신뢰성을 테스트하는 방법
마이크로컨트롤러 시스템 설계가 완료되면, 각 마이크로컨트롤러 시스템 제품마다 다양한 테스트 항목과 방법이 있지만, 반드시 테스트해야 하는 항목들이 있습니다.
 
  • 마이크로컨트롤러 소프트웨어 기능의 완성도를 테스트합니다.
  • 전원 켜짐 및 전원 꺼짐 테스트
  • 노화 시험
  • ESD 및 EFT와 같은 테스트

때로는 사람이 사용하는 동안 발생할 수 있는 손상을 시뮬레이션할 수도 있습니다. 예를 들어, 정전기 방지 능력을 테스트하기 위해 마이크로컨트롤러 시스템의 접촉 포트를 사람의 신체나 옷감에 의도적으로 문지르거나, 전자기 간섭 저항 능력을 테스트하기 위해 고출력 전동 드릴을 마이크로컨트롤러 시스템 가까이에서 사용할 수 있습니다.


요약하자면, 단일칩 마이크로컴퓨터는 컴퓨터 개발 및 응용 분야에서 중요한 위치를 차지하게 되었습니다. 단일칩 마이크로컴퓨터 응용의 중요한 의미는 기존의 제어 시스템 설계 개념과 설계 방식을 근본적으로 변화시켰다는 점입니다.


과거에는 아날로그 회로나 디지털 회로로 구현해야 했던 대부분의 기능들을 이제는 마이크로컨트롤러를 이용한 소프트웨어 방식으로 구현할 수 있게 되었습니다. 하드웨어를 소프트웨어로 대체하는 이러한 제어 기술을 마이크로컨트롤러 기술이라고 하며, 이는 기존 제어 기술에 혁명을 일으킨 것입니다.  
또한 개발 및 적용 과정에서 기술을 숙달하고 효율성을 향상시켜 더 넓은 범위에서 활용될 수 있도록 해야 합니다.        
        아홉
칩 작동 요약
       
칩에서의 연산은 주로 칩 내 레지스터에 대한 연산으로 이루어집니다. 칩의 레지스터는 메모리에 매핑된 고유한 주소를 가지고 있으며, 해당 주소에 대한 연산이 바로 그 레지스터에 대한 연산입니다. 칩을 살펴볼 때는 먼저 타이밍 다이어그램을 확인하고, 각 레지스터의 작동 방식을 이해한 후, 프로그램에서 식별할 수 있는 필요한 포트를 정의하고, 쓰기 연산 절차와 읽기 연산 절차를 작성해야 합니다.


칩에 데이터를 쓰는 방법, 데이터를 읽는 방법, 그리고 어떤 포트를 통해 입력하거나 읽어야 하는지(가장 중요한 부분).


버스를 통해 칩을 연결할 때는 먼저 버스의 프로토콜을 이해해야 합니다. I2C 버스에 연결된 칩은 주로 이 버스를 통해 다른 칩을 제어합니다.


1. 도트 매트릭스의 74hc595 중 하나는 열 선택에 사용되고, 나머지 두 개는 색상 선택에 사용됩니다. 도트 매트릭스는 다이오드의 집합체와 같습니다.


한쪽 끝에 높은 레벨을, 다른 쪽 끝에 낮은 레벨을 가했을 때만 다이오드에 불이 들어옵니다. 다만, 한쪽 끝에 가해지는 전압을 다르게 설정하면 다른 색깔의 불이 들어옵니다.


타이머 동작 모드 선택: 상위 4비트는 타이머 T1을 설정하고, 하위 4비트는 T0을 설정합니다. 각 모드의 마지막 두 자리는 동작 모드를 설정합니다. 두 개의 타이머를 설정할 때는 연산자(|)를 사용하여 선택 여부를 결정해야 합니다. 인터럽트를 사용할 때는 인터럽트 발생 후 지워야 할 항목을 반드시 지워야 합니다.


2. 시리얼 포트 송수신기: 일반적으로 모드 2(자동 초기값 재설정)를 사용하여 전송 속도를 설정합니다. 장치마다 데이터 처리 능력이 다르기 때문에 전송 속도 설정은 주로 저속 장치와의 통신 및 장치 간 통신을 고려하기 위한 것입니다. 인터럽트 플래그 비트는 소프트웨어로 반드시 해제해야 합니다. 시리얼 포트 인터럽트를 설정할 때 송신 또는 수신 시 발생하는 인터럽트 모두 인터럽트 기능에 진입할 수 있으므로 인터럽트 기능 설정에 주의해야 합니다. (일반적으로 호스트 컴퓨터 또는 슬레이브 컴퓨터 중 하나를 선택하여 설정합니다.)


인터럽트를 사용하여 데이터를 전송하려면 처음 인터럽트에 진입하는 방법을 알아야 합니다. 즉, 먼저 한 번 데이터를 전송한 다음 인터럽트에 진입해야 합니다. 한 번에 한 바이트만 전송할 수 있으며, 다음 비트는 TI가 설정된 후에만 전송할 수 있습니다.


3. PCF8591AD 변환기는 4개의 입력 채널을 가지고 있습니다. PCF8591을 읽을 때, 선택된 채널의 입력 전압을 읽습니다. 변환된 데이터는 칩에 저장된 후 읽어냅니다. 읽을 때는 먼저 칩의 주소를 기록하고, 그 다음 장치의 서브 주소(0x40|채널 번호)를 기록한 후 데이터를 읽습니다.


4. Da 변환은 먼저 장치 주소를 칩에 기록하고, 그 다음 하위 주소(0x40)를 기록하고, 마지막으로 변환할 디지털 값을 기록하는 것입니다. 장치 주소 칩 정보가 도입됩니다.


5. LCD 디스플레이의 경우, 데이터가 기록되고 표시되면 연속적인 새로 고침 없이 항상 표시됩니다. 데이터를 변경하려면 다시 입력해야 합니다.


6. DS1302 클록 칩의 경우, 데이터 읽기 시 첫 번째 데이터는 8번째 클록의 하강 에지에서 읽고, 데이터 쓰기 시에는 다음 출력을 준비합니다. 프로그램의 데이터 쓰기 방식과 반환 값의 위치에 주의해야 합니다.


7. 먼저 DS1302의 레지스터를 지정한 다음 데이터를 기록합니다. 칩 데이터의 레지스터는 주소를 나타냅니다. (쓰기 방지 프로그램에 대해 아직 완전히 이해하지 못했습니다. 항상 쓰기 작업이 이루어지는 것 아닌가요? 왜 쓰기 방지가 여전히 켜져 있는 거죠?)


(이전 글쓴이의 설명에 따르면, 초기화 시간 이후에 플래그를 설정할 수 있다고 합니다. 이 플래그가 있으면 초기화 시간을 따로 설정할 필요가 없습니다. 하지만 전원이 꺼지면 MCU의 RAM에 이 플래그가 저장되지 않으므로, DS1302의 RAM을 사용하여 플래그를 저장하고 전원을 켠 후에 읽어와야 합니다. 저도 초보자이고 최근에 DS1302를 사용해 보려고 하는데, 이 방법이 맞는지 잘 모르겠고 아직 구현도 해보지 않았습니다. 더 자세한 내용을 공유해 주시면 감사하겠습니다.)


8. 나중에 잊어버릴 경우를 대비하여 초기화 정보를 적어두는 것이 좋습니다. 읽기 또는 쓰기 시 최하위 비트 또는 최상위 비트 중 어느 비트가 먼저 연산되는지에 주의해야 하며, 이는 타이밍 다이어그램을 통해 판단할 수 있습니다.


9. 적외선 송수신기는 수신 시 두 개의 하강 에지 사이의 시간 간격을 기준으로 신호가 높은 레벨인지 낮은 레벨인지 판단합니다. 프로그램을 작성할 때는 먼저 타이머를 사용하여 시간을 측정하고 저장한 다음, 이를 이진수로 변환해야 합니다 (이러한 프로그램을 작성하는 방법에 대한 자세한 내용은 관련 자료를 참고하세요).


10. 스테퍼 모터: 주로 스위칭 용도로 사용됩니다. 스테퍼 모터는 속도가 증가함에 따라 토크가 감소합니다. 주로 공작기계에서 가공된 부품의 자동 이송에 사용되며, 높은 정밀도가 요구되는 제어 분야에도 사용될 수 있습니다.


스테퍼 모터는 전기 펄스 신호를 각 변위 또는 선형 변위로 변환하는 개루프 제어 소자입니다. 과부하가 없는 조건에서 모터의 속도와 정지 위치는 펄스 신호의 주파수와 펄스 개수에만 의존하며 부하 변화의 영향을 받지 않습니다. 스테퍼 드라이버가 펄스 신호를 수신하면 스테퍼 모터를 설정된 방향으로 고정된 각도(스텝 각도)로 회전시킵니다. 회전은 고정된 각도로 단계적으로 진행됩니다. 펄스 개수를 제어하여 각 변위를 정밀하게 위치 제어할 수 있으며, 동시에 펄스 주파수를 제어하여 모터 회전 속도와 가속도를 조절하여 속도 제어가 가능합니다.


11. 서보 모터: 서보 모터는 서보 시스템에서 기계 부품의 작동을 제어하는 ​​모터를 말합니다. 모터를 보조하는 간접 동력 전달 장치입니다. 서보 모터는 속도와 위치 정밀도를 매우 정확하게 제어할 수 있으며, 전압 신호를 토크와 회전 속도로 변환하여 제어 대상을 구동합니다. 서보 모터의 회전 속도는 입력 신호에 따라 제어되며 빠른 응답 속도를 가집니다. 자동 제어 시스템에서 액추에이터로 사용되며, 작은 전기기계적 시정수, 높은 선형성, 낮은 시동 전압 등의 특징을 가지고 있습니다. 수신된 전기 신호를 모터 축의 각 변위 또는 각속도 출력으로 변환할 수 있습니다. 서보 모터는 DC 서보 모터와 AC 서보 모터의 두 가지 유형으로 나뉩니다. 주요 특징은 신호 전압이 0일 때 회전하지 않고, 토크가 증가함에 따라 회전 속도가 일정한 속도로 감소한다는 것입니다. DC 모터는 적용 범위가 넓어 주로 소형 차량에 사용됩니다.


12. 한자 개요:
모니터나 프린터에 한자를 출력하기 위해서는 그래픽 기호에 따라 한자를 도트 매트릭스 형태로 디자인하고, 이에 해당하는 도트 매트릭스 코드(글리프 코드)를 얻어야 합니다.


컴퓨터에서 한자를 표현하는 데 사용되는 통일된 인코딩 방식은 내부 코드(예: 국가 표준 코드)라고 하는 한자 인코딩을 생성하며, 이 내부 코드는 고유합니다(문자의 식별 번호와 동일). 한자 입력을 용이하게 하기 위해 생성된 한자 인코딩은 입력 코드이며, 이는 한자의 외부 코드입니다. 입력 코드는 인코딩 방식에 따라 다르며 다양합니다. 한자를 표시하고 인쇄하기 위해 생성된 한자 코드는 글리프 코드입니다. 컴퓨터는 한자 내부 코드를 통해 글꼴 모델 라이브러리에서 해당 한자의 글리프 코드를 찾아 변환합니다.


카메라 내 코드


국가 표준 코드 규정에 따르면 각 한자는 특정한 이진 코드를 가지고 있지만, 이 코드는 컴퓨터 내부에서 처리할 때 ASCII 코드와 충돌하는 문제가 있습니다. 이 문제를 해결하기 위해 국가 표준 코드의 각 바이트 첫 번째 자리에 1을 더합니다. ASCII 코드는 7비트만 사용하기 때문에 첫 번째 자리의 "1"을 한자 코드를 식별하는 표식으로 사용할 수 있습니다. 컴퓨터는 첫 번째 자리가 "1"인 코드를 처리하면 한자 정보로 인식하고, 첫 번째 자리가 "0"인 코드를 처리하면 ASCII 코드로 인식합니다. 이렇게 처리된 국가 표준 코드(내부 코드)가 바로 내부 코드입니다.


이 "口" 문자의 "."을 "0"으로 바꾸면 "口"의 문자 코드를 매우 명확하게 확인할 수 있습니다: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 0H 0000H 0000H. 컴퓨터가 "口"를 출력하려고 할 때, 먼저 디스플레이 폰트 라이브러리의 첫 번째 주소를 찾고, "口"의 내부 코드를 기반으로 계산한 다음, "口"의 문자 코드를 찾습니다. 그리고 문자 생성기의 제어를 통해 해당 문자 코드(이진수)에 따라 화면을 순차적으로 스캔합니다. 이진 코드가 "0"인 부분을 스캔하고, "1"인 부분을 스캔하여 강조 표시함으로써 "口"라는 문자 패턴을 얻을 수 있습니다.


중국어 문자 폰트는 국가 표준 코드 순서대로 배열되어 바이너리 파일 형태로 메모리에 저장되며, 이를 중국어 문자 폰트 라이브러리(또는 중국어 문자 글리프 라이브러리, 중국어 문자 라이브러리라고도 함)라고 합니다.


두 가지 인코딩 방식이 있습니다. 자세한 내용은 헤더 파일을 참조하십시오.


GB1616.h//------------------ 중국어 문자 글꼴 데이터 구조 정의 ------------------------//structtypFNT_GB16 // 중국어 문자 글꼴 데이터 구조 {unsignedcharIndex[3]; // 중국어 문자 내부 코드 인덱스 unsignedchar Msk[32];// 도트 매트릭스 코드 데이터 }; ////////////////////////////////////////////////////////////////////////////////////// 중국어 문자 폰트 테이블//// 중국어 문자 라이브러리: 송나라 16.dot, 왼쪽 최상위 비트를 기준으로 가로로 정렬, 데이터 배열: 왼쪽에서 오른쪽, 위에서 아래////////////////////////////////////////////////////////////////////////////////////////////////////////////////conststructtypFNT_GB16 codeGB_16[]= //데이터 테이블{/*---------------------------------------------------------------------------------;소스 파일/텍스트 :Xu;width×height (pixels):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,0x00,
 
이 구조는 매우 간단합니다. 하나는 내부 코드이고, 다른 하나는 도트 매트릭스 시퀀스입니다. 이전의 도트 매트릭스 라이브러리는 내부 코드 순서대로 배치되었기 때문에 내부 코드 인덱스가 필요하지 않았습니다. 만약 한자만 일부 배치하는 경우에는 내부 코드 인덱스가 필요했습니다. (앞의 한자 "Xu"는 "Xu"를 출력할 때 해당 단어의 도트 매트릭스 시퀀스를 찾기 위한 것입니다. 이 도트 매트릭스 시퀀스는 제가 직접 작성한 것입니다. 1602 칩으로 표시할 때는 칩 메모리에 영문 도트 매트릭스 시퀀스가 ​​저장되어 있으므로 따로 작성할 필요가 없습니다.) 일반적으로 내부 코드에는 2바이트면 충분합니다. 1바이트를 더 사용해야 하는 경우에는 뒤에 0을 추가하면 됩니다. 이렇게 하면 한자 문자열을 한자 내부 코드에 직접 배치할 수 있습니다.


codeGB_16[k].Index[0]은 typeFNT_GB16 구조체의 codeGB_16이라는 배열이 있음을 나타냅니다. codeGB_16[k]는 배열의 k+1번째 멤버입니다. index는 typeFNT_GB16 구조체의 멤버이므로 codeGB_16[k].Index로 참조할 수 있습니다. 동시에 index는 배열이므로 인덱싱할 수 있습니다[0]. if((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1]))에서 &&는 논리 AND 연산자로, && 기호 양쪽의 값이 모두 참이어야 함을 의미합니다. &&의 값만 참이 되므로, true && true = true입니다. 이 문장은 codeGB_16[k].Index[0]==c[0]과 codeGB_16[k].Index[1]==c[1]이 동시에 성립함을 의미합니다. 만약 다음 문장이 실행된다면, codeGB_16[]은 구조체 배열이고, codeGB_16[k].Index[0]은 구조체 배열의 k번째 구조체 인덱스 멤버의 0번째 요소 값을 의미합니다.  
      13. 12864 LCD:

각 표시점은 이진수에 대응하며, 1은 켜짐, 0은 꺼짐을 의미합니다. 이러한 도트 매트릭스 정보를 저장하는 RAM을 디스플레이 데이터 메모리라고 합니다. 특정 그림이나 한자를 표시하려면 해당 도트 매트릭스 정보를 해당 저장 장치에 기록해야 합니다.  
그래픽 RAM의 주소 카운터(AC)는 수평 주소(X축)만 자동으로 1씩 증가시킵니다. 수평 주소가 ​​0FH가 되면 00H로 초기화됩니다. 하지만 수직 주소는 캐리 발생 시 자동으로 증가시키지 않습니다. 따라서 여러 데이터를 연속적으로 기록할 경우, 프로그램은 수직 주소를 초기화해야 하는지 여부를 판단해야 합니다.


14. 드로잉 RAM(GDRAM)

도면 표시용 RAM은 128×8바이트의 메모리 공간을 제공합니다. 도면 RAM을 변경할 때는 먼저 가로 및 세로 좌표값을 연속적으로 기록한 다음, 2바이트의 데이터를 도면 RAM에 기록합니다. 주소 카운터(AC)는 가로 주소(X 주소)를 자동으로 1씩 증가시킵니다. 가로 주소가 0XFH가 되면 00H로 재설정됩니다. 세로 주소는 자동으로 1씩 증가하지 않습니다. 도면 RAM에 데이터를 기록하는 동안에는 도면 표시 장치를 꺼야 합니다.

 
[cpp] 뷰 플레인 복사 // 중국어 문자 표시 voiddispString(uchar X, Y, uchar *msg) // X는 몇 번째 행이고 Y는 몇 번째 열인지 지정합니다. msg는 중국어 문자입니다. {if(X==0) write_data(*msg++); } // 한자 표시 }}/////////////////////////////////// ///////////////// /////////////////// 이미지 표시 voiddisppicture(uchar code *adder){ uint i,j;//*******화면 상단 절반 내용 설정 for(i=0;i<32;i++)//화면 상단 절반의 32개 열 주소 { write_com(0x80 + i);//세로 주소 설정 VERTICALADD write_com(0x80);//가로 주소 설정 HORIZONTAL ADD for(j=0;j<16;j++) { write_data(*adder); adder++; }}//************화면 하단에 콘텐츠 설정 표시 for(i=0;i<32;i++) //{ write_com(0x80 + i); //세로 주소 설정 VERTICALADD write_com(0x88); //가로 주소 설정 HORIZONTAL ADD for(j=0;j<16;j++){write_data(*adder);adder++;} }}
 
C 언어에서는 정의된 변수에 대해 메모리 공간이 자동으로 할당되며, 변수의 주소는 변수 이름 그 자체입니다. 이 이름을 통해 메모리에서 기존 데이터를 불러올 수 있고, 계산을 통해 새로운 데이터를 얻을 수도 있습니다. 그러나 어셈블리 언어에서는 프로그래머가 직접 저장 공간을 지정하고 계산을 위해 데이터를 어큐뮬레이터에 저장해야 합니다. 모든 단계에서 프로그래머의 조작이 필요합니다. C 언어에서는 이러한 모든 과정이 컴파일러에 의해 자동으로 처리됩니다.




15. 유용한 질문과 답변 몇 가지

① 마이크로컨트롤러 C 언어에서 변수의 메모리 할당은 어떻게 이루어지나요? 컴파일러가 컴파일 과정에서 할당 및 재사용 코드를 지능적으로 추가하는 것인가요? 핵심은 제가 작성한 프로그램에서 메모리 오버플로 오류가 발생하지 않도록 하는 방법입니다. 재귀 연산을 수행하는 경우, 필요한 메모리 양을 직접 계산하기가 어렵습니다.




② 마이크로컨트롤러용 C 언어는 변수 정의에 제약이 있을까요? 예를 들어, 부동 소수점 데이터의 곱셈과 나눗셈 연산은 어셈블리 언어로 작성해야 하는데, 코드가 상당히 복잡합니다. C 언어로 직접 작성하면 너무 간단해지지 않을까요?




③ 마이크로컨트롤러의 C 언어에서 생성된 헥스 파일에서 명령어 ROM과 데이터 ROM의 주소 분포는 컴파일러에 의해 자동으로 할당되나요? 사용자가 직접 지정할 수 있나요?




답변 1: 먼저 C 언어로 작성된 마이크로컨트롤러 프로그램이 (c51.exe로 추정되는) 한 프로그램에 의해 컴파일됩니다. 컴파일이 완료되면 변수들의 저장 공간 크기는 정해지지만, 구체적인 주소는 아직 할당되지 않습니다 (주소는 부동 소수점입니다). 다음으로, (a51.exe로 추정되는) 다른 프로그램이 연결됩니다. 연결이 완료되면 구체적인 주소가 결정됩니다.  
변수가 너무 많으면 컴파일러는 데이터 세그먼트가 너무 크다는 경고 메시지를 표시합니다. 메모리 오버플로 오류를 방지하려면 스택 오버플로가 발생하는지 여부를 확인해야 하며, 이는 경험에 따라 달라집니다.




마이크로컨트롤러용 C 언어는 일반적으로 재귀를 금지하며, 재귀 연산은 대개 피해야 합니다. 마이크로컨트롤러는 PC가 아니므로 재귀 연산은 속도에 영향을 미치기 때문입니다. 재귀 연산이 필요한 경우 DSP 칩을 사용하는 것이 더 적합합니다. 요컨대, 적절한 칩을 선택할 수 있어야 합니다.




답변 2: 변수의 크기(자릿수)는 일반적으로 칩 누산기의 자릿수와 같습니다. 예를 들어, 51은 8비트 마이크로컨트롤러이기 때문에 일반적으로 8비트를 사용합니다.

마이크로컨트롤러는 비트 변수를 정의할 수 있지만 비트 배열은 정의할 수 없습니다. C 언어로 작성하는 것은 간단해 보이지만 실제로는 가장 많은 양의 코드를 생성합니다. 제어에 사용되는 마이크로컨트롤러는 부동 소수점 연산을 거의 사용하지 않는데, 이는 속도가 느릴 뿐만 아니라 번거롭고 공간도 많이 차지하기 때문입니다. DSP 칩을 사용한다면 적절한 하드웨어 구조를 갖추는 것이 훨씬 효율적일 것입니다.




답변 3: 일반적으로 자동으로 할당됩니다. C 언어와 어셈블리 언어를 혼합하여 프로그래밍하거나 Keil C를 사용하여 온라인으로 어셈블할 수 있습니다. 칩과 외부 간의 데이터 교환은 포트를 통해 이루어집니다.



회사 전화번호: +86-0755-83044319
팩스: +86-0755-83975897
이메일: 1615456225@qq.com
QQ: 3518641314 리 관리자

QQ: 332496225 Qiu 관리자

주소: 중국 선전시 룽화신구 민즈대로 1079번지 전타오테크놀로지빌딩 C동 809호

whatsapp

서비스 핫라인

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950