ATMEGA128 모터 시간제어
페이지 정보
작성자 peace 작성일21-12-23 03:48 조회3,028회 댓글4건본문
버튼 누를시 3초뒤에 모터가 정지되게하는 프로그램을 짜고싶은데 시간제어는 안되고 계속 모터가 돌아가는데 어떻게 하면 3초뒤에 모터동작을 멈추게 할 수 있을까요?
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
volatile int t = 0; // 시간, 0.01sec
volatile int accel=8, timerCnt=1; // 가속 변수(역배속), 0.01초에 맞추기 위한 cnt
volatile int i = 0; // 0 정지, 1 증가
void main(void)
{
PORTB = 0x20; // 0x?0 --> ? X, enable(0: enable, 1: disable), dir(0: 역방향 ,1: 정방향), pwm2
DDRB = 0xFF; //output 0C0(PB4)
PORTF = 0x00;
DDRF = 0x00; // 속도 조절
TCNT0 = 0x00;
OCR0 = 0x00; //값 증가시 duty cycle 증가, 값 감소시 duty cycle 감소
TCCR0 = 0x6C; //0110, 1100 --> Fast PWM, non-inverting mode, presacler:64
sei();
while(1)
{
//OCR0 값 증가시 duty cycle 커져서 속도가 빨라짐
//OCR0 값 감소시 duty cycle 작아져서 속도가 느려짐
if(PINF & 0x01)
{
OCR0 = 250;
timerCnt++;
if( timerCnt >= accel)
{
timerCnt=0;
t++;
if(t == 3000) // 3000 되면 다시 0초로
OCR0 = 0;
}
}
}
}
댓글 : 4
조회수 : 3,028
master님의 댓글
master 작성일
#include <avr/io.h>
#include <util/delay.h>
//
void main(void){
DDRB=0xFF; PORTB=0x20;
TCCR0=0x6C;
while(1){
if(PINF&1){ OCR0=250; _delay_ms(3000); OCR0=0; }
}
}
peace님의 댓글
peace
답변 감사합니다. 혹시 버튼을 누르고 후에 땟을때 3초 뒤에 동작이 멈추게 하려면 어떻게 해야할까요
마스터님이 댓글 남겨주신것은 버튼을 누르고 있어야 모토동작이 하고 때게 되면 시간 상관없이 멈춤 현상이 나타나서요 ㅠㅠ
master님의 댓글
master 작성일
#include <avr/io.h>
#include <util/delay.h>
//
void main(void){
DDRB=0xFF; PORTB=0x20;
TCCR0=0x6C;
while(1){
if(PINF&1){
_delay_ms(100); while(PINF&1); // 뗄 때까지 대기
OCR0=250; _delay_ms(3000); OCR0=0;
}
}
}
peace님의 댓글
peace 작성일감사합니다. 마스터님 피드백으로 해당 코드넣고 해봤을때 1초 후 정지가 되어 _delay_ms(30000);으로 해보니 버튼을 누르고 3초정도 뒤에 모터 동작 정지가 되었습니다.