LED Bar 7

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 : 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

ATmega 128 : LED Bar 구조체 동작 구현

이번에는 구조체를 활용하여 LED Bar를 동작시키는 코드를 구현해봤다. 이번에도 포인터 동작때와 같이 헤더파일, 소스파일, 메인파일을 구분하여 진행하였다.  가장 먼저 led 소스파일부터 확인해보겠다. #include "led.h"void ledInit(LED_t *led) //led는 LED 타입{ // 포트에 해당하는 핀을 출력으로 설정함 *(led->port - 1) |= (1 pinNumber); // *(led->port - 1) = *(led->port - 1) | (1 pinNumber); // DDR 레지스터는 PORT레지스터보다 1 낮게 위치하고 있으므로 // *(led->port - 1) 를 이용하여 PORT에서 DDR로 접근한다. (데이터시트 참조) // |= (1 pinNumber..

Language/AVR 2024.05.28

ATmega 128 : LED Bar 포인터 동작 구현

LED Bar를 포인터로 구현하여 진행하였다. 헤더파일, 소스파일, 메인파일로 나누어 진행하였다, 가장 먼저 메인파일의 코드는 다음과 같다.#include "common.h" #include "led.h"int main(void){ ledInit(); uint8_t ledData = 0x01; while (1) { for (uint8_t i = 0; i  메인파일에서 C언어에서 기본 제공해주는 헤더파일을 정리한 "common.h" 헤더파일과, led 동작 구현을 위한 "led.h" 헤더파일을 선언하였다. 다음은 led 동작 구현을 위해 별도로 구현한 led 헤더파일이다.#ifndef LED_H_#define LED_H_#include #define LED_DDR DDRC#define LE..

Language/AVR 2024.05.26

ATmega 128 : LED Bar 배열 동작 구현

이번에는 배열을 사용하여 0번부터 7번까지 순차적으로 점등하는 동작을 구현하였다. 배열 내에는 16진수로 LED를 표현해보았다. 0은 LED OFF, 1은 LED ON을 의미한다.#define F_CPU 16000000UL#include #include uint8_t led_arr[] ={ 0x01, // 0000 0001 0x02, // 0000 0010 0x04, // 0000 0100 0x08, // 0000 1000 0x10, // 0001 0000 0x20, // 0010 0000 0x40, // 0100 0000 0x80 // 1000 0000};int main(void){ DDRC = 0xff; while(1) { for (uint8_t i = 0; i

Language/AVR 2024.05.25
728x90