chapter. 14 dac를이용한 led...

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

Upload: others

Post on 29-Oct-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

DAC를이용한 LED 밝기제어Chapter. 14

Jaeheung, Lee

HBE-MCU-Multi AVR

Page 2: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

목차

1. D/A 변환기

2. 병렬 D/A 변환기로 LED 밝기 제어하기

3. 직렬 D/A 변환기로 LED 밝기 제어하기

Page 3: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

D/A 변환기

¨ D/A 변환기(Digital to Analog Converter)

¤ 디지털 데이터를 아날로그 전압으로 변환하는 소자

¤ A/D변환기와 함께 마이크로프로세서 응용회로에서 널리 사용됨.

¤ 성능 평가 요소 : 변환시간, 분해능, 선형성

¤ 분해능이 높을수록 섬세한 아날로그 값을 출력할 수 있다.

¤ 인터페이스에 따른 분류

n 병렬 D/A 컨버터

n 직렬 D/A 컨버터

Page 4: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

D/A 변환기

¨ 병렬 D/A 변환기(Parallel DAC)¤ DAC 모듈의 병렬 D/A변환기인 AD7302는 두개의 출력 채널을 가지는 8

bit DAC임.

¤ 0~255까지의 디지털 데이터를 0V~5V사이의 아날로그 신호로 바꿔줌.

Pin Name 기 능

D7~D0 데이터 입력, CS 및 WR의 제어 신호를 통해 내부 버퍼에 로드된다.CS Chip Select. Low 신호에 동작한다.WR Write Enable. Low 신호에서 동작되며 CS와 A/B에 의해 동작이 결정된다.

A/B DAC Select. AD7302는 두개의 출력 포트를 지원하며 출력값을 설정할 때 설정할포트를 지정하는 역할을 한다.

LDAC 내부 레지스터에 설정된 포트값에 해당하는 출력을 업데이트하는 역할을 하며 이값을 ‘0’으로 고정할 경우 WR의 값이 상승할 때 출력값이 업데이트 되도록 구성할 수 있다.

CLR 내부 레지스터의 값을 초기화 하는 역할을 한다.

VOUT DAC 출력이며 그 범위는 0V ~ 5.0V 이다.

병렬 D/A 변환기(AD7302) 핀 설명

Page 5: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

D/A 변환기

¨ 병렬 D/A 변환기 AD7302 신호의 타이밍도

Page 6: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

D/A 변환기

¨ 직렬 D/A 변환기(Serial DAC)¤ DAC 모듈의 직렬 D/A변환기 DAC081S101은 시리얼 인터페이스를 가지

는 8비트 D/A 변환기임.

¤ 0~255까지의 디지털 데이터를 0V~5V사이의 아날로그 신호로 바꿔줌.

직렬 D/A 변환기(DAC081S101) 핀 설명

Pin Name 기 능

DIN Serial Data Input. SYNC가 하강 후 CLK 하강 타이밍을 기준으로 16bit가 입력된다.

SCLK Serial Clock Input. DIN 입력에 대한 래치 클럭

SYNCN 데이터의 시작을 알리는 신호로 데이터 입력 구간 동안 Low 값을 가진다.

VOUT DAC 출력이며 그 범위는 0V ~ 5.0V 이다.

Page 7: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

D/A 변환기

¨ 직렬 D/A 변환기 DAC081S101 신호의 타이밍도

Page 8: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 실습 개요

¤ DAC 모듈의 병렬 D/A 변환기를 이용하여 LED의 밝기를 조절하도록한다.

¤ DAC로 디지털 데이터를 출력하여 DAC에서 변환된 아날로그 신호가LED에 입력되어 그 값의 크기에 따라 LED의 밝기가 제어된다.

¨ 실습 목표

¤ 병렬 D/A 변환기의 아날로그 출력 특성을 이해

¤ ATmega128를 이용한 병렬 D/A 변환기 구동 방법 습득

Page 9: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 사용 모듈 : MCU 모듈, LED모듈, DAC 모듈

DAC Analog 출력

LED 모듈 Signal

MCU 모듈

LED 모듈

DAC 모듈

병렬 DAC Signal

포트 E, G

DAC 모듈 병렬 DAC에 연결

DAC 모듈

Page 10: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 사용 모듈 : DAC 모듈의 병렬 DAC부 회로

Page 11: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 모듈 결선 방법

MCU 모듈 포트 E의 PE0 ~PE7을 8핀 케이블로DAC 모듈의 P_DB0 ~ 7까지 연결

MCU 모듈 포트 G의 PG0를 DAC 모듈의 P_CS에, PG1을 P_WR에, PG2를 P_LDAC에, PG3를 P_A/B에 연결

병렬 DAC의 아날로그 출력단자OUTA, OUTB를 2핀 케이블 2개를이용해서 LED 모듈의 LED 0와 1에연결

Page 12: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 사전지식

¤ 개요

n 아날로그 출력 A와 B에 각각 다른 입력 데이터를 넣어서 그 출력에연결된 LED의 밝기를 A는 점점 밝아지게, B는 점점 어두워지게 만들도록 한다

n 데이터 입력시 A/B 신호를 번갈아 ‘0’(A 출력)과 ‘1’(B 출력)로 넣어 주어야 한다.

¤ 소스 구성

n p_dac_lib.c : DAC를 초기화하는 함수와 DAC에 데이터를 입력시키는 함수를 정의

n Parallel_DAC.c : 메인 프로그램 파일

Page 13: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 사전지식

¤ 병렬 DAC 구동을 위한 신호 구현 순서

1) CS , WR 는 low(‘0’)가 될 때 동작을 하므로 처음에는 high(‘1’) 로 설정한다.2) LDAC 핀이 low(‘0’)를 유지하면 Auto update 모드로 동작한다.3) D/A 변환을 하려면 우선, 출력할 AB 포트중 하나를 선택한다.4) 그리고, 칩선택을 위해 CS핀을 low (‘0’)로 한다.5) 데이타를 쓰기 위해 WR를 low(’0’)로 한다.6) 공식 V out = 2 x (N /256) x Vref 에 맞춰서 데이타를 입력한다.

N : 입력하는 데이타Vref : 입력전압(5v) / 2

7) WR, CS을 다시 high(‘1’) 로 해주는 순간 전압이 출력된다.

Page 14: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 소스분석¤ P_dac_lib.h

1-1) #include<avr/io.h>

#define OUTA 0x00

#define OUTB 0x08

#define AD7302_DATA PORTE

#define AD7302_DATA_DDR DDRE

#define AD7302_CTRL PORTG

#define AD7302_CTRL_DDR DDRG

#define P_CS 0x01

#define P_WR 0x02

#define P_LDAC 0x04

#define P_AB 0x08

void DAC_init();

void DAC_vol_gen(unsigned char selAB,unsigned char voltage);

Page 15: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 소스분석¤ P_dac_lib.c

2-1)

#include"P_DAC_lib.h“

void DAC_init(){

AD7302_DATA_DDR = 0xFF; // data 출력

AD7302_DATA = 0x00;

AD7302_CTRL_DDR |= P_CS | P_WR | P_LDAC | P_AB;

AD7302_CTRL |= P_CS | P_WR ; //Auto Update Moce

}

Page 16: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

2-2)

void DAC_vol_gen(unsigned char selAB,unsigned char voltage){

AD7302_CTRL &= ~P_AB ;

AD7302_CTRL |= selAB; // 출력선택

AD7302_CTRL &= ~P_CS;

AD7302_CTRL &= ~P_WR;

AD7302_DATA = voltage; //전압 선택

AD7302_CTRL |= P_WR;

AD7302_CTRL |= P_CS;

}

Page 17: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 소스분석¤ Parallel_DAC.c

3-1) #include<avr/io.h>

#include<util/delay.h>

#include"P_DAC_lib.h“

#define DELAY_MS(x) {static unsigned int _i; \

for(_i=0;_i<x;_i++) \

_delay_ms(1); }

int main()

{

unsigned char VolA = 0x01, VolB = 0xFF;

3-2) DAC_init(); //Parallel DAC초기화 함수

while(1){

Page 18: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

3-3) DAC_vol_gen(OUTA,VolA); //DAC에 데이터를 전송

DAC_vol_gen(OUTB,VolB);

3-4) VolA+ = 4;

VolB- = 4;

VolA = (VolA == 0 ? 0x01 : VolA); //OUTA에는 전압 상승발생

VolB = (VolB == 0 ? 0xFF : VolB); //OUTB에는 전압 하강발생

DELAY_MS(10); //10ms단위로 딜레이 발생

}

return 0;

}

Page 19: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 21 : 병렬 DAC를 이용한 LED 밝기제어

¨ 실행 결과

Page 20: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 실습 개요

¤ DAC 모듈의 직렬 D/A 변환기를 이용하여 LED의 밝기를 조절하도록한다.

¤ DAC로 디지털 데이터를 출력하여 DAC에서 변환된 아날로그 신호가LED에 입력되어 그 값의 크기에 따라 LED의 밝기가 제어된다.

¨ 실습 목표

¤ 직렬 D/A 변환기의 아날로그 출력 특성을 이해

¤ ATmega128를 이용한 직렬 D/A 변환기 구동 방법 습득

Page 21: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 사용 모듈 : MCU 모듈, LED모듈, DAC 모듈

DAC Analog 출력

LED 모듈 Signal

MCU 모듈

LED 모듈

DAC 모듈

직렬 DAC Signal

포트 A DAC 모듈 직렬 DAC에 연결

DAC 모듈

Page 22: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 사용 모듈 : DAC 모듈의 직렬 DAC부 회로

Page 23: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 모듈 결선 방법

MCU 모듈 포트 A의 PA0를 DAC 모듈의 S_DIN에, PA1을 S_CLK에, PA2를 S_SYNC에 연결

직렬 DAC의 아날로그 출력단자 OUT_C는 LED 모듈의 LED 0에 연결

Page 24: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 사전지식

¤ 개요

n 아날로그 DAC에 입력 데이터를 넣어서 그 출력인 OUT_C에 연결된 LED의 밝기를 점점 밝아지게 만들도록 한다.

¤ 직렬 D/A 변환기의 입력 신호

n CLK신호에 맞추어 데이터가 한 비트씩 입력되는데, 그 최상위 비트의위치를 알려주기 위해 SYNC신호를 필요로 한다.

n SYNC 핀이 low가 될 때 쓰기(write) 작업을 실시

n SYNC가 low이고, SCLK가 하강에지일 때, Din이 쉬프트(shift) 레지스터에 저장

n 마지막 16번째 비트의 SCLK 하강에지가 되면, 정해진 동작이 시작되며, SYNC가 high(‘1’) 가 되면 전압이 출력

n 출력 전압 : Vout (출력전압) = Va (입력전압) x (입력 값 / 256)

Page 25: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 사전지식

¤ 직렬 DAC 구동을 위한 신호 구현 순서

1) 먼저 SYNC를 high(‘1’)로 만든다. 2) CLK를 High(‘1’)로 만들었다가 잠시후 다시 Low(‘0’)로 만든다.3) 잠시 후 SYNC를 Low(‘0’)로 만든다.4) CLK를 High(‘1’)로 만들고, 잠시후 데이터를 1 비트 보낸다. 5) 잠시 후 CLK를 Low(‘0’)로 만든다.6) 데이터가 모두 전달될때까지 ④~⑤를 반복한다.

Page 26: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 구동 프로그램 : 소스분석¤ Serial_DAC.c

1) #include<avr/io.h>

#include<util/delay.h>

#define DELAY_MS(x) { static unsigned int _i; \

for(_i=0;_i<x;_i++) \

_delay_ms(1); }

#define CLK 0x02

#define Din 0x01

#define SYNC 0x04

#define DAC_PORT PORTA

#define DAC_DDR DDRA

unsigned char outVol=0;

Page 27: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

2) void Convert_sDAC(unsigned char tmp);

int main(){

DAC_DDR |= CLK | Din | SYNC;

DAC_PORT |= 0x00;

unsigned char VolC = 0x00;

Convert_sDAC(0x00); //초기 출력 전압3) while(1){

Convert_sDAC(VolC);

VolC+ = 4;

VolC =(VolC == 0 ? 0x01 : VolC); //전압 상승

DELAY_MS(10); //10ms단위로 딜레이 발생

}

return 0;

}

Page 28: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

3) void Convert_sDAC(unsigned char tmp){

unsigned int data=0,mask;

unsigned char i;

mask = 0x8000;

data |= tmp<<4;

// write sequence

PORTA |= SYNC;

asm("nop");

PORTA |= (CLK);

asm("nop");

PORTA &= ~(CLK);

asm("nop");

PORTA &= ~SYNC;

asm("nop");

Page 29: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

3) for(i=0;i<16;i++){ //data 전송

PORTA |= (CLK);

asm("nop");

if(data & mask)

PORTA |= Din; //(조건문사용)포트A를 Din으로 출력

else

PORTA &= ~(Din); //포트A를 반전 Din으로 출력

asm("nop");

PORTA &= ~(CLK); //포트A를 반전 CLK로 출력

asm("nop");

data <<= 1;

}

}

Page 30: Chapter. 14 DAC를이용한 LED 밝기제어artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제14장 DAC를 이용한 LED... · 실습21 : 병렬dac를이용한led 밝기제어

실습 22 : 직렬 DAC를 이용한 LED 밝기제어

¨ 실행 결과