<BDC7C7E83820BFB9BAF1BAB8B0EDBCAD2E687770>

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

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

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

Microsoft PowerPoint - 08-MP-8-ADC

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<BDC7C7E83220B0E1B0FABAB8B0EDBCAD202833C1D6C2F7292E687770>

실험 5

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

BY-FDP-4-70.hwp

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<BDC7C7E83120B0E1B0FABAB8B0EDBCAD202832C1D6C2F7292E687770>

Microsoft Word - Lab.4

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

(b) 연산증폭기슬루율측정회로 (c) 연산증폭기공통모드제거비측정회로 그림 1.1. 연산증폭기성능파라미터측정회로

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

API 매뉴얼

API 매뉴얼

슬라이드 1

Microsoft Word - logic2005.doc

<BDC7C7E83320BFB9BAF1BAB8B0EDBCAD2E687770>

그룹웨어와 XXXXX 제목 예제

실험 5

CAN-fly Quick Manual

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

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

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

RVC Robot Vaccum Cleaner

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

Microsoft PowerPoint - Ch13

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

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<BDC7C7E83120BFB9BAF1BAB8B0EDBCAD2E687770>

Microsoft PowerPoint - es-arduino-lecture-03

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

Microsoft Word - FunctionCall

ISP and CodeVisionAVR C Compiler.hwp

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - hw8.ppt [호환 모드]

AVR Atmega128

온습도 판넬미터(JTH-05) 사양서V1.0

Microsoft Word - PLC제어응용-2차시.doc

Microsoft PowerPoint - ICCAD_Analog_lec01.ppt [호환 모드]

KMC.xlsm

28 저전력복합스위칭기반의 0.16mm 2 12b 30MS/s 0.18um CMOS SAR ADC 신희욱외 Ⅰ. 서론 Ⅱ. 제안하는 SAR ADC 구조및회로설계 1. 제안하는 SAR ADC의전체구조

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

[8051] 강의자료.PDF

PowerPoint Presentation

전자회로 실험

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

Microsoft Word - MAI-ISP-STK500_매뉴얼_Ver25.docx

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 8_USART Serial Communication

½½¶óÀ̵å Á¦¸ñ ¾øÀ½

실험 5

Introduction to Computer Science

MicrocontrollerAcademy_Lab_ST_040709

뉴티씨 (NEWTC) 2. FB-CY4E-DEV (FPGA 개발 키트) 구성도 Port Select SW 7 Segment Text LCD UART RS-232C JTAG PORTA (5V) Active Serial PORTB (5V) OSC. 50MHz Analog

Microsoft PowerPoint - Ch12

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft Word - Lab.7

Microsoft Word - LAB_OPamp_Application.doc

ATmega128

PowerPoint 프레젠테이션

COMFILE_VOL13_ cdr

PRO1_14E [읽기 전용]

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20322EB3EDB8AEC7A5C7F6B0FA20B3EDB8AEBCF6C7D02E >

슬라이드 1

Microsoft PowerPoint - hy2-12.pptx

OCW_C언어 기초

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

2주차: 입출력 제어 복습

뉴티씨 (NEWTC) ATmega8 교육용모듈 (Model : AM-8PL ) 메뉴얼 ( 주 ) 뉴티씨 ( NEWTC ) 1. ATmega8 모듈 (AM-8PL) 소개 ATmega8 칩을

Microsoft Word - ASG AT90CAN128 모듈.doc

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

UI TASK & KEY EVENT

PowerPoint 프레젠테이션

< 고급 C 프로그래밍및실습 > 11 장구조체실습문제 문제에대한안내 - 특별한언급이없으면문제의조건에맞지않는입력은입력되지않는다고가정하라. - 특별한언급이없으면, 각줄의맨앞과맨뒤에는공백을출력하지않는다. - 출력예시에서 는각줄의맨앞과맨뒤에출력되는공백을의미한다. - 입출력예시

Microsoft Word - PEB08_USER_GUIDE.doc

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Oct.; 27(10),

Microsoft PowerPoint - chap04-연산자.pptx

AVR128 자료.hwp

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

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

구성품 - UMD 2808 모듈 - JTAG 커넥터 - 젂원 케이블 주요 특징 모듈의 부품화 : 고신뢰성의 DSP 모듈을 최적화된 시스템에 적용 용이 TMS320F2808 ZGMS - 100MHz 탑재 : 확장된 온도규격 (-40 도 ~ 125 도) 적용 Ultralo

(Microsoft Word - GNU\272\270\260\355\274\255)

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

Microsoft PowerPoint - VHDL08.ppt [호환 모드]

Microsoft Word - PIC16x_Section20_Comparator_31020a.doc

Chapter ...

Dr.Kim ATmega128 Training Kit (SAT ).hwp

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

Slide 1

DAQ

SAT8-10.hwp

Transcription:

제목 : 실험 #8 예비보고서 ADC 제어 실험목적 - ADC를이용하여아날로그신호를디지털신호로변환하는과정을이해한다. - ATmega128의내장 ADC 제어방법을이해한다. 실험장비 - ATmega128(AVR Chip), 온도센서 (TC1047A), 조도센서 (TSL251R) 실험이론 - A/D 변환 아날로그신호 샘플링펄스 - A/D 변환과정 - A/D 변환과정은샘플 & 홀드로동작한다. 파형을보다정교하게처리하려면샘플링펄스의주기를짧게하여더많은샘플링결과를얻어야한다. 샘플 & 홀드는샘플링결과값을다음샘플링때까지일정하게유지시킴으로써 ADC가신호를변환하는동안일정한입력값을얻을수있게한다. - 양자화과정 - 아날로그값을바이너리코드로변환하는과정을양자화라고한다. 바이너리코드의비트수를증가시키면샘플링결과를보다정밀하게나타낼수있게된다. - 2 비트와 4 비트의정밀도차이 -

- ATmega128의내장 ADC(Analog-Digital Converter) 모듈 아날로그신호를디지털신호로, A/D 변환해주는모듈을 ADC라고한다. ADC의종류에는플래시, 이중경사, 연속근사, 시그마-델타등이있는데, 연속근사방식이가장널리사용되며, ATmega128의내장 ADC 역시연속근사방식으로동작한다. 10비트분해능 0.5 LSB의적분형비선형성 ±2 LSB의절대정밀도 13~260μs의변환시간 초당 76,900 ~ 15kbps 샘플링 8개의멀티플렉스된단극성입력채널 7개의차동입력채널 10배와 200배의선택적이득을갖는 2개의차동입력채널 ADC의결과값에대한좌우측보정기능 0~VCC까지의 ADC 입력전압범위 기준전압으로내부의 2.56V와외부의 2.0V ~ AVCC를선택가능 프리런닝또는단일변환모드 ADC 변환완료시에인터럽트발생 슬립모드잡음제거기 - ATmega128의 ADC 내부구조및특징 - 아날로그신호는 Port F의 0~7까지 8개의핀을통해입력가능하다. 각핀은 8개의단극성입력으로동작할수있고, 기준입력을제외한 7개의핀은 ADC1~0, ADC3~2, ADC1 기준, ADC2기준등네가지타입의차동입력으로동작할수도있다. ADC1~0과 ADC3~2 차동입력의경우내부증폭기에의해 1배, 10배, 200배중원하는동작을선택할수있다. 1배, 10배증폭의경우 8비트, 200배증폭의경우 7비트의해상도를가진다. 디지털회로의영향을받지않고, 잡읍에보다안정적인동작을수행할수있도록, 독립적인아날로그회로전원단자및기준전원입력단자 AVCC와 AREF를가지고있으며, AVCC는 VCC±0.3V 이내의전압을유지해야한다. AREF는 AVCC와 VCC를초과할수없으며 AVCC나내부의 2.56V 전압을사용할때에는 AREF와 GND 사이에 0.1uF의캐패시터를연결하여사용한다. 단극성입력시주파수는 50~1000kHz, VREF는 2.0V~AVCC, 아날로그입력전압은 GND~VCC를사용한다. 차동입력시주파수는 50~200kHz, VREF는 2.0V~AVCC-0.5, 아날로그입력전압은 GND~VCC를사용한다. A/D변환은단일모드와프리러닝모드가있는데, 프리러닝모드는 ADSRA 레지스터의 ADSC 비트를 1로설정하면처음 A/D변환이시작되고, 이후에도 ADSC를 1로설정할필요없이자동으로변환이반복된다. A/D변환결과는 10비트값으로, ADCH/L 두개의레지스터에저장되는데, 그값은다음공식에의해결정된다. - 단일모드 - - 차동입력 - 차동입력의 GAIN은증폭배율을뜻한다. 이식을통해 A/D 변환결과를통해입력전압인 V IN 과 (V POS -V NEG ) 를계산할수도있다.

- ATmega128 의내장 ADC 관련레지스터 ADC Multiplexer Selection Register. ADC의아날로그입력채널, 기준전압, 변환결과레지스터의저장형식을선택한다. Reference Selection Bits. ADC에사용할기준전압을선택한다. AVCC 및내부전압을사용할경우 AREF와 GND 사이에 0.1uF의캐패시터를연결한다. REFS[1:0] ADLAR ADC Left Adjust Result. A/D변환결과 10비트값이만들어지기때문에 ADCH, L 두개의레지스터에저장되는데, 변환결과를왼쪽으로정렬해 ADC레지스터 16비트공간의최상위에위치시킬것인지, 오른쪽으로정렬해상위 6비트를비울것인지선택한다. 0 = 오른쪽정렬, 1 = 왼쪽정렬 Analog Channel and Gain Selection Bit. ADC에사용할아날로그입력채널을선택한다. 차동입력의경우같은핀을 +, - 입력으로사용할수도있는데, 이는오프셋오차를수정하기위해수정할오프셋을알아내기위해 (Offset calibration) 사용된다. MUX[4:0] - ADMUX 레지스터 -

ADC Control Status Register A. ADC의동작을설정하거나상태를표시한다. ADC Enable. A/D 변환은전력소모가많기때문에 ATmega128은사용할경우에만 ADC 모듈을켜 ADEN 도록구성해놓았다. 이비트의값을 1로설정해 ADC를사용가능하도록해야 A/D변환을수행할수있다. ADC Start Conversion. 이비트를 1로설정하면 A/D 변환이시작된다. 단, 프리러닝모드에서는매번이비트를 1로설정하지않아도처음 1로설정해변환이시작된이후에도자동으로변환이 ADSC 반복된다. ADSC가 1로설정된후, 처음변환에는 25클럭, 이후에는 13클럭이소요된다. A/D변환수행중에도값이 1로유지되며, 변환이끝났을때하드웨어적으로 0으로설정된다. ADC Free Running Select. ADC를프리러닝모드로설정한다. 프리러닝모드에서는 ADSC를 1로설정한이후, ADFR 지속적으로 A/D변환이일어나기때문에, 임의의시간의 A/D 변환결과를읽어들일수있다. ADC Interrupt Flag. A/D변환이완료되어 ADC 레지스터의값이갱신된이후하드웨어적으로 1로설정되고, 인 ADIF 터럽트를요청한다. ADIE와 SREG의 I 비트가 1로설정되어있으면인터럽트가발생된다. 인터럽트처리가시작되면하드웨어적으로 0으로설정되며, 이비트를강제로 0으로클리어하려면이비트에 1을써야한다. ADC Interrupt Enable. ADIE A/D 변환완료인터럽트를허가한다. 실제로인터럽트가처리되려면 SREG 레지스터의 I 비트역시 1로설정되어야한다. ADC Prescaler Select Bit. ADC에인가되는클럭의분주비를선택한다. A/D변환에는일정주기의클럭이소요되므로, 시스템클럭을어떤분주비로나눌것인가에따라변환시간이달라진다. ADPS[2:0] - ADCSRA 레지스터 - ADLAR = 0 ADLAR = 1 ADC Data Register. ADC 의변환결과를저장하는레지스터. 단극성입력시 10 비트양의정수로 0~1023, 차동입력시 10 비트 2 의보수로 512~511 의범위를갖는다. 반드시 ADCL 을먼저읽고 ADCH 를읽어야한다. ADLAR 설정에따라데이터정렬방법이달라지는데, 필요에따라설정해사용하면된다. 예를들어하위 2 비트값이필요없다면 ADLAR 을 1 로설정해상위 8 비트값을모두 ADCH 에저장하도록하는것이사용하기편하다. - ADCH/L 레지스터 -

- 실험킷의 ADC 회로 - 실험킷의 ADC 회로구성 - 실험킷에는 ATmega128 내부 ADC 외에, 외부의 ADC 칩을통한 A/D변환도실습할수있도록구성되어있는데, 회로는위와같다. 입력단자인 SMA-R-PC를통해아날로그신호를입력받고, OPAMP를통해 ADC 칩인 AD0809CCN에 IN0 핀으로입력된다. 그외에 IN1과 2에 ADC0과 1이입력되는데, 이는실험킷의온도센서, 조도센서와연결되어있다. 이세입력은 A0~2 핀의조합으로선택할수있는데, ADC_CS 주소에쓴값을통해선택하는것으로생각된다. 변환된값을읽을때엔 ADC_READ 주소의값을읽어오면된다. 메모리매핑된 ADC 칩의주소에접근하면 CPLD에서 ADC_CS 신호를출력하게되고그신호가 ADC 칩의 START 핀에입력되어 A/D변환이시작된다. - 온도센서 (TC1047A) TC1047A 칩은온도에따라다른크기의전압을출력하는칩이다. 따라서이전압을통해현재온도를알수있게된다. 2.5~5.5V에서동작하며, 최소 40, 최대 125 까지측정가능하다. 0 에서 500mV의출력을내보내며, 1 마다 10mV씩증가한다. 따라서 40 의 100mV ~ 125도의 1.75V 사이의출력값을가진다. - TC1047A 의온도에따른출력그래프 - - 실험킷상의온도센서 - 실험킷의온도센서회로구성 - 입력전압으로 3.3V가사용되었고, 출력값은점퍼설정에따라 ADC0과 ADC2에출력된다. 점퍼 10을쇼트시킬경우 ADC0와연결되어외부 ADC 칩에서사용할수있고, 점퍼 7을쇼트시킬경우 ATmega128의 ADC2 단자에연결되어내부 ADC에서사용할수있다. 0 에서 500mV의출력을내보내기때문에, V IN = ADC * V REF / 1024 공식을통해 A/D변환결과에서입력전압을구하고, 그전압에서 500mV를빼면측정온도를구할수있다.

- 조도센서 (TSL251R) TSL251R 칩은광량에따라다른크기의전압을출력하는칩이다. 따라서이전압을통해현재밝기를알수있게된다. 2.7~5.5V에서동작하며, 어두울시 0에서밝을시최대 3.3V 의출력값을가진다. 또한, 빛을쬐는각도에따라서도아래와같이출력전압이변하기때문에적절한위치선정이중요하다. - TSL251R 의조도에따른출력그래프 - - 실험킷상의조도센서 - 실험킷의조도센서회로구성 - 입력전압으로 3.3V가사용되었고, 출력값은점퍼설정에따라 ADC1과 ADC3에출력된다. 점퍼 9를쇼트시킬경우 ADC1과연결되어외부 ADC 칩에서사용할수있고, 점퍼 8을쇼트시킬경우 ATmega128의 ADC3 단자에연결되어내부 ADC에서사용할수있다. V IN = ADC * V REF / 1024 공식을통해 A/D변환결과에서입력전압을구해조도를알수있다. 실험방법 - AVR Studio 4를이용하여프로그램소스코드작성후빌드하여실행파일 (.hex) 을생성한다. - AVR Studio 4의 AVR Programmer 를이용, AVR칩에프로그램을다운로드하여실험킷에서의동작을확인한다. 예제코드분석.include "m128def.inc".equ TLCD_LE = 0x6800.equ TLCD_CS = 0x6400.cseg.org 0x0000 INIT_MCU: LDI R16, high(0x10ff) LDI R17, low(0x10ff) OUT SPH,R17 OUT SPL,R16 Text LCD 제어신호의메모리매핑주소 Text LCD 데이터버스의메모리매핑주소 프로그램의코드의시작이후의코드를메모리주소 0x00 부터시작장치초기화루틴프로그램의스택설정

LDI R16,0b10000000 OUT MCUCR,R16 CALL INIT_LCD LDI R16, 0x80 LDI R16, '0' LDI R16, 'x' 외부메모리에접근하기위해 MCUCR 레지스터의 SRE 비트를 1 로설정한다. A/D 변환결과를 LCD 에출력하기때문에먼저 LCD 를초기화한다. LCD 의각라인첫행에 0x 를출력한다. LDI R16, 0xC0 LDI R16, '0' LDI R16, 'x' LOOP: LDI R16,0b10000101 OUT ADCSRA,R16 LDI R16,0b01000010 OUT ADMUX,R16 CALL D200US CALL TEMP_SENSOR LDI R16,0b10000101 OUT ADCSRA,R16 LDI R16,0b01000011 OUT ADMUX,R16 CALL D200US CALL LIGHT_SENSOR CALL D200MS JMP LOOP LIGHT_SENSOR: LDI R20,16 LIGHT_SENSOR_SUB1: LDI R16,0b11010101 OUT ADCSRA,R16 NOP LIGHT_SENSOR_SUB2: SBIS ADCSRA, ADIF JMP LIGHT_SENSOR_SUB2 IN R16, ADCL IN R17, ADCH ADD R18, R16 ADC R19, R17 CALL D1MS DEC R20 BRNE LIGHT_SENSOR_SUB1 메인루틴 ADC Enable, 결과우측정렬, 32 분주를사용하도록설정한다. 따라서 ADC 는 8MHz / 32 = 250KHz 로동작한다. AVCC 에인가된외부전압을사용하고, ADC2 와연결된온도센서를단극성으로입력받도록설정한다. 기준전압설정을변경하면회로가안정될때까지최소 125us 이상기다린후 A/D 변환을시작해야하기때문에 200us 의딜레이를준다. 온도센서 A/D 변환루틴을호출한다. ADC Enable, 결과우측정렬, 32 분주를사용하도록설정한다. 따라서 ADC 는 8MHz / 32 = 250KHz 로동작한다. AVCC 에인가된외부전압을사용하고, ADC3 과연결된조도센서를단극성으로입력받도록설정한다. 기준전압설정을변경하면회로가안정될때까지최소 125us 이상기다린후 A/D 변환을시작해야하기때문에 200us 의딜레이를준다. 조도센서 A/D 변환루틴을호출한다. 프로그램반복실행 조도센서 A/D 변환루틴 16 회 A/D 변환을카운트하기위해 R20 에 16 을저장한다. 조도센서 A/D 변환시작루틴 A/D 변환을시작하며, ADIF 플래그를 0 으로설정한다. 조도센서 A/D 변환결과처리루틴 ADIF 플래그를조사하여 1 일때까지대기한다. A/D 변환결과를 R17:R16 에가져온다. 이전 A/D 변환결과에현재 A/D 변환결과를더한다. 16 회의 A/D 변환이수행될때까지 A/D 변환시작루틴으로돌아가반복한다. 16 회에걸친 A/D 변환결과가더해진값을가지고있는 R19:R18 레지스터를우측으로네번쉬프트하여 16 으로나눈값을만든다. 즉 (16 회 A/D 변환값의합 ) / 16 으로, 평균값을구한다.

LDI R16,0x82 MOV R17,R19 MOV R16,R18 CALL LCD_4HEX LDI R16,0x89 LDI R17,high(330) LDI R16,low(330) CALL MUL16 LDI R23,high(1024) LDI R22,low(1024) ; ; CLR R23 LDI R22,10 MOV R20, R18 CLR R23 LDI R22,10 ORI R16, '0' LDI R16,'.' MOV R16, R18 ORI R16, '0' MOV R16,R20 ORI R16,'0' RET TEMP_SENSOR: LDI R20,16 LCD 의첫번째행세번째열에커서를위치시킨다. 16 비트숫자를 4 자리 16 진수로변환하여 LCD 에출력해주는 LCD_4HEX 루틴을호출하기위해인수로사용하는 R17:R16 에 A/D 변환값을복사한뒤, LCD_4HEX 루틴을호출한다. 즉, 조도센서의 A/D 변환결과값을 16 진수로출력한다. LCD 의첫번째행열번째열에커서를위치시킨다. 이후의코드는입력전압을계산하는코드이다. 기준전압인 3.3V 에서소수둘째자리까지남기기위해 100 을곱한 330 을곱할수로 R17:R16 에저장한다. R19:R18 을 R17:R16 과곱해결과를 R19~R16 에저장하는루틴인 MUL16 을호출한다. R19:R18 은위에서계산한 A/D 변환의평균값이다. 입력전압계산식에따라 1024 로나누기위해 1024 를 R17:R16 에저장한다. R19~R16 을 R23:R22 로나눠몫을 R17:R16 에, 나머지를 R19:R18 에저장하는루틴인 DIV16 을호출한다. 위나눗셈결과를다시 10 으로나눈다. 나머지를 R20 에복사한다. 위나눗셈결과를다시 10 으로나눈다. 즉, 100 을나눈나머지 10 진수두자리값이 R18 과 R20 에저장된다. 현재 LCD 커서위치에 0 을출력한다. 현재 LCD 커서위치에. 을출력한다. 나머지중 10 의자리값에 0 의 ASCII 코드값을더해해당숫자의문자값을 R16 에저장하고, LCD_DATA 루틴을호출해현재 LCD 커서위치에나머지중 10 의자리값을출력한다. 나머지중 1 의자리값에 0 의 ASCII 코드값을더해해당숫자의문자값을 R16 에저장하고, LCD_DATA 루틴을호출해현재 LCD 커서위치에나머지중 1 의자리값을출력한다. 온도센서 A/D 변환루틴이하과정은조도센서 A/D 변환루틴과크게차이가없다. TEMP_SENSOR_SUB1: LDI R16,0b11010101 OUT ADCSRA,R16 NOP TEMP_SENSOR_SUB2: SBIS ADCSRA, ADIF JMP TEMP_SENSOR_SUB2 IN R16, ADCL IN R17, ADCH ADD R18, R16 ADC R19, R17 CALL D1MS DEC R20 BRNE TEMP_SENSOR_SUB1

LDI R16,0xC2 MOV R17,R19 MOV R16,R18 CALL LCD_4HEX LDI R16,0xC9 LDI R17,high(1122) LDI R16,low(1122) CALL MUL16 온도센서값은 LCD 의두번째행에표시한다. 조도센서와달리기준전압인 3.3V 에 100 을곱한 330 대신 1122 를곱하기위해준비하는데, 이유는할수없다. LDI R23,high(1024) LDI R22,low(1024) CLR R23 LDI R22,10 MOV R20, R18 CLR R23 LDI R22,10 ORI R16, '0' MOV R16, R18 ORI R16, '0' LDI R16,'.' MOV R16,R20 ORI R16,'0' RET.include "Delay.asm".include "LCD_LIB.asm".include "Math_LIB.asm" 딜레이관련함수가정의된 asm 파일 LCD 제어관련함수가정의된 asm 파일 16 비트곱셈, 나눗셈용함수가정의된 asm 파일 참고문헌 - ADC 이론 : 보조자료 ADC Document.pdf - 온도센서이론 : TC1047A Datasheet - 조도센서이론 : TSL251R Datasheet