Language/AVR 16

STM32 : RC Car

이번에는 블루투스를 이용한 RC Car를 만들어 봤습니다. RC CarPinout & ConfigurationRC Car 구현을 위해 STM32에서 사용된 핀은 아래와 같습니다.Timer 3을 사용하였고, Channel은 두 개의 채널을 사용하였습니다.또한, 블루투스 모듈을 사용하기위해 USART1을 사용하였고, USART2는 PC에서 RC Car를 테스트하기 위해 사용되었습니다.  블루투스 사용을 위해 USART1은 Rate를 9600으로 설정한 것을 확인할 수 있습니다.  타이머 설정은 위의 내용과 같이 Clock 및 PWM Channel을 선언하였습니다.    RCC와 SYS는 위와 같이 설정하였습니다.  Clock Configuration은 위와 같이 설정하였습니다.  Detail Code위의 코..

Language/AVR 2024.09.27

STM32 : Button, Timer

Button 오늘은 STM32를 통해 버튼을 제어할 예정이다. PC13을 아래와 같이 풀업으로 저장한다. 입력 데이터를 아래와 같이 선언 후, while문 내에 다음과 같이 코드를 작성한다.  while (1) { if(!(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1); } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0); }// inputData = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } 코드를 돌려..

Language/AVR 2024.09.13

STM32 : UART

UARTRx 이번에는 STM32를 통해 UART를 제어하려 한다. 우선 UART를 제어하기 위해서 아래와 같이 UART2를 킨다. 핀은 다음과 같이 자동적으로 배정된다.   UART를 설정하고, 코드를 작성하려 하면 아래와 같이 자동적으로 관련 헤더파일이 선언된 것을 확인할 수 있다. 메인 코드는 아래와 같이 작성하였다. /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_UART_Receive(&huart2, &rxData[0], 4, 100); HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(200); /* USER CODE END WHILE */ /* USER CODE ..

Language/AVR 2024.09.12

STM32 : LED

STM32 새로운 프로젝트를 생성할 때에는 아래와 같은 MCU를 선택한다.더블클릭한 후 프로젝트 이름을 설정하고 Finish를 누른다. 왼쪽 배너에서 RCC를 선택 후 HSE를 아래와 같이 설정한다. 그다음, 배너에서 SYS를 선택한 후 Serial Wire를 선택한다. 설정을 하고나면 아래와 같이 핀설정이 된 것을 확인할 수 있다.상단의 배너에서 Clock Configuration을 선택한 후, 아래와 같이 설정한다.   상단 배너에서 Project Manager를 선택한 후, Code Generator에서 첫번째에 체크를 한 후 진행한다. 저장(Cntr + S)를 누르면 아래와 같이 문구가 뜨며 Yes를 선택한다.  새 창에서 File 선택 후 아래와 같이 Configuration를 선택한다. Con..

Language/AVR 2024.09.12

ATmega 128 : CLCD, I2C

ATmega128을 활용하여 LCD를 제어해보려한다. 기본적인 명령어는 아래의 표와 같다. LCD를 제어하기위한 헤더파일의 코드는 아래와 같다. 헤더파일의 코드 내에는 주로 LCD를 다룰 함수들과 define으로 이루어져있다.#ifndef LCD_H_#define LCD_H_#define F_CPU 16000000UL#include #include #include #define LCD_DATA_DDR DDRF#define LCD_DATA_PORT PORTF#define LCD_DATA_PIN PINF#define LCD_RS_DDR DDRE#define LCD_RW_DDR DDRE#define LCD_E_DDR DDRE#define LCD_RS_PORT PORTE#define LCD_RW_PORT..

Language/AVR 2024.09.10

ATmega 128 : 4-Digit FND 동작 구현

이번에는 7 segment가 4개로 구성된 4-Digit FND 동작을 구현해보았다. 부품은 3461AS-1을 사용하였고, 부품에 대한 내용은 아래와 같다.  위 그림을 보아 알 수 있듯이 4-Digit FND는 Common Cathode 방식으로 동작되며 12, 9, 8, 6pin을 Ground에 묶어서 동작을 구현한다. 이전과는 달리, 이번에는 PORT G를 사용하였다. PORT G에는 12, 9, 8, 6번 핀이 연결되어 있으며, 방향설정을 주 목적으로 다룬다. void FND_Display(uint16_t data) // 4자리니까 16비트{ static uint8_t position = 0; // Digit position 변수 설정 uint8_t fndData[]= { 0x3F, 0x06,..

Language/AVR 2024.05.30

ATmega 128 : FND 동작 구현

이번에는 FND (7 Segment)의 동작을 구현해보았다. FND란. Flexible Numeric Display의 약자로 LED의 숫자를 나타내는 부품을 의미한다. 일반적으로 Common Anode와 Common Cathode 방식으로 FND는 구현되는데, 이번에는 Common Cathode 방식으로 다룰 예정이다. Common Cathode는 공통적인 음극(-)를 갖는 구조를 의미한다. 이와 반대인 Common Anode 방식은 공통 양극(+)이라고 생각하면 된다. 이번에 다루게 될 7 segment 소자는 5161AS 소자로, Circuit Diagram은 아래와 같다. 7 segment의 핀번호는 아래와 같다.  DP 제외 A~G까지의 구현을 위해 각각 알맞는 번호의 Pin에 연결을 한 후, 3..

Language/AVR 2024.05.29

ATmega 128 : Led Bar 버튼 인터럽트 동작 구현

이번에는 인터럽트를 사용하여 LED Bar를 제어하는 동작을 구현해보겠다. 인터럽트(Interrupt)란, 외부에서 이벤트가 발생하였을 때 동작하던 프로그램을 잠시 중단하고 해당 이벤트를 동작한 후 다시 프로그램의 동작으로 복귀하는 것을 의미한다. 이벤트가 발생하면 마이크로컨트롤러는 현재 실행 중인 작업을 중단하고 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)이라고 불리는 특정 함수를 실행한다. ATmega128a Datasheet내 인터럽트에 관한 내용은 다음과 같다.  인터럽트가 발생하였을 때 수행하는 동작은 ISR(Interrupt Service Routine) 함수에서 구현된다. 해당 동작을 수행하기 위한 코드는 아래와 같다.#define F_CPU 16000000..

Language/AVR 2024.05.29

ATmega 128 : Led Bar 버튼 3개 동작 구현

이번에는 세개의 버튼을 사용하여 LED Bar를 제어할 예정이다. DDRC 포트에는 LED Bar를, DDRD 포트에는 세개의 버튼을 제어할 수 있도록 설정하였다. 아래의 코드를 확인해보면 "flag"가 선언된 것을 확인할 수 있다.  "flag" 변수는 초기에 0으로 설정되며, 버튼 3이 눌렸을 때 1로 설정된다. 이후에는 특정 조건에 따라 해당 플래그를 검사하고 적절한 동작을 수행한다. 세번째 버튼이 눌리게 된다면 flag의 값은 1로 설정되며, if(flag == 1)의 동작을 수행한다.#define F_CPU 16000000UL#include #include int main(void){ DDRC = 0xff; // LED 출력 방향 설정 DDRD = 0x00; // Button 입력 방향 설정' ..

Language/AVR 2024.05.29

ATmega 128 : Led Bar 버튼 동작 구현

이번에는 Led Bar를 버튼을 사용하여 동작을 구현할것이다. 동작을 구현할 코드는 다음과 같다. #define F_CPU 16000000UL#include #include int main(void){ DDRC = 0xff; // DDRC는 항상 출력한다. DDRD &= ~(1 LED Bar가 달려있는 DDRC는 항상 출력으로 하여 포트의 동작에 따라 LED가 동작할수있도록 설정하였다. 여기서 버튼은 Pull up 저항의 원리를 사용하여 진행하였다. Pull up 저항은 평상시에(스위치가 눌리지 않았을 때에) 입력된 상태를 유지하며, 스위치가 눌렸을 때에 전압을 차단하는 원리로 작동된다.

Language/AVR 2024.05.28
728x90