회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
2604 전기전자 아무거나 HOTac-dc 컨버터 회로구성 이론 자료 구할수 있을가요? dogsoccer 2124 2010.04.17
2603 펌웨어 & 코딩언어 HOT마이컴 제어하는 C언어 학습이 어디까지 이루어져야 할까요?8 봄날 1432 2010.04.17
2602 자유주제 HOT질문점 드릴게요 op-amp2 wrtwer 3023 2010.04.17
2601 펌웨어 & 코딩언어 HOT액세스 지정자에 대해서 궁금한 점이 있습니다. TreeOfDream 902 2010.04.17
2600 드론/로봇/라인트레이서 HOT실외에서 라인트레이서 동작시에요~4 금오인 1355 2010.04.16
2599 전기전자 아무거나 HOTPCB회로도 분석중입니다. 기호의 의미를 알수가 없네요..가르쳐 주세요.6 히키 2994 2010.04.16
2598 전기전자 아무거나 HOT토템폴회로에 대해 질문합니다.2 arin06 1344 2010.04.16
2597 전기전자 아무거나 HOT회로 제작 왕 초보입니다.8 딘재 1144 2010.04.16
2596 전기전자 아무거나 HOT다이액과 트라이액 관련...3 딘재 2580 2010.04.16
2595 자유주제 HOT메타세콰이어4 꿈꿍이 1463 2010.04.15
2594 전기전자 아무거나 HOTAbsolute Maximum Ratings의 정확한 의미와 그 기준은 무엇인지 알고 싶습니다.3 히쟈 2740 2010.04.15
마이크로프로세서 HOTat90can128 모터제어 문의드립니다!1 꼬막소녀 1263 2010.04.14
2592 펌웨어 & 코딩언어 HOT조이스틱 관련 Firmware,Driver 관련 조언 부탁드립니다.2 루키키 1092 2010.04.14
2591 개발용역 HOT프리랜서 또는 정규직 pic dsp pwm 설계및 개발직모집 연락바랍니다1 요세스키 9429 2010.04.14
2590 자유주제 HOT마이크로 프로세서.. .4 흠칫 4018 2010.04.14
2589 전기전자 아무거나 HOT인덕터 설계에 대해..2 말을하라고 1455 2010.04.14
2588 중고장터 HOT중고컴터 구합니다~ 야삥뽕뿡 4184 2010.04.13
2587 마이크로프로세서 HOT8051명령어집합에대해서알고싶어요!!2 hanfx 1080 2010.04.13
2586 중고장터 HOT캐논 카메라 변환렌즈 어댑터 삽니다.1 khsk 4340 2010.04.13
2585 자유주제 HOT사랑한다면 이들처럼..3 닉슨네 1669 2010.04.13
  • 이집트는 나일강의 선물.
    - 헤로도토스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.