로그인 | 회원가입 | 주문 조회
총 10,748개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
5333 답변완료코드 문의드립니다. alpha 2010-06-11 1,434
서보모터를 돌려보려고 하는데, 생각대론 잘 안되네요. 사용하려는 포트는 PortA이고(AB-M128-B) 서보 제어모듈은 AM-CSVP 입니다. 서보모터는 제어모듈 D0에 연결되어 있구요. 이 코드 그대로 넣으니, 모터에 뭔가 들어가는것 같긴 하는데 움직이지는 않네요. 최종적으로 하려는 것은, 통신신호를 받아서 +-180도로 돌게 하고 싶습니다. If문은 어디에 넣어야 할까요? 코드 한번 검토해 주세요. 감사합니다. //ICC-AVR application builder : 2005-09-30 오후 10:33:53 // Target : M128 // Crystal: 16.000Mhz // // Made by New Technology Company(N.T.C) in Korea. // DAEWOO RYU // Email : [email protected] // 82-2-704-4774(TEL), 82-2-704-4733(FAX) // http://www.NewTC.co.kr // #include <iom128v.h> #include <macros.h> #include <stdio.h> #define SERVO_PORT PORTA #define SERVO_PORT_DIR DDRA // 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 = 0xff; PORTB = 0x00; DDRB = 0x03; PORTC = 0x00; //m103 output only DDRC = 0x03; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; } //TIMER0 initialize - prescale:32 // WGM: Normal // desired value: 100KHz // actual value: 100.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xFB; //set count OCR0 = 0x05; TCCR0 = 0x05; //start timer } //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; } #define MAX_SERVO_COUNT 8 unsigned int servo_pos[8]={100,100,100,100,100,100,100,100}; unsigned int servo_num; unsigned char port_out; #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { if(port_out == 0){ servo_num ++; servo_num = servo_num % MAX_SERVO_COUNT; port_out = 1; TCNT0 = 0xFF - servo_pos[servo_num]; //reload counter value }else{ port_out = 0; TCNT0 = servo_pos[servo_num]; //reload counter value } if(port_out==1){ SERVO_PORT = SERVO_PORT | 1<<servo_num; }else{ SERVO_PORT = 0x00; } } //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(); timer0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x01; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main(void) { unsigned int temp, i; init_devices(); DDRF = 0x03; printf("\\n\\rServo Motor test....\\n\\r"); delay(600); SERVO_PORT_DIR = 0xff; while(1){ if((PING & 0x04)){ printf("왼쪽\\n\\r"); for(i=0; i<8; i++){ servo_pos[i] = 140; } while((PING & 0x04)); } if((PING & 0x08)){ printf("오른쪽\\n\\r"); for(i=0; i<8; i++){ servo_pos[i] = 240; } while((PING & 0x08)); } delay(10); } } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } }
관리자 답변 NEWTC · 2010-06-11
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 소스상으로 볼 때, 시리얼을 PC PC와 보드를 연결한 후에, 메인 보드에 있는 스위치 두개 중 하나를 누르면, 이쪽, 나머지 하나를 누르면 저쪽으로 움직입니다. 예전에 실험하고 움직인 후 올린 소스입니다. 하지만, 180도씩 도는 RC 서보는 없는 것 같습니다. 개조하여 사용하시더라도, 그렇게는 안 움직일 것 같습니다. 270도까지는 움직이게 개조하여 쓰시는 분을 인터넷에서 본 것 같네요. 그리고, 반드시 본명으로 질문하여 주시기 바랍니다. 수고하세요. >서보모터를 돌려보려고 하는데, 생각대론 잘 안되네요. >사용하려는 포트는 PortA이고(AB-M128-B) >서보 제어모듈은 AM-CSVP 입니다. >서보모터는 제어모듈 D0에 연결되어 있구요. >이 코드 그대로 넣으니, 모터에 뭔가 들어가는것 같긴 하는데 움직이지는 않네요. >최종적으로 하려는 것은, 통신신호를 받아서 >+-180도로 돌게 하고 싶습니다. >If문은 어디에 넣어야 할까요? >코드 한번 검토해 주세요. 감사합니다. > >//ICC-AVR application builder : 2005-09-30 오후 10:33:53 >// Target : M128 >// Crystal: 16.000Mhz >// >// Made by New Technology Company(N.T.C) in Korea. >// DAEWOO RYU >// Email : [email protected] >// 82-2-704-4774(TEL), 82-2-704-4733(FAX) >// http://www.NewTC.co.kr >// > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > >#define SERVO_PORT PORTA >#define SERVO_PORT_DIR DDRA > > >// 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 = 0xff; > PORTB = 0x00; > DDRB = 0x03; > PORTC = 0x00; //m103 output only > DDRC = 0x03; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x03; >} > >//TIMER0 initialize - prescale:32 >// WGM: Normal >// desired value: 100KHz >// actual value: 100.000KHz (0.0%) >void timer0_init(void) >{ > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0xFB; //set count > OCR0 = 0x05; > TCCR0 = 0x05; //start timer >} > > >//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; >} > >#define MAX_SERVO_COUNT 8 > >unsigned int servo_pos[8]={100,100,100,100,100,100,100,100}; >unsigned int servo_num; >unsigned char port_out; > >#pragma interrupt_handler timer0_ovf_isr:17 > >void timer0_ovf_isr(void) >{ > if(port_out == 0){ > servo_num ++; > servo_num = servo_num % MAX_SERVO_COUNT; > port_out = 1; > TCNT0 = 0xFF - servo_pos[servo_num]; //reload counter value > }else{ > port_out = 0; > TCNT0 = servo_pos[servo_num]; //reload counter value > } > > if(port_out==1){ > SERVO_PORT = SERVO_PORT | 1<<servo_num; > }else{ > SERVO_PORT = 0x00; > } >} > >//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(); > timer0_init(); > > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints > EIMSK = 0x00; > TIMSK = 0x01; //timer interrupt sources > ETIMSK = 0x00; //extended timer interrupt sources > SEI(); //re-enable interrupts > //all peripherals are now initialized >} > > >void main(void) >{ > unsigned int temp, i; > init_devices(); > > DDRF = 0x03; > > > printf("\\n\\rServo Motor test....\\n\\r"); > delay(600); > SERVO_PORT_DIR = 0xff; > > while(1){ > if((PING & 0x04)){ > printf("왼쪽\\n\\r"); > for(i=0; i<8; i++){ > servo_pos[i] = 140; > } > while((PING & 0x04)); > } > if((PING & 0x08)){ > printf("오른쪽\\n\\r"); > for(i=0; i<8; i++){ > servo_pos[i] = 240; > } > while((PING & 0x08)); > } > delay(10); > } >} > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} > >
5332 답변완료갑자기 동작이 안되는데요? Kahng 2010-06-11 1,378
안녕하세요? 귀사의 AVRISP를 구입해서 잘 사용하고 있었는데, 오늘 갑자기 일고/쓰기가 안됩니다. LINK를 시키면 녹색 LED가 깜빡이며 정상 임을 가리키고 있다가 Flash 지우기를 하면 계속해서 지우지를 못합니다. 금일, 신규 보드 제작을 하여 개통을 시키려고 연결을 하였는데, TX/RX -> PDI/PDO가 바뀌었습니다. 다시 연결하고난 후 부터 이런 현상이 발생했습니다. Tx/Rx를 바꾸어서 연결할 경우 제품이 잘 고장 나는지요?(Tx끼리 데이터 충돌...->웬만하면 잘 안나가던데...) 확인하는 방법은 없는지요? CPU는 ATMEGA128L-8AU이며, CodeVision을 사용하였습니다. 만일 고장 났을 경우, Tx/Rx부분에 버퍼 같은게 있는지요? 아니면 아떻게 부품 교체해보면서 확인 할 수 있는 방법이 있는지요? 답답합니다. 이강 011-9180-4000 [email protected]
관리자 답변 NEWTC · 2010-06-11
안녕하세요 >Tx/Rx를 바꾸어서 연결할 경우 제품이 잘 고장 나는지요?(Tx끼리 데이터 충돌...->웬만하면 잘 안나가던데...) 확인하는 방법은 없는지요? 데이터라인 2개만 바꿔다고 고장은 날 경우 잘 없습니다.;; 전원관련핀이라 바꿔다믄 몰르까요...;; >CPU는 ATMEGA128L-8AU이며, CodeVision을 사용하였습니다. >만일 고장 났을 경우, Tx/Rx부분에 버퍼 같은게 있는지요? 아니면 아떻게 부품 교체해보면서 확인 할 수 있는 방법이 있는지요? 버퍼를 쓰지않습니다. ISP메인칩을 확인해 봐야 알수 있습니다. 본사로 보내어 A/S받으시길 바랍니다. 그리고, 질문할 때, 반드시 본명으로 질문하여 주시기 바랍니다. 수고하세요 >안녕하세요? > >귀사의 AVRISP를 구입해서 잘 사용하고 있었는데, 오늘 갑자기 일고/쓰기가 안됩니다. >LINK를 시키면 녹색 LED가 깜빡이며 정상 임을 가리키고 있다가 Flash 지우기를 하면 계속해서 지우지를 못합니다. 금일, 신규 보드 제작을 하여 개통을 시키려고 연결을 하였는데, TX/RX -> PDI/PDO가 바뀌었습니다. 다시 연결하고난 후 부터 이런 현상이 발생했습니다. >Tx/Rx를 바꾸어서 연결할 경우 제품이 잘 고장 나는지요?(Tx끼리 데이터 충돌...->웬만하면 잘 안나가던데...) 확인하는 방법은 없는지요? > >CPU는 ATMEGA128L-8AU이며, CodeVision을 사용하였습니다. >만일 고장 났을 경우, Tx/Rx부분에 버퍼 같은게 있는지요? 아니면 아떻게 부품 교체해보면서 확인 할 수 있는 방법이 있는지요? > >답답합니다. > >이강 >011-9180-4000 >[email protected]
5331 답변완료AVRISP 사용문의 이정훈 2010-06-11 1,278
AVRISP (USB) 를 사용하는 중인데요.. 컴파일러는 Codevision 을 사용하는데, Device 를 인식하지 못하는거 같습니다. device 는 ATmega162 를 사용중이고요.. 어떻게 조치를 하여야 하는지요.. 그리고 USB 전원과 Target 전원의 구분이 정확히 어찌 되는지요 DIP Switch가 2개 있는데 어떤거를 사용하여야 하는지 알려 주십시요. Device 는 다른 시스템에서 패러럴로 사용하면 인식됩니다. 그런데 PC를 바꾸는 중이라서 USB를 사용하여야 합니다. 연결하면 GREEN LED는 깜박이는데 Codevision 또는 PhonyProg에서는 인식되지 않습니다.. 또 RESET 신호는 변화가 없는데요
관리자 답변 NEWTC · 2010-06-11
안녕하세요 ponyprog는 USBISP(STK500)을지원하지 않습니다.;; 2핀 dip 스위치는 하나는 5볼트usb전원 사용할때 쓰는 스위치입니다. 나머지하는 user용이 아니고 ISP의 폼웨어 올리는용입니다. 전원관련 딥스위치만 사용하시길 바랍니다. Codevision, avrstudio를 사용하여 다운로드 하시길 바랍니다. mega162 이라는 자주 컨넥션이 잘안될&#46468;는 타겟 디바이스를 mega16으로 잡아서 사용해보세요 그래도 이상하시면 점검을 받아 보시길 바랍니다. 수고하세요 >AVRISP (USB) 를 사용하는 중인데요.. >컴파일러는 Codevision 을 사용하는데, Device 를 인식하지 못하는거 같습니다. >device 는 ATmega162 를 사용중이고요.. >어떻게 조치를 하여야 하는지요.. >그리고 USB 전원과 Target 전원의 구분이 정확히 어찌 되는지요 >DIP Switch가 2개 있는데 어떤거를 사용하여야 하는지 알려 주십시요. >Device 는 다른 시스템에서 패러럴로 사용하면 인식됩니다. >그런데 PC를 바꾸는 중이라서 USB를 사용하여야 합니다. 연결하면 GREEN LED는 깜박이는데 >Codevision 또는 PhonyProg에서는 인식되지 않습니다.. 또 RESET 신호는 변화가 없는데요 > > >
5330 답변완료AVR MEGA 128pro 개발키트 와 RF모듈 연결 방법. 정민수 2010-06-11 1,212
AVR MEGA 128pro 개발키트 와 EWKit-PC(RF모듈) 연결 방법에 대해 알고 싶습니다. 사용용도는 무선 제어 자동차에 사용 합니다. 1)키트와 어떻게 연결하며 2)PC에는 어떻게 연결하며 전원부는 어떻게 해야 하는지 3)EWKit-PC(RF)송신부와 수신부 두개에 대한 설정은 어떻게 하는지 4)자동인지 수동인지 아니면 그런 프로그램이 있는지... 5)그 키트에 RF탑재 되있는지도... 6)AM-RFMOD (2.4GHz Band RF 모듈)와 이 키트는 어떻게 사용하는지... (연결방법 등등) 1~5번 답이 어려우시면.... 6번 질문인 같은 회사 제품인 AM-RFMOD를 사용해야 하는게 같은 회사 제품이니 많은 정보가 있을 거라 믿고 답변 기다리겠습니다... 이것 저것 자세히좀 알려주시면 감사하겠습니다. ^^
관리자 답변 NEWTC · 2010-06-11
안녕하세요 EWKit-PC 에 관련하여 답변을 해드릴 수는 없습니다. >6)AM-RFMOD (2.4GHz Band RF 모듈) 위 모듈은 4핀 컨넥터와AVR MEGA 128pro 연결하여 사용 할수 있습니다. AM-RFMOD 와 pc를 연결할때는 USB-Serial 변환 보드(AD-USBSERIAL) 와 연결하여 사용할수있습니다. 자세한 사항은 메뉴얼을 참조 하시길 바랍니다. 수고하세요 >AVR MEGA 128pro 개발키트 와 > >EWKit-PC(RF모듈) 연결 방법에 대해 알고 싶습니다. > >사용용도는 무선 제어 자동차에 사용 합니다. > >1)키트와 어떻게 연결하며 > >2)PC에는 어떻게 연결하며 전원부는 어떻게 해야 하는지 > >3)EWKit-PC(RF)송신부와 수신부 두개에 대한 설정은 어떻게 하는지 > >4)자동인지 수동인지 아니면 그런 프로그램이 있는지... > >5)그 키트에 RF탑재 되있는지도... > >6)AM-RFMOD (2.4GHz Band RF 모듈)와 이 키트는 어떻게 >사용하는지... (연결방법 등등) > >1~5번 답이 어려우시면.... > >6번 질문인 같은 회사 제품인 AM-RFMOD를 사용해야 하는게 >같은 회사 제품이니 많은 정보가 있을 거라 믿고 답변 기다리겠습니다... > >이것 저것 자세히좀 알려주시면 감사하겠습니다. ^^
5329 답변완료가속도, 자이로 센서 전원 모듈 관한 질문 입니다. 김덕웅 2010-06-11 1,484
안녕하세요 항상 친절한 답변에 감사 드립니다. 가속도 자이로 센서 전원 모듈을 사용해서 지금가지 테스트 하였는데 이 두가지 센서를 동시에 사용해야 해서 직접 하드웨어를 구성하고자 합니다. 하지만 지난번 방문에서 저희가 구입한 아트메가가 (원인은 아마 short로.... ) 고장 났다고 하셨기에, 아마도 하드웨어 적으로 문제가 있는 거 같습니다. 9v 건전지를 이용, 레귤레이터를 사용해서 5v로 강하 하여 atmega에 인가 하였습니다. 또한 병렬적으로 3.3v로 강하&#160;&#160;하는 레귤레이터를 사용해서 센서들에 인가 하였습니다. 여러가지로 조사 하던중 전류에 인한 고장일 수 도 있다는 생각이 듭니다. 조사한 바로는 atmega에 허용 전류는 초대 400mA인걸로 알고 있는데, 저희가 인가 해준 전류는 (레귤레이터를 통과한 전류) 500mA 입니다.&#160;&#160;혹, 이로 인한 고장일수 도 있는 것인지요? 만약에 그렇다면 현재 전원 모듈을 보고 똑같이 구성하고자 하는데 모듈 구성 부품 중에 LM1117 U742가 무엇인지요? 그리고 마지막으로 PORTF(adc) 를 사용하는데 있어서 ADMUX 레지스터 설정을 0xC0이면 내부의 2.56v를 사용한다고 나와있는데 이말은 AREF나 AVCC에 전원을 인가 할필요가 없는 것을 의미 하는 것인지 아니면 무조건 AVCC나 AREF에 전원을 공급해야하는지, 공급해야 한다면 atmega에서 나오는 vcc 핀(5v)의 전원을&#160;&#160;사용해도 되는지 아님 독립적인 전원으로 5v를 공급해줘야 하는지&#160;&#160;궁금합니다.
관리자 답변 NEWTC · 2010-06-11
안녕하세요 >여러가지로 조사 하던중 전류에 인한 고장일 수 도 있다는 생각이 듭니다. 조사한 바로는 atmega에 허용 전류는 초대 400mA인걸로 알고 있는데, 저희가 인가 해준 전류는 (레귤레이터를 통과한 전류) 500mA 입니다. 혹, 이로 인한 고장일수 도 있는 것인지요? 허용 전류는 초대 400mA 이라는 말은 아마 최대소모량이 400mA 이겠죠 레큘레이터에서 1A 주던 그이상은 주던 칩에소모하는양은 동일하다는말입니다.;; >만약에 그렇다면 현재 전원 모듈을 보고 똑같이 구성하고자 하는데 모듈 구성 부품 중에 LM1117 U742가 무엇인지요? 센서모듈에 전원인가용 보드를 말하시는거지요.. LM1117-3.3 정식명칭 입니다. 타겟보드에서 넘어오는 5볼트를 받아 3.3볼트 만들는것이죠 >그리고 마지막으로 PORTF(adc) 를 사용하는데 있어서 ADMUX 레지스터 설정을 0xC0이면 내부의 2.56v를 사용한다고 나와있는데 이말은 AREF나 AVCC에 전원을 인가 할필요가 없는 것을 의미 하는 것인지 아니면 무조건 AVCC나 AREF에 전원을 공급해야하는지, 공급해야 한다면 atmega에서 나오는 vcc 핀(5v)의 전원을 사용해도 되는지 아님 독립적인 전원으로 5v를 공급해줘야 하는지 궁금합니다. - 내부전원 2.54를 사용할경우 AVCC 핀은 전원 5볼트를 인가 하시고요 aref 콘덴서만 다시길 바랍니다. - aref 를 사용할경우 AVCC 핀은 전원 5볼트를 인가 하시고요 aref 콘덴서와 전원3.3볼트를 인가하면됩니다. 칩에 관련하여 하나하나 자세히 설명할수 없습니다. 데이터 시트에 보시면 다 나오는 내용입니다. 수고하세요 >안녕하세요 항상 친절한 답변에 감사 드립니다. > >가속도 자이로 센서 전원 모듈을 사용해서 지금가지 테스트 하였는데 이 두가지 센서를 동시에 사용해야 해서 직접 하드웨어를 구성하고자 합니다. > >하지만 지난번 방문에서 저희가 구입한 아트메가가 (원인은 아마 short로.... ) 고장 났다고 하셨기에, 아마도 하드웨어 적으로 문제가 있는 거 같습니다. > > >9v 건전지를 이용, 레귤레이터를 사용해서 5v로 강하 하여 atmega에 인가 하였습니다. 또한 병렬적으로 3.3v로 강하 하는 레귤레이터를 사용해서 센서들에 인가 하였습니다. > >여러가지로 조사 하던중 전류에 인한 고장일 수 도 있다는 생각이 듭니다. 조사한 바로는 atmega에 허용 전류는 초대 400mA인걸로 알고 있는데, 저희가 인가 해준 전류는 (레귤레이터를 통과한 전류) 500mA 입니다. 혹, 이로 인한 고장일수 도 있는 것인지요? >만약에 그렇다면 현재 전원 모듈을 보고 똑같이 구성하고자 하는데 모듈 구성 부품 중에 LM1117 U742가 무엇인지요? > >그리고 마지막으로 PORTF(adc) 를 사용하는데 있어서 ADMUX 레지스터 설정을 0xC0이면 내부의 2.56v를 사용한다고 나와있는데 이말은 AREF나 AVCC에 전원을 인가 할필요가 없는 것을 의미 하는 것인지 아니면 무조건 AVCC나 AREF에 전원을 공급해야하는지, 공급해야 한다면 atmega에서 나오는 vcc 핀(5v)의 전원을 사용해도 되는지 아님 독립적인 전원으로 5v를 공급해줘야 하는지 궁금합니다.
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 : [email protected] // 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 : [email protected] >// 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와 연결하려 하는데 맞는지도 문의드립니다. > >감사합니다. >