Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- uart 통신
- half adder
- gpio
- ATMEGA128A
- pwm
- BASYS3
- FND
- behavioral modeling
- hc-sr04
- Linked List
- Pspice
- java
- prescaling
- i2c 통신
- stop watch
- test bench
- LED
- Algorithm
- ring counter
- Edge Detector
- KEYPAD
- dataflow modeling
- Recursion
- vivado
- soc 설계
- D Flip Flop
- verilog
- DHT11
- structural modeling
- atmega 128a
Archives
- Today
- Total
거북이처럼 천천히
Atmega 128A의 버튼 (기초) 본문
1. 환경 : Microchip Studio
2. 목표 : 1) PD0에 버튼을 연결, 2) Pull-UP 회로 구성
3) PORTF에 LED의 연결 한 뒤, 3번째 핀만 출력으로 사용
==> 버튼을 누르기 전 상태는 LED가 꺼져 있지만, 버튼을 누르면 LED가 켜지도록 설계
3. 선행 지식
- 프로그래밍 하기전, 회로를 구성함에 따라 동작 결과는 전혀 다르게 나타나기 때문에 회로에 대한
기초 지식이 필요하다.
- Floating, Pull-up, Pull-down 에 대해서 이해할 필요가 있다.
- https://jbhdeve.tistory.com/147
4. Source code
- 해당 코드는 풀 업 회로를 구성한 뒤, 아래와 같은 동작하도록 설게했다.
● 버튼이 눌렀을 때, PORT F의 3번째 다이오드가 켜진다.
● 버튼을 누르지 않으면, PORT F의 3번째 다이오드는 꺼진다.
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
// Substitute constant
#define BUTTON_DDR DDRD
#define LED_DDR DDRF
#define LED_PORT PORTF
int main(void) {
// 포트 D에서 0핀에 Button을 연결할 것이기 때문에
// 포트 D의 0핀을 통해 입력을 받을 것이기 때문에
// DDRD = xxxx xxx0 으로 설정
BUTTON_DDR &= ~(1<<0);
// 포트 F에서 4번핀 만 LED를 출력시키겠다.
// DDRF = xxxx 1xxx 으로 설정
LED_DDR |= (1<<3);
while(1) {
// 현재 회로는 Pull Up 형식으로 구성한 상태이다.
// 버튼을 누르기 전까지는 Button은 Open 상태이기 때문에
// PIND에 5V (= High level)이 인가되는 상태이다.
// 따라서 (PIND & (1<<0)) == True이다.
// 즉, 버튼을 누르지 않으면 항상 True이다.
// 하지만, Pull-down으로 회로를 구성하면 말이 달라진다.
if(PIND & (1<<0)) LED_PORT &= ~(1<<3);
else LED_PORT |= (1<<3);
// 하지만, 버튼을 누르면 Pull-up 회로를 기준으로 Vcc를 통해 공급되던
// 전류가 Button을 통해 GND로 가기 때문에 PD0를 통해 공급되던 전류의 값은 0A가 된다.
// 따라서 (PIND & (1<<0)) == False가 된다.
}
}
5. 구현 영상
※ 마무리
- 동일한 소스 코드라고 해도 회로를 어떻게 구성하느냐에 따라 전혀 다른 결과가 발생할 수 있기 때문에
이 점을 유의해서 공부하도록 하자.
'Embedded Programming (AVR) > Atmega 128A (실습)' 카테고리의 다른 글
Interrupt - 기초 (1) (0) | 2024.05.29 |
---|---|
GPIO - LED control (3) (0) | 2024.05.29 |
Data Direction Register의 비트 단위로 Control (0) | 2024.05.26 |
궁금증 정리 노트 - Atmega128A (0) | 2024.05.25 |
Pointer (0) | 2024.05.25 |