연구 노트/Embedded

    [MCS-51] Keil 컴파일러 C51 시험버전 구하는 방법

    [MCS-51] Keil 컴파일러 C51 시험버전 구하는 방법

    이 글에서는 MCS-51 계열 MCU 펌웨어 개발을 위한 상용 툴인 Keil 사의 컴파일러 C51 시험 버전을 구하는 방법을 설명합니다. MCS-51 계열 MCU 펌웨어를 개발하기 위해서는 전용 컴파일러 및 IDE가 필요합니다. 무료로 사용할 수 있는 컴파일러는 SDCC가 있습니다. 이를 eclipse IDE와 함께 사용한다면 훌륭한 개발환경이 갖춰지게 됩니다. 유료로 사용해야 하는 툴로는 Keil 사의 C51이나 IAR SYSTEMS 사의 IAR Embedded workbench for 8051등이 대표적입니다. 개인이 사용하기에는 꽤 비싼 사용료를 내야 하지만 산업 현장에서는 많이 사용되고 있습니다. 이 중 Keil 사의 C51 시험 버전을 다운로드받는 방법에 대해 알아보겠습니다. 과정 1 Keil ..

    [MCS-51] Arduino를 이용한 AT89S52 프로그램 다운로드

    [MCS-51] Arduino를 이용한 AT89S52 프로그램 다운로드

    AT89S52는 SPI(Serial Peripheral Interface) 통신으로 프로그램을 다운로드 할 수 있습니다. SPI 통신을 위한 별도의 장비를 이용할 수도 있지만 혹시 주변에 아두이노(Arduino)가 있다면 그것으로 hex 파일을 프로그램 메모리에 쓸 수 있습니다. 이 방법은 모든 MCS-51 계열 MCU에 사용할 수 있는 방법은 아닙니다. 칩 내부에 플래시 메모리를 내장한 모델에 적용할 수 있습니다. 참고로 프로그램은 약 1,000회 정도 덮어쓸 수 있다고 합니다. 개발 환경 및 준비물 이 과정은 Windows 10 환경에서 진행하였고 사용한 재료들은 아래와 같습니다. 아두이노 우노 점퍼선 6개 (전원 용도 2개, SPI 통신 용도 3개, RST 용도 1개) 최소 설계 회로로 구성된 AT..

    [MCS-51] AT89S52 특징

    [MCS-51] AT89S52 특징

    Microchip(구 Atmel)사의 MCS-51(8051) 계통 MCU인 AT89S52의 주요 특징은 아래와 같습니다. MCS-51 계통과 호환되는 구조 8K Bytes의 In-System Programmable 플래시 메모리 동작 전원 범위는 4.0V에서 5.0V 까지 0Hz 부터 33 MHz까지 완전 정적인 작동 3 단계 프로그램 메모리 잠금 256 x 8-bit 내장 RAM 제어가능한 I/O 핀 32개 16bit 타이머/카운터 3개 인터럽트 소스 8개 Full duplex를 지원하는 UART 직렬 채널 저전력 유휴(Idle)과 절전( power-down) 모드 와치독 타이머(Watch dog timer) 데이터 포인터 2개 Power-off 플래그 위 정보는 Microship사의 공식 홈페이지에서..

    [MCS-51] MCS-51 기본 구조

    [MCS-51] MCS-51 기본 구조

    기본적인 MCS-51(8051) 칩에는 다음과 같은 것들이 내장되어 있습니다. 일반 CPU 기능 병렬 I/O 포트 (Perallel I/O port) 직렬 포트 (Serial port) 인터럽트 제어기 (Interrupt) 타이머/카운터 (Timer/Counter) ROM RAM 특수 기능 레지스터 (SFR, Special Function Register) 위 구성도는 Microchip(구 Atmel)사에서 생산하는 MCS-51 계열 MCU중 AT89S52의 것 입니다. 기본 8051에는 없지만 이 칩에 추가된 것은 아래와 갔습니다. EPROM을 대신하는 플래시(Flash) 메모리 와치독 타이머 (Watch dog timer) 내장된 플래시 메모리에 프로그램을 쓰기 위한 ISP(In-System Prog..

    [STM32] UART 통신 수신 코드 구현 방법

    [STM32] UART 통신 수신 코드 구현 방법

    CubeMX에서 사용하고자 하는 UART 페리페럴 설정을 합니다. 저는 프로젝트를 만들면 사용자에게 제안하는 기본 모드 설정(Default mode)을 사용한 상태입니다. 기본 설정은 USART 3번 채널을 사용합니다. 기본 설정 상태에서는 UART관련 인터럽트를 사용할 수 없습니다. 따라서 데이터 송수신과 관련한 인터럽트를 발생시키도록 하는 설정이 필요합니다. [NVIC Settings] 탭에서 "USART3 global interrupt"를 활성화 한 뒤 저장합니다. (.ioc 파일을 저장하면 자동을 code generate 될 것입니다.) 그다음은 데이터 수신이 이루어졌을 때 인터럽트를 발생시키도록 설정하는 함수 HAL_UART_Receive_IT()를 추가합니다. 위치는 main 함수 안, whi..

    시리얼 데이터 통신을 위한 프로토콜

    시리얼 데이터 통신을 위한 프로토콜

    장치들 사이에서 통신을 할 때 데이터를 어떻게 전달해야 하는가에 대해서 정리해 보았습니다. 아래와 같은 데이터가 있다고 가정해 봅니다. 네모 한 칸은 1Byte를 의미합니다. 주고받고자 하는 데이터 길이가 항상 같으면 좋겠습니다만, 그렇지 않은 경우가 많을 것입니다. 때로는 길이가 짧을 수도 있고 길 수도 있습니다. 보내는 데이터마다 길이가 제각각이라면, 받는 쪽에서는 어디서부터 어디까지가 이번에 들어온 데이터인지를 알 수 없는 문제가 생깁니다. 그렇기 때문에 데이터가 어느 시점에 시작하고 끝나는가를 알 수 있어야 합니다. 우선 시작을 의미하는 값을 데이터를 보내기 전에 추가합니다. 일반적으로 STX(0x02, Start of Text)를 사용합니다. 데이터의 말단에는 끝을 의미하는 값을 추가합니다. 일..

    PWM으로 스텝모터 제어시 꼭 확인합시다.

    요약: ARR, CCR 값이 설정 가능한 최대값을 넘어가지 않는지 확인합시다. 예를 들어 Core 클럭이 96MHz이고, 타이머의 Prescale 값을 96으로 설정하면(실제로는 설정할 때는 96에서 1이 빠진 95가 되어야 합니다.) Timer 내부에 공급되는 클럭은 1MHz가 됩니다. 이 때, 초당 8펄스 속도로 신호를 공급하고자 했을 때 아래와 같이 값을 설정하게 됩니다. ARR = (1000000 / 8) - 1 = 124999 CCR = (125000 / 2) - 1 = 62499 언듯보면 문제가 없는 것 같습니다. 하지만 모터는 아예 회전을 하지 않았습니다. 과연 무엇이 잘못되어 그런 것일까요? 답은 ARR 설정 값에 있습니다. 제가 사용한 MCU 는 STM32H743ZI 입니다. 그리고 타이..

    아두이노 설치 및 환경 설정

    아두이노 설치 및 환경 설정

    A. 설치 파일 다운로드아두이노 홈페이지 (https://arduino.cc)에 접속합니다.홈페이지 상단 메뉴에서 SOFTWARE > DOWNLOAD 를 찾아서 클릭합니다."Download the Arduino IDE" 항목을 찾아 자신의 운영체제(OS)에 맞는 설치 파일 링크를 클릭합니다. 후원하고자 하는 경우 금액을 선택 후 "CONTRIBUTE & DOWNLOAD"를 클릭합니다. 무료로 사용할 경우 "JUST DOWNLOAD"를 클릭하여 설치파일을 다운로드 합니다. B. 아두이노 IDE(통합 개발 환경) 설치설치 파일을 다운로드한 경로를 열어서 설치 파일을 실행합니다. 설치를 진행합니다. (특별한 경우가 아니라면 기본값으로 설치합니다.) "I Agree" 클릭 "Next" 클릭 "Install" 클..