BASIC4MCU | 질문게시판 | OC2 가 작동이 안됩니다,,
페이지 정보
작성자 안녕요들 작성일2019-12-23 15:53 조회5,760회 댓글2건본문
atmega128 을 사용중이고 fast pwm로 바퀴 모터를 제어하기 위해서 pb4(oc0) pb7(oc2)를 사용하고 있습니다.
근데 pb4는 잘 작동을 하고 pb7은 아예 작동이 안되는 것 같습니다..
DDRB = 0xFF; // ???? OC0, OC2 ????
TCCR0 |= 1<<WGM00 | 1<<WGM01; // OC0 FAST PWM
TCCR0 |= 1<<CS02 | 1<<CS01 | 0<<CS00; // OC0 ???? : 256
TCCR0 |= 1<<COM01 | 0<<COM00; //
//TCCR2 |= 1<<WGM20 | 1<<WGM21; // OC2 FAST PWM
//TCCR2 |= 1<<CS22 | 0<<CS21 | 0<<CS20; // OC2 ???? : 256
//TCCR2 |= 1<<COM21 | 0<<COM20; //
OCR0 와 OCR2로 속도를 제어할려는 목적인데
OCR0은 잘 작동하고 OCR2는 작동이 아예안됩니다. 무엇이문제일가요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
댓글 2
조회수 5,760master님의 댓글
master 작성일
PB7은 OC2 외에 OC1C도 있습니다.
타이머1은 사용하고 있지 않나요?
다음부터는 전체 소스를 첨부하세요
안녕요들님의 댓글
안녕요들 작성일
motor.h
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void motor_init(void);
void go_straight(int speed);
void go_right(int speed);
void go_left(int speed);
void go_stop();
motor.c
#include "motor.h"
void motor_init(void)
{
DDRB = 0xFF; //
TCCR0 |= 1<<WGM00 | 1<<WGM01; // OC0 FAST PWM
TCCR0 |= 1<<CS02 | 1<<CS01 | 0<<CS00; // OC0 ???? : 256
TCCR0 |= 1<<COM01 | 0<<COM00; // ????? ???
//TCCR2 |= 1<<WGM20 | 1<<WGM21; // OC2 FAST PWM
//TCCR2 |= 1<<CS22 | 0<<CS21 | 0<<CS20; // OC2 ???? : 256
//TCCR2 |= 1<<COM21 | 0<<COM20; // ????? ???
//TCCR2 = 0b01101100;
//TCNT2 = 0;
}
void go_straight(int speed)
{
OCR0 = speed;
//OCR2 = speed;
OCR1A = speed;
}
void go_right(int speed)
{
OCR0 = speed/2;
OCR2 = speed;
}
void go_left(int speed)
{
OCR0 = speed;
OCR2 = speed/2;
}
void go_stop()
{
OCR0 = 0;
OCR2 = 0;
}
메인입니다
int main(void)
{
uart_init();
motor_init();
//DDRB=0x20; TCCR1A=0x82; TCCR1B=0x1B; OCR1A=2; ICR1=12499;
//EICRB=3; EIMSK=0x10; EIFR=0x10;
DDRA = (PORTA & ~(1<<PA1)) | 1<<PA0 ; //PA0(Trigger) ???, PA1(Echo) ???
TCCR1A=0x40; TCCR1B=0x08; //WGM13:0 = (0,1,0,0) CTC mode
// 초음파 센서
while(1){
go_straight(100);
_delay_ms(1000);
go_straight(100);
_delay_ms(1000);
go_stop();
_delay_ms(1000);
go_right(100);
_delay_ms(1000);
}
아마 초음파 센서 때문에 안되는 걸까요?..