<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

슬라이드 1

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

정보보안 개론과 실습:네트워크

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

ATmega128

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

Microsoft PowerPoint - 08-MP-8-ADC

lecture4(6.범용IO).hwp

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

슬라이드 1

K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

Microsoft PowerPoint - es-arduino-lecture-03

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

슬라이드 1

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

<BDC7C7E83820BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

C & System

[8051] 강의자료.PDF

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

API 매뉴얼

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

WATAVR128_manual.hwp

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

untitled

Microsoft PowerPoint - polling.pptx

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 08-MP-4-interrupt

API 매뉴얼

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Page 2 of 21 Absolute Maximum Ratings Absolute Maximum Rating 값을초과하는조건에서 DTPML을동작시킬경우치명적인손상을 가할수있습니다. Parameter Symbol Conditions min Typ Max Unit Sup

Microsoft PowerPoint - chap03-변수와데이터형.pptx

untitled

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

PowerPoint 프레젠테이션

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - Ch13

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

(MHT-SB112\273\347\276\347\274\255.hwp)

PowerPoint 프레젠테이션

Formatvorlage für Arbeitsanweisungen

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

5.스택(강의자료).key

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징

03장.스택.key

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

AN_0005B_UART

Microsoft Word - PEB08_USER_GUIDE.doc

Page 2 of 27 Absolute Maximum Ratings - Supply voltage : 3.5V - Operating Temperature Range : -20 ~ 70 - Storage Temperature Range : -40 ~ 85 위조건을넘어서게

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft Word - logic2005.doc

AVR Atmega128

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

Formatvorlage für Arbeitsanweisungen

OCW_C언어 기초

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

2주차: 입출력 제어 복습

KEY 디바이스 드라이버

2009년2학기 임베디드시스템 응용

OCW_C언어 기초


CANTUS Evaluation Board Ap. Note

untitled

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

chap8.PDF

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

슬라이드 1

Chapter #01 Subject

Microsoft PowerPoint - 부호기와 복호기.PPT

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

C프로-3장c03逞풚

PowerPoint 프레젠테이션

ATmega128 교재 - 8장 EEPROM.hwp

Microsoft PowerPoint - lab14.pptx

<C3CA3520B0FAC7D0B1B3BBE7BFEB202E687770>

chap10.PDF

Transcription:

8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab.

외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의 PD1 에연결한다. 그리고, SW4 를누르 면상승에지의수를카운트하여포트 C 의 7-segment 에표시한다. 위의기능들을외부입력인터럽트를활용하여동시에구현한다. 84

Port C 7-segment (Direct) CPU Board Port A 7-segment (Decoder) Tact Switch Port E4 Port D1 85

문제 1 제어프로그램 typedef unsigned char INT8; DDRD = 0x00; // Tact SW typedef unsigned int INT16; DDRE = 0x00; // Tact SW #define F_CPU 1000000UL EICRA = 0x0C; // INT1 rising EICRB = 0x02; // INT4 falling #include <avr/io.h> EIMSK = 0x12; // INT1, INT4 enable #include <util/delay.h> EIFR = 0x00; // Flag clear #include <avr/interrupt.h> INT8 i, j, k=0 ; SREG = 0x80; //sei(); while(1) for(i=0; i<6; i++) ISR(INT4_vect) // INT4 interrupt function i=0; ;j j=0; ; for(j=0; j<10; j++) ISR(INT1_vect) // INT1 interrupt function PORTA = (i << 4) j; PORTC = FND[k++] ; _delay_ms(1000); int main (void) DDRA = 0xFF; // 7-segment DDRC = 0xFF; // 7-segment return 0; 86

문제 2 A/D 변환기 ( 온도센서 TMP35 8 비트해상도 ) TMP35 온도센서를활용하여현재온도를측정한다. TMP35 의출력전압을 ADC 의채널 #2 를통해 A/D 변환한다. A/D 변환된 8 비트값으로부터 TMP35 출력전압과온도를계산한다. CPU 클럭주파수 : 1MHz 내부발진기 기준전압 : AVCC 입력전압 입력채널 : ch #2 해상도 : 8비트 온도를 PORTA 의 7-segment 에출력한다. 예를들어, 현재온도가 28 도이면, 2 개의 7-segment 에 28 을출력한다. 87

Port A CPU Board 7-segment (Decoder) 온도센서 (TMP35) Port F2 88

문제 2 제어프로그램 typedef unsigned char INT8; typedef unsigned int INT16; #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define ADC_CH 2 // 입력채널 #define TMP35 100 // TMP35 환산 #define REF_VOLTAGE 2.56 // 기준전압 //#define REF_VOLTAGE 3.3 // 기준전압 //#define REF_VOLTAGE 5.0 // 기준전압 #define RESOLUTION 256.0 // 8비트 //#define RESOLUTION 1024.00 // 10 비트 volatile INT8 read_adc = 0; volatile INT8 adc_flag = 0; ISR(ADC_vect) // ADC interrupt function read_adc adc = ADCH; adc_flag = 1; void adc_init(int8 channel) asm("cli"); // cli( ); ADMUX= (0<<REFS1) (1<<REFS0); REFS0) // 기준전압 ADMUX = (1<<ADLAR); // 8비트해상도 ADMUX = channel; ADCSRA= (1<<ADEN) (1<<ADSC) (1<<ADFR) (1<<ADIE) (0<<ADPS2) (1<<ADPS1) (1<<ADPS0); // 기준클럭 : 1MHz / 8 asm("sei"); // sei( ); //SREG = 0x80; 89

문제 2 제어프로그램 int main (void) INT8 count=0; INT8 Value_10, Value_01; volatile float temp_volt = 0.0; volatile float Temperature = 0.0; DDRG = 0xFF; DDRA = 0xFF; adc_init(adc_ch); CH); // Ch # of ADC _delay_ms(10); if(adc_flag == 1) PORTG = count++; // adc_flag를 clear adc_flag = 0; // 10 비트 ADC 값으로부터전압계산 temp_volt = read_adc * (REF_VOLTAGE/RESOLUTION); // 계산된전압에서온도계산 Temperature = temp_volt * (float)tmp35; PORTA = 0x99; _delay_ms(2000); while(1) // 우측프로그램추가 return 0; // 온도값을 7-segment에표현 Value_10 = Temperature / 10; Value_01 = (INT8) Temperature % 10; PORTA = (Value_10<<4) Value_01; _delay_ms(200); 90

A/D 변환기 가변저항의전압과저항값표시 가변저항에서분배된전압을 ADC 의채널 #1 을통해 A/D 변환한다. A/D 변환된 10 비트값으로부터분배된전압과저항값을계산한다. 문제 3 10 비트값을 16 진수로 3 개의 7-segment (PORTC, PORTA) 에출력한다. 문제 4 계산된전압을 3 개의 7-segment (PORTC, PORTA) 에출력한다. 예를들어, 문제 5 2.74V 이면 2 를 PORTC 에출력하고, 74 를 PORTA 에출력한다. 계산된저항값을 k 단위로 3 개의 7-segment (PORTC, PORTA) 에출력한다. 예 를들어, 5.48k 이면 5 를 PORTC 에출력하고, 48 를 PORTA 에출력한다. 91

Port C 7-segment (Direct) CPU Board Port A 7-segment (Decoder) 가변저항 Port F1 92

+5V x : 10-bit ADC 의출력값 y : ADC 의입력전압 z : 가변저항의저항값 4k ADC0 6k 93

정수와실수를 10 진수로 3 개의 7-segment 에출력 typedef unsigned char INT8; typedef unsigned int INT16; #define F_CPU 1000000UL #include <avr/io.h> INT8 FND[ ] = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x90; int main(void) float Float_num; INT16 Int_num, Int_temp; INT8 Val_100, Val_10, Val_01; Float_num = 3.74 ; Int_num = 512; // 3자리정수를 7-segment에표현 Val_100 = Int_num / 100; Int_temp temp = (Int_num num (Val_100 * 100)); Val_10 = Int_temp / 10; Val_01 = Int_temp % 10; PORTC = FND[Val_100]; PORTA = (Val_10 << 4) Val_01; _delay_ms(2000); // 0에서 10 사이의실수를 7-segment에표현 Int_temp = Float_num * 100; Int_temp = (Int_temp (Val_100 * 100)); Val_10 = Int_temp / 10; Val_01 = Int_temp % 10; PORTC = FND[Val_100]; PORTA = (Val_10 << 4) Val_01; _delay_ms(2000); 94

문제 3 제어프로그램 typedef unsigned char INT8; typedef unsigned int INT16; #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define T_RES 10 // VR 의전체저항값 ISR(ADC_vect) // ADC interrupt function read_adc adc = ADCL; read_adc += (ADCH<<8); adc_flag = 1; void adc_init(unsigned char channel) asm("cli"); // cli( ); ADMUX= (0<<REFS1) (0<<REFS0) (0<<ADLAR); volatile INT16 read_adc = 0; ADMUX = channel; volatile INT8 adc_flag = 0; ADCSRA= (1<<ADEN) (1<<ADSC) INT8 FND[ ] = 0xC0, 0xF9, 0xA4, 0xB0, (1<<ADFR) (1<<ADIE) 0990920820 0x99, 0x92, 0x82, 0xD8, 0x80, 0x90; (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); asm("sei"); // sei( ); //SREG = 0x80; 95

문제 3 제어프로그램 int main (void) INT16 Int_ temp, count=0; INT8 Val_100, Val_10, Val_01; volatile float temp_volt = 0.0; volatile float Resistance = 0.0; DDRG = 0xFF; DDRA = 0xFF; DRC = 0xFF; adc_init(1); // Channel # of ADC _delay_ms(10); if(adc_flag == 1) PORTG = count++; // adc_flag를 clear adc_flag = 0; // 10비트 ADC 값으로부터전압계산 temp_volt = read_adc * (5.0/1023.0); // 계산된전압에서저항값계산 Resistance = temp_volt / 5.0 * T_RES; PORTC = FND[1]; PORTA = 0x23; // 10비트 A/D 변환값을 10진수로표현 _delay_ms(2000); Val_100 = read_adc d / 100; while(1) Int_temp = (read_adc (Val_100 * 100)); Val_10 = Int_temp / 10; // 우측프로그램추가 Val_01 = Int_temp temp %10 10; PORTC = FND[Val_100]; return 0; PORTA = (Val_10 << 4) Val_01; _delay_ms(2000); 96

문제 4 제어프로그램 typedef unsigned char INT8; typedef unsigned int INT16; #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define T_RES 10 // VR 의전체저항값 ISR(ADC_vect) // ADC interrupt function read_adc adc = ADCL; read_adc += (ADCH<<8); adc_flag = 1; void adc_init(unsigned char channel) asm("cli"); // cli( ); ADMUX= (0<<REFS1) (0<<REFS0) (0<<ADLAR); volatile INT16 read_adc = 0; ADMUX = channel; volatile INT8 adc_flag = 0; ADCSRA= (1<<ADEN) (1<<ADSC) INT8 FND[ ] = 0xC0, 0xF9, 0xA4, 0xB0, (1<<ADFR) (1<<ADIE) 0990920820 0x99, 0x92, 0x82, 0xD8, 0x80, 0x90; (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); asm("sei"); // sei( ); //SREG = 0x80; 97

문제 4 제어프로그램 if(adc_flag == 1) PORTG = count++; // adc_flag 를 clear adc_flag = 0; // 10 비트 ADC 값으로부터전압계산 temp_volt = read_adc * (5.0/1023.0); // 계산된전압에서저항값계산 Resistance = temp_volt / 5.0 * T_RES; // 전압값을소수점 2자리로표현 Int_temp t = temp_volt * 100; Int_temp = (Int_temp (Val_100 * 100)); Val_10 = Int_temp / 10; Val_01 = Int_temp temp % 10; PORTC = FND[Val_100]; PORTA = (Val_10 << 4) Val_01; _delay_ms(2000); 98

문제 5 제어프로그램 typedef unsigned char INT8; typedef unsigned int INT16; #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define T_RES 10 // VR 의전체저항값 ISR(ADC_vect) // ADC interrupt function read_adc adc = ADCL; read_adc += (ADCH<<8); adc_flag = 1; void adc_init(unsigned char channel) asm("cli"); // cli( ); ADMUX= (0<<REFS1) (0<<REFS0) (0<<ADLAR); volatile INT16 read_adc = 0; ADMUX = channel; volatile INT8 adc_flag = 0; ADCSRA= (1<<ADEN) (1<<ADSC) INT8 FND[ ] = 0xC0, 0xF9, 0xA4, 0xB0, (1<<ADFR) (1<<ADIE) 0990920820 0x99, 0x92, 0x82, 0xD8, 0x80, 0x90; (1<<ADPS2) (1<<ADPS1) (1<<ADPS0); asm("sei"); // sei( ); //SREG = 0x80; 99

문제 5 제어프로그램 if(adc_flag == 1) PORTG = count++; // adc_flag 를 clear adc_flag = 0; // 10 비트 ADC 값으로부터전압계산 temp_volt = read_adc * (5.0/1023.0); // 계산된전압에서저항값계산 Resistance = temp_volt / 5.0 * T_RES; // k옴단위의저항값을소수점 2자리로표현 Int_temp t = Resistance * 100; Int_temp = (Int_temp (Val_100 * 100)); Val_10 = Int_temp / 10; Val_01 = Int_temp temp % 10; PORTC = FND[Val_100]; PORTA = (Val_10 << 4) Val_01; _delay_ms(2000); 100