전체 글 46

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

SoC : 기초

Create Block Design을 클릭하고 아래와 같은 블럭을 만들었다.  위 블럭을 토대로 코드를 구현하고 싶다면,Create HDL Wrapper를 클릭하면 아래와 같은 기본적인 코드가 자동으로 형성되는 것을 확인할 수 있다.module micro_blaze_hello_wrapper (reset, sys_clock, usb_uart_rxd, usb_uart_txd); input reset; input sys_clock; input usb_uart_rxd; output usb_uart_txd; wire reset; wire sys_clock; wire usb_uart_rxd; wire usb_uart_txd; micro_blaze_hello micro_blaze_..

Language/Verilog 2024.09.09

Vivado : Basys3 Servo motor, Analog 제어, 가변 저항, 포토 센서(조도 센서)

Servo Motor이번에는 서보모터를 제어할 예정이다. 서보모터 관련 내용은 아래의 사진의 내용과 같다.서보모터를 동작시킬 탑모듈의 코드는 아래의 내용과 같다. 코드를 살펴보면, 0도, 90도, 180도 그리고 일정 각도마다 움직일 수 있도록 선언을 한 것을 확인할 수 있다. module servo_motor_pwm_top( input clk, reset_p, input [3:0] btn, output motor_pwm, output [3:0] com, output [7:0] seg_7); reg [31:0] clk_div; always @(posedge clk or posedge reset_p)begin if(reset_p)clk_div = 0..

Language/Verilog 2024.08.02

Vivado : RGB LED, DC motor

RGB LED RGB를 나타내는 LED를 제어할 예정이다. LED를 제어할 탑모듈의 코드는 아래와 같다. pwm_100 step 컨트롤러는 이전글을 참고하면 된다.  Vivado : PWM 제어PWM LED의 밝기는 Duty rate에 따라 달라진다. LED 뿐만 아닌 모터의 경우에는 속도도 달라진다. PWM을 제어해 보기 위해 아래와 같은 코드를 구현해 보았다. 우선 Duty를 100단계로 설정하기 위하여 dutjangdong.tistory.com LED를 제어할 pwm의 컨트롤러 코드는 아래의 내용과 같다. 사용자가 임의로 주파수를 조절할 수 있도록 parameter를 먼저 선언하였다.module pwm_Nstep_freq#( parameter sys_clk_freq = 100_000_000, ..

Language/Verilog 2024.08.01

Vivado : PWM 제어

PWM LED의 밝기는 Duty rate에 따라 달라진다. LED 뿐만 아닌 모터의 경우에는 속도도 달라진다. PWM을 제어해 보기 위해 아래와 같은 코드를 구현해 보았다. 우선 Duty를 100단계로 설정하기 위하여 duty에 7비트를 선언하였다. 첫 번째 100 분주기는 1us 단위로 pulse를 준다.그다음 두 번째 100 분주기는 1us 단위의 pulse를 100us 주기로 하고, duty값에 따라 변화하는 파형을 보기 위해 아래와 같이 총 10,000 분주기를 설정하였다. //LED 밝기 제어 컨트롤러module pwm_100step( input clk, reset_p, input [6:0] duty, // 100단계 만큼 output pwm); reg [6:0] c..

Language/Verilog 2024.07.31

Vivado : Basys3 종합 시계 프로젝트 (타이머, 스톱워치, 시계)

이번에는 여러 기능을 갖춘 종합 시계 프로젝트를 진행하려고 한다.종합 시계 프로젝트 구현할 종합시계의 기능은 일반 시계 기능, 스톱워치 기능 그리고 타이머 기능을 갖는다. 일반 시계 기능에서는 분과 초를 제어할 수 있으며 59분 59초가 넘을 시 00분 00초로 다시 리셋이 되는 특징을 지닌다. 스톱워치 기능에서는 기본적으로 ms단위로 시계가 흐르며, Lap 기능을 갖추어 원하는 시간에 동작을 멈춘 후, 멈춘 시간으로부터 Lap을 해제할 때까지의 시간을 잴 수 있다. 타이머 기능에서는 초와 분을 설정하여, 설정된 시간으로부터 00분 00초가 될 때까지의 타이머 기능을 구현한다. 타이머가 00분 00초가 되었을 때에는 부저가 울리며, 외부의 스위치로 부저를 제어할 수 있다.타이머타이머를 동작시킬 코드는 아..

Language/Verilog 2024.07.30

Vivado : 온도 습도 센서

온/습도 센서 이번에는 온습도 센서를 사용할려고자 한다. 온습도 센서는 DHT11 모듈을 사용하여 진행할 예정이며, 모듈의 회로 구성은 아래와 같다.  온/습도 센서의 총 동작도는 아래와 같다. MCU 시그널이 주어진 후 센서의 신호가 응답하는 방식으로 진행된다.   아래 그림은 MCU가 시작 신호를 보낸 후에 DHT 센서의 응답 과정을 나타낸다. 온습도센서가 MCU의 신호를 감지 후, MCU를 감지하려면 최소 18ms의 시간이 소요된다. 그러고 난 후 20~40us만큼 센서의 응답을 기다린다. DHT가 시작 신호를 감지하면 저전압레벨의 응답신호를 80us 간 보낸다. 응답 신호를 보낸 후, 센서는 데이터 전송을 위해서 데이터 단일 버스 전압레벨을 저에서 고로 설정하고 80us동안 유지한다. 그다음 모듈..

Language/Verilog 2024.07.25
728x90