회원가입 ID/PW 찾기
AA

딜레이함수, 키제어, 모니터제어는 헤더파일을 생성했다고 가정하겠습니당! ㅠㅠ
빨간부분만 제발 알려주세염!! ㅠㅠ접때두 이문제로 올린적있는데
도와주신분들 정말 진심으로 감사드립니다.


#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>

#define MOTOR_CW  (PORTE &= 0xFB)
#define MOTOR_CCW  (PORTE |= 0x04)

#define MOTOR_STOP  (PORTE &= 0xFD)
#define MOTOR_ENABLE (PORTE |= 0x02)

#define FREQ_CLK10  160000 // clock 10 16Mhz/100
#define PRESCALE  64
#define FREQ_REFER  1000 // 1Khz(1msec)

#define LCD_RS_1  (PORTG |= 0x01)
#define LCD_RS_0  (PORTG &= 0xFE)

#define LCD_RW_1  (PORTG |= 0x02)
#define LCD_RW_0  (PORTG &= 0xFD)

#define EN_1     (PORTG |= 0x04)
#define EN_0      (PORTG &= 0xFB)


// motor control
void initStepMotor(void)
{
 TCCR3A = 0xAA; // COM3A[1:0] = 10. 비교일치시 클리어
     // TOP 셋
     // WGM3[3:0] = 1010, Phase correct PWM mode
     // TOP값은 ICR 레지스터가 결정
 TCCR3B = 0x13;

 ICR3 = 249; // 최고값 250(2msec)
 OCR3A = 90; // 최저값 (duty rate 결정, 클수록 커짐)
    // OC3A를 출력을 설정(PE3)
}

void CtrlStepMotor(unsigned int speed)
{
 if(speed >= 150)
  speed = 150;

 ICR3 = (FREQ_CLK10 / (2*PRESCALE*2*speed))*60;
  // 200Hz/100 // RPM 단위로 환산
}

void initPort()
{
 DDRA = 0x0f; // keypad 제어
 DDRC = 0xff; // LCD 데이터
 DDRG = 0xff; // LCD 제어
 DDRE = 0xff; // 모터펄스, 방향 인에이블
}


int main(void)
{
 char strBuff[20]={0};
 int speed = 0;

 initPort();
 LCD_init();

 initStepMotor();

 sprintf(strBuff,"Welcome");
 LCD_Write(0,0,strBuff);

 ms_delay(500);

 sprintf(strBuff,"Step Motor");
 LCD_Write(0,0,strBuff);
 sprintf(strBuff,"          ");
 LCD_Write(0,1,strBuff);


 
while(1)
  {
  KeyScan();

  if(KeyValue == 0)
  {
   MOTOR_STOP;
  }
  else if(KeyValue == 1)
  {
   MOTOR_ENABLE;
  }
  else if(KeyValue == 2)
  {
   MOTOR_CCW;
  }
    else if(KeyValue == 3)
    {
   MOTOR_CW;
  }
    else if(KeyValue == 4)
  {
   speed =40;
   CtrlStepMotor(speed);
  }
    else if(KeyValue == 5)
  {
   speed =60;
   CtrlStepMotor(speed);
  }
    else if(KeyValue == 6)
  {
   speed =80;
   CtrlStepMotor(speed);
  }
   else if(KeyValue == 7)
  {
   speed =100;
   CtrlStepMotor(speed);
  }

    if(PORTE & 0x04)
   sprintf(strBuff,"Dir = CCW:%3drpm", speed);
    else
   sprintf(strBuff,"DIr = CW : %3drpm", speed);

  LCD_Write(0,1,strBuff);
  }

  return 0;
}

댓글 1

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

search
번호 분류 제목 글쓴이 조회 수 날짜
1 Sensor 설계 HOT사진에 있는 tr 제품명이 먼지 알고 싶습니다 ㅡㅜ5 텐지무용 1160 2010.11.22
  • 사랑은 두 사람이 자기중심주의적이다.
    - A.D.샬
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.