연구 노트

    [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 입니다. 그리고 타이..

    헤더 파일 중복 방지 왜 필요할까?

    헤더파일 중복을 방지하기 위해서 아래와 같은 형식을 사용합니다. #ifndef _XXXX_H #define _XXXX_H ... #endif 의미는 잘 알겠으나, 한가지 의문점이 있습니다. 일반적으로 헤더 파일에는 선언(declaration)을 합니다. 그런데 선언은 중복 되어도 에러가 발생하지 않습니다. 중복 에러가 발생할 수 있는 것은 정의(definition)입니다. 따라서 헤더 파일의 본래 목적대로 선언만을 적어놓는다면 중복 오류가 발생할 일이 없습니다. 그렇다면 왜 중복 방지를 해야할까요? 검색을 해보니 이 글에서 든 예시에서 헤더 파일에 구조체를 정의하는 것을 발견 하였습니다. 구조체를 포함하고 있는 헤더 파일에 중복 선언 방지 처리를 해놓지 않으면 문제가 발생할 수 있게 됩니다. 헤더 파일에..

    아두이노 설치 및 환경 설정

    아두이노 설치 및 환경 설정

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