AVR 따라하기 > 답변 : 077 - [PWM-1] 딜레이 사용 - LED 1개

TODAY494 TOTAL2,162,335
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR 따라하기 | 2015년 강좌 | 답변 : 077 - [PWM-1] 딜레이 사용 - LED 1개

페이지 정보

작성자 master 작성일2019-11-14 08:26 조회1,064회 댓글2건

본문

 

pwm-1 딜레이 사용
선생님.. pwm을  예제부터 이해 할려고 제가 주석을 적어봣습니다...  제가 적을 주석이 맞게 되어 있는지 잘못되어 있으면 지적 부탁 드립니다.
#define F_CPU 16000000UL // 16 MHz
#include <avr/io.h>
#include <util/delay.h>
//
void dly(int d)  ----- d=pwm을 받는다.
{
    int i;  //i=0이고
    for(i=0;i<d;i++) // i는 d(pwm)보다 항상 1이 작게 출력 된다.
    _delay_us(1);  //시간 1us
}
int main(void){
  int pwm,k;
  DDRA=0xff;
  while(1){
      for(pwm=0;pwm<100;pwm++)  //pwm =0이고
        {
          for(k=0;k<50;k++)  //k=0이고
        {  //반복횟수
              PORTA|= (0x01);    //배터리형식으로 증가한다.?
                dly(pwm); // on time  //  -----①  dly(99) 서서히 켜지고
              PORTA&=~(0x01);
              dly(100-pwm); // off time  pwm100이되는 순간 꺼진다.
          }
      }
  }
}

 

주기를 아주 길게 해서 10초 주기로 PWM을 만든다고 해보죠

0초 ON, 10초 OFF <----- 듀티비 0%, OFF

1초 ON, 9초 OFF <----- 듀티비 10%

2초 ON, 8초 OFF <----- 듀티비 20%

3초 ON, 7초 OFF <----- 듀티비 30%

4초 ON, 6초 OFF <----- 듀티비 40%

5초 ON, 5초 OFF <----- 듀티비 50%

6초 ON, 4초 OFF <----- 듀티비 60%

7초 ON, 3초 OFF <----- 듀티비 70%

8초 ON, 2초 OFF <----- 듀티비 80%

9초 ON, 1초 OFF <----- 듀티비 90%

10초 ON, 0초 OFF <----- 듀티비 100%, ON

 

듀티비가 커질 수록 밝아집니다.

 

위에서는 주기를 아주 길게해서 이해가 쉽도록 작성했지만 

보통은 주기를 아주 짧게 합니다.

 

              PORTA|= (0x01); dly(pwm); // on time
              PORTA&=~(0x01); dly(100-pwm); // off time

이 코드가 ON, OFF를 출력합니다.

pwm이 0 이라면 PORTA|=1dly(0); PORTA&=~1; dly(100); <-- 듀티비 0%, OFF

pwm이 10 이라면 PORTA|=1dly(10); PORTA&=~1; dly(90); <-- 듀티비 10%

pwm이 50 이라면 PORTA|=1dly(50); PORTA&=~1; dly(50); <-- 듀티비 50%

pwm이 90 이라면 PORTA|=1dly(90); PORTA&=~1; dly(10); <-- 듀티비 90%

pwm이 100 이라면 PORTA|=1dly(100); PORTA&=~1; dly(0); <-- 듀티비 100%, ON

 

댓글 2

조회수 1,064

세계제일초보님의 댓글

세계제일초보작성일

선생님 PWM 듀티비는 글 읽고 바로 이해가 되었습니다..
의문이 생기느거는 K의 용도가 반복횟수인데...K가 50이 되면
해당for문 (k=0;k<50;k++) 한번 뛰어 넘고 다시 k=0부터 시작하는건가요..??

master님의 댓글

master댓글의 댓글작성일

맞습니다.

AVR 따라하기HOME > AVR 따라하기 > 전체 목록

AVR 따라하기 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9628
공지 사이트 이용 안내댓글[24] 이미지 master 17-10-29 29628
173 2015년 강좌 106 - [타이머인터럽트-19] 누른시간 & 뗀시간 & 더블클릭 체크 키트 17-08-23 4030
172 2015년 강좌 105 - [타이머인터럽트-18] 스위치 누르는 시간 & 스위치 누르지 않는 시간 체크댓글[3] 키트 17-08-23 4625
171 2015년 강좌 WS2812B [1개]- 테스트 - AVRstudio 키트 17-08-23 3338
170 2015년 강좌 delay_us()보다 더 짧은 딜레이 함수 - 2 키트 17-08-23 3442
169 2015년 강좌 delay_us()보다 더 짧은 딜레이 함수 - 1 키트 17-08-23 3630
168 2015년 강좌 104 - [부저] 회로내장형 키트 17-08-23 4110
167 2015년 강좌 103 - [타이머인터럽트-17] 스위치 누르는 시간 체크 키트 17-08-23 3983
166 2015년 강좌 102 - [타이머인터럽트-16] 스위치 누를 때마다 1칸씩 좌우시프트 키트 17-08-23 3521
165 2015년 강좌 101 - [타이머인터럽트-15] 스위치 8개 SRAM에 읽어서 LED에 출력 키트 17-08-23 2811
164 2015년 강좌 100 - [타이머인터럽트-14] 스위치 8개 읽어서 LED에 출력 (포트 다이렉트) 키트 17-08-23 3225
163 2015년 강좌 099 - [타이머인터럽트-13] 스위치 1개 SRMA에 읽어서 LED에 출력 키트 17-08-23 2358
162 2015년 강좌 098 - [타이머인터럽트-12] 스위치 1개 읽어서 LED에 출력 키트 17-08-23 3485
161 2015년 강좌 096 - [타이머 CTC 토글-3] 스위치 8개 피아노 키트 17-08-23 2553
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기