+ All Categories
Home > Documents > 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어...

마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어...

Date post: 22-Mar-2021
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
52
마이크로컨트롤러 기능 3GPIO 입출력제어
Transcript
Page 1: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

마이크로컨트롤러기능

제 3장 GPIO 입출력제어

Page 2: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

GPIO 입출력제어

1. HBE-MUC-Multi II Elec 구동

2. 마이크로컨트롤러와 GPIO

3. AVR 마이크로컨트롤러의입출력포트

4. GPIO를이용하여 LED 켜기

5. GPIO를이용하여푸쉬버튼을눌러 LED 켜기

6. GPIO를이용하여 FND LED 켜기

Page 3: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec

발표자
프레젠테이션 노트
HBE-MCU-Multi II Elec은 CPU 모듈과 각 기능 모듈들로 구성되며, 각 모듈들 사이의 신호선 연결은 장비와 같이 제공되는 케이블을 사용하여 직접 연결해 주어야 한다. 다만 각 모듈의 전원은 베이스 보드를 통해 상시 공급되므로, 별도 전원 연결은 필요없다.
Page 4: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec 장비의모듈구성MCU ModuleOn-Board 디바이스

• Text LCD, Array FND & LED, SRAM Flash, Mini Fan & Relay, Full Color LED, A/D & D/A Converter, Step Motor, 온/습도센서, 조도센서 & 가변저항, UART, 오실로스코프, 스위치소자

Module 디바이스• Power, BLDC 모터, AC Load, 부스트컨버터, Line Sensing,벅컨버터, 인버터

케이블수납함

• 제품에사용되는각종케이블수납

발표자
프레젠테이션 노트
여기서 MCU Module에는 각종 MCU 모듈들이 장착되며, 이 책은 AVR ATMega128A MCU 모듈을 사용하여 마이크로컨트롤러 실습을 할 것이다. 다음은 HBE-MCU-Multi II Elec을 처음 구동하는 방법을 설명한다.
Page 5: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec 실습전모습

발표자
프레젠테이션 노트
케이스로 되어 있는 제품을 개봉하면 그림과 같이 각 모듈이 장착되어 있는 좌측 부분과 케이블류가 수납되어 있는 우측이 보인다.
Page 6: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec 전원케이블연결

발표자
프레젠테이션 노트
케이스로 되어 있는 제품을 개봉하면 그림과 같이 각 모듈이 장착되어 있는 좌측 부분과 케이블류가 수납되어 있는 우측이 보인다. 우측의 수납함에서 전원 케이블을 꺼내서 제품의 좌측 측면에 그림과 같이 연결한다. 케이블을 전원 콘센트에 연결하고 그림과 같이 케이블 연결구 아래에 있는 스위치의 ‘I’로 표시된 부분을 눌러 전원을 켠다.
Page 7: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec과 AVR-ISP를케이블로연결

발표자
프레젠테이션 노트
이제 MCU 프로그램을 위한 프로그램 케이블을 연결해 보자. 그림과 같이 수납함에 들어 있는 AVR ISP Programmer를 MCU Module의 커넥터에 연결한다. 케이블의 반대편은 함께 제공하는 USB 케이블을 이용하여 컴퓨터의 USB 포트에 연결하면 된다.
Page 8: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

AVR MCU 모듈구성

발표자
프레젠테이션 노트
그림은 AVR MCU 모듈을 보인 것이다. AVR MCU 모듈은 ATmega128A MCU가 중앙에 장착되어 있으며, 그 우측에 ISP 커넥터가 있어 위의 그림과 같이 ISP 프로그램 케이블을 연결하게 된다. 그리고, 양 옆에는 Port 커넥터가 있어서 각 기능 모듈들과 신호선을 연결하게 된다. JTAG 디버거 커넥터는 AVR Studio의 디버거 기능을 이용하여 디버깅을 하기 위한 JTAG 디버거 연결 커넥터이다.
Page 9: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec 신호선연결

발표자
프레젠테이션 노트
이제 실험 실습의 환경에 맞추어 신호선을 연결해 보자. 제품의 수납함에 있는 케이블을 이용하여 그림에서와 같이 신호선을 연결하면 되는데, 이때 주의 할 것은 신호선의 색을 확인하여 케이블이 뒤집어 연결되지 않도록 주의해야 한다는 것이다. 케이블이 잘못 연결될 경우 제품의 오동작 및 손상의 우려가 있으니 주의하기 바란다.
Page 10: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

HBE-MUC-Multi II Elec 구동

HBE-MUC-Multi II Elec 기능모듈(LED모듈)구성

발표자
프레젠테이션 노트
그림은 HBE-MUC-Multi II Elec의 기능 모듈 중 하나인 LED 모듈의 형상을 보인 것이다. 그림과 같이 각 모듈들은 아래쪽에 Signal 커넥터들을 가지고 있다. LED 모듈의 경우에는 LED의 개수만큼 16개의 Signal 커넥터가 존재하는데, 이는 각 모듈의 기능에 따라 다르다. 이 Signal 커넥터와 MCU 모듈의 Port 커넥터를 적절히 케이블로 연결하면 회로가 연결되는 것이다.
Page 11: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

마이크로컨트롤러와 GPIO

GPIO(General Purpose Input Output) 범용으로사용되는입출력포트 : 설계자가마음대로변형하면서제어할수있도록제공해주는 I/O(입출력) 포트

입력과출력을마음대로선택할수있고, 0과 1의출력신호를임의로만들어줄수있는구조를가짐

입력으로사용할때는외부인터럽트를처리할수있도록하는경우가많음.

입출력방향전환용레지스터와출력용/입력용데이터레지스터등이필요

마이크로컨트롤러에서는대부분의핀들을 GPIO로설정하는경우가많음.

발표자
프레젠테이션 노트
GPIO(General Purpose Input Output) 범용으로 사용되는 입출력 포트를 의미. 여러가지 다양한 용도로 사용될 수 있다는 것이다. 임베디드 시스템에는 MCU외에 여러가지 다양한 일을 하기 위한 주변장치 및 소자들이 존재한다. 이 주변 소자들은 MCU의 미리 정해진 인터페이스에 연결되어 동작하는 것들도 있지만, 그렇지 않은 경우가 더 많다. 이러한 다양한 주변 소자들을 동작시키기 위해서는 그 주변 소자들이 원하는 방식으로 인터페이스를 하여 원하는 신호를 보내주어야 한다. 예를 들어 LED를 켠다든지, 버저를 울린다든지 하기 위해서는 그 소자에 0 혹은 1의 신호를 보내주어야 하고, TEXT-LCD에 글자를 출력하기 위해서는 좀 더 복잡한 병렬 신호들을 보내 주어야 한다. 또한, 키패드나 버튼 스위치 입력을 받기 위해서는 그 소자들로부터 나오는 신호를 받아들일 수 있는 통로를 가져야 한다. 이와 같이 임베디드 시스템들에서 일어나는 여러가지 다양한 일들을 처리하기 위해 설계자가 마음대로 변형하면서 제어할 수 있도록 제공해 주는 I/O(입출력) 포트를 바로 GPIO라고 하는 것이다. GPIO는 일반적으로 입력과 출력을 마음대로 선택할 수 있고, 0과 1의 출력 신호를 임의로 만들어줄 수 있는 구조를 가지게 된다. 그리고, 입력으로 사용할 때는 외부 인터럽트를 처리할 수 있도록 하는 경우가 많다. 이러한 기능을 부여해 주기 위해서 입출력 방향 전환용 레지스터와 출력용/입력용 데이터 레지스터등이 필요하게 된다. AVR 마이크로컨트롤러도 많은 수의 GPIO 포트를 보유하고 있다. 사실 특수한 용도로 사용하는 몇몇 핀을 제외하고는 거의 모든 핀들이 GPIO로 사용할 수 있다고 보아도 무방하다. 그만큼 마이크로컨트롤러에서 GPIO의 중요성은 매우 크다고 할 수 있으며, 최근 고성능 임베디드 프로세서나 SoC에서도 이러한 경향은 마찬가지이다.
Page 12: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

AVR 마이크로컨트롤러입출력포트 6개의 8비트 I/O포트와 1개의 5비트 I/O포트로구성. 출력포트의버퍼는많은유입전류와유출전류를사용(최대

40mA)할수있음. 모든포트핀은개별적으로내부풀업저항을사용할수있음. 모든 I/O핀은 VCC와 GND사이에다이오드를접속하여포트를보호.

Read-Modify-Write기능을가지고있어, 비트단위의포트설정이가능.

각포트에대한데이터출력용레지스터(PORTx)와데이터입출력방향지정용레지스터(Data Direction Register: DDRx), 그리고데이터입력용레지스터(PINx)를보유.

발표자
프레젠테이션 노트
AVR 마이크로컨트롤러 입출력 포트 AVR Atmega128A의 입출력 포트는 6개의 8비트 I/O포트와 1개의 5비트 I/O포트로 구성되어 있으며, 각각의 포트는 범용의 I/O신호(GPIO)와 특수 기능 신호로써 동작하게 된다. 먼저 범용의 I/O 신호는 AVR ATmega128A 마이크로 컨트롤러에서 주변 회로 사이에 데이터 송 수신에 의해 읽기, 감시, 상태 출력, 시스템 구성, 제어신호 형성, 시리얼 통신 등을 제공하게 된다. 반면에 특수 기능은 주변 상태 및 시스템 구성요소에 따라 달라 질 수 있다. 입출력 포트가 일반적 디지털 I/O로 동작할 경우에는 Read-Modify-Write기능을 가지고 있어서 비트 단위로 포트 핀들을 제어할 수 있다. AVR 마이크로컨트롤러 입출력 포트 특징 6개의 8비트 I/O포트와 1개의 5비트 I/O포트로 구성되어 있다. 출력포트의 버퍼는 많은 유입전류와 유출전류를 사용(최대 40mA)할 수 있다. 모든 포트 핀은 개별적으로 내부 풀업 저항을 사용할 수 있다. 모든 I/O핀은 VCC와 GND사이에 다이오드를 접속하여 포트를 보호한다. Read-Modify-Write기능을 가지고 있어, 비트 단위의 포트 설정이 자유롭다. 각 포트에 대한 데이터 출력용 레지스터(PORTx)와 데이터 입출력 방향 지정용 레지스터(Data Direction Register: DDRx), 그리고 데이터 입력용 레지스터(PINx)를 가지고 있다.
Page 13: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

입출력포트제어용레지스터 DDRx 레지스터

• 입출력의방향설정을하기위한레지스터.• DDRA~DDRG레지스터의해당비트에 ‘1’을쓰면출력, ‘0’을쓰면입력으로설정.

PORTx 레지스터• 데이터를출력하기위한레지스터이다• 출력을원하는데이터값을 PORTx 레지스터에넣어주면된다

PINx 레지스터• 데이터입력용레지스터이다• PINx 레지스터에해당하는값을읽으면해당핀의값이읽어진다.

SFIOR 레지스터• Special Function IO Register.• AVR 입출력포트의특수기능을제어하기위한레지스터• SFIOR의비트2(PUD: Pull-Up Disable)를 ‘1’로세트하면풀업저항을비활성화시킨다

발표자
프레젠테이션 노트
  입출력 포트 제어용 레지스터 DDRx 레지스터 입출력의 방향설정을 하기 위한 레지스터이다. DDRA~DDRG레지스터의 입출력포트에 대응하는 해당 비트에 1을 쓰면 그 해당 핀이 출력으로, 0을 쓰면 입력으로 설정된다. 초기값은 0으로 설정되어 있다. 비트별로 만약 포트 A의 비트3를 출력으로 설정하려면 DDRA = 0x08로 하면 되고, 포트 A를 전부 출력으로 설정하려면 DDRA = 0xff로 하면 된다.   PORTx 레지스터 데이터를 출력하기 위한 레지스터이다. DDRx의 값을 세팅하여 출력으로 설정된 경우 출력을 원하는 데이터값을 PORTx 레지스터에 넣어주면 된다. PORTx 레지스터는 읽기와 쓰기가 모두 가능하다. 비트별로 설정하려면 PORTx = 1의 형태로 하면 된다(x는 A~G). 만약 포트 B의 비트3에 1을 출력하려면 PORTB = 0x08로 하면 된다.   PINx 레지스터 데이터 입력용 레지스터이다. 입출력 핀이 입력으로 설정된 경우 PINx 레지스터에 해당하는 값을 읽으면 된다. 해당 핀의 값을 읽어 들인다. 읽기만 가능하며 쓰기는 금지되어 있다. 비트별로 읽어 들이려면 PINx를 사용하면 된다. 비트별로 만약 포트 C의 비트3값을 읽어 들여 led3라는 비트값에 할당하려면 led3 = (PINC & 0x08)로 하면 된다.   AVR 마이크로컨트롤러의 입출력 포트에는 각 핀마다 풀업 저항을 사용할 수 있도록 구성되어 있다. 이 풀업 저항은 필요에 따라 On/Off 할 수 있는데, 그를 제어하기 위한 레지스터가 SFIOR 이다. SFIOR(Special Function IO Register)는 AVR 입출력 포트의 특수 기능을 제어하기 위한 레지스터로서, 그 중 하나의 비트(비트 2: PUD 비트)를 이용하여 모든 입출력핀의 풀업저항을 비활성화할 수 있다. DDRx.n의 값을 조절하여 입력으로 설정된 경우에는 해당하는 PORTx.n에 1을 쓰면 내부 풀업 저항을 사용할 수 있다. 단 이때, SFIOR의 비트 2(PUD 비트)가 0로 세팅되어 있어야 한다. 내부 풀업 저항을 사용하지 않기 위해서는 PORTx의 해당비트에 0을 쓰거나 해당 핀을 출력으로 설정하면 된다.   SFIOR 레지스터 SFIOR(Special Function IO Register)의 비트2(PUD: Pull-Up Disable)를 1로 세트하면 풀업 저항을 비활성화시킨다.
Page 14: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : A 포트(PA7~PA0 : 핀44-51) 내부풀업저항이있는 8비트양방향입출력단자 외부메모리를둘경우에는주소버스(A7-A0)와데이터버스(D7-D0)로사용

포트 핀 부가기능

PA7 AD7(외부 메모리 인터페이스 주소와 데이터 비트7)

PA6 AD6(외부 메모리 인터페이스 주소와 데이터 비트6)

PA5 AD5(외부 메모리 인터페이스 주소와 데이터 비트5)

PA4 AD4(외부 메모리 인터페이스 주소와 데이터 비트4)

PA3 AD3(외부 메모리 인터페이스 주소와 데이터 비트3)

PA2 AD2(외부 메모리 인터페이스 주소와 데이트 비트2)

PA1 AD1(외부 메모리 인터페이스 주소와 데이터 비트1)

PA0 AD0(외부 메모리 인터페이스 주소와 데이터 비트0)

발표자
프레젠테이션 노트
포트 A (PA7~PA0:핀44-51) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부메모리를 둘 경우에는 주소버스(A7-A0)와 데이터버스(D7-D0)로 사용된다. 이때 어드레스 버스와 데이터 버스를 구분하기 위해서는 ALE 신호를 사용한다. 표는 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.
Page 15: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : B 포트(PB7~PB0 : 핀10-17) 내부풀업저항이있는 8비트양방향입출력단자 타이머/카운터나 SPI용단자혹은 PWM 단자로도사용

포트 핀 부가기능

PB7OC2/OC1C(출력비교 또는 타이머/카운터2의 PWM출력, 또는출력비교와 타이머/카운터2의 PWM출력 C)

PB6 OC1B(출력비교 또는 타이머/카운터1의 PWM출력 B)

PB5 OC1A(출력비교 또는 타이머/카운터1의 PWM출력 A)

PB4 OC0(출력비교 또는 타이머/카운터0의 PWM출력)

PB3 MISO(SPI 버스 마스터 입력/종속 출력)

PB2 MOSI(SPI 버스 마스터 출력/종속 입력)

PB1 SCK(SPI 버스 직렬 클럭)

PB0 /SS(SPI 종속 선택 입력)

발표자
프레젠테이션 노트
포트 B (PB7~PB0:핀10-17) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, GPIO로 사용되지 않을 경우에는 타이머/카운터나 SPI용 단자 혹은 PWM 단자로도 사용된다. 표는 특수용도로 사용될 경우 포트 B의 각 핀의 기능을 정리한 것이다.
Page 16: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : C 포트(PC7~PC0 : 핀35-42) 내부풀업저항이있는 8비트양방향입출력단자 외부메모리를둘경우에는주소버스(A15-A8)로사용

포트 핀 부가기능

PC7 AD7(외부 메모리 인터페이스 주소 비트15)

PC6 AD6(외부 메모리 인터페이스 주소 비트14)

PC5 AD5(외부 메모리 인터페이스 주소 비트13)

PC4 AD4(외부 메모리 인터페이스 주소 비트12)

PC3 AD3(외부 메모리 인터페이스 주소 비트11)

PC2 AD2(외부 메모리 인터페이스 주소 비트10)

PC1 AD1(외부 메모리 인터페이스 주소 비트 9)

PC0 AD0(외부 메모리 인터페이스 주소 비트8)

발표자
프레젠테이션 노트
포트 C (PC7~PC0:핀35-42) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부메모리를 둘 경우에는 주소버스(A15-A8)로 사용된다. 표는 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.
Page 17: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : D 포트(PD7~PD0 : 핀25-32) 내부풀업저항이있는 8비트양방향입출력단자 타이머용단자혹은외부인터럽트용단자로도사용.

포트 핀 부가기능

PD7 T2(타이머/카운터2 클럭 입력)

PD6 T1(타이머/카운터1 클럭 입력)

PD5 XCK1(USART1 외부 클럭 입/출력)

PD4 IC1(타이머/카운터1 입력 캡쳐 트리거)

PD3 INT3/TXD1(외부 인터럽트3 입력 또는 USART1 전송 핀)

PD2 INT2/RXD1(외부 인터럽트2 입력 또는 USART1 수신 핀)

PD1 INTI/SDA(외부 인터럽트1 입력 또는 TWI 직렬 데이터)

PD0 INT0/SCL(외부 인터럽트0 입력 또는 TWI 직렬 클럭)

발표자
프레젠테이션 노트
포트 D (PD7~PD0:핀25-32) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 타이머용 단자 혹은 외부인터럽트용 단자로도 사용된다. 표는 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.
Page 18: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : E 포트(PE7~PE0 : 핀2-9) 내부풀업저항이있는 8비트양방향입출력단자 타이머용단자, 외부인터럽트, 아날로그비교기, USART용단자로도사용.

포트핀 부가기능

PE7INT7/IC3(외부 인터럽트 7 입력 또는 타이머/카운터3 입력 캡쳐트리거)

PE6 INT6/T3(외부 인터럽트 6 입력 또는 타이머/카운터3 클럭입력)

PE5INT5/OC3C(외부 인터럽트 5 입력 또는 타이머/카운터3의 출력캡쳐와 PWM 출력 C)

PE4INT4/OC3B(외부 인터럽트 4 입력 또는 타이머/카운터3의 출력캡쳐와 PWM 출력 B)

PE3AIN1/OC3A(아날로그 비교 반대입력 또는 타이머/카운터3의 출력비교와 PWM 출력A)

PE2 AIN0/XCK0(아날로그 비교 입력 또는 USART0 외부 클럭 입/출력)

PE1 PDO/TXD0(프로그램 데이터 출력 또는 UART0 전송 핀)

PE0 PDI/RXD0(프로그램 데이터 입력 또는 UART0 수신 핀)

발표자
프레젠테이션 노트
포트 E (PE7~PE0:핀2-9) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 타이머용 단자, 외부인터럽트, 아날로그 비교기, USART용 단자로도 사용된다. 표는 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.
Page 19: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : F 포트(PF7~PF0 : 핀54-61) 내부풀업저항이있는 8비트양방향입출력단자 AD변환기혹은 JTAG 인터페이스용단자로도사용.

포트핀 부가기능

PF7 ADC7/TDI(ADC 입력 채널 7 또는 JTAG Test Data Input)

PF6 ADC6/TDO(ADC 입력 채널 6 또는 JTAG Test Data Output)

PF5 ADC5/TMS(ADC 입력 채널 5 또는 JTAG Test Mode Select)

PF4 ADC4/TCK(ADC 입력 채널 4 또는 JTAG Test Clock)

PF3 ADC3 (ADC 입력 채널 3)

PF2 ADC2 (ADC 입력 채널 2)

PF1 ADC1 (ADC 입력 채널 1)

PF0 ADC0 (ADC 입력 채널 0)

발표자
프레젠테이션 노트
포트 F (PF7~PF0:핀54-61) 내부 풀업 저항이 있는 5비트 양방향 입출력 단자로서, AD변환기 혹은 JTAG 인터페이스용 단자로도 사용된다. 표는 AD 변환이나, JTAG용도로 사용될 경우의 각 핀 역할을 정리한 것이다.
Page 20: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

AVR 마이크로컨트롤러의입출력포트

ATMega128A의범용입출력포트 : G 포트(PG4~PG0 : 핀19, 18, 43, 34, 33) 내부풀업저항이있는 8비트양방향입출력단자 외부메모리접속을위한스트로브신호용, RTC(Real Time Counter) 타이머용발진기단자로도사용.

포트 핀 부가기능

PG4 TOSC1(RTC 오실레이터 타이머/카운터0)

PG3 TOSC2(RTC 오실레이터 타이머/카운터0)

PG2 ALE(외부메모리에 주소 래치 인에이블)

PG1 RD(외부메모리에 스트로브 읽기)

PG0 WR(외부메모리에 스트로브 쓰기)

발표자
프레젠테이션 노트
포트 G (PG4~PE0:핀19, 18, 43, 34, 33) 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부 메모리 접속을 위한 스트로브 신호용, RTC(Real Time Counter) 타이머용 발진기 단자로도 사용된다.
Page 21: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

실습개요 ATmega128A 마이크로컨트롤러의 GPIO를이용하여 LED를켜는가장단순한실습

입출력포트를출력으로설정하고, 그포트를이용하여 LED에신호를보내점등

프로그램이시작하면 1초마다 LED 에불이점등.

실습목표 GPIO 입출력포트의방향제어및출력제어방법습득 LED 동작원리습득 프로그램에서시간지연방법습득

발표자
프레젠테이션 노트
ATmega128A 마이크로컨트롤러의 GPIO를 이용하여 LED를 켜는 가장 단순한 실습을 해보도록 한다. ATmega128A의 입출력 포트를 출력으로 설정하고, 그 포트를 이용하여 LED에 신호를 보내 점등을 시킬 것이다. 프로그램이 시작하면 1초 마다 LED 에 불이 점등하게 된다. ATMega128A 마이크로컨트롤러의 포트를 출력으로 선언하고, 이 포트를 LED와 연결하여 입력된 신호가 출력 인가 신호에 의해 LED에 불이 켜지는지 확인한다. 목표 GPIO 입출력 포트의 방향 제어 및 출력 제어 방법 습득 LED 동작 원리 습득 프로그램에서 시간지연 방법 습득
Page 22: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

LED 구조 LED(Light-emitting diode) : 빛을발산하는반도체소자(발광다이오드) 순방향에전류를흘리는것에따라전자와정공이재결합하여발광

다리가긴부분이양극 (Anode), 짧은부분이음극 (Cathode)

발표자
프레젠테이션 노트
LED 구조와 구동 방법 LED는 Light-emitting diode의 약자로서, 발광다이오드라 부른다. 이는 빛을 발산하는 반도체 소자를 말하며, 방출하는 빛의 색깔은 크리스탈 도핑(Crystal Doping)의 양과 종류에 따라 적색, 녹색 또는 황색 등이 될 수 있다. 일반 백열전구에 비하여 소비전력은 1/5밖에 안되고, 반응시간은 백만배나 빠르며, 수명은 반영구적으로 향상되어 정밀 반도체 장비 검사 기기, 자동차 계기판 등의 전자 표시판, 전광판, 산업기기 표시기 및 각종 교통 안전 신호기 등등에 많이 사용되고 있다. LED 는 Pn 접합을 하는 다이오드이고 순방향에 전류를 흘리는 것에 따라 전자와 정공이 재결합하여 발광하는 소자이다.   LED 의 심볼은 그림 같으며, 전기적 특성은 일반적으로 10~20mA 의 전류에서 1.5V ~ 2.5V 의 전압강하를 결정된다. LED 의 모양은 다리가 긴 부분이 양극 (Anode), 짧은쪽이 음극 (Cathode) 이다.
Page 23: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

LED 구동방법 정적구동방식 : 각각의 LED를독립해서구동 동적구동방식 : 여러개의 LED를매트릭스구조로엮어서함께구동

발표자
프레젠테이션 노트
LED 구조와 구동 방법 구동 방법은 정적구동방식과 동적구동방식(메트릭스형)이 있다. 정적구동방식은 각각의 LED를 독립해서 구동하기 때문에 숫자표시나 레벨미터 등 소수의 LED를 이용한 디스플레이의 구동에 적합하다. 동적 구동방식은 적은 수의 포트로 많은 LED를 제어할 수 있으므로 다수의 LED 소자를 사용하는 옥외용 LED 램프, 메트릭스 LED 구동에 이용된다. 그림에서의 좌측과 같이 LED의 양극쪽에 5볼트 전압을 인가하고 음극쪽이 0볼트(접지)를 유지하면 LED 다이오드에 전류가 흐르게 되어 불이 켜지게 된다. 회로에 보이는 330Ω 저항은 LED 다이오드에 과전류가 흘러 손상되는 것을 보호하기 위한 것이다. 우측 그림에서는 P1.0~P1.2와 P1.3~P1.5 신호의 조합에 의해 LED의 불이 점등 혹은 소등된다.
Page 24: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

사용모듈 MCU 모듈, LED 모듈

발표자
프레젠테이션 노트
사용 모듈과 회로 그림에 이번 실습에 사용될 모듈의 형상을 보인다. 이번 실습에서는 MCU 모듈의 입출력 포트 E와 LED 모듈을 사용한다.
Page 25: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

사용모듈의회로 MCU 모듈

발표자
프레젠테이션 노트
사용 모듈의 회로(MCU 모듈) MCU 모듈의 회로를 보인다. ATMega128A칩은 클럭으로 7.3728MHz를 사용함을 알 수 있다.
Page 26: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

사용모듈의회로 LED 모듈

발표자
프레젠테이션 노트
사용 모듈의 회로(LED모듈) LED모듈의 회로를 보인다. 그림에서 LED0~LED15의 신호가 LED의 양극에 연결되어 있음을 알 수 있다. 그러므로, 이 LED들을 점등하려면 신호선(LED0 ~ LED15)에 5볼트를 인가하면, 즉 입출력 포트에 “1”을 적으면 LED가 점등된다.
Page 27: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

모듈결선방법

MCU 모듈포트 E의 PE0~PE7을 LED 모듈의 LED0~LED7핀에연결

발표자
프레젠테이션 노트
모듈 결선 방법 AVR MCU 모듈의 E 포트와 LED모듈의 신호선 포트를 그림과 같이 연결한다. AVR모듈 포트 E의 PE0 ~PE7을 8핀 케이블로 LED 모듈의 LED 0 ~ 7까지 연결한다.
Page 28: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

구동프로그램 : 사전지식 LED를점등하기위해서는 LED 신호에‘1’을인가해야함. 즉, MCU E포트에서‘1’을출력하도록해야함.

MCU E 포트에‘1’을출력하려면• 입출력포트 E의 GPIO 방향을출력으로만들어야함.• 입출력포트를출력으로선언하려면 DDRx 레지스터(여기서는 E 포트를사용하므로 DDRE 레지스터)에‘1’을적어주어야함.

• PORTx 레지스터(여기서는 PORTE 레지스터)에‘1’을적어주어야함.

발표자
프레젠테이션 노트
구동 프로그램 LED를 점등하기 위해서는 LED 신호에 ‘1’을 인가해야 한다. 즉, MCU E포트에서 ‘1’을 출력하도록 해야 한다. 그렇게 하기 위해서는 입출력 포트 E의 GPIO 방향을 출력으로 만들어 주어야 한다. 입출력 포트를 출력으로 선언하려면 DDRx 레지스터(여기서는 E 포트를 사용하므로 DDRE 레지스터)에 ‘1’을 적어 주어야 한다. 또한, PORTx 레지스터(여기서는 PORTE 레지스터)에 ‘1’을 적어주어야 한다.
Page 29: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

AVR 시스템헤더파일

헤더 파일명 설명

<avr/interrupt.h> ATmega128A의 인터럽트에 관련된 내용을 정의

<avr/signal.h> ATmega128A에서 발생되는 신호에 관련된 내용을 정의

<avr/pgmspace.h> ATmega128A의 프로그램 공간에 관련된 내용을 정의

<avr/eeprom.h> ATmega128A의 EEPROM에 관련된 내용을 정의

<avr/wdt.h> ATmega128A의 워치독 타이머에 관련된 내용을 정의

발표자
프레젠테이션 노트
시스템 헤더화일 프로그램에서 맨 첫째줄에서 Include 선언한 <avr/io.h> 헤더 파일은 ATmega128A에 관련된 주소에 대하여 정의하고 있는 시스템 제공 헤더 화일이다. 따라서, 거의 모든 프로그램에서 이 헤더화일을 Include해서 사용하게 된다. 표는 몇가지 중요한 시스템 헤더 파일을 소개한다.
Page 30: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

마이크로컨트롤러구동시시간지연방법 반복문에의한시간지연

• for-loop나 while-loop를사용하여시간을지연.

void delay(unsigned char i){while(i--); } 혹은

void delay(unsigned char i){int k;for(k=0;k<=i;k++) ;}void main(void){delay(0x0100);}

• 매우부정확한방법임(MCU상태, 클럭속도에따라달라짐)• 그러나가장손쉬운방법.

발표자
프레젠테이션 노트
마이크로컨트롤러 구동시 시간지연 방법 임베디드 시스템에서 프로그램을 하다보면 임의의 시간지연이 필요한 경우를 자주 만나게 된다. 예를 들어, 신호등 제어기를 생각해 보면, 파란불을 켜놓고 일정시간이 지난 후 빨간불로 전환해야 한다. 이런 경우 정확한 시간지연 기능이 필요할 것이다. 엘리베이터 제어기를 설계할 때, 승강기 문을 열고 일정시간을 기다린 후 닫으려면 역시 정확한 시간 지연 기능이 필요하다. 전광판 제어기에서 화면을 일정시간마다 변경하려면 역시 시간지연 기능이 필요할 것이다. 이 밖에도 시스템에 내장된 소자들 중에는 하나의 동작을 하는데 일정 시간이 필요한 경우가 있는데, 이런 경우 MCU의 프로그램에서는 소자가 동작을 마칠때까지 잠시 기다려주어야 할 때도 있다. 마이크로컨트롤러의 프로그램에서 시간지연을 하는 방법은 대략 3가지 정도로 설명할 수 있다. 먼저 다음의 프로그램처럼 for-loop나 while-loop를 사용하여 시간을 지연하는 방법이 있다. 이 방법은 가장 쉽게 시간 지연을 할 수 있는 방법이다. 그러나 이러한 방법은 MCU의 상태에 따라, 그리고, 클럭의 속도에 따라 그 지연시간이 달라질 수 있는 매우 부정확한 시간지연 방법이다. 시간 지연을 위한 가장 정확한 방법은 마이크로컨트롤러에서 제공하는 내부 타이머/카운터를 사용하는 방법이다. 이 타이머 이용 방법은 이 책의 뒷부분에서 자세히 다루기로 한다. 또 한가지 시간지연을 달성하는 방법은 시스템에서 소프트웨어적으로 제공하는 라이브러리 함수를 이용하여 시간지연을 하는 방법이다. AVR 개발환경에서 제공하는 시간지연용 함수들은 delay.h라는 헤더화일에 정의되어 있다. 프로그램에서는 delay.h 헤더파일을 include시켜 _delay_ms(unsigned int i), _delay_us(unsigned int i)를 사용하여 밀리초나 마이크로초 단위로 비교적 정확하게 시간 지연을 얻을 수 있다. 그러나 인터럽트 등에 의해 지연이 발생할 수 있어 아주 정확한 것은 아님을 알아두기 바란다.
Page 31: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

마이크로컨트롤러구동시시간지연방법 시스템제공함수를이용하는시간지연

• 시스템에서소프트웨어적으로제공하는라이브러리함수를이용하여시간지연을하는방법.

• AVR 개발환경에서제공하는시간지연용함수들은 delay.h라는헤더화일에정의되어있음.

• _delay_ms(unsigned int i), _delay_us(unsigned int i)• 비교적정확한시간지연을얻을수있음.• 인터럽트등에의해지연발생이가능함.

하드웨어에의한시간지연• 마이크로컨트롤러에서하드웨어로제공하는내부타이머/카운터를사용하는방법.

• 가장정확한방법.

발표자
프레젠테이션 노트
마이크로컨트롤러 구동시 시간지연 방법 임베디드 시스템에서 프로그램을 하다보면 임의의 시간지연이 필요한 경우를 자주 만나게 된다. 예를 들어, 신호등 제어기를 생각해 보면, 파란불을 켜놓고 일정시간이 지난 후 빨간불로 전환해야 한다. 이런 경우 정확한 시간지연 기능이 필요할 것이다. 엘리베이터 제어기를 설계할 때, 승강기 문을 열고 일정시간을 기다린 후 닫으려면 역시 정확한 시간 지연 기능이 필요하다. 전광판 제어기에서 화면을 일정시간마다 변경하려면 역시 시간지연 기능이 필요할 것이다. 이 밖에도 시스템에 내장된 소자들 중에는 하나의 동작을 하는데 일정 시간이 필요한 경우가 있는데, 이런 경우 MCU의 프로그램에서는 소자가 동작을 마칠때까지 잠시 기다려주어야 할 때도 있다. 마이크로컨트롤러의 프로그램에서 시간지연을 하는 방법은 대략 3가지 정도로 설명할 수 있다. 먼저 다음의 프로그램처럼 for-loop나 while-loop를 사용하여 시간을 지연하는 방법이 있다. 이 방법은 가장 쉽게 시간 지연을 할 수 있는 방법이다. 그러나 이러한 방법은 MCU의 상태에 따라, 그리고, 클럭의 속도에 따라 그 지연시간이 달라질 수 있는 매우 부정확한 시간지연 방법이다. 시간 지연을 위한 가장 정확한 방법은 마이크로컨트롤러에서 제공하는 내부 타이머/카운터를 사용하는 방법이다. 이 타이머 이용 방법은 이 책의 뒷부분에서 자세히 다루기로 한다. 또 한가지 시간지연을 달성하는 방법은 시스템에서 소프트웨어적으로 제공하는 라이브러리 함수를 이용하여 시간지연을 하는 방법이다. AVR 개발환경에서 제공하는 시간지연용 함수들은 delay.h라는 헤더화일에 정의되어 있다. 프로그램에서는 delay.h 헤더파일을 include시켜 _delay_ms(unsigned int i), _delay_us(unsigned int i)를 사용하여 밀리초나 마이크로초 단위로 비교적 정확하게 시간 지연을 얻을 수 있다. 그러나 인터럽트 등에 의해 지연이 발생할 수 있어 아주 정확한 것은 아님을 알아두기 바란다.
Page 32: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

실행결과

Page 33: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 1 : GPIO를이용하여 LED 켜기

구동프로그램 : 소스분석 led.c

1)

#include<avr/io.h>

#include<util/delay.h>

int main(){

unsigned char LED_Data = 0x00;

2) DDRE = 0xFF; //포트 E를(0~7비트까지 모두) 출력 포트로 사용

3)

while(1){

PORTE = LED_Data; //포트E를 LED_Data로 두고, LED_Data를 하나씩 늘인다.

LED_Data++;

_delay_ms(1000); //ms단위의 딜레이함수

}

return 0;

}

발표자
프레젠테이션 노트
구동 프로그램 동작 프로그램이 시작하면 1초 마다 LED 에 불이 점등하게 된다. LED는 8비트를 연결하여 1초마다 1씩 더해지는 2진수 형식으로 점등된다. 즉, 처음에는 “00000000”에서 시작하여 “00000001”, …. “11111111”로 진행된다. 소스설명 1) AVR 입출력에 대한 헤더 파일과 delay 함수사용을 위한 헤더파일을 선언한다. 2) 포트 E 를 출력포트로 설정한다. 3) 포트 E로 변수 LED_Data에 있는 데이타를 출력한다. 그리고 값을 1씩 더해주며, 1초 딜레이를 가진 다음 루프를 반복한다. _delay_us()함수는 104 us 까지 , _delay_ms()함수는 35ms 까지 지원한다. 이 프로그램은 “00000000”부터 “11111111”까지 2진수를 1씩 증가시키면서 해당되는 8비트 LED를 점등시키는 프로그램이다. 이때, 숫자의 점등 간격은 1초이다. 프로그램에서 맨 첫째줄에서 Include 선언한 <avr/io.h> 헤더 파일은 ATmega128A에 관련된 주소에 대하여 정의하고 있는 시스템 제공 헤더 화일이다. 따라서, 거의 모든 프로그램에서 이 헤더화일을 Include해서 사용하게 된다. 이 프로그램에서는 1초 간격으로 LED의 값이 변동되도록 하고 있다. 그러기 위해서는 임의로 시간지연을 시켜주어야 하는데, 위 프로그램의 2번째 줄에서 Delay.h 헤더화일을 Include시켜서 AVR 개발환경에서 제공하는 시간지연 함수를 사용한다. 이 프로그램에서는 for-loop를 이용하여 _delay_ms(10) 함수를 100번 반복함으로써 1초라는 지연 시간을 얻어내고 있다. 프로그램에서 변수 선언 직후에 DDRE = 0xFF; 를 통해 입출력 포트 E의 모든 비트의 입출력 방향을 출력으로 선언하고 있으며, PORTE = LED_Data; 를 통해 포트 E의 각 비트에 출력할 데이터를 넣는 작업을 하고 있다.
Page 34: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

실습개요 단순출력이아니고, GPIO 포트를통해신호를입력하여그신호에따라 LED의불을켜는실습

스위치모듈의스위치를누르면해당되는 LED 모듈의 LED가점등되도록함.

입출력포트를스위치쪽은입력으로 LED쪽은출력으로설정하도록함.

실습목표 GPIO 입출력포트의방향제어및입력제어방법습득 스위치동작원리습득

발표자
프레젠테이션 노트
이번 예제에서는 단순 출력이 아니고, GPIO 포트를 통해 신호를 입력하여 그 신호에 따라 LED의 불을 켜는 실습을 해볼 것이다. 입력과 출력을 모두 하기 위해서 2개의 ATMega128A의 포트를 사용하여 하나는 이전의 예제처럼 LED를 켜기 위한 출력 포트로 사용하고, 또 하나의 입출력 포트는 스위치로부터 데이터를 입력받기 위한 입력 포트로 사용할 것이다. 이 예제에서는 스위치 모듈의 스위치를 누르면 해당되는 LED 모듈의 LED가 점등되도록 한다. ATmega128A 마이크로컨트롤러의 포트를 입력과 출력으로 선언하고 이 포트를 스위치 모듈과 LED모듈간에 연결하여 스위치 모듈에서 입력된 값이 출력으로 선언된 포트와 연결된 LED에 불이 켜지는지 확인한다. 목표 GPIO 입출력 포트의 방향 제어 및 입력 제어 방법 습득 스위치 동작원리 습득
Page 35: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

사용모듈 MCU 모듈, Push Button모듈, LED 모듈

발표자
프레젠테이션 노트
이번 실습에서는 MCU 모듈의 입출력 포트 E와 입출력 포트 B, 그리고 LED 모듈과Switch 모듈의 버튼 스위치를 사용한다. 입출력 포트 E와 LED모듈의 사용은 이전 실습인 GPIO로 LED 불켜기 때와 동일하게 사용된다.
Page 36: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

사용모듈의회로 Push Button 모듈

발표자
프레젠테이션 노트
그림에서 S0~S7까지의 버튼 스위치들은 74HC14라는 IC를 거쳐 SW_PUSH0~SW__PUSH7이라는 신호에 연결되어 있는 것을 볼 수 있다. 74HC14는 Hexa Inverting Schmitt Trigger 로서, 입력되는 신호를 Inverting해 주는 역할을 한다. 즉, 입력 신호에 0이 들어오면 1로 바꿔주고 1은 0으로 바꿔준다. 회로에서 S0 버튼을 누르면 스위치가 단락(Short)이 되어 74HC14의 1번 핀에 입력되는 신호선이 접지에 연결이 되어 0이 된다. 결국 그 출력 핀인 2번핀으로 출력되는 SW_PUSH0신호는 Inverting되어 1이 된다. 스위치를 놓으면 스위치가 개방(Open)되어 74HC14의 1번 핀에 입력되는 신호선이 풀업 저항을 거쳐 연결된 5V 전원의 영향을 받아 1로 되고, 그 출력 2번핀으로 출력되는 SW-PUSH0 신호는 Inverting되어 0가 된다. 즉, 스위치를 누르면 1의 신호가, 놓으면 0의 신호가 나오게 된다. 나머지 7개의 스위치들도 똑 같은 방식으로 동작하게 된다. SW_PUSH0~SW_PUSH7 신호들을 AVR MCU 모듈의 입력포트로 연결할 것이다.
Page 37: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

모듈결선방법 MCU 모듈의포트 E의 PE0~PE7을 LED 모듈의 LED0~LED7까지연결 MCU 모듈의포트 D의 PD0~PD7을푸쉬스위치모듈의 BT0~BT7까지연결

발표자
프레젠테이션 노트
AVR MCU 모듈의 E 포트와 LED모듈의 신호선 포트를 우측 그림과 같이 연결한다. 포트 E의 PE0 ~PE7을 LED 모듈의 LED 0 ~ 7까지 연결한다. 이는 앞의 예제와 동일하다. AVR MCU 모듈의 B 포트를 8핀 케이블로 Switch 모듈의 버튼 스위치부 신호선 포트에 연결한다(좌측 그림). 포트 B의 PB0~PB7을 8핀 케이블로 Switch 모듈의 BT0~BT7까지 연결한다.
Page 38: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

구동프로그램 : 사전지식 스위치를누르면“1”신호가나오고놓으면“0”신호가나옴. 이신호를입력받기위해서는

• MCU의입출력포트를입력으로선언해야함. 즉, 입력으로사용하기로한 MCU D 포트를입력으로선언해야함.

• 입출력포트를입력으로선언하려면 DDRx 레지스터(여기서는 D 포트를사용하므로 DDRD 레지스터)에‘0’을적어주어야함.

• 스위치모듈의버튼을누른다면 PINx 레지스터(여기서는 D 포트를사용하므로 PIND 레지스터)에 ‘1’이라는값이입력되어들어옴.

LED 출력방법은앞의예제와동일

발표자
프레젠테이션 노트
구동 프로그램 스위치를 누르면 “1” 신호가 나오고 놓으면 “0” 신호가 나온다. 이 신호를 입력 받기 위해서는 MCU의 입출력 포트를 입력으로 선언해야 한다. 즉, 입력으로 사용하기로 한 MCU B 포트를 입력으로 선언한다. 입출력 포트를 입력으로 선언하려면 DDRx 레지스터(여기서는 B 포트를 사용하므로 DDRB 레지스터)에 ‘0’을 적어 주어야 한다. 만약 스위치 모듈의 버튼을 누른다면 PINx 레지스터(여기서는 B 포트를 사용하므로 PINB 레지스터)에 1이라는 값이 입력되어 들어가게 된다. LED 출력은 앞의 예제와 동일.
Page 39: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

실행결과 Switch모듈의눌러진버튼과같은 LED의불이점등한다.

발표자
프레젠테이션 노트
실행결과 Switch모듈의 눌러진 버튼과 같은 LED의 불이 점등한다. 각 버튼을 누르면서 확인을 해본다.
Page 40: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 2 : GPIO를이용하여푸쉬버튼을눌러 LED 켜기

구동프로그램 : 소스분석 switch.c

1)#include<avr/io.h>

int main(){

2)DDRE = 0xFF; //포트E를 출력포트로 사용 (0~7비트까지 모두사용)

DDRD = 0x00; //포트D를 입력포트로 사용 (0~7비트까지 모두사용)

3)

while(1){

PORTE = PIND; /* 포트 E를 포트 D의 핀으로 둠

(PORT는 R/W모두 가능하지만, PIN은 R만 가능) */

}

return 0;

}

발표자
프레젠테이션 노트
구동 프로그램 1) 예제 프로그램에서 첫째줄은 앞의 예제와 같이 입출력 관련 시스템 헤더 파일을 Include시키고 있으며, 2) DDRE = 0xFF; 명령을 통해 E 포트를 출력으로, DDRB = 0x00; 명령을 통해 B 포트를 입력으로 선언하고 있다. 3) 그 다음은 while-loop를 이용하여 반복해서 PORTE = PINB; 명령을 사용하고 있는데, 이것은 PINB 즉 GPIO 입력 레지스터인 PINB로부터 들어 오는 데이터를 PORTE 즉 GPIO 출력 레지스터 PORTE에 넣으라는 명령이다. 그러므로, 하나의 버튼을 누르면, 그에 해당하는 비트의 입력 포트 B에 “1”값이 입력되고, 그에 의해 해당 비트의 츨력 포트 E에 “1”값이 출력되어 LED가 켜지는 것이다. % (PORT는 R/W모두 가능하지만, PIN은 R만 가능)
Page 41: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

실습개요 단순 LED가아닌 FND(Flexible Numeric Display: 7-Segment

LED)를이용하여숫자를표시하는실습 마이크로컨트롤러의포트를출력으로선언하고, 이포트를

Array FND 모듈의신호선포트에연결함. 일정시간마다클럭에의해 Array FND에숫자와문자가디스플레이되도록함.

실습목표 GPIO 입출력포트의방향제어및출력제어방법습득 FND LED동작원리습득

발표자
프레젠테이션 노트
이번 예제에서는 단순 LED가 아닌 FND(Flexible Numeric Display: 7-Segment LED)를 이용하여 숫자를 표시하는 프로그램을 작성해 보기로 한다. ATMega128A 마이크로컨트롤러의 포트를 출력으로 선언하고, 이 포트를 FND 모듈의7-Segment LED에 연결하여 일정 시간마다 클럭에 의해 FND(7-Segment)에 숫자와 문자가 디스플레이 되는 것을 알아본다. 목표 GPIO 입출력 포트의 방향 제어 및 출력 제어 방법 습득 FND LED 동작원리 습득
Page 42: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

FND(7-Segment LED) 구조 7-세그먼트는 LED 8개를그림과같이배열 숫자나간단한기호표현에많이사용됨.

공통(Common)단자에인가되는전원에따라서

Common Anode(+공통)과Common Cathode(-공통)으로분류

발표자
프레젠테이션 노트
FND(7-Segment LED) 구조와 구동방법 7-세그먼트는 LED 8개를 그림과 같이 배열해 놓은 것으로서 숫자나 간단한 기호 표현에 많이 사용된다.  여러가지 종류가 있으나 먼저 7-세그먼트는 공통(Common)단자에 인가되는 전원에 따라서 Common Anode(+공통)과 Common Cathode(-공통)으로 분류된다. 또한 14-세그먼트, 3*5 Array, 5*7 Array, 10-Bar Graphic 등이 있다. 7-세그먼트는 아래 그림과 같이 공통 단자에 VCC(+5V)에 연결하고 입력 단자에 0V를 인가하였을 때 해당하는 LED에 램프가 들어오는 Anode(+) 공통형과 공통단자에 접지(0V)를 연결하고 입력단자에 +5V를 인가하였을 때, 해당하는 LED에 램프가 들어오는 Cathode(-) 공통형으로 나누어 진다. 예를들어 7-세그먼트 ‘1’을 표시하기 위해서는 B, C 의 LED를 On 시키면 되고, ‘8’을 표시하려면 A~G까지의 모든 LED를 켜면 된다. 이러한 방법으로 0~9까지의 숫자와 16진수의 A, B, C, D, E, F 등의 문자를 표시할 수 있다.
Page 43: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

FND(7-Segment LED) 구동방법 Common-Cathode방식 : 각단자에 ‘1’이입력되면해당 LED가켜짐

16 진수 7-세그먼트의 비트값 데이터 값

( HEX )H G F E D C B A0 0 0 1 1 1 1 1 1 0X3F1 0 0 0 0 0 1 1 0 0X062 0 1 0 1 1 0 1 1 0X5B3 0 1 0 0 1 1 1 1 0X4F4 0 1 1 0 0 1 1 0 0X665 0 1 1 0 1 1 0 1 0X6D6 0 1 1 1 1 1 0 1 0X7D7 0 0 1 0 0 1 1 1 0X278 0 1 1 1 1 1 1 1 0X7F9 0 1 1 0 1 1 1 1 0X6FA 0 1 1 1 0 1 1 1 0X77B 0 1 1 1 1 1 0 0 0X7CC 0 0 1 1 1 0 0 1 0X39D 0 1 0 1 1 1 1 0 0X5EE 0 1 1 1 1 0 0 1 0X79F 0 1 1 1 0 0 0 1 0X71

7-Segment에서 16진수표시방법

발표자
프레젠테이션 노트
FND(7-Segment LED) 구동방법 여기서는 MCU의 GPIO 실습을 위한 것이므로, MCU 입출력 포트를 이용하여 직접 7-segment LED를 구동해 보도록 한다. HBE-MUC-Multi II Elec 의 FND모듈은 Common-Cathode 방식을 사용함. 따라서, (-) 공통이고, 각단자에 ‘1’이 입력되면 해당 LED가 켜짐. 표는 7-segment 를 이용하여 16진수를 표현하기 위한 비트값을 정리한 것이다. 만약 숫자 3을 표시하려면 “01001111” 즉 0x4F 값을, B를 표시하려면 “01111100” 즉 0x7C를 7-Segment LED의 입력 단자에 넣어주면 된다.
Page 44: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

Array FND(7-Segment LED) 구조와구동방법 눈의착시현상을이용하여숫자를표시

Data선(A~P)을서로공통으로연결 C0를제외한다른 com단자(C1~C3)에대해 GND(0전위)가안되도록한다. 그러면 1개의 7-Segment만숫자가표시될것이다.

이방법을눈이알아차리기전에매우빠른속도로번갈아가면서반복동작

특징전력소모가적다. data선을최소로줄일수있다.깜박거림에의해눈이피로해질수도있다.프로그램이다소어렵다.

A_FND

YDSR-404MK

11 7 4 2 1 10 5 3

12 13 14 15

A B C D E F G P

C0 C1 C2 C3

발표자
프레젠테이션 노트
FND(7-Segment LED) 구조와 구동방법 7-세그먼트는 LED 8개를 그림과 같이 배열해 놓은 것으로서 숫자나 간단한 기호 표현에 많이 사용된다.  여러가지 종류가 있으나 먼저 7-세그먼트는 공통(Common)단자에 인가되는 전원에 따라서 Common Anode(+공통)과 Common Cathode(-공통)으로 분류된다. 또한 14-세그먼트, 3*5 Array, 5*7 Array, 10-Bar Graphic 등이 있다. 7-세그먼트는 아래 그림과 같이 공통 단자에 VCC(+5V)에 연결하고 입력 단자에 0V를 인가하였을 때 해당하는 LED에 램프가 들어오는 Anode(+) 공통형과 공통단자에 접지(0V)를 연결하고 입력단자에 +5V를 인가하였을 때, 해당하는 LED에 램프가 들어오는 Cathode(-) 공통형으로 나누어 진다. 예를들어 7-세그먼트 ‘1’을 표시하기 위해서는 B, C 의 LED를 On 시키면 되고, ‘8’을 표시하려면 A~G까지의 모든 LED를 켜면 된다. 이러한 방법으로 0~9까지의 숫자와 16진수의 A, B, C, D, E, F 등의 문자를 표시할 수 있다.
Page 45: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

사용모듈 MCU 모듈, FND 모듈

발표자
프레젠테이션 노트
사용 모듈 이번 실습에서는 MCU 모듈의 입출력 포트 D와 FND 모듈을 사용한다. 7-Segment LED는 모양은 다르지만 실제 구동 방법은 LED와 거의 같다. 다만 표시하고자 하는 글자에 맞게 해당 비트 LED를 켜주면 되는 것이다.
Page 46: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

사용모듈의회로 FND 모듈(Common-Cathode)

발표자
프레젠테이션 노트
그림에서 보는 바와 같이, FND 모듈에는 2개의 7-Segment LED가 장착되어 있고, 각각 A와 B로 부른다. 각 7-Segment LED는 8개의 입력 신호선(SA_A~SA_H, SB_A~SB_H)을 가지고 있으며, 공통이 접지에 연결되어 있는 Common Cathode형의 FND이다. 따라서, 각 입력 신호선에 “1”을 인가해야 불이 켜지게 된다. A와 B 두개의 FND(7-Segment)중 A의 입력 신호들만 MCU의 입출력 포트 D에 연결할 것이다.
Page 47: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

모듈결선방법 MCU 모듈포트 B의 PB0~PB7을 Array FND 모듈의 A~H 로연결 포트 G의 PG0~PG3을 Array FND 모듈의 C0~C3까지연결

발표자
프레젠테이션 노트
AVR MCU 모듈의 D 포트와 FND모듈의 A 7-Segment의 신호선 포트를 그림과 같이 연결한다. 포트 D의 PD0 ~PD7을 8핀 케이블로 FND 모듈의 SA_A~SA_H 까지 연결한다.
Page 48: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

구동프로그램 : 사전지식 MCU 모듈의 B포트를 FND의불을켜기위한출력포트로설정.

• DDRx 레지스터(여기서는 DDRD 레지스터)에 ‘1’을적어줌.

표를참조하여 PORTx(여기서는 PORTB 레지스터)에 ‘1’을출력.

16 진수7-세그먼트의 비트값 데이터 값

( HEX )H G F E D C B A0 0 0 1 1 1 1 1 1 0X3F1 0 0 0 0 0 1 1 0 0X062 0 1 0 1 1 0 1 1 0X5B3 0 1 0 0 1 1 1 1 0X4F4 0 1 1 0 0 1 1 0 0X665 0 1 1 0 1 1 0 1 0X6D6 0 1 1 1 1 1 0 1 0X7D7 0 0 1 0 0 1 1 1 0X278 0 1 1 1 1 1 1 1 0X7F9 0 1 1 0 1 1 1 1 0X6FA 0 1 1 1 0 1 1 1 0X77B 0 1 1 1 1 1 0 0 0X7CC 0 0 1 1 1 0 0 1 0X39D 0 1 0 1 1 1 1 0 0X5EE 0 1 1 1 1 0 0 1 0X79F 0 1 1 1 0 0 0 1 0X71

발표자
프레젠테이션 노트
이번 예제는 GPIO로 LED 불켜기 실습과 거의 유사하게 구동한다. MCU 모듈의 D포트를 FND(7-Segment)의 불을 켜기 위한 출력 포트로 설정한다. 이를 위해 DDRx 레지스터(여기서는 DDRD 레지스터)에 ‘1’을 적어준다. 7-Segment에 원하는 글자를 표시하기 위해서 앞에서 설명한 표를 참조하여 PORTx(여기서는 PORTD 레지스터)에 ‘1’이라는 값를 적어주면 된다.
Page 49: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

실행결과

프로그램이시작하면 500ms 마다 FND 에 0부터 9, A ~ F 그리고 '_' , '.' 을순차적으로출력한다.

발표자
프레젠테이션 노트
실행 결과 프로그램이 시작하면 500ms 마다 FND 에 0부터 9 , A ~ F 그리고 '_' , '.' 을 순차적으로 출력한다.
Page 50: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

실습 3 : GPIO를이용하여 FND LED 켜기

구동프로그램 : 소스분석 FND.C

1)

#include<avr/io.h>

#include<util/delay.h>

int main(){

2)

unsigned char FND_DATA_TBL [] = {0x3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7C,0X07, 0X7F, 0X67, 0X77, 0X7C, 0X39, 0X5E, 0X79, 0X71, 0X08, 0X80};

unsigned char cnt=0;

3)DDRG = 0x0F; //포트 G의 하위 4비트를 출력포트로 사용(FND 제어핀)

DDRB = 0xFF; //포트 B를 출력포트로 사용(0~7 비트까지 모두사용)

4)

while(1){

PORTB = FND_DATA_TBL[cnt];

cnt++;

if(cnt>17) cnt=0; //테이블 크기를 초과하는 경우 방지.

_delay_ms(500);

}

return 0;

}

AVR 입출력에대한헤더파일과 delay 함수사용을위한헤더파일을선언한다

FND_DATA_TBL [] : 7-Segment에표시할글자의입력데이터를저장

출력되는데이터는{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, _, .}

발표자
프레젠테이션 노트
이 예제는 500ms마다 글자를 바꿔 가면서 7-Segment LED에 표시하도록 하는 프로그램이다. _delay_ms(100); 명령을 for-loop를 이용하여 5번 반복하도록 하여 500ms의 시간지연을 함으로써, 500ms마다 글자가 바뀌도록 하였다. DDRD = 0xFF; 는 입출력 포트 D를 출력으로 선언하는 것이다. 프로그램에서 FND_DATA_TBL []를 배열로 선언하여 7-Segment에 표시할 글자의 입력 데이터를 저장하고 있고, PORTD = FND_DATA_TBL[cnt]; 명령을 이용하여 포트 D로 출력한다. if(cnt>17) cnt=0;는 FND_ DATA_TBL[cnt] 배열의 인덱스 cnt 가 배열 인덱스 범위인 0~17을 벗어나지 않도록 하기 위한 명령이다. 출력되는 데이터는 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, _, .} 이다. 1) AVR 입출력에 대한 헤더 파일과 delay 함수사용을 위한 헤더파일을 선언한다. 2) 0~9, A~F 그리고 점,밑줄 을 FND에 맞추어 정리해둔 테이블을 선언한다. 3) 포트D 를 출력포트로 설정한다. 4) 포트D에 FND_DATA_TBL배열에 저장된 값을 500ms 단위로 하나씩 출력한다. _delay_us()함수는 104 us 까지 , _delay_ms()함수는 35 ms 까지 지원한다.
Page 51: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

결과레포트

레포트문제 입출력포트를출력으로설정하고, 그포트를이용하여 LED에신호를보내점등

각동작별로 delay는 0.5초마다 LED 에불이점등. 단순출력이아니고, GPIO 포트를통해신호를입력하여그신호에따라 LED의불을켜야함

스위치모듈의 1번스위치를누르면 LED 좌우교대쉬프트출력, 2번스위치를누르면좌우교대쉬프트가반대로일어나게프로그램할것

FND(Flexible Numeric Display: 7-Segment LED)를이용하여LED 좌우교대쉬프트가한번일어날때마다 1씩숫자가바뀌도록프로그램할것

발표자
프레젠테이션 노트
이번 예제에서는 단순 LED가 아닌 FND(Flexible Numeric Display: 7-Segment LED)를 이용하여 숫자를 표시하는 프로그램을 작성해 보기로 한다. ATMega128A 마이크로컨트롤러의 포트를 출력으로 선언하고, 이 포트를 FND 모듈의7-Segment LED에 연결하여 일정 시간마다 클럭에 의해 FND(7-Segment)에 숫자와 문자가 디스플레이 되는 것을 알아본다. 목표 GPIO 입출력 포트의 방향 제어 및 출력 제어 방법 습득 FND LED 동작원리 습득
Page 52: 마이크로컨트롤러기능 - ICAT LAB마이크로컨트롤러기능 제 3장GPIO 입출력제어 GPIO 입출력제어 1. HBE-MUC-Multi II Elec 구동 2. 마이크로컨트롤러와

결과레포트

1. LED 좌우교대쉬프트10000000010000000010000000010000000010000000010000000010000000010000000100000010000001000000100000010000001000000100000010000000

+ 강의자료의 예제를 이용 할 것++ 반드시 쉬프트 연산자를 활용할것+++ 조건문, 반복문등을 이용하여 알고리즘작성하여 성공* 각 동작별로 delay는 0.5s

2번버튼을눌렀을때방향

1번버튼을눌렀을때방향

숫자도달시숫자카운트

숫자도달시숫자카운트

발표자
프레젠테이션 노트
이번 예제에서는 단순 LED가 아닌 FND(Flexible Numeric Display: 7-Segment LED)를 이용하여 숫자를 표시하는 프로그램을 작성해 보기로 한다. ATMega128A 마이크로컨트롤러의 포트를 출력으로 선언하고, 이 포트를 FND 모듈의7-Segment LED에 연결하여 일정 시간마다 클럭에 의해 FND(7-Segment)에 숫자와 문자가 디스플레이 되는 것을 알아본다. 목표 GPIO 입출력 포트의 방향 제어 및 출력 제어 방법 습득 FND LED 동작원리 습득

Recommended