로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
5328 답변완료스테핑모터. 백철웅 2010-06-11 1,342
#include <iom128v.h> #include <macros.h> #include <stdio.h> /* Stepping Motor derive---------------------------*/ unsigned char LEFTmotorOneClock(unsigned char step, char dir) { step = step & 0x0f; if(dir){ switch(step){ case 0x09: step=0x01; break; case 0x01: step=0x03; break; case 0x03: step=0x02; break; case 0x02: step=0x06; break; case 0x06: step=0x04; break; case 0x04: step=0x0c; break; case 0x0c: step=0x08; break; case 0x08: step=0x09; break; default: step=0x0c; break; } }else{ switch(step){ case 0x09: step=0x08; break; case 0x01: step=0x09; break; case 0x03: step=0x01; break; case 0x02: step=0x03; break; case 0x06: step=0x02; break; case 0x04: step=0x06; break; case 0x0c: step=0x04; break; case 0x08: step=0x0c; break; default: step=0x0c; break; } } return step; } /* Stepping Motor derive---------------------------*/ unsigned char RIGHTmotorOneClock(unsigned char step, char dir) { step = step & 0xf0; if(dir){ switch(step){ case 0x90: step=0x10; break; case 0x10: step=0x30; break; case 0x30: step=0x20; break; case 0x20: step=0x60; break; case 0x60: step=0x40; break; case 0x40: step=0xc0; break; case 0xc0: step=0x80; break; case 0x80: step=0x90; break; default: step=0xc0; break; } }else{ switch(step){ case 0x90: step=0x80; break; case 0x10: step=0x90; break; case 0x30: step=0x10; break; case 0x20: step=0x30; break; case 0x60: step=0x20; break; case 0x40: step=0x60; break; case 0xc0: step=0x40; break; case 0x80: step=0xc0; break; default: step=0xc0; break; } } return step; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } void main(void) { volatile unsigned char stepleft=0, stepright=0; int clknum=0; DDRG=0xf3; DDRC=0xff; DDRD=0xf0; //insert your functional code here... while(1){ if(PING & 0xf8){ if(clknum <= 200){ PORTG=0x01; stepright = RIGHTmotorOneClock(stepright, 1); stepleft = LEFTmotorOneClock(stepleft, 0); delay(3); PORTC= stepleft|stepright; } } if(PING & 0xf4){ if(clknum <= 200){ PORTG=0x02; stepright = RIGHTmotorOneClock(stepright, 0); stepleft = LEFTmotorOneClock(stepleft, 1); delay(3); PORTC= stepleft|stepright;} } } clknum++; if(clknum>300) clknum = 300; // limit } 알려주신대로 해보았는데.. 여전히 멈추질 않네요..
관리자 답변 NEWTC · 2010-06-11
안녕하세요 하드웨어 및 예제코드에 관련에 대해서 질의 받지만, 코드수정은 관련해서는 써포트를 하지않습니다. 죄송합니다. > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > > > > > > > >/* Stepping Motor derive---------------------------*/ >unsigned char LEFTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0x0f; > if(dir){ > switch(step){ > case 0x09: step=0x01; break; > case 0x01: step=0x03; break; > case 0x03: step=0x02; break; > case 0x02: step=0x06; break; > case 0x06: step=0x04; break; > case 0x04: step=0x0c; break; > case 0x0c: step=0x08; break; > case 0x08: step=0x09; break; > default: step=0x0c; break; > } > }else{ > switch(step){ > case 0x09: step=0x08; break; > case 0x01: step=0x09; break; > case 0x03: step=0x01; break; > case 0x02: step=0x03; break; > case 0x06: step=0x02; break; > case 0x04: step=0x06; break; > case 0x0c: step=0x04; break; > case 0x08: step=0x0c; break; > default: step=0x0c; break; > } > } > return step; > >} > >/* Stepping Motor derive---------------------------*/ >unsigned char RIGHTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0xf0; > if(dir){ > switch(step){ > case 0x90: step=0x10; break; > case 0x10: step=0x30; break; > case 0x30: step=0x20; break; > case 0x20: step=0x60; break; > case 0x60: step=0x40; break; > case 0x40: step=0xc0; break; > case 0xc0: step=0x80; break; > case 0x80: step=0x90; break; > default: step=0xc0; break; > } > }else{ > switch(step){ > case 0x90: step=0x80; break; > case 0x10: step=0x90; break; > case 0x30: step=0x10; break; > case 0x20: step=0x30; break; > case 0x60: step=0x20; break; > case 0x40: step=0x60; break; > case 0xc0: step=0x40; break; > case 0x80: step=0xc0; break; > default: step=0xc0; break; > } > } > return step; >} > > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { for(j=1;j<600;j++); > } > > } > > > >void main(void) >{ > volatile unsigned char stepleft=0, stepright=0; > int clknum=0; > DDRG=0xf3; > DDRC=0xff; > DDRD=0xf0; > > //insert your functional code here... > > > >while(1){ > if(PING & 0xf8){ > if(clknum <= 200){ > PORTG=0x01; > stepright = RIGHTmotorOneClock(stepright, 1); > stepleft = LEFTmotorOneClock(stepleft, 0); > delay(3); > PORTC= stepleft|stepright; > } > } > > > > if(PING & 0xf4){ > if(clknum <= 200){ > PORTG=0x02; > stepright = RIGHTmotorOneClock(stepright, 0); > stepleft = LEFTmotorOneClock(stepleft, 1); > delay(3); > PORTC= stepleft|stepright;} > } > } > clknum++; > if(clknum>300) clknum = 300; // limit >} > >알려주신대로 해보았는데.. 여전히 멈추질 않네요..
5327 답변완료2축 자이로 질문입니다. 박진영 2010-06-11 1,374
각도 구하는 소스라고 해서 링크된 것을 찾아 해보았습니다. http://newtc.co.kr/board/view.php?id=qna&page=1&sn1=&divpage=3&sn=off&ss=on&sc=on&keyword=각도&select_arrange=headnum&desc=asc&no=13140 컴파일러는 IAR을 사용하고 있는데 위 소스는 ICCAVR인것 같은데 맞나요? IAR컴파일러용 소스는 만들어 주실수 없는지요;; #include <iom128.h> 로 바꾸고 #include <macro.h> 이거는 없는데 그래서 그냥 iomacro.h로 바꿔서 컴파일 에러 안나게 하고 ADMUX는 제가 f포트 4번을 쓰기에 ADMUX = 0x03;으로 고치고 int putchar(char c) { while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; return c; } 이부분 에러나길래 int putchar(int c) { while (((UCSR0A>>5)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; return c; } 이렇게 바꾸고 CLI(); //disable all interrupts SEI(); //re-enable interrupts 이쪽 에러 나길래 SREG &=~0x80; SREG |= 0x80; 으로 바꿔주니 에러는 없어 지고 빌드하였습니다. 하이퍼터미널로 돌려보니 printf( "\\r\\n GYRO..QQ"); printf( "\\r\\n ADCSRA = 0x%x", ADCSRA ); printf( "\\r\\n ADMUX = 0x%x", ADMUX ); printf( "\\r\\n ACSR = 0x%x", ACSR ); 이쪽 부분만 출력되어 나오는데 무슨 문제인지 알수있을까요;ㅣ;
관리자 답변 NEWTC · 2010-06-11
안녕하세요 본사에서는 코드를 수정을 해드릴지 않습니다. ICCAVR로 짠 코드 입니다. 당연히 안되는 이유가 icc용을 iar컴파일러로 재대로 변경을 하지 못한 이유입니다. ICC용으로 먼저 확인해 보시길 바랍니다. 수고하세요 >각도 구하는 소스라고 해서 링크된 것을 찾아 해보았습니다. > >http://newtc.co.kr/board/view.php?id=qna&page=1&sn1=&divpage=3&sn=off&ss=on&sc=on&keyword=각도&select_arrange=headnum&desc=asc&no=13140 > >컴파일러는 IAR을 사용하고 있는데 위 소스는 ICCAVR인것 같은데 맞나요? > >IAR컴파일러용 소스는 만들어 주실수 없는지요;; > >#include <iom128.h> 로 바꾸고 >#include <macro.h> 이거는 없는데 그래서 그냥 iomacro.h로 바꿔서 컴파일 에러 안나게 하고 >ADMUX는 제가 f포트 4번을 쓰기에 ADMUX = 0x03;으로 고치고 > >int putchar(char c) >{ > while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty > > UDR0 = c; > return c; >} > >이부분 에러나길래 >int putchar(int c) >{ > while (((UCSR0A>>5)&0x01) == 0) ; // UDRE, data register empty > > UDR0 = c; > return c; >} >이렇게 바꾸고 > > > > >CLI(); //disable all interrupts >SEI(); //re-enable interrupts >이쪽 에러 나길래 > >SREG &=~0x80; >SREG |= 0x80; >으로 바꿔주니 에러는 없어 지고 빌드하였습니다. > >하이퍼터미널로 돌려보니 > > printf( "\\r\\n GYRO..QQ"); > printf( "\\r\\n ADCSRA = 0x%x", ADCSRA ); > printf( "\\r\\n ADMUX = 0x%x", ADMUX ); > printf( "\\r\\n ACSR = 0x%x", ACSR ); > >이쪽 부분만 출력되어 나오는데 무슨 문제인지 알수있을까요;ㅣ;
5326 답변완료AD-USBISP V03의 문의 이준성 2010-06-10 1,431
안녕하세요 AD-USBISP V03을 노트북에서 사용하려고 합니다. 제가 다운로드하는 프로그램은 ponyprog2000 입니다. 여기서도 사용가능한지요?
관리자 답변 NEWTC · 2010-06-11
안녕하세요 다운로드툴인 ponyprog2000 보통 패럴러(프린트포트) 방식의 다운로드 툴입니다. AD-USBISP V03 로 연결하서 사용할수 없습니다 다운로드가 가능한것은 avrstudio, 코드비젼 등이 있습니다. 수고하세요 >안녕하세요 >AD-USBISP V03을 노트북에서 사용하려고 합니다. > >제가 다운로드하는 프로그램은 ponyprog2000 입니다. > >여기서도 사용가능한지요? > >
5325 답변완료JTAG ICE mk-II와 AM-128 Pro V2 연결시 발생하는 문제 임은천 2010-06-10 1,954
사용타겟보드명 : AM-128PRO V02 사용 컴파일러 및 버전 : AVR Stduio 4.18 Build 684 에러의 전체적인 내용 0. 저는 전기 전자 공학 전공이 아니라서 아는 것이 별로 없지만 인터넷 검색을 통해서 제가 할 수 있는데까지는 해봤습니다. 1. JTAG ICE mk-II가 연구실에 있고 AM-128 Pro 모듈 3개를 테스트하기 위해서 사진과 같이 연결 하였습니다. 2. 이 때 타겟 보드에서 ISP로 사용하는 핀수가 6개임을 알고 mk-II와 연결하기 위해 mk-II의 Datasheet를 확인하여 보니 다음과 같은 내용이 있었습니다. JTAGICE mkII probe ISP6PIN header ISP debugWIRE Pin 1 (TCK) Pin 3 SCK x Pin 2 (GND) Pin 6 GND x x Pin 3 (TDO) Pin 1 MISO x Pin 4 (VTref) Pin 2 VCC x x Pin 6 (nSRST) Pin 5 RESET x x Pin 9 (TDI) Pin 4 MOSI x 이를 정리하면 Pin 1은 SCK로, Pin 2는 GND로 Pin 3은 MISO로 Pin 4는 VCC로 Pin 6은 RESET로 Pin 9는 MOSI로 입니다. 3. 그래서 그림에 잘은 안보이지만 보드에 연결하기 위한 커넥터를 만들기 위해서 기판을 조금 자르고 헤더를 연결한 후에 납땜하고 여기에 wire를 납땜했습니다. 4. 이 때, mk-II의 핀에서 9번(TDI), 3번(TDO), 1번(TCK), 6번(nSRST), 2번(GND), 4번(Vref)의 순서로 타겟 보드의 데이터시트 3페이지를 따라 1번(MOSI), 2번(MISO), 3번(SCK), 4번(RESET), 5번(GND), 6번(VCC)에 차례대로 연결되도록 했습니다. 5. 이 상태에서 링크에 있는 mk-II의 문서를 참고하여 AVR Studio를 설치하니 펌웨어가 업데이트 되었습니다. 이로써 mk-II는 정상 동작하는 것을 알게 되었습니다. 6. 전원 공급기가 연구실에 있어서 5V를 인가하니 67mA과 63mA 사이를 왔다갔다 하면서 타겟 보드의 불이 들어오는 것을 확인했습니다. 7. 링크 문서 7 페이지를 확인해 보니 타겟 보드의 전원이 정상적으로 인식되었고, JTag mk-II도 정상적으로 인식된 것을 알 수 있었습니다. 저의 추가적인 해결 노력 0. 그래서 문제는 fuse bit가 아닐까 하여 fuse bit 관련된 내용을 현재 게시판에서 검색하여 링크 2번의 내용을 확인하였습니다. 1. 그래서 AVR Studio 연결을 한 후에 ISP Mode로 변경하여 보았으나 여전히 타겟 보드의 signiture 조차 읽지 못함을 알게 되었습니다. 2. Reset 버튼을 누른 상태에서는 Signiture를 읽을 수 있지만 이는 0x1E 0x97 0x02의 값을 가집니다. 3. Signiture를 읽은 후에 Fuse Bit 읽는 메뉴로 갔다가 다시 Sigiture를 읽으려면 Reset 버튼을 다시 눌러야 합니다. 4. Reset 버튼을 누른 상태에서 Fuse Bit를 읽으면 초기값(0xFF19EF)로 되어 있습니다. 5. Reset 버튼을 누른 상태에서 2.53V, 100 mA가 흐릅니다. 답변 받기 원하는 내용 0. mk-II로 부터 타겟 보드에 연결한 핀 배선이 맞는 것인지 여부 1. 타겟 보드를 인식시키려면 ISP에서 fuse bit를 jtag en을 활성화 시켜 해야 한다는데 이것을 AVR Studio에서 어떻게 하는지의 방법 2. mk-II로 불가능하다면 어떤 장비가 필요한지 3. 그 외에 인식을 위해서 제가 추가적으로 해야 하는 활동은 무엇인지 4. 보드에 있는 Reset 버튼을 눌른 상태에서만 Signiture가 읽히는 이유는 무엇인지 그럼 수고하세요.
관리자 답변 NEWTC · 2010-06-11
안녕하세요 >0. mk-II로 부터 타겟 보드에 연결한 핀 배선이 맞는 것인지 여부 리셋누르상태에서 시그너쳐가 읽히다면 핀배선은 맞습니다. >1. 타겟 보드를 인식시키려면 ISP에서 fuse bit를 jtag en을 활성화 시켜 해야 한다는데 이것을 AVR Studio에서 어떻게 하는지의 방법 - mk2는 isp모드에서 fuse 탭에서 jtagen 항목에 체크하시후 라이트를 하시면됩니다. >2. mk-II로 불가능하다면 어떤 장비가 필요한지 - mk2는 isp모드와 JTAG 모드 2가지를 지원하는것로 알고 있습니다. >3. 그 외에 인식을 위해서 제가 추가적으로 해야 하는 활동은 무엇인지 >4. 보드에 있는 Reset 버튼을 눌른 상태에서만 Signiture가 읽히는 이유는 무엇인지 - 동일한질문이라.. MK2는 ISP모드에서 모듈의 리셋회로의 콘덴서 영향으로 타이밍이 안맞아 일어나는 현상입니다. 1 .128모듈에 리셋부분에 콘덴서를 제거 하시던지 2. 리셋누르상태에서 JTAG을 사용할수 있도록 FUSE 변경하여 JTAG 포트로 연결하여 사용하면 됩니다. 검색엔진에서 찾아보면 특히 MK2 isp 기능에만 대해 자주언급되는 현상입니다. 수고하세요 >사용타겟보드명 : AM-128PRO V02 >사용 컴파일러 및 버전 : AVR Stduio 4.18 Build 684 > >에러의 전체적인 내용 >0. 저는 전기 전자 공학 전공이 아니라서 아는 것이 별로 없지만 인터넷 검색을 통해서 제가 할 수 있는데까지는 해봤습니다. >1. JTAG ICE mk-II가 연구실에 있고 AM-128 Pro 모듈 3개를 테스트하기 위해서 사진과 같이 연결 하였습니다. >2. 이 때 타겟 보드에서 ISP로 사용하는 핀수가 6개임을 알고 mk-II와 연결하기 위해 mk-II의 Datasheet를 확인하여 보니 다음과 같은 내용이 있었습니다. > >JTAGICE mkII probe ISP6PIN header ISP debugWIRE > >Pin 1 (TCK) Pin 3 SCK x >Pin 2 (GND) Pin 6 GND x x >Pin 3 (TDO) Pin 1 MISO x >Pin 4 (VTref) Pin 2 VCC x x >Pin 6 (nSRST) Pin 5 RESET x x >Pin 9 (TDI) Pin 4 MOSI x > >이를 정리하면 Pin 1은 SCK로, Pin 2는 GND로 Pin 3은 MISO로 Pin 4는 VCC로 Pin 6은 RESET로 Pin 9는 MOSI로 입니다. > >3. 그래서 그림에 잘은 안보이지만 보드에 연결하기 위한 커넥터를 만들기 위해서 기판을 조금 자르고 헤더를 연결한 후에 납땜하고 여기에 wire를 납땜했습니다. >4. 이 때, mk-II의 핀에서 9번(TDI), 3번(TDO), 1번(TCK), 6번(nSRST), 2번(GND), 4번(Vref)의 순서로 타겟 보드의 데이터시트 3페이지를 따라 1번(MOSI), 2번(MISO), 3번(SCK), 4번(RESET), 5번(GND), 6번(VCC)에 차례대로 연결되도록 했습니다. >5. 이 상태에서 링크에 있는 mk-II의 문서를 참고하여 AVR Studio를 설치하니 펌웨어가 업데이트 되었습니다. 이로써 mk-II는 정상 동작하는 것을 알게 되었습니다. >6. 전원 공급기가 연구실에 있어서 5V를 인가하니 67mA과 63mA 사이를 왔다갔다 하면서 타겟 보드의 불이 들어오는 것을 확인했습니다. >7. 링크 문서 7 페이지를 확인해 보니 타겟 보드의 전원이 정상적으로 인식되었고, JTag mk-II도 정상적으로 인식된 것을 알 수 있었습니다. > >저의 추가적인 해결 노력 >0. 그래서 문제는 fuse bit가 아닐까 하여 fuse bit 관련된 내용을 현재 게시판에서 검색하여 링크 2번의 내용을 확인하였습니다. >1. 그래서 AVR Studio 연결을 한 후에 ISP Mode로 변경하여 보았으나 여전히 타겟 보드의 signiture 조차 읽지 못함을 알게 되었습니다. >2. Reset 버튼을 누른 상태에서는 Signiture를 읽을 수 있지만 이는 0x1E 0x97 0x02의 값을 가집니다. >3. Signiture를 읽은 후에 Fuse Bit 읽는 메뉴로 갔다가 다시 Sigiture를 읽으려면 Reset 버튼을 다시 눌러야 합니다. >4. Reset 버튼을 누른 상태에서 Fuse Bit를 읽으면 초기값(0xFF19EF)로 되어 있습니다. >5. Reset 버튼을 누른 상태에서 2.53V, 100 mA가 흐릅니다. > >답변 받기 원하는 내용 >0. mk-II로 부터 타겟 보드에 연결한 핀 배선이 맞는 것인지 여부 >1. 타겟 보드를 인식시키려면 ISP에서 fuse bit를 jtag en을 활성화 시켜 해야 한다는데 이것을 AVR Studio에서 어떻게 하는지의 방법 >2. mk-II로 불가능하다면 어떤 장비가 필요한지 >3. 그 외에 인식을 위해서 제가 추가적으로 해야 하는 활동은 무엇인지 >4. 보드에 있는 Reset 버튼을 눌른 상태에서만 Signiture가 읽히는 이유는 무엇인지 > >그럼 수고하세요.
5324 답변완료스테핑 모터제어 질문입니다. 백철웅 2010-06-10 1,314
//ICC-AVR application builder : 07-07-23 오후 02:41:47 // Target : M128 // Crystal: 16.000Mhz // // Made by New Technology Company(N.T.C) in Korea. // DAEWOO RYU // Email : davidryu@newtc.co.kr // 82-2-704-4774(TEL), 82-2-704-4733(FAX) // http://www.NewTC.co.kr // #include <iom128v.h> #include <macros.h> #include <stdio.h> /* Stepping Motor derive---------------------------*/ unsigned char LEFTmotorOneClock(unsigned char step, char dir) { step = step & 0x0f; if(dir){ switch(step){ case 0x09: step=0x01; break; case 0x01: step=0x03; break; case 0x03: step=0x02; break; case 0x02: step=0x06; break; case 0x06: step=0x04; break; case 0x04: step=0x0c; break; case 0x0c: step=0x08; break; case 0x08: step=0x09; break; default: step=0x0c; break; } }else{ switch(step){ case 0x09: step=0x08; break; case 0x01: step=0x09; break; case 0x03: step=0x01; break; case 0x02: step=0x03; break; case 0x06: step=0x02; break; case 0x04: step=0x06; break; case 0x0c: step=0x04; break; case 0x08: step=0x0c; break; default: step=0x0c; break; } } return step; } /* Stepping Motor derive---------------------------*/ unsigned char RIGHTmotorOneClock(unsigned char step, char dir) { step = step & 0xf0; if(dir){ switch(step){ case 0x90: step=0x10; break; case 0x10: step=0x30; break; case 0x30: step=0x20; break; case 0x20: step=0x60; break; case 0x60: step=0x40; break; case 0x40: step=0xc0; break; case 0xc0: step=0x80; break; case 0x80: step=0x90; break; default: step=0xc0; break; } }else{ switch(step){ case 0x90: step=0x80; break; case 0x10: step=0x90; break; case 0x30: step=0x10; break; case 0x20: step=0x30; break; case 0x60: step=0x20; break; case 0x40: step=0x60; break; case 0xc0: step=0x40; break; case 0x80: step=0xc0; break; default: step=0xc0; break; } } return step; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<300;j++); } } void main(void) { volatile unsigned char stepleft=0, stepright=0; int cnt; DDRG=0xf3; DDRC=0xff; DDRD=0xf0; //insert your functional code here... while(1){ if(PING & 0xf8){ PORTG=0x01; stepright = RIGHTmotorOneClock(stepright, 1); stepleft = LEFTmotorOneClock(stepleft, 0); delay(2); PORTC= stepleft|stepright; } if(PING & 0xf4){ PORTG=0x02; stepright = RIGHTmotorOneClock(stepright, 0); stepleft = LEFTmotorOneClock(stepleft, 1); delay(2); PORTC= stepleft|stepright;} } } 예문 소스를 좀 만져보았는데요. 지금 스위치 1, 2를 누를때마다 방향이 바뀌게 만들었습니다. 근데 제가 여기에 더 추가하고 싶은건 스위치가 눌러져있는 상태에서도 반바퀴만 돌게 하고 싶습니다. 도움좀 주세요. 128pro 키트에 ICAA 사용하고 있습니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요? 고객님, 현재 1-2상 여자 방식으로 운용중이시네요. 그렇다면, 한 클럭당 0.9도씩 돌아가게 되구요. 반바퀴면, 200클럭입니다.즉, 변수 하나를 만들어서, 한번 돌기 시작하면 200클럭만 돌고, 더이상 그 안으로 안들어가게 하면 됩니다. int clknum=0; ...... while(1){ ..... if(PING & 0xf8){ if(clknum <= 200){ PORTG=0x01; stepright = RIGHTmotorOneClock(stepright, 1); stepleft = LEFTmotorOneClock(stepleft, 0); delay(2); PORTC= stepleft|stepright; } } if(PING & 0xf4){ if(clknum <= 200){ PORTG=0x02; stepright = RIGHTmotorOneClock(stepright, 0); stepleft = LEFTmotorOneClock(stepleft, 1); delay(2); PORTC= stepleft|stepright;} } } clknum++; if(clknum>300) clknum = 300; // limit } 이런 식으로 하는 것이 어떨까요? 방법은 여러가지가 있을 수 있지만, 이것도 한 방법이 되겠네요. 수고하세요. >//ICC-AVR application builder : 07-07-23 오후 02:41:47 >// Target : M128 >// Crystal: 16.000Mhz >// >// Made by New Technology Company(N.T.C) in Korea. >// DAEWOO RYU >// Email : davidryu@newtc.co.kr >// 82-2-704-4774(TEL), 82-2-704-4733(FAX) >// http://www.NewTC.co.kr >// > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > > > > > > > >/* Stepping Motor derive---------------------------*/ >unsigned char LEFTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0x0f; > if(dir){ > switch(step){ > case 0x09: step=0x01; break; > case 0x01: step=0x03; break; > case 0x03: step=0x02; break; > case 0x02: step=0x06; break; > case 0x06: step=0x04; break; > case 0x04: step=0x0c; break; > case 0x0c: step=0x08; break; > case 0x08: step=0x09; break; > default: step=0x0c; break; > } > }else{ > switch(step){ > case 0x09: step=0x08; break; > case 0x01: step=0x09; break; > case 0x03: step=0x01; break; > case 0x02: step=0x03; break; > case 0x06: step=0x02; break; > case 0x04: step=0x06; break; > case 0x0c: step=0x04; break; > case 0x08: step=0x0c; break; > default: step=0x0c; break; > } > } > return step; > >} > >/* Stepping Motor derive---------------------------*/ >unsigned char RIGHTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0xf0; > if(dir){ > switch(step){ > case 0x90: step=0x10; break; > case 0x10: step=0x30; break; > case 0x30: step=0x20; break; > case 0x20: step=0x60; break; > case 0x60: step=0x40; break; > case 0x40: step=0xc0; break; > case 0xc0: step=0x80; break; > case 0x80: step=0x90; break; > default: step=0xc0; break; > } > }else{ > switch(step){ > case 0x90: step=0x80; break; > case 0x10: step=0x90; break; > case 0x30: step=0x10; break; > case 0x20: step=0x30; break; > case 0x60: step=0x20; break; > case 0x40: step=0x60; break; > case 0xc0: step=0x40; break; > case 0x80: step=0xc0; break; > default: step=0xc0; break; > } > } > return step; >} > > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<300;j++); > } >} > > >void main(void) >{ > volatile unsigned char stepleft=0, stepright=0; int cnt; > > DDRG=0xf3; > DDRC=0xff; > DDRD=0xf0; > > //insert your functional code here... > > > while(1){ > if(PING & 0xf8){ > PORTG=0x01; > stepright = RIGHTmotorOneClock(stepright, 1); > stepleft = LEFTmotorOneClock(stepleft, 0); > delay(2); > PORTC= stepleft|stepright; > } > > > > > if(PING & 0xf4){ > PORTG=0x02; > stepright = RIGHTmotorOneClock(stepright, 0); > stepleft = LEFTmotorOneClock(stepleft, 1); > delay(2); > PORTC= stepleft|stepright;} > } > } > > > > >예문 소스를 좀 만져보았는데요. 지금 스위치 1, 2를 누를때마다 > >방향이 바뀌게 만들었습니다. 근데 제가 여기에 더 추가하고 싶은건 > >스위치가 눌러져있는 상태에서도 반바퀴만 돌게 하고 싶습니다. > >도움좀 주세요. 128pro 키트에 ICAA 사용하고 있습니다.
5323 답변완료시리얼통신 관련 질문 고원범 2010-06-10 1,396
AVR MEGA 128 개발보드 (소형) 을 이용해서 강좌에 있는 시리얼 통신을 따라해봤는데 프로그램이 전송이 돼고 나서 하이퍼터미널에 이상한 글씨가 출력되네요. 이제품으로 가능한 것인지 알고싶습니다. 사용한 소스입니다. //ICC-AVR application builder : 2010-06-10 오후 4:43:18 // Target : M128 // Crystal: 16.000Mhz #include <iom128v.h> #include <macros.h> #include <stdio.h> // printf 함수 사용시 추가할 것. int putchar(char c) { while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; return c; } // scanf 함수 사용시 추가할 것. int getchar(void) { while ((UCSR0A & 0x80) == 0); return UDR0; } void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x00; } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x67; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x08; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); uart0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x00; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main(void){ int i; init_devices(); printf("AVR Mega128 Board 1.0 \\r\\n"); while(1){ printf("test...:%d\\r\\n",i++); } }
관리자 답변 NEWTC · 2010-06-10
안녕하세요 다운로드시 터미널창에 이상한 글짜가 나타납니다. mega128 경우 다운로드핀과 uart핀이 같은핀을 사용해서 그런경우입니다. 다운로드시 나타나는 이상한글짜는 무시하시고 완료후 나타나는 글짜를 확인하시길 바랍니다. 완료후 아래글짜 처럼 나와야 정상입니다. AVR Mega128 Board 1.0 그리고 uart로 나갈수 있도록 rs-232(uart)와 연결하셔야 합니다. 어떤방법으로 하드웨어를 구성했는지 몰르겠군요. 수고하세요 >AVR MEGA 128 개발보드 (소형) > >을 이용해서 강좌에 있는 시리얼 통신을 따라해봤는데 > >프로그램이 전송이 돼고 나서 > >하이퍼터미널에 이상한 글씨가 출력되네요. > >이제품으로 가능한 것인지 알고싶습니다. > > > >사용한 소스입니다. > > >//ICC-AVR application builder : 2010-06-10 오후 4:43:18 >// Target : M128 >// Crystal: 16.000Mhz > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > >// printf 함수 사용시 추가할 것. >int putchar(char c) >{ > while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty > > UDR0 = c; > return c; >} > >// scanf 함수 사용시 추가할 것. >int getchar(void) >{ > while ((UCSR0A & 0x80) == 0); > return UDR0; >} > >void port_init(void) >{ > PORTA = 0x00; > DDRA = 0x00; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x00; >} > >//UART0 initialize >// desired baud rate: 9600 >// actual: baud rate:9615 (0.2%) >// char size: 8 bit >// parity: Disabled >void uart0_init(void) >{ > UCSR0B = 0x00; //disable while setting baud rate > UCSR0A = 0x00; > UCSR0C = 0x06; > UBRR0L = 0x67; //set baud rate lo > UBRR0H = 0x00; //set baud rate hi > UCSR0B = 0x08; >} > >//call this routine to initialize all peripherals >void init_devices(void) >{ > //stop errant interrupts until set up > CLI(); //disable all interrupts > XDIV = 0x00; //xtal divider > XMCRA = 0x00; //external memory > port_init(); > uart0_init(); > > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints > EIMSK = 0x00; > TIMSK = 0x00; //timer interrupt sources > ETIMSK = 0x00; //extended timer interrupt sources > SEI(); //re-enable interrupts > //all peripherals are now initialized >} > >void main(void){ > int i; > init_devices(); > > printf("AVR Mega128 Board 1.0 \\r\\n"); > while(1){ > printf("test...:%d\\r\\n",i++); > } >}
5322 답변완료usb-isp 연결 방법에 관한 질문입니다. 하용우 2010-06-10 1,392
제가 avr용 usb-isp vo3를 구입했는데요 완전히 초보라서 이걸 ic랑 어떻게 연결하는지 모르겠더라고요 ㅠㅠ;;;;; 반대편에 6핀짜리와 4핀짜리가 있던데 이걸 헤더핀에 꽂고 이 헤드핀을 ic에 맞게 mosi, miso등을 연결해서 프로그래밍하는건가요?????
관리자 답변 NEWTC · 2010-06-10
안녕하세요 6핀은 다운로드 관련된 컨넥터입니다. 4핀은 다운로드와 상관없는 컨넥터입니다. uart 사용할때 유용합니다. 아래강좌는 참고하시길 바랍니다. http://newtc.co.kr/board/view.php?id=mega128_lecture&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=83 강좌 > avr강좌를 보시면 됩니다. 수고하세요 >제가 avr용 usb-isp vo3를 구입했는데요 > >완전히 초보라서 이걸 ic랑 어떻게 연결하는지 모르겠더라고요 ㅠㅠ;;;;; > >반대편에 6핀짜리와 4핀짜리가 있던데 이걸 헤더핀에 꽂고 > >이 헤드핀을 ic에 맞게 mosi, miso등을 연결해서 프로그래밍하는건가요?????
5321 답변완료2축 자이로 센서 질문입니다 임창연 2010-06-10 1,450
AM-GYRO-P 2축 자이로 센서 모듈을 사용하고 있는데요 이게 혹시 선을 길게 늘어뜨리면(atmega와 자이로센서가 30cm이상) 신호가 안 오거나 불안전해질 수 있나요? 선을 길게 하니까 잘 안되는거 같아서 질문해봅니다... 감사합니다
관리자 답변 NEWTC · 2010-06-10
안녕하세요 아날로그 형태로 나오는 센서의 경우는 선을 최대한 짧게 잡아서 해야합니다. 노이즈가 유입되어 오차가 커질수 있습니다. >신호가 안 오거나 불안전해질 수 있나요? 그럴수는 없습니다. 신호는 들어 오지만 노이즈와 동반되어 들어옵니다. 수고하세요 > >AM-GYRO-P > >2축 자이로 센서 모듈을 사용하고 있는데요 >이게 혹시 선을 길게 늘어뜨리면(atmega와 자이로센서가 30cm이상) >신호가 안 오거나 불안전해질 수 있나요? > >선을 길게 하니까 잘 안되는거 같아서 >질문해봅니다... > > >감사합니다
5320 답변완료AD-USBISP 문의 드립니다. 김진하 2010-06-10 1,393
안녕하세요, V03 사서 에러 난다고 문의를 드렸었는데 점검해 주신다고 하여 어제 발송을 하였습니다. 혹시라도 문제가 없다면 그 이전 버젼을 구매 할 수는 없는지요? 그런데 V01인지 V02인지는 PCB에 확인이 안되서 그러는데 확인 방법이 있는지요? 답변 부탁 드립니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요 유선상으로 해결 하신 것로 알고 있습니다. ^^; 수고하세요 >안녕하세요, >V03 사서 에러 난다고 문의를 드렸었는데 점검해 주신다고 하여 어제 발송을 하였습니다. >혹시라도 문제가 없다면 그 이전 버젼을 구매 할 수는 없는지요? >그런데 V01인지 V02인지는 PCB에 확인이 안되서 그러는데 확인 방법이 있는지요? >답변 부탁 드립니다.
5319 답변완료여러가지 질문입니다. alpha 2010-06-10 1,391
오늘 용산가서 구입해 온 초보입니다. 땜질 하기 싫어서 키트를 구매하게 &#46124;는데, 정말 좋네요. 구입 물품은 AB-M128-B 소형보드 A410 서보모터 AM-CSV 서보모터 제어모듈(저가형) AM-RFMOD RF모듈 2개 USBISP V03 입니다. 하고자 하는 일은, Atmega128에 서보모터 제어 코드를 구워서, RF모듈로 PC에서 신호를 주면 원거리에서 알아서 작동하게 하려고 합니다.(On-Off) 그러나 모르고, 전원공급장치를 안샀네요(배터리, 어댑터) 그래서 일단 USBISP의 USB 전원 모드를 이용하고 싶은데, 안전 할까요? (어짜피 어답타나 배터리를 곧 구할생각입니다. 테스트를 어서 해야해서요) 어답타는 12V를 구입예정이고 전지홀더는 어떤걸 써야할지 잘 모르겠네요.(12V짜리를 맞춰야하는지 5V짜리를 맞춰야 하는지) 이런건 길거리 전파상에서 쉽게 구할 수 있는 물품들인가요? 그리고 USBISP의 UART에 RF모듈을 연결하여 PC와 연결하려 하는데 맞는지도 문의드립니다. 감사합니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요 모터를 돌리는경우에는 12v1A 이상을 구입해서 연결하시길 바랍니다. 모터를 사용하지 않을경우는 USBISP의 전원 사용해도 됩니다. >그리고 USBISP의 UART에 RF모듈을 연결하여 PC와 연결하려 하는데 맞는지도 문의드립니다. 구성해서 사용해도 됩니다. 배터리로 사용할경우 모터도 포함되면 리튬이온이나 리툼폴리머 같은 전류량이 높게 나오는걸 사용하시길 바랍니다. 그외에는 12볼트인가하는곳에 7볼트이상의 배터리만 인가해서 사용하시면 됩니다. 수고하세요 >오늘 용산가서 구입해 온 초보입니다. >땜질 하기 싫어서 키트를 구매하게 &#46124;는데, 정말 좋네요. >구입 물품은 >AB-M128-B 소형보드 >A410 서보모터 >AM-CSV 서보모터 제어모듈(저가형) >AM-RFMOD RF모듈 2개 >USBISP V03 >입니다. >하고자 하는 일은, >Atmega128에 서보모터 제어 코드를 구워서, >RF모듈로 PC에서 신호를 주면 원거리에서 알아서 작동하게 하려고 합니다.(On-Off) >그러나 모르고, 전원공급장치를 안샀네요(배터리, 어댑터) >그래서 일단 USBISP의 USB 전원 모드를 이용하고 싶은데, 안전 할까요? >(어짜피 어답타나 배터리를 곧 구할생각입니다. 테스트를 어서 해야해서요) >어답타는 12V를 구입예정이고 전지홀더는 어떤걸 써야할지 잘 모르겠네요.(12V짜리를 맞춰야하는지 5V짜리를 맞춰야 하는지) >이런건 길거리 전파상에서 쉽게 구할 수 있는 물품들인가요? >그리고 USBISP의 UART에 RF모듈을 연결하여 PC와 연결하려 하는데 맞는지도 문의드립니다. > >감사합니다. >
5318 답변완료AM CD2L 여러가지 질문입니다. 민 2010-06-09 1,343
1. AM CD2L에 전지를 사용하고 싶은데 4.5V나 6V로 사용하는 방법이 없나요? 간단한 회로를 꾸미면 가능하다고 하는데 어떻게 해야 합니까? 2. 그리고 atmega128보드로 3.3볼트 인터페이스를 사용하려 하는데요(물려있는 센서 때문에) 모듈에 들어가는 0,1 신호가 3.3V라도 상관 없나요? 3. 5V를 입력하면 모터에도 각 5V씩 들어가나요? 아니면 몇 볼트가 입력되는지요? 답변해주시면 감사하겠습니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요 1.AM CD2L는 atmega128보드와 연결해서 사용합니다. atmega128 보드의 타겟전원 5볼트가 바로 연결되기 &#46468;문에 따로 전원을 인가할려면 패턴을 짤라서 해야합니다. 2.센서 보드가 3.3 볼트인가보네요 풀업저항 10K 옴 정도를 구성해서 사용하거나 버퍼를 사용하면 됩니다. 3. 어떤 모터드라이버를 얘기하는 하시는지 몰겠네요. 1번질문과 동일한것 같군요 수고하세요 >1. >AM CD2L에 전지를 사용하고 싶은데 4.5V나 6V로 사용하는 방법이 없나요? >간단한 회로를 꾸미면 가능하다고 하는데 어떻게 해야 합니까? > >2. >그리고 atmega128보드로 3.3볼트 인터페이스를 사용하려 하는데요(물려있는 센서 때문에) >모듈에 들어가는 0,1 신호가 3.3V라도 상관 없나요? > >3. >5V를 입력하면 모터에도 각 5V씩 들어가나요? >아니면 몇 볼트가 입력되는지요? > >답변해주시면 감사하겠습니다.
5317 답변완료시리얼통신관련 오세완 2010-06-09 1,398
안녕하세요 AVR ATMEGA128 개발보드 빵판을 구매하여 사용하는 유저입니다. PC와 시리얼 통신을 할려고하는데 개발보드단자에서 통신(칩:MAX232) 모듈없이 바로 PC와 연결하여 시리얼 통신이 가능한지 알고 싶습니다. 또는 개발보드와 연동되는 통신모듈이 있는지 궁금합니다. 답변 부탁드립니다. 감사합니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요 안에max3232가 창착되어진 보드입니다. pc와 연결하여 터미널로 통신을 하고 싶으시면 SE-3T9(시리얼 케이블)로 사용하시면 됩니다. AVR ATMEGA128 개발보드 빵판 보드는 4핀형태의 uart 컨넥터가 없어 직접 뽑아서 rf통신모듈이나 시리얼 LCD에 연결해서 사용해야합니다. 수고하세요 >안녕하세요 >AVR ATMEGA128 개발보드 빵판을 구매하여 사용하는 유저입니다. >PC와 시리얼 통신을 할려고하는데 >개발보드단자에서 통신(칩:MAX232) 모듈없이 바로 PC와 연결하여 >시리얼 통신이 가능한지 알고 싶습니다. >또는 개발보드와 연동되는 통신모듈이 있는지 궁금합니다. >답변 부탁드립니다. >감사합니다.
5316 답변완료AD-USBISP-L V03제품 ISP Mode Error 황낙현 2010-06-09 1,425
안녕하세요 제목에 있는 제품으로 AVR Studio 4.17버전으로 AT89S52에 프로그램을 넣는데 이미지와 같이 마지막에 ISP Mode Error가 뜹니다. 확인 부탁드립니다.
관리자 답변 NEWTC · 2010-06-10
안녕하세요 전화로 상담해드렸습니다. USBISP 와 타겟보드를 들고 방문하시면 점검은 해드릴 수 있습니다. 월~금 10시~12시 ,1시~6시 근무시간입니다. 수고하세요 >안녕하세요 >제목에 있는 제품으로 AVR Studio 4.17버전으로 >AT89S52에 프로그램을 넣는데 이미지와 같이 마지막에 >ISP Mode Error가 뜹니다. 확인 부탁드립니다. >
5315 답변완료[추가질문]ATMega128 쓰고 있습니다. 인터럽트.. 박준성 2010-06-09 1,432
답변 잘 받았습니다. 현재 아무런 디바이스를 붙이고 있지 않은.. 즉 완제품 그 상태입니다. 근데 링크거신 소스 예제가 전혀 아무런 반응을 보이지 않습니다. . . void int0_isr(void) { CLI(); i++; //external interupt on INT0 SEI(); } . . . void main ( void ) { init_devices( ); while( 1 ) { if ( i%2 ) { PORTD = 0x80; printf("..."); }else{ PORTD = 0x40; printf("///"); } } } PORTD의미가 뭔지 모르겠어서, printf문 걸어두었습니다. printf문은 찍히고요. 근데 스위치를 눌러도 변화가 없습니다. 어떻게 해야하는지요?
관리자 답변 NEWTC · 2010-06-09
안녕하세요 완제품상에 있는 주위 디바이스를 포함하여 말하는 것 입니다. KD-128Pro일 경우 주의에 소자들이 붙어있어 인터럽터를 하시려면 도면을 보시고 아무것도 없는 부분에 하시거나 저항이나 주위 디바이스를 제거후 외부인터럽터를 사용해야 합니다. 수고하세요 >답변 잘 받았습니다. > >현재 아무런 디바이스를 붙이고 있지 않은.. 즉 완제품 그 상태입니다. > >근데 링크거신 소스 예제가 전혀 아무런 반응을 보이지 않습니다. > >. >. >void int0_isr(void) >{ > CLI(); > i++; > //external interupt on INT0 > SEI(); >} >. >. >. >void main ( void ) >{ > init_devices( ); > > while( 1 ) > { > if ( i%2 ) > { > PORTD = 0x80; > printf("..."); > }else{ > PORTD = 0x40; > printf("///"); > } > } >} > >PORTD의미가 뭔지 모르겠어서, printf문 걸어두었습니다. >printf문은 찍히고요. > >근데 스위치를 눌러도 변화가 없습니다. > >어떻게 해야하는지요?
5314 답변완료회로도 질문입니다. 박인용 2010-06-09 1,329
위로 링크 시켜놓았습니다. 라인트레이서 회로도인데 맨 위쪽 부분 LED_Yellow라고 써져부분이 발광센서가 아닌가 싶어서 글 남깁니다. 이 회로도로 이용해서 만들면 수광이 되면 LED불이 켜져야 하고 수광이 안되면 불이 꺼져 있지 않습니까? 그런데 LED부분은 +전원이랑 접지에 연결해서 불이 꺼지고 켜지고 할수 있는 것이 아니라 수광과 상관없이 계속 LED불이 들어오는데 이 회로도가 맞나 싶어서 남깁니다.
관리자 답변 NEWTC · 2010-06-09
안녕하세요 >맨 위쪽 부분 LED_Yellow라고 써져부분이 LED_Yellow 부분운 잘못 기입된 것 입니다. 적외선 발광이 맞습니다. 수정도록하겠씁니다. ^^ 수고하세요 >위로 링크 시켜놓았습니다. >라인트레이서 회로도인데 >맨 위쪽 부분 LED_Yellow라고 써져부분이 >발광센서가 아닌가 싶어서 글 남깁니다. >이 회로도로 이용해서 만들면 >수광이 되면 LED불이 켜져야 하고 수광이 안되면 불이 꺼져 있지 않습니까? >그런데 LED부분은 +전원이랑 접지에 연결해서 불이 꺼지고 켜지고 할수 있는 것이 아니라 >수광과 상관없이 계속 LED불이 들어오는데 이 회로도가 맞나 싶어서 >남깁니다.