제가짠 모터제어 소스인데 조금 봐주세요ㅜㅜ(안되내)
신호는 포트3에 모두다 들어 가는데 각도1도정도 천천히 움직이는거에요ㅜㅜ
나름 해볼려고 했는데 몇시간째 삽질만 했어요 ㅠㅠ
어디가 문젠지점 가르켜 주세요 ㅠ타이머 부분이 이론으론 이해가 됬나 했는데;;
막상 소스 써서 쓸라니까 막연해요 ㅠ
#include <at89x52.h>
#define servo_left
#define servo_cent
#define servo_reft
unsigned char motor=0;
unsigned int out[1][9];
int one=0;
void delay (unsigned int min)
{
unsigned int i;
for(i = 1; i <= min; i++);
}
int M[]={6444,7366,8288,9210,10132,11054,11976,12898,13820,14742,15664,16586,17508,18430,19352,
20274,21196,22118,23040}; //1도부터 180도까지
//FFFF=65535
void moter(unsigned m1,unsigned m2,unsigned m3,unsigned m4,unsigned m5,unsigned m6,unsigned m7,unsigned m8)
{
out[0][1]=M[m1];
out[0][2]=M[m2];
out[0][3]=M[m3];
out[0][4]=M[m4];
out[0][5]=M[m5];
out[0][6]=M[m6];
out[0][7]=M[m7];
out[0][8]=M[m8];
}
void timer_interput(void) interrupt 1
{
if(one == 1)
{
P3 = 0x01<<motor;
TH0 = out[0][motor]>>8;
TL0 = out[0][motor] & 0x00FF;
one = 0;
}
else
{
P3=0;
TH0 = 65535-out[0][motor]>>8;
TL0 = 65535-out[0][motor]& 0x00FF;
motor++;
motor&=0x07;
one=1;
}
}
/*void timer()//초기화
{
TMOD=0x01;
ET0=1;
EA=1;
IP=0x02;
TCON=0x01;
TH0 = 65535-out[0][motor]>>8;
TL0 = 65535-out[0][motor]&0xff;
} */
void main()
{
TMOD = 0x01; // Timer 0, mode 1
TCON = 0x10; // TR0=1
TH0 = 42495 >> 8; // initial Timer 0 value
TL0 = 42495 & 0x00FF; // <요기가 문젠지?? 초기값도너보고 이것저것 해봤는데돋 잘모르겟어용어디가 문제지.ㅠㅠ
IP = 0x02; // interrupt priority
IE = 0x82; // EA=ET0=1
for(;;)
{
moter(1,1,1,1,1,1,1,1); //0~180에 있는 값을 넣어주면 모터는 -90도에서 +90도로 동작한다.
delay(2000);
moter(9,9,9,9,9,9,9,9); //0:-90도(왼쪽) 90:0도(중앙) 180: +90도(오른쪽)
delay(2000);
}
}
TL0 = 65535-out[0][motor]&0xff;
TH0 = 65535-out[0][motor]>>8;
TL0 = 65535-out[0][motor]& 0x00FF;
일단 여기부터 문제가 보여보이는군요
65536 값에서 해당 시간을 얻기 위해 빼주는데 그 후에 HIGH BYTE, LOW BYTE로 쉬프트해서 집어 넣는것입니다
님 소스에 가로를 넣어주셔야 계산순서가 맞겠지요
TH0 = (65535-out[0][motor])>>8;
TL0 = (65535-out[0][motor)]& 0xFF;
아 바본갑다... 이런 기초적인.. 한번 돌려보고 글남길게요.. ㅋ
음... 포트로 8개다 신호가 들어가기는한대 ,... 정확한 펄스값이 제대로 들어가지가 않아요 모토가 제어가 안되요..
클럭주기를 잘못 계산했나...
소스를 잘못짯나...
근본적인 전체적으로 소스에 문제 가있나.. 다시 짜서 해봐야겠당. ㅜㅜ
대강 길점 자바주세요 ㅠ