Lv. 68 (상무보) 47,736 납
35%
Exp. 46,725/47,610 | 35%
회원가입 ID/PW 찾기
AA

제가짠 모터제어 소스인데 조금 봐주세요ㅜㅜ(안되내)

신호는 포트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);
   
  }
}

댓글 3
  • No Profile
    TH0 = 65535-out[0][motor]>>8;
     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;
  • No Profile
    글쓴이 mgcjjang 07.09.10 17:26 댓글 좋아요 0 싫어요 0

    아 바본갑다... 이런 기초적인.. 한번 돌려보고 글남길게요.. ㅋ

  • No Profile
    글쓴이 볼매(승훈) 07.09.13 02:52 댓글 좋아요 0 싫어요 0

    음...  포트로 8개다 신호가 들어가기는한대 ,... 정확한 펄스값이 제대로 들어가지가 않아요 모토가 제어가 안되요..

    클럭주기를 잘못 계산했나...

    소스를 잘못짯나...

    근본적인 전체적으로 소스에 문제 가있나.. 다시 짜서 해봐야겠당. ㅜㅜ

    대강 길점 자바주세요 ㅠ

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
3 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 3458 2010.03.29
2 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 2861 2008.06.20
1 머신러닝, AI & 알고리즘 HOT순차 프로그램에 대한 간단한 알고리즘과 재귀 알고리즘의 속도 테스트 - by 아크마7 아크마 3060 2007.08.08
  • 오랜 약속보다 당장의 거절이 낫다.
    - 덴마크 격언
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.