BASIC4MCU | 질문게시판 | AVR PWM 질문
페이지 정보
작성자 master 작성일2019-12-25 21:43 조회4,660회 댓글0건본문
Q)
atmega128 듀티비 조절
스위치 1 , 스위치2, 출련은 하나에
질문 1) 스위치1 한번 눌르고 땟을때, 10ms 한번더 눌렀을때, 20ms...
이런식 듀티비를 조정하고
스위치2 은 반대로 듀티비를 100->90->80...이런식으로 줄어들게 조절하는 소스를 구현해주세요
2) 아니면 스위치1 을 눌르고 있으면 듀티비가 계속상승 하여 원하는 듀티비에 맞춰 졌을때 스위치
때면 원하는 듀티비 나오게.. 스위치2는 반대로 하강해서 맞추곘끔.
3) 원하는 (s)초를 LCD에표현
소스좀 짜주세요.
//
A)
LCD 선 연결
[LCD] [AVR PortA]
RS (pin4) ----- bit 0
RD (pin 5) ----- bit 1
EN (pin 6) ----- bit 2
//사용안함 bit 3
DB4 (pin 11) --- bit 4
DB5 (pin 12) --- bit 5
DB6 (pin 13) --- bit 6
DB7 (pin 14) --- bit 7
//코드비젼
//
#include
#include
//
#asm
.equ __lcd_port=0x1B ;포트A
#endasm#include
//char pwm=0, cnt=0, lcdbuf[20];
//interrupt [EXT_INT0] void ext_int0_isr(void){
if(pwm<100)pwm++;
}
interrupt [EXT_INT1] void ext_int1_isr(void){if(pwm>0)pwm--;
}
//
interrupt [TIM0_COMP] void timer0_comp_isr(void){ // 매치 인터럽트
if(cnt<=pwm)PORTB=0xff;
else PORTB=0x00;
if(++cnt>=100)cnt=0;
}
//
void main(void){
DDRA=0xff; // lcd 포트 출력으로 지정
DDRB=0xff; // PWM 포트 출력으로 지정
TCCR0=0x0D; OCR0=124; TIMSK=2; //16000000/128/(1+124)=1000Hz=1msEICRA=0xaa; EIMSK=3;
lcd_init(16); // lcd초기화
lcd_gotoxy(0,0); lcd_putsf("PWM Up-Down test"); // 첫째줄 표시
SREG=0x80;
while(1){
lcd_gotoxy(0,1); sprintf(lcdbuf, "PWM = %3d", pwm); lcd_puts(lcdbuf);
delay_ms(100); // 0.1초 delay
}
}
//========================================100ms 주기에서 1ms 단위로 1씩 증가 감소 하는 예제입니다.지금 만든 소스니...버그와 컴파일 에러는 직접 수정 하세요
댓글 0
조회수 4,660등록된 댓글이 없습니다.