#include <avr/io.h> //16MHz
#define F_CPU 16000000UL // 16 MHz
#include <util/delay.h>
#include"ATmega128_v20m.h"
#define DEBOUNCING_DELAY 20
void RC_Motor(int angle){ // angle : -90도 ~ +90도
int i;
if(angle<-90)angle=-90;
if(angle> 90)angle= 90;
i=(angle)*18 + 3000;
OCR3A=i; //PB5
OCR3B=i; //PB6
}
int angle=0;
int main(void){
MCU_initialize();
Delay_ms(50);
LCD_initialize();
int floor = 3;
PORTE = 0x00;
PORTB = 0x00;
DDRB = 0x00;
//RC서보모터
DDRE=0x18; // PB5,6 out
TCCR3A=0xAA; // FAST PWM
TCCR3B=0x1A; // 8분주=0.5usec
OCR3A=3000; // 1500usec=0도
OCR3B=3000; // 1500usec=0도
ICR3=47999; // 0.5usec*48000=24000usec=41.67Hz
while(1){
if((PINB&0x08)==0){
if(angle>-90){
angle--;
RC_Motor(angle); ;
}
LCD_string(0xc3, "CLOSE DOOR");
Delay_ms(1000);
LCD_initialize();
}
}
}
구현하고 싶은 방식은 4번 스위치를 누르면 서보모터가 -90까지 가며 lcd에는 close door이 뜨게 하는 방법입니다..
위의 소스대로 작성하고 실행하여 봤는데 lcd에 close door만 뜨며 서보모터는 동작하지 않고,
LCD_string(0xc3, "CLOSE DOOR");
Delay_ms(1000);
LCD_initialize();
문을 지우고 사용하였을때는 서보모터가 동작을 -90까지 정상동작합니다...
이 두가지 동작에서 소스가 어떻게 잘못된건지 전혀 몰라서 질문드립니다.