로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
7833 답변완료usb isp 와 연결이 안됩니다 이상은 2012-12-18 1,321
저번에 빠르고 정확한 답변 감사합니다. 이번에는 컴퓨터랑 연결이 안됩니다. 드라이버 설치를 마쳤는데도 컴퓨터랑 연결이 안됩니다. avr studio 에서도 안되고, iccavr 에서도 연결이 안됩니다. 어떻게 해야할지 몰라서 질문드립니다. 답변 부탁드립니다. (USB 드라이버 링크 : http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m48&wr_id=443&sca=&sfl=wr_subject%7C%7Cwr_content&stx=usbisp&sop=and) (쓰고 있는 물건 링크 : http://www.devicemart.co.kr/goods/view.php?seq=36933)
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, AVR Studio에서 Connect 해 둔 상태에서 창이 떠 있으면, ICCAVR 에서 다운로딩이 안됩니다. 혹시 그 문제는 아닌지요? 이 경우라면 AVR Studio를 다 종료하고 해 보세요. 사실, 지금 드라이버는 잘 설치되었기 때문에, 동작을 해야 맞습니다. 그것도 안된다면, AVR Studio에서 connect 해서 퓨즈도 읽고 다운로딩 해 보세요. 그 결과도 올려봐 주세요. AVR Studio에서의 사용법은 자료실에서 USBISP 사용자 메뉴얼에 잘 나와 있습니다. 안되면 계속 올려 주세요. 수고하세요. > > > 저번에 빠르고 정확한 답변 감사합니다. > > 이번에는 컴퓨터랑 연결이 안됩니다. > > 드라이버 설치를 마쳤는데도 컴퓨터랑 연결이 안됩니다. > > avr studio 에서도 안되고, iccavr 에서도 연결이 안됩니다. > > 어떻게 해야할지 몰라서 질문드립니다. 답변 부탁드립니다. > > (USB 드라이버 링크 : http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m48&wr_id=443&sca=&sfl=wr_subject%7C%7Cwr_content&stx=usbisp&sop=and) > > (쓰고 있는 물건 링크 : http://www.devicemart.co.kr/goods/view.php?seq=36933) >
7832 답변완료강좌를 확인해 봤는데요.... 박채림 2012-12-18 1,449
강좌를 다운받아 확인 해 봤는데요. 기본적인 구동 원리 는 알거 같은데 여전히 아두이노와의 연결 방법을 모르겠습니다.... 여기서 알 수는 없는 건가요? ----------------------------------------------- 안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 본사 제품과의 연결이나 사용하는 방법 등은 온라인강좌->AVR 강좌에서 CS2P 로 검색하면 CS2P 강좌가 나옵니다. 그것을 참고 바랍니다. 관련된 모듈과 참고하여 쓰기 바랍니다. 결국 그 제품도 AVR 이기 때문에, 포트로 보고 사용하기 바랍니다. DC 12V~24V는 외부에서 충분한 전류(12V 1A 이상의 SMPS 또는 아답타) 만들어서 공급해 줘야 합니다. 수고하세요. > > > 세한 일레트로닉스의 스테핑 모터를 구입해서 아두이노로 제어 하기 위해 모듈을 구입했습니다. > 하지만 전자 쪽으로는 너무나 초보자라서 어떻게 사용해야 하는지 막막합니다. > > 일단 아두이노 보드에 어떻게 연결을 해야 하는지 모르겠는데요. > > 모터의 6개의 핀과 모듈의 6개의 핀에 끼우는 건 알겠습니다. > > 그 다음 12v 와 GND 핀을 아두이노에 연결 하면 되는 건가요? > > 아두이노에 또 다른 핀들은 안들어 가는 건가요??? > > > 사실 아두이노가 5v 이기 때문에 12v 모듈에 어떻게 12v 를 공급 해야 하는지도 잘 모르겠습니다..... > > 모터-모듈-아두이노의 연결 방법을 알고 싶습니다. >
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, 아두이노에도 어차피 AVR 이므로 포트 개념이 있습니다. 강좌의 예제에는 포트 C로 짜 두었는 데, 거기에서 D7-D0까지 포트 핀에 해당하는 모터 상을 입력한다고, 제가 강좌 19페이지에 나와 있습니다. 아두이노의 한 포트 정해서 D7 - D0를 CS2P의 0 - 7번에 각각 연결하면 됩니다. 그런 후에, 그 포트를 출력으로 잡아주기 위해서 DDRx = 0xFF 이런 식으로 잡아주고, 사용하면 되죠. 수고하세요. > > > 강좌를 다운받아 확인 해 봤는데요. 기본적인 구동 원리 는 알거 같은데 > > 여전히 아두이노와의 연결 방법을 모르겠습니다.... > > 여기서 알 수는 없는 건가요? > > > ----------------------------------------------- > 안녕하세요? 고객님, > 저희 뉴티씨를 이용하여 주셔서 감사합니다. > > 본사 제품과의 연결이나 사용하는 방법 등은 > 온라인강좌->AVR 강좌에서 CS2P 로 검색하면 > CS2P 강좌가 나옵니다. 그것을 참고 바랍니다. > > > 관련된 모듈과 참고하여 쓰기 바랍니다. 결국 그 제품도 AVR 이기 때문에, > 포트로 보고 사용하기 바랍니다. > > DC 12V~24V는 외부에서 충분한 전류(12V 1A 이상의 SMPS 또는 아답타) 만들어서 공급해 줘야 합니다. > > 수고하세요. > > > > > > > > 세한 일레트로닉스의 스테핑 모터를 구입해서 아두이노로 제어 하기 위해 모듈을 구입했습니다. > > 하지만 전자 쪽으로는 너무나 초보자라서 어떻게 사용해야 하는지 막막합니다. > > > > 일단 아두이노 보드에 어떻게 연결을 해야 하는지 모르겠는데요. > > > > 모터의 6개의 핀과 모듈의 6개의 핀에 끼우는 건 알겠습니다. > > > > 그 다음 12v 와 GND 핀을 아두이노에 연결 하면 되는 건가요? > > > > 아두이노에 또 다른 핀들은 안들어 가는 건가요??? > > > > > > 사실 아두이노가 5v 이기 때문에 12v 모듈에 어떻게 12v 를 공급 해야 하는지도 잘 모르겠습니다..... > > > > 모터-모듈-아두이노의 연결 방법을 알고 싶습니다. > > >
7831 답변완료스테핑 모터 구동모듈 AM-CS2P 관련 질문 입니다. 박채림 2012-12-17 1,471
세한 일레트로닉스의 스테핑 모터를 구입해서 아두이노로 제어 하기 위해 모듈을 구입했습니다. 하지만 전자 쪽으로는 너무나 초보자라서 어떻게 사용해야 하는지 막막합니다. 일단 아두이노 보드에 어떻게 연결을 해야 하는지 모르겠는데요. 모터의 6개의 핀과 모듈의 6개의 핀에 끼우는 건 알겠습니다. 그 다음 12v 와 GND 핀을 아두이노에 연결 하면 되는 건가요? 아두이노에 또 다른 핀들은 안들어 가는 건가요??? 사실 아두이노가 5v 이기 때문에 12v 모듈에 어떻게 12v 를 공급 해야 하는지도 잘 모르겠습니다..... 모터-모듈-아두이노의 연결 방법을 알고 싶습니다.
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 본사 제품과의 연결이나 사용하는 방법 등은 온라인강좌->AVR 강좌에서 CS2P 로 검색하면 CS2P 강좌가 나옵니다. 그것을 참고 바랍니다. 관련된 모듈과 참고하여 쓰기 바랍니다. 결국 그 제품도 AVR 이기 때문에, 포트로 보고 사용하기 바랍니다. DC 12V~24V는 외부에서 충분한 전류(12V 1A 이상의 SMPS 또는 아답타) 만들어서 공급해 줘야 합니다. 수고하세요. > > > 세한 일레트로닉스의 스테핑 모터를 구입해서 아두이노로 제어 하기 위해 모듈을 구입했습니다. > 하지만 전자 쪽으로는 너무나 초보자라서 어떻게 사용해야 하는지 막막합니다. > > 일단 아두이노 보드에 어떻게 연결을 해야 하는지 모르겠는데요. > > 모터의 6개의 핀과 모듈의 6개의 핀에 끼우는 건 알겠습니다. > > 그 다음 12v 와 GND 핀을 아두이노에 연결 하면 되는 건가요? > > 아두이노에 또 다른 핀들은 안들어 가는 건가요??? > > > 사실 아두이노가 5v 이기 때문에 12v 모듈에 어떻게 12v 를 공급 해야 하는지도 잘 모르겠습니다..... > > 모터-모듈-아두이노의 연결 방법을 알고 싶습니다. >
7830 답변완료kd-128-pro-c 에 꽂아서 쓸수있는 온도계를 어떻게구하죠? 현광호 2012-12-17 1,307
온도계가 하나 필요한데 물의 온도를 잴꺼라 살짝 담가서 쓸것입니다. kd-128-pro-c 이곳에 연결해서 쓸것인데 맞는 온도계를 주문하고 싶은데 어떻게 사야하나요?
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, 온도계 중에서 물에 담가쓰는 용도로는 PT100과 같은 온도 센서를 사용하는 것이 좋겠습니다. 홈피 아래쪽의 링크에 있는 본사 대리점들에 가면 조회하면 나올겁니다. 그것은 저항값이 온도에 따라서 변하는 것인데, 저항값을 전압으로 변경하여 쓰면 되겠습니다. 정확한 측정을 위해서는 브리지 방식 등을 사용합니다만, 그냥 대강의 값을 알기 위해서는 VCC에 저항 하나 연결하고, 직렬로 센서 연결해서, 센서 반대쪽에 GND 연결한 후, 센서와 저항 연결점에서 선 하나 빼서, 그 값을 ADC 해서 보면 되겠습니다. 수고하세요. > > > 온도계가 하나 필요한데 > 물의 온도를 잴꺼라 살짝 담가서 쓸것입니다. > kd-128-pro-c 이곳에 연결해서 쓸것인데 > 맞는 온도계를 주문하고 싶은데 어떻게 사야하나요? >
7829 답변완료icc avr 에서 오류가 뜹니다. 이상은 2012-12-17 1,416
노트북이랑 usb isp 에 연결도 하고 드라이버설치도 하고, usb isp는 atmega128에 연결하고 (usbisp 기기에 녹색불이 깜박 거리더군요... 이게 맞는건지 허허..) icc avr 프로그램 키고, 그냥 생 프로젝트에, 파일만 열어서 컴파일 했는데, 자꾸 스크린샷처럼 오류가 생기네요... 퓨즈 비트? 그것도 강의에 적힌대로 했는데 똑같이 오류가 나더군요ㅎㅎ 아직 생초보라 오늘 처음 해봤는데 잘 안되네요. 좋은 답변 부탁드립니다. (기기는 모두 http://www.devicemart.co.kr/goods/view.php?seq=36933 에서 샀습니다.)
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 자료실에서 사용하시는 USBISP의 사용자 메뉴얼을 다운로드 받으세요. 일반 메뉴얼과 사용자 메뉴얼이 있습니다만, 사용자 메뉴얼에는 보다 자세하게 따라하기 수준으로 나와 있습니다. LPT1은 패러렐 포트를 말하구요. 프린터 포트같이 생긴 DB25 커넥터로 된 컴퓨터 뒤쪽에 있는 큰 커넥터입니다. 거기에 연결해 쓰는 AD-ISPPRO와 같은 장비를 쓸 때 쓰는 겁니다. USBISP는 USB를 가상 시리얼로 바꿔서 COM 포트로 쓰는 겁니다. 사용법을 사용자 메뉴얼에서 확인하는 것이 좋겠습니다. 하다가 또 막히는 것이 있으면 본사 홈페이지로 올려 보세요. 수고하세요. > > > 노트북이랑 usb isp 에 연결도 하고 드라이버설치도 하고, usb isp는 atmega128에 연결하고 > (usbisp 기기에 녹색불이 깜박 거리더군요... 이게 맞는건지 허허..) > > icc avr 프로그램 키고, 그냥 생 프로젝트에, 파일만 열어서 컴파일 했는데, 자꾸 스크린샷처럼 오류가 생기네요... > > 퓨즈 비트? 그것도 강의에 적힌대로 했는데 똑같이 오류가 나더군요ㅎㅎ > > 아직 생초보라 오늘 처음 해봤는데 잘 안되네요. 좋은 답변 부탁드립니다. > > (기기는 모두 http://www.devicemart.co.kr/goods/view.php?seq=36933 에서 샀습니다.) >
7828 답변완료왕초보 포트읽는법요 현광호 2012-12-16 1,348
KD-128PRO-C 킷트를 사용중입니다. 모터 두개를 작동시켜야 하는데 예제를 참고중입니다. 예제는 아래있는데요, 이게 전압이 몇볼트가 어느 포트에서 몇번째 핀에서 나오는지 전혀모르겠습니다. 포트 C 에서 나오는것같은데 맞나요? 중간에 portG 라고 있는데 키트에는 포트G가 없는데 어떻게된건가요? 포트 두개에서 각각 모터를 컨트롤 해야하는데, 어떻게해야하나요? 포트에 케이블 연결하고 케이블 잘라서 모터에 연결하려고 하는데 몇번째 선에서 전압이 나오는지 몰라서 아무것도 못하겠습니다. 회색 납작한 케이블에 빨간선이 그어져있는게 0번 핀인가요 10번 핀인가요? PORTC= 0x00 이런식으로나오면 0x 다음에 00 FF 이런건 무엇인가요? 전압인가요? //ICC-AVR application builder : 2007-11-19 오후 5:41:05 // 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> #define MOTOR_PORT PORTC #define PWM1_ON (MOTOR_PORT|=0x01) #define PWM1_OFF (MOTOR_PORT&=0xFE) #define DIR1_ON (MOTOR_PORT|=0x02) #define DIR1_OFF (MOTOR_PORT&=0xFD) #define ENABLE1_OFF (MOTOR_PORT|=0x04) #define ENABLE1_ON (MOTOR_PORT&=0xFB) #define BREAK1_ON (MOTOR_PORT|=0x08) #define BREAK1_OFF (MOTOR_PORT&=0xF7) // 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 = 0xFF; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x1F; } //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 = 0x18; } //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 delay(int delaytime){ int i,j; for(i=0;i<1000;i++){ for(j=0;j<delaytime;j++){ } } } // void main(void) { init_devices(); //insert your functional code here... ENABLE1_ON; PWM1_ON; BREAK1_OFF; printf("Motor Control V01W\r\n"); while(1){ DIR1_ON; delay(5000); PORTG = 0x01; printf("CW\r\n"); DIR1_OFF; delay(5000); PORTG = 0x02; printf("CCW\r\n"); } }
관리자 답변 관리자 · 2012-12-18
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 질문에 답변 드릴께요. > > KD-128PRO-C 킷트를 사용중입니다. > 모터 두개를 작동시켜야 하는데 예제를 참고중입니다. > > 예제는 아래있는데요, > 이게 전압이 몇볼트가 어느 포트에서 몇번째 핀에서 나오는지 전혀모르겠습니다. > 포트 C 에서 나오는것같은데 맞나요? ==> 네, 포트 C에 꽂아서 쓰는 예제로 만들어 져 있습니다. AM-DC1-3 용 예제네요. Break 기능을 제외하고는 AM-DC2-2D도 사용 가능합니다. #define MOTOR_PORT PORTC 이 부분을 PORTD로 고치면 PORTD로 셋업 되므로, 그 경우는 PORTD로 꽂아서 사용하면되겠습니다. 다만, 이 때, DDRD = 0xff; 이렇게 선언해 줘야 가능합니다. 현재는 물론, 포트 C를 출력으로 쓰므로, DDRC = 0xff; 이렇게 되어 있습니다. > 중간에 portG 라고 있는데 키트에는 포트G가 없는데 어떻게된건가요? ==> AVR에는 PORTG가 있습니다. 다만, 5핀 밖에 없는 포트라서, 따로 뽑지 않고, LED와 스위치로 달아 놓았습니다. LED는 PORTG의 D0와 D1 그리고, 스위치는 D2와 D3로 회로가 만들어져 있습니다. 자료실에서 회로도를 참고하세요. > > 포트 두개에서 각각 모터를 컨트롤 해야하는데, 어떻게해야하나요? > 포트에 케이블 연결하고 케이블 잘라서 모터에 연결하려고 하는데 > 몇번째 선에서 전압이 나오는지 몰라서 아무것도 못하겠습니다. > 회색 납작한 케이블에 빨간선이 그어져있는게 0번 핀인가요 10번 핀인가요? ==> 본사의 네이버 까페에 가면 사용 방법이 자세히 나오니, 그것을 참고하면 좋겠네요. 빨간선은 항상 1번이구요. D0에 해당합니다. 고객님이 말하는 것에 따르면 0번이 되겠지요. http://cafe.naver.com/newtc/315 > PORTC= 0x00 이런식으로나오면 0x 다음에 00 FF 이런건 무엇인가요? 전압인가요? ==> 0xFF 라는 것은 0x는 뒤에 나오는게 heXadecimal 즉, 16진수다 라는 거구요. FF는 이진수로 바꾸면 11111111입니다. 즉, D7 - D0가 모두 1이라는 거죠. 0b11111111 이렇게 말하죠 보통, 0b 라는 것은 뒤에 나오는게 binary 즉, 이진수라는 거구요. 첨이니까 동영상 강좌를 좀 참고하는 것이 어떨까 싶습니다. 수고하세요. > > > //ICC-AVR application builder : 2007-11-19 오후 5:41:05 > // 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> > > #define MOTOR_PORT PORTC > #define PWM1_ON (MOTOR_PORT|=0x01) > #define PWM1_OFF (MOTOR_PORT&=0xFE) > #define DIR1_ON (MOTOR_PORT|=0x02) > #define DIR1_OFF (MOTOR_PORT&=0xFD) > #define ENABLE1_OFF (MOTOR_PORT|=0x04) > #define ENABLE1_ON (MOTOR_PORT&=0xFB) > #define BREAK1_ON (MOTOR_PORT|=0x08) > #define BREAK1_OFF (MOTOR_PORT&=0xF7) > > // 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 = 0xFF; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x1F; > } > > //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 = 0x18; > } > > //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 delay(int delaytime){ > int i,j; > for(i=0;i<1000;i++){ > for(j=0;j<delaytime;j++){ > } > } > } > > // > void main(void) > { > init_devices(); > //insert your functional code here... > ENABLE1_ON; > PWM1_ON; > BREAK1_OFF; > printf("Motor Control V01W\r\n"); > > while(1){ > DIR1_ON; > delay(5000); > PORTG = 0x01; > printf("CW\r\n"); > DIR1_OFF; > delay(5000); > PORTG = 0x02; > printf("CCW\r\n"); > } > } >
7827 답변완료USB-ISP PC 인식 장애관련 송종규 2012-12-14 1,774
OS : 윈도우 7 Ultimate K 32bit 제품 : USB-ISP V3.0 위 사항에서 운용하는 사용자입니다. NEWTC사에서 제공하는 USB 드라이버인 USBISPV03_FOR_WIN7을 정상적으로 인스톨하였으며, 수차례의 재부팅과 재설치를 반복하였으나, 장치관리자에 USB가 인식되지가 않습니다. 담당자님께 신속하고 정확한 세부적 답변 요청합니다. * 일과시간에는 업무로 인해 원격제어 등의 방법을 사용할 수 없습니다.
관리자 답변 관리자 · 2012-12-14
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 본 제품은 윈도우 7 32비트에서는 정상적으로 잘 운용되는 제품입니다. 하지만, 간혹 컴퓨터에 따라서, 디바이스 드라이버가 엉켜 있어서, 설치가 제대로 되지 않는 경우도 있을 수 있습니다. 만약 설치가 정상적으로 잘 안되신다면, 우선, XP가 설치되었거나 한 컴퓨터에 가셔서, 디바이스 드라이버 인식을 시킨 다음, USBISP V03.5로 변경하는 절차를 밟고, 그 후에, 다시 고객님의 안된다는 윈도우 7 32비트 컴퓨터로 와서 USBISP V03.5 디바이스 드라이버를 설치하면, 정상적으로 될겁니다. 간혹, 32비트임에도 불구하고, 64비트 OS처럼 Microsoft의 인증을 득한 디바이스 드라이버만 인식하는 경우인지도 모르겠습니다. 이유야 어찌되었든 위에서 말씀드린대로 해 보면 될겁니다. 다만, 프로그램 추가삭제에서 기존에 USBISP 관련해서 설치한 것들을 다 삭제해 주세요. 여러번 설치되면, 또 되지 않을 수도 있습니다. 자주하는 질문 쪽에 가면, USBISP V03을 V03.5로 변경하는 방법이 나와 있습니다. 그런데, 현재 본사에서 판매되는 것들은 1년반정도 전부터 V03은 단종되고 V03.5만 판매되고 있습니다만, 혹시 언제 구매하신 것인지요? 참, 하시다가 잘 안되시면, 본사로 보내주시면, 본사에서 변경하여 보내드립니다. 다만, 이 경우는 고객님 쪽에서 택배비는 부담해 주셔야합니다. 직접 찾아오시면, 무상으로 바로 진행해 드립니다. 수고하세요. > > > OS : 윈도우 7 Ultimate K 32bit > 제품 : USB-ISP V3.0 > > 위 사항에서 운용하는 사용자입니다. > NEWTC사에서 제공하는 USB 드라이버인 USBISPV03_FOR_WIN7을 정상적으로 인스톨하였으며, 수차례의 재부팅과 재설치를 반복하였으나, 장치관리자에 USB가 인식되지가 않습니다. > > 담당자님께 신속하고 정확한 세부적 답변 요청합니다. > * 일과시간에는 업무로 인해 원격제어 등의 방법을 사용할 수 없습니다. >
7826 답변완료가속도 센서요~~ 오창현 2012-12-13 1,275
가속도 센서를 드디어 값을 잘 받아내게 됐는데요. 프로그램은 40개 값을 받아서 상위 4개 하위 4개 정보는 빼고 나머지 더해서 평균냈고요 그 출력을 모니터링 하는데요 정적가속도는 잘 되는데 동적가속도를 보면 이상하게도 처음에 +y축으로 힘을 가했을경우 (현재 rc카에 달았습니다) 출력이 처음에 오히려 -y값이 나오고 그다음에 +값이 나오네요. 그 반대로 -y로 힘을주면 처음에 +값이 나온후 -값이 나옵니다. 이건 모가 문제인지 모르겠네요
관리자 답변 관리자 · 2012-12-13
안녕하세요? 고객님, 원래 그게 정상적인 겁니다. 자주하는 질문에서 "[센서] 3축 가속도 센서에 관해서 궁금합니다. "를 보시면, Impact_Tilt_Measure_AN1611.pdf (317.0K) 라는 것을 다운로드 받아서, 좀 읽어 보시면, 파형이 있을 겁니다. 또한, 파형의 변화를 제가 대충 그려 보았습니다. 이 그림처럼 보통 변할테니, 참조하여 모드를 두고 모드 변화를 status로 주면서 제어하는 것이 좋겠습니다. 수고하세요. > > > 가속도 센서를 드디어 값을 잘 받아내게 됐는데요. > 프로그램은 40개 값을 받아서 상위 4개 하위 4개 정보는 빼고 나머지 더해서 평균냈고요 > > 그 출력을 모니터링 하는데요 > 정적가속도는 잘 되는데 > > 동적가속도를 보면 이상하게도 처음에 +y축으로 힘을 가했을경우 (현재 rc카에 달았습니다) > 출력이 처음에 오히려 -y값이 나오고 그다음에 +값이 나오네요. > 그 반대로 -y로 힘을주면 처음에 +값이 나온후 -값이 나옵니다. > 이건 모가 문제인지 모르겠네요 >
7825 답변완료윈도우7_32bit OS에서 AD_AVRISP-3.5VLite다운로더로 코드비젼에서 다운로딩오류 나상욱 2012-12-13 1,413
드라이버도 맞는거 설치했구요 setting/programmer에서도 AVRSTK500으로 설정하고 사이트에 나와있는 메뉴얼대로 진행했습니다. 코드비젼은 codevisionAVR V2.60 evaluation 사용하고있습니다 유에스비 포트 확인도 다했구요 도와주세요....
관리자 답변 관리자 · 2012-12-13
안녕하세요? 고객님, 그 오류 뒤쪽 화면을 보고 싶습니다. 자주하는 질문에서, [퓨즈셋팅] 코드비전 및 포니프로그에서 셋팅법[ATMEGA128] 에 가서 보세요. 초기 셋팅 퓨즈 값을 어떻게 해야 하는 지 잘판단해야 합니다. 한번만 잘못하면 안되는 겁니다. 그래서, 인공호흡하면, 거의 100% 살아납니다. 다시 올려 보세요. 수고하세요. > > > 드라이버도 맞는거 설치했구요 > setting/programmer에서도 AVRSTK500으로 설정하고 > 사이트에 나와있는 메뉴얼대로 진행했습니다. > 코드비젼은 > codevisionAVR V2.60 evaluation 사용하고있습니다 > 유에스비 포트 확인도 다했구요 도와주세요.... >
7824 답변완료AD-USBISP+ V4.0 fuse 관련 이한빈 2012-12-12 1,381
AVR Studio 4를 사용하고 있습니다. 프로그램 다운로드는 되는데 초기 Fuse 설정이 안되네요. 왜 그런건가요??
관리자 답변 관리자 · 2012-12-13
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. USBISP V4.0은 매우 정확하게 제작된 제품입니다. 따라서, 원래 현재 AVR이 사용하고 있는 클럭의 1/4 이하의 클럭으로 ISP 다운로딩을 하는 SCK 주파수를 설정해야 합니다. 첨에 칩을 사면, AVR은 대부분 내부클럭 중에서 4MHz 이하로 되어 있습니다. 그러다 보니, 첨에는 1MHz 이하의 SCK Freq.를 사용하여 다운로딩을 해야 하고, 퓨즈를 하드웨어에 설계한대로 외부 클럭을 설정하게 되면, 16MHz나 이렇게 되면서, 16/4 하면 4MHz 이하의 클럭으로 사용하면 되는 데, 그럴 경우는 원래 다운로딩 최고 속도인 1.8MHz 에서 사용이 가능합니다. 대부분의 시중에 있는 ISP 들은 최고 속도로 사용할 수 있도록 된 것이 아니라, 대략 어떤 환경에서도 쓸 수 있도록, 1.8MHz의 SCK Freq.로 설정해 두어도, 내부적으로 느린 클럭을 쓰기 때문에, 별 문제없이 초기에도 쓸수 있었습니다. 하지만, 본사의 USBISP+ V 4.0의 경우는 최고 속도로 동작하므로, 처음에 클럭 변경을 할 때에는 460kHz 등으로 맞춰 놓고 한번은 퓨즈를 써야 합니다. 그 뒤에는 다시 SCK Freq를 1.8MHz로 맞춰놓고 빠른 속도로 사용이 가능합니다. 수고하세요. > > > AVR Studio 4를 사용하고 있습니다. > > 프로그램 다운로드는 되는데 > 초기 Fuse 설정이 안되네요. > 왜 그런건가요?? >
7823 답변완료SE-DM185 엔코더 내장형 모터에 대한 문의입니다. 황찬하 2012-12-12 1,361
SE-DM185 모델을 구매하여 쓰고 있습니다. 그런데 Z상이 없어서 한바퀴 회전시 몇번의 엔코더 펄스가 나오는지 정확하게 알수가 없어서 문의드립니다. 1바퀴 회전시 대략 400 펄스의 값이 나오는것 같은데 막상 400을 한바퀴로 잡고 작동시켜보면 이동거리가 오버됩니다. 프로그램이나 하드웨어 상의 문제로 엔코더 정확하게 안읽히는것인지 아니면 1바퀴가 400펄스가 아닌것인지 알수가 없어서 문의 드립니다.
관리자 답변 관리자 · 2012-12-13
안녕하세요? 고객님, 마그네틱 홀센서를 사용하고 있어서, 1회전당 A와 B상 각각에서 13번씩 즉, 합쳐서 26번 엔코더 펄스가 나옵니다. 400번이라는 수치는 아마도 뭔가 잘못하신것이 아닌가 싶습니다. 온라인 강좌->AVR 강좌쪽에서 엔코더 관련된 강좌를 읽어 보시면 도움이 될겁니다. 수고하세요. > > > SE-DM185 모델을 구매하여 쓰고 있습니다. 그런데 Z상이 없어서 > > 한바퀴 회전시 몇번의 엔코더 펄스가 나오는지 정확하게 알수가 없어서 문의드립니다. > > 1바퀴 회전시 대략 400 펄스의 값이 나오는것 같은데 막상 400을 한바퀴로 잡고 작동시켜보면 이동거리가 오버됩니다. > > 프로그램이나 하드웨어 상의 문제로 엔코더 정확하게 안읽히는것인지 아니면 1바퀴가 400펄스가 아닌것인지 알수가 없어서 문의 드립니다. >
7822 답변완료AM-CS2P+SE-SM243 모터 소음문제 정용신 2012-12-11 1,433
AVR128보드와 AM-CS2P+SE-SM243 모터를 사용하고 있는데 소음이 많이 거슬립니다. (윙소리와 드르륵 소리) 질문답변 게시판을 읽어보고 전압도 충분히 주었고 가변저항을 돌려도 줄어들긴 하지만 사라지지 않습니다. (반바퀴 정도 돌리면 최소 소음이고 그 이하는 동작하지 않음) 파워는 12V 1.2A이고 24V 2.5A로 바꿔도 마찮가지입니다. (실제 동작시 전류는 0.1A) 모터 속도는 느린 편이고(1초 1바퀴정도) 많은 토크를 요구하지는 않습니다. <질문> 1. 구동모듈이나 모터를 바꿔야 한다면 추천 바랍니다. 2. 소프트웨어를 바꿔야 한다면 조언바랍니다. 1-2상여자 방식이고 아래 소스첨부합니다. /********************************************* Chip type : ATmega128 Program type : Application Clock frequency : 16.000000 MHz Memory model : Small External SRAM size : 32K bytes Data Stack size : 1024 *********************************************/ #ifndef ENABLE_BIT_DEFINITIONS #define ENABLE_BIT_DEFINITIONS #endif #ifndef ENABLED #define ENABLED 1 #endif #ifndef DISABLED #define DISABLED 0 #endif #include <pgmspace.h> #include <inavr.h> #include <ioavr.h> #include <stdio.h> #include <math.h> #include "def.h" #include "main.h" #include "m128_init.h" #include "m128_int.h" #include "m128_timer.h" #include "m128_clib.h" #include "m128_pack_io.h" #include "m128_adc.h" /* define external function */ extern void putch(char); extern char getch(void); extern void DoPackageMachine(void); extern void UpdateMagicNumber(void); /* define function prototype */ void put2_str_with_len (unsigned char *, int); void IoPortTest(void); void DisplayTest(void); /* Global Parameters */ unsigned int fndDisplay1Data0; unsigned char fndDisplay1Data1; unsigned char fndDisplay1Data2; unsigned long fndDisplayCount; unsigned int fndDisplay2Data[4]; unsigned char fndDisplay1Buf[32],fndDisplay2Buf[32]; unsigned char inputData[2]={"0"}; unsigned char outputData[3]={"0"}; unsigned char outputStatus[3]={"0"}; unsigned char stepSeq2[4]={0x99,0x33,0x66,0xcc}; unsigned char stepSeq12[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88}; #define REV12PHASE (400) #define SEQ12PHASE 8 #define REV2PHASE (200) #define SEQ2PHASE 4 //step수만큼 회전: 1-2상일때 400이면 1회전 void Step12MotorGoUpward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq12[i%SEQ12PHASE]; DelayMS(1); } } //step수만큼 회전: 1-2상일때 400이면 1회전 void Step12MotorGoDownward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq12[(SEQ12PHASE-1)-(i%SEQ12PHASE)]; DelayMS(1); } } //step수만큼 회전: 2상일때 200이면 1회전 void Step2MotorGoUpward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq2[i%SEQ2PHASE]; DelayMS(1); } } //step수만큼 회전: 2상일때 200이면 1회전 void Step2MotorGoDownward(int step) { int i; for(i=0;i<step;i++) { PORTB = stepSeq2[(SEQ2PHASE-1)-(i%SEQ2PHASE)]; DelayMS(1); } }
관리자 답변 관리자 · 2012-12-12
안녕하세요? 고객님, 예전에 저도 같은 문제로 며칠 고민하면서 문제를 풀어본 기억이 있습니다. 모터가 스피커도 아닌데, 윙 하는 소리가 나는겁니다. 드르륵 소리 난다는 부분은 대부분, 바이어스르 잘못 맞춰서, 돌아야하는 타이밍에 못돌면서 밀리는 소리거나, 선 연결을 잘못해서, 잘 안돌거나 하는 등의 소리이므로, 그런 부분은 잘 조정하면 없어집니다. 하지만, 여전히 윙하는 소리는 남게 되죠. 기구적으로는 스테핑 모터에 외부에다 방음을 할 수 있도록 진동을 흡수하는 모터용 진동 Absorber를 판다고 하더군요. 모터에 부가하여 붙이는 형태라고 하는 데, 아직 써보지는 않았습니다. 당시에 돈 문제도 있고, 사러가기도 좀 구찮기도 하구 했지요. 소프트웨어적으로 해결하는 방법은, 타이머를 이용하면, 소리가 좀 달라집니다. 소리를 아예 없앨수는 없고, 잘 들리지 않는 쪽으로 밀어버리는 쪽이 좋겠습니다. 타이머 오버플로우 인터럽트를 사용해서 원하는 타이밍에 클럭이 돌도록만 만들어 주면 됩니다. 그 주파수가 제가 테스트 했을 때 12-14kHz 정도로 타이머 돌리면서 그안에서 하니까 소리가 많이 줄었습니다. 한 번 해 보세요. 당시 소스 등이 남아있지는 않아서, 여기까지 도움 드립니다. 잘 되기를 바래요. 참고로, 스테핑 모터들은 어떤 모터라도 소리는 나게 됩니다만, 그 소리를 최소화하고, 안들리는 쪽으로 밀어버리는 것으로 생각하시면 됩니다. 수고하세요. > > > AVR128보드와 AM-CS2P+SE-SM243 모터를 사용하고 있는데 소음이 많이 거슬립니다. > (윙소리와 드르륵 소리) > > 질문답변 게시판을 읽어보고 전압도 충분히 주었고 가변저항을 돌려도 줄어들긴 하지만 사라지지 않습니다. > (반바퀴 정도 돌리면 최소 소음이고 그 이하는 동작하지 않음) > > 파워는 12V 1.2A이고 24V 2.5A로 바꿔도 마찮가지입니다. (실제 동작시 전류는 0.1A) > > 모터 속도는 느린 편이고(1초 1바퀴정도) 많은 토크를 요구하지는 않습니다. > > <질문> > > 1. 구동모듈이나 모터를 바꿔야 한다면 추천 바랍니다. > > 2. 소프트웨어를 바꿔야 한다면 조언바랍니다. > > > 1-2상여자 방식이고 아래 소스첨부합니다. > > /********************************************* > Chip type : ATmega128 > Program type : Application > Clock frequency : 16.000000 MHz > Memory model : Small > External SRAM size : 32K bytes > Data Stack size : 1024 > *********************************************/ > > #ifndef ENABLE_BIT_DEFINITIONS > #define ENABLE_BIT_DEFINITIONS > #endif > > #ifndef ENABLED > #define ENABLED 1 > #endif > #ifndef DISABLED > #define DISABLED 0 > #endif > > #include <pgmspace.h> > #include <inavr.h> > #include <ioavr.h> > #include <stdio.h> > #include <math.h> > > #include "def.h" > #include "main.h" > #include "m128_init.h" > #include "m128_int.h" > #include "m128_timer.h" > #include "m128_clib.h" > #include "m128_pack_io.h" > #include "m128_adc.h" > > /* define external function */ > extern void putch(char); > extern char getch(void); > extern void DoPackageMachine(void); > extern void UpdateMagicNumber(void); > > > /* define function prototype */ > void put2_str_with_len (unsigned char *, int); > void IoPortTest(void); > void DisplayTest(void); > > /* Global Parameters */ > unsigned int fndDisplay1Data0; > unsigned char fndDisplay1Data1; > unsigned char fndDisplay1Data2; > unsigned long fndDisplayCount; > unsigned int fndDisplay2Data[4]; > > unsigned char fndDisplay1Buf[32],fndDisplay2Buf[32]; > unsigned char inputData[2]={"0"}; > unsigned char outputData[3]={"0"}; > unsigned char outputStatus[3]={"0"}; > > unsigned char stepSeq2[4]={0x99,0x33,0x66,0xcc}; > unsigned char stepSeq12[8]={0x99,0x11,0x33,0x22,0x66,0x44,0xcc,0x88}; > > #define REV12PHASE (400) > #define SEQ12PHASE 8 > #define REV2PHASE (200) > #define SEQ2PHASE 4 > > //step수만큼 회전: 1-2상일때 400이면 1회전 > void Step12MotorGoUpward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq12[i%SEQ12PHASE]; > DelayMS(1); > } > } > > //step수만큼 회전: 1-2상일때 400이면 1회전 > void Step12MotorGoDownward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq12[(SEQ12PHASE-1)-(i%SEQ12PHASE)]; > DelayMS(1); > } > } > > //step수만큼 회전: 2상일때 200이면 1회전 > void Step2MotorGoUpward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq2[i%SEQ2PHASE]; > DelayMS(1); > } > } > > > //step수만큼 회전: 2상일때 200이면 1회전 > void Step2MotorGoDownward(int step) > { > int i; > for(i=0;i<step;i++) > { > PORTB = stepSeq2[(SEQ2PHASE-1)-(i%SEQ2PHASE)]; > DelayMS(1); > } > } >
7821 답변완료textLCD에 대해.. 이영호 2012-12-11 1,471
현재 참고해서 textLCD를 다짠상태입니다. 혹시 제가 원하는건 textLCD 첫번째줄에서 글씨가 초과되면 2번째 줄로 넘어가는 걸 하려고하는데 어떻게 로직을짜야하는지 궁금합니다.. //ICC-AVR application builder : 2005-11-11 오후 12:05:38 // Target : M128 // Crystal: 16.000Mhz // RS : PORTA A0 // RW : PORTA A1 // E : PORTA A2 // Data: PORTF #include <iom128v.h> #include <macros.h> #define ON 1 #define OFF 0 #define DELAYTIME 10 #define RIGHT 1 #define LEFT 0 void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xFF; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0xFF; PORTG = 0x00; DDRG = 0xFF; } //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(); 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 delay(int dd){ int i,j; for(i=0 ; i<1000 ; i++){ for(j=0 ; j<dd ; j++){ } } } // RS : PORTA A0 void LCD_RS(int onoff){ if(onoff == ON) PORTA = PORTA | 0x01; else PORTA = PORTA & 0xFE; } // RW : PORTA A1 void LCD_RW(int onoff){ if(onoff == ON) PORTA = PORTA | 0x02; else PORTA = PORTA & 0xFD; } // E : PORTA A2 void LCD_E(int onoff){ if(onoff == ON) PORTA = PORTA | 0x04; else PORTA = PORTA & 0xFB; } void LCD_Clr(){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = 0x01; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void write_char(char s){ LCD_RS(ON); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = s; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void returnhome(){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); PORTF = 0x02; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void LCDONOFF(int onoff){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(onoff == ON){ PORTF = 0x0F; }else{ PORTF = 0x08; } delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void lcd_disp(char x, char y){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(y==0){ PORTF = x+0x80; } else{ PORTF = x+0xC0; } delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void write_lcd(int x, int y, char *ch){ lcd_disp(x, y); while(*ch){ write_char(*ch++); } } void LCD_Shift(char rl){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(rl == RIGHT) PORTF = 0x1C; else PORTF = 0x18; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void func_set(int nf){ LCD_RS(OFF); delay(DELAYTIME); LCD_RW(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); if(nf == OFF) PORTF = 0x30; else PORTF = 0x3C; delay(DELAYTIME); LCD_E(OFF); delay(DELAYTIME); LCD_E(ON); delay(DELAYTIME); } void init_lcd(){ delay(DELAYTIME*15); func_set(OFF); delay(DELAYTIME*4); func_set(OFF); delay(DELAYTIME); func_set(OFF); delay(DELAYTIME); func_set(ON); delay(DELAYTIME); LCDONOFF(OFF); LCDONOFF(ON); LCD_Clr(); } void main(void){ int i,t; char str1[40] = {"TEXT_LCD"}; char str2[40] = {"TEST_MODE"}; init_devices(); init_lcd(); PORTG = 0x03; LCDONOFF(ON); returnhome(); LCD_Clr(); write_lcd(0,0,str1); write_lcd(0,1,str2); for(i=0; i<4 ; i++){ delay(DELAYTIME*100); LCD_Shift(RIGHT); } while(1){ for(i=0; i<8 ; i++){ if(t%2 == 0){ delay(DELAYTIME*100); LCD_Shift(LEFT); } else{ delay(DELAYTIME*100); LCD_Shift(RIGHT); } } t-=-1; } }
관리자 답변 관리자 · 2012-12-12
안녕하세요? 잘 했네요. 처음 짤 때 여기까지 오기 쉽지 않았을 텐데, 고생했습니다. 우선, 텍스트 LCD의 화면은 메모리 맵의 일부다 라고 생각하면 됩니다. 즉, LCD의 칸수와 줄수에 따라서, 메모리 맵이 달라지는 데, 예를 들어서, 2x16 LCD 인 경우, 0x80 번지가 첫번째 줄의 맨 왼쪽 주소구요. 0xc0 번지기 두번째 줄의 맨 왼쪽 주소입니다. 그 쪽에다가 커서를 옮기고, 글을 쓰기 시작하면 됩니다. 수고하세요. > > > 현재 참고해서 textLCD를 다짠상태입니다. > > > 혹시 제가 원하는건 textLCD > > 첫번째줄에서 글씨가 초과되면 2번째 줄로 넘어가는 걸 하려고하는데 > > > 어떻게 로직을짜야하는지 궁금합니다.. > > > > //ICC-AVR application builder : 2005-11-11 오후 12:05:38 > // Target : M128 > // Crystal: 16.000Mhz > > // RS : PORTA A0 > // RW : PORTA A1 > // E : PORTA A2 > // Data: PORTF > > #include <iom128v.h> > #include <macros.h> > > #define ON 1 > #define OFF 0 > #define DELAYTIME 10 > #define RIGHT 1 > #define LEFT 0 > > void port_init(void) > { > PORTA = 0x00; > DDRA = 0xFF; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0xFF; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0xFF; > PORTG = 0x00; > DDRG = 0xFF; > } > > //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(); > > 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 delay(int dd){ > int i,j; > > for(i=0 ; i<1000 ; i++){ > for(j=0 ; j<dd ; j++){ > } > } > } > > // RS : PORTA A0 > void LCD_RS(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x01; > else > PORTA = PORTA & 0xFE; > } > // RW : PORTA A1 > void LCD_RW(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x02; > else > PORTA = PORTA & 0xFD; > } > // E : PORTA A2 > void LCD_E(int onoff){ > if(onoff == ON) > PORTA = PORTA | 0x04; > else > PORTA = PORTA & 0xFB; > } > > void LCD_Clr(){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = 0x01; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void write_char(char s){ > LCD_RS(ON); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = s; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > > > void returnhome(){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > PORTF = 0x02; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void LCDONOFF(int onoff){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(onoff == ON){ > PORTF = 0x0F; > }else{ > PORTF = 0x08; > } > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > > void lcd_disp(char x, char y){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(y==0){ > PORTF = x+0x80; > } > else{ > PORTF = x+0xC0; > } > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void write_lcd(int x, int y, char *ch){ > lcd_disp(x, y); > while(*ch){ > write_char(*ch++); > } > } > > void LCD_Shift(char rl){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(rl == RIGHT) > PORTF = 0x1C; > else > PORTF = 0x18; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void func_set(int nf){ > LCD_RS(OFF); > delay(DELAYTIME); > LCD_RW(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > if(nf == OFF) > PORTF = 0x30; > else > PORTF = 0x3C; > delay(DELAYTIME); > LCD_E(OFF); > delay(DELAYTIME); > LCD_E(ON); > delay(DELAYTIME); > } > > void init_lcd(){ > delay(DELAYTIME*15); > func_set(OFF); > delay(DELAYTIME*4); > func_set(OFF); > delay(DELAYTIME); > func_set(OFF); > delay(DELAYTIME); > func_set(ON); > delay(DELAYTIME); > LCDONOFF(OFF); > LCDONOFF(ON); > LCD_Clr(); > > } > > void main(void){ > int i,t; > char str1[40] = {"TEXT_LCD"}; > char str2[40] = {"TEST_MODE"}; > > init_devices(); > init_lcd(); > PORTG = 0x03; > LCDONOFF(ON); > returnhome(); > LCD_Clr(); > write_lcd(0,0,str1); > write_lcd(0,1,str2); > > for(i=0; i<4 ; i++){ > delay(DELAYTIME*100); > LCD_Shift(RIGHT); > } > while(1){ > for(i=0; i<8 ; i++){ > if(t%2 == 0){ > delay(DELAYTIME*100); > LCD_Shift(LEFT); > } > else{ > delay(DELAYTIME*100); > LCD_Shift(RIGHT); > } > } > t-=-1; > } > } >
7820 답변완료SE-SM9K 모터 제어 다시 질문드립니다. 최우성 2012-12-08 1,514
소프트웨어 : ICCAVR 7 하드웨어 : AM-128PRO + 스테핑모터 모듈 AM-MS2 + 스테핑모터 SE-SM9K #include <iom128v.h> #include <macros.h> #include <stdio.h> #define MOTOR_PORT PORTD // 스테핑 모터 연결 포트 #define MOTOR_PORT_DDR DDRD // 스테핑 모터 연결 포트의 DDR REG #define MOTOR_ENABLE (MOTOR_PORT = MOTOR_PORT|0x80) #define MOTOR_DISABLE (MOTOR_PORT = MOTOR_PORT&0x7f) #define MOTOR_STEP_M0 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x00) #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) #define MOTOR_LEFT_CLK (MOTOR_PORT = MOTOR_PORT^0x01) #define MOTOR_RIGHT_CLK (MOTOR_PORT = MOTOR_PORT^0x04) #define MOTOR_LEFT_CW (MOTOR_PORT = MOTOR_PORT&0xfd) #define MOTOR_LEFT_CCW (MOTOR_PORT = MOTOR_PORT|0x02) #define MOTOR_RIGHT_CW (MOTOR_PORT = MOTOR_PORT&0xf7) #define MOTOR_RIGHT_CCW (MOTOR_PORT = MOTOR_PORT|0x08) void port_init(void) { PORTA = 0x00; DDRA = 0x03; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; DDRC = 0xff; PORTD = 0x00; DDRD = 0xff; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 10KHz // actual value: 10.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xc7; //OCR1A = 0; //TCNT1L = 0xF4; //OCR1AH = 0xFF; //OCR1AL = 0xff; TCCR0 = 0x02; //start timer } #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0xc7; //reload counter value MOTOR_LEFT_CLK; MOTOR_RIGHT_CLK; /* if(MOTOR_PORT & 0x01){ MOTOR_PORT = MOTOR_PORT & 0xfe; }else{ MOTOR_PORT = MOTOR_PORT | 0x01; } */ } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled //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(); 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 delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } /* main function-----------------------------------*/ void main(void) { volatile unsigned char step=0; int i=0; init_devices(); //insert your functional code here... MOTOR_PORT_DDR = 0xff; while(1){ MOTOR_ENABLE; MOTOR_STEP_M0; MOTOR_LEFT_CCW; //MOTOR_RIGHT_CW; 최대 토크를 내기위한 소스를 짜려고 하는데 어느부분을 건드려야 할지 답변주시면 감사하겠습니다
관리자 답변 관리자 · 2012-12-08
안녕하세요? 어제 올려줬던 소스와는 또 다르네요. 이건, 본사의 기본 타이머 소스와 거의 같아 보입니다. 걸리는 토크에 따라서 전압에 따라서, 바이어스 저항값 주는 것에 따라서, 다 다르기 때문에, 기본적으로 소스가 돌아가고 있다면, 위에 말한 부분들을 우선적으로 점검하고, 타이머를 부르는 주기를 변경해 보고, timer 루틴안에서, t1++; 이런식으로 하여서, if(t1 > 100) 이 때, 클럭 한번, 이런식으로 제어해 줘서, 타이밍을 이 100 값을 1000으로 바꾸거나 하면, 속도가 변경되죠. 프로그램보다도 가장 편한 것은 클럭 쪽에다가 그냥 펑션 제너레이터를 물려서, 원하는 주파수를 줘보고, 거기서 토크가 어느정도 나오는 지 확인하는 방법이 있겠습니다. 그 환경을 토크 물린 상태에서 직접 앞에 놓고, 해봐야 하는 것이라서, 뭐라 말하기 어렵습니다. 또한, 가감속 테이블을 작성해서, 속도를 서서히 올려가야 해서, 그 부분도 토크에 영향을 많이 받습니다. 보통은 첨에는 반바퀴나 한바퀴 돌면, 속도 더블 하다가,어느정도 올라가면, 1/4 정도 올리고, 이런식으로 속도 업해가면 됩니다. 수고하세요. > > > 소프트웨어 : ICCAVR 7 > 하드웨어 : AM-128PRO + 스테핑모터 모듈 AM-MS2 + 스테핑모터 SE-SM9K > > #include <iom128v.h> > #include <macros.h> > #include <stdio.h> > > #define MOTOR_PORT PORTD // 스테핑 모터 연결 포트 > #define MOTOR_PORT_DDR DDRD // 스테핑 모터 연결 포트의 DDR REG > > #define MOTOR_ENABLE (MOTOR_PORT = MOTOR_PORT|0x80) > #define MOTOR_DISABLE (MOTOR_PORT = MOTOR_PORT&0x7f) > #define MOTOR_STEP_M0 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x00) > #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) > #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) > #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) > #define MOTOR_LEFT_CLK (MOTOR_PORT = MOTOR_PORT^0x01) > #define MOTOR_RIGHT_CLK (MOTOR_PORT = MOTOR_PORT^0x04) > #define MOTOR_LEFT_CW (MOTOR_PORT = MOTOR_PORT&0xfd) > #define MOTOR_LEFT_CCW (MOTOR_PORT = MOTOR_PORT|0x02) > #define MOTOR_RIGHT_CW (MOTOR_PORT = MOTOR_PORT&0xf7) > #define MOTOR_RIGHT_CCW (MOTOR_PORT = MOTOR_PORT|0x08) > > void port_init(void) > { > PORTA = 0x00; > DDRA = 0x03; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; > DDRC = 0xff; > PORTD = 0x00; > DDRD = 0xff; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x03; > } > > //TIMER0 initialize - prescale:8 > // WGM: Normal > // desired value: 10KHz > // actual value: 10.000KHz (0.0%) > void timer0_init(void) > { > TCCR0 = 0x00; //stop > > ASSR = 0x00; //set async mode > TCNT0 = 0xc7; > //OCR1A = 0; > //TCNT1L = 0xF4; > //OCR1AH = 0xFF; > //OCR1AL = 0xff; > TCCR0 = 0x02; //start timer > } > > #pragma interrupt_handler timer0_ovf_isr:17 > void timer0_ovf_isr(void) > { > TCNT0 = 0xc7; //reload counter value > MOTOR_LEFT_CLK; > MOTOR_RIGHT_CLK; > /* if(MOTOR_PORT & 0x01){ > MOTOR_PORT = MOTOR_PORT & 0xfe; > }else{ > MOTOR_PORT = MOTOR_PORT | 0x01; > } > */ > } > > > //UART0 initialize > // desired baud rate: 9600 > // actual: baud rate:9615 (0.2%) > // char size: 8 bit > // parity: Disabled > > //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(); > 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 delay(int n) > { > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } > } > > > /* main function-----------------------------------*/ > void main(void) > { > volatile unsigned char step=0; > int i=0; > init_devices(); > //insert your functional code here... > > MOTOR_PORT_DDR = 0xff; > while(1){ > MOTOR_ENABLE; > MOTOR_STEP_M0; > MOTOR_LEFT_CCW; > //MOTOR_RIGHT_CW; > > > 최대 토크를 내기위한 소스를 짜려고 하는데 어느부분을 건드려야 할지 답변주시면 감사하겠습니다 >
7819 답변완료SE-SM9K 모터 다시 질문드립니다 최우성 2012-12-08 1,315
올려주신 그래프를 참고하여 500Hz 약 150rpm에서 최대토크가 나온다고 생각하고 한펄스당 주기를 1/500= 2ms로 하기 위해 분주비 64를 선택하여 16MHz / 64 = 250000, 1/250000 = 4us로 클럭을 정하여 500개를 카운트하기 위해 타이머/카운트 1을 사용하였습니다. void timer1_init(void) { TCCR1A = 0x00; //stop TCCR1B = 0x00; TCNT1 = 65000; //oxffff의 경우 65535이므로 500을 뺀 65035에서 카운트를 시작하였습니다. TCCR1B = 0x03; //start timer clk/64 그런데 모터의 속도와 토크가 그래프 대로 나오지 않고 굉장이 느린상태입니다.. 잘못한 부분이 있으면 설명해주시면 감사하겠습니다. }
관리자 답변 관리자 · 2012-12-08
이 부분만 봐서 알수가 없습니다. 전체 소스와 사용하고 있는 하드웨어/소프트웨어 환경도 함께 적어주기 바랍니다. 수고하세요. > > > 올려주신 그래프를 참고하여 500Hz 약 150rpm에서 최대토크가 나온다고 생각하고 > 한펄스당 주기를 1/500= 2ms로 하기 위해 분주비 64를 선택하여 > 16MHz / 64 = 250000, 1/250000 = 4us로 클럭을 정하여 500개를 카운트하기 위해 타이머/카운트 1을 사용하였습니다. > void timer1_init(void) > { > TCCR1A = 0x00; //stop > TCCR1B = 0x00; > > TCNT1 = 65000; //oxffff의 경우 65535이므로 500을 뺀 65035에서 카운트를 시작하였습니다. > > > TCCR1B = 0x03; //start timer clk/64 > > 그런데 모터의 속도와 토크가 그래프 대로 나오지 않고 굉장이 느린상태입니다.. > > 잘못한 부분이 있으면 설명해주시면 감사하겠습니다. > } >