본문 바로가기

분류 전체보기

(271)
FND (Flexible Numeric Display) - 기초 (1) 서론  FND (Flexible Numeric Display) 은 아래의 그림와 같이 여러 개의 LED를 이용하여 10진수 숫자 또는 16진수용 문자를 표시하는 소자이다. 이를 7-segement , Flexible Numeric Dispaly 이라고 한다.     이번 구현에 사용할 FND는 5161AS의 Data sheet를 보게 되면 다음과 같이 구성되어 있으며, 특히 아래 그림과 같이 Common cathode 로 구성되어 있다. 이는 3, 8핀의 GND을 모든 다이오드들이 공유하기 때문에 각각 다이오드가 연결된 핀에 전압을 인가하게 되면 전위차에 의해 전류는 다이오드를 통해 GND로 흐르게 되며, 이를 통해 다이오드에 불이 들어오게 된다.   본론   이번에는 다음과 같은 구현을 함으로서 FND..
Interrupt - 기초 (1) Button 3개를 통해 서로 다른 Interrupt을 설정하여 LED를 컨트롤하기 1) 목표: PORT D 에 PD0, PD1, PD2에 스위치, PORT A 에 LED를 연결한 뒤, 서로 다른 interrupt을 설정하여 각각의 버튼을 눌렀을 때, 서로 다른 Interrupt 때 LED를 컨트롤 할 수 있게끔 설계하기PD0 : Low-level sensitive 에서 Interrupt를 발생하도록 설계          LED가 짝수 핀들에 다이오드 전부 불이 들어오도록 한 뒤, 짝수 번째 다이오드에 전부 불이           들어오면 홀수 핀들에 다이오드 전부 불이 들어오도록 설계한다.PD1 : Rising-edge sensitive 에서 Interrupt를 발생하도록 설계          LED의..
GPIO - LED control (3) Button 3개를 통해 LED를 컨트롤1) 목표: PORT D에 PD0, PD1, PD2 각각 Button을 연결 한 뒤, PORT A에 연결된 LED를 컨트롤하기.              PD0 : LED 에서 0, 2, 4, 6번째 다이오드를 출력              PD1 : LED 7번째 다이오드부터 0번째 다이오드까지 shift하면서 출력              PD2 : LED 0번째 다이오드부터 7번째 다이오드까지 shift하면서 출력 2) 선행 지식 : 해당 회로는 Pull-Up 구조 회로를 구성했기 때문에 Switch를 누르기 전에는 5V 전압이 들어오                       다가Switch 를 누르면 GND로 short되어 전류는 더이상 Pin쪽으로 향하지 않고, ..
Atmega 128A의 버튼 (기초) 1. 환경 : Microchip Studio2. 목표 : 1) PD0에 버튼을 연결, 2) Pull-UP 회로 구성               3) PORTF에 LED의 연결 한 뒤, 3번째 핀만 출력으로 사용               ==> 버튼을 누르기 전 상태는 LED가 꺼져 있지만, 버튼을 누르면 LED가 켜지도록 설계3. 선행 지식- 프로그래밍 하기전, 회로를 구성함에 따라 동작 결과는 전혀 다르게 나타나기 때문에 회로에 대한  기초 지식이 필요하다.- Floating, Pull-up, Pull-down 에 대해서 이해할 필요가 있다.- https://jbhdeve.tistory.com/147  Floating, Pull-up, Pull-down목표) 다음과 같은 궁금증을 알아보도록 하겠다.   ..
Floating, Pull-up, Pull-down 목표) 다음과 같은 궁금증을 알아보도록 하겠다.         1. 왜 일반적으로 스위치를 MCU와 연결할 때, Floating 현상을 접하게 되는가?          2. 이 때, Floating 문제를 해결하기 위해 10K Ohm 저항과 함께 연결하는가?   Floating 현상이란 무엇인가?- Floating 현상은 직역하게 되면 "떠있는 상태"를 의미- MCU에서는 신호가 5V(High-level)과 0V(Low-level) 사이에서 "떠있는 상태"여서 신호 값이   불안정한 상태임을 말한다. - 아래와 같은 예시 회로를 통해 살펴보도록 하자.       - 위 회로에서 Switch가 닫히게 되면 예상했던 바와 같이 5V(High-level) 신호를 받을 수 있게 되면서        LED를 킨다..
Data Direction Register의 비트 단위로 Control 1. 환경 : Microchip Studio2. 목표 :DDR 전체를 출력/입력으로 설정하는 것이 아닌 Bit 단위로 설정하여 효율적으로 LED를 출력하도록 설계구조체(Structure)를 이용하여 구현함으로서 구조체의 기본 지식 정비 및 기본 활용 공부3. 큰 그림: 이전까지는 DDRD = 0xff로 선언하여 PORTD의 8핀 전체를 출력으로 사용하거나 DDRF = 0x00으로 선언하여 PORTF의 8핀 전체를 입력으로 사용했다.하지만, 이는 비효율적으로 하드웨어를 제어 하는 것이기 때문에 bit 단위로 입력/출력을 설정함으로서효율적으로 하드웨어를 제어하도록 설계하겠다.ex) DDRD = 0x18→ PORTD에서 3번째, 4번째만 출력으로 사용하겠다는 의미구조체를 정의하여 구조체 내에 1) PORT의 ..
궁금증 정리 노트 - Atmega128A ※ 정리 할 내용이 추가 될 수 있음. Q) 왜 #define F_CPU 16000000UL를 작성해야 하며, 이는 어떤 의미를 갖는가?- define 전처리기를 이용하여 16000000UL를 F_CPU로 정의한 이유는   avr studio에 내장된 delay 함수를 사용하기 위해 클럭을 재정의하는 것이다.#define F_CPU 16000000UL#include        - delay.h 헤더파일에서 클럭의 기본 설정은 아래와 같이 클럭을 1000000UL, 1MHz로 설정된  상태이다.#ifndef F_CPU/* prevent compiler error by supplying a default */# warning "F_CPU not defined for "/** \ingroup util_del..
Pointer 1. 환경 : Microchip Studio2. 목표 : Pointer 개념을 활용하여 GPIO Control 함으로서 Pointer의 개념 정비 및 기본 활용 학습3. 구현 내용 : Shift 연산자와 Bit OR 연산자를 이용하여 1번쩨 비트 ~ 7번째 비트까지 누적하여 LED 출력4. Source codemain.c controlLED.c (LED에 관한 함수)common.h (라이브러리, 기본 헤더 파일을 include 한 파일)personal.h (함수 원형 선언 및 상수 선언)#include "personal.h"int main(void) { initDDR(); // 임의의 데이터를 초기화 uint8_t data = PORTD1; while(1) { contr..