로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
8838 답변완료usb isp V03.5 손용호 2014-06-26 1,402
디지털제어산업기사 보드에다가 usb isp V03.5 에 프린트포트 25P isp에 연결해서 써도 동작하나요???
관리자 답변 관리자 · 2014-06-27
안녕하세요?고객님 저희 뉴티씨제품을 이용해 주셔서 감사합니다. 디지털제어산업기사가 현재 패러랠포트를 가지고 하는것으로 되어있어서 그러시는것같네요. USBISP를 25핀패러랠 포트로 변환하는것이 안되구요. XP를 깔아서 공부하세요. 혹시 usb방식도 되는지 확인해보시구요. 감사합니다. > > > 디지털제어산업기사 보드에다가 > > usb isp V03.5 에 프린트포트 25P isp에 연결해서 써도 동작하나요??? >
8837 답변완료SE-SM243 스태핑 모터 구동 박현호 2014-06-24 1,364
현재 MCU 모듈은 AM-128Pro, Main Board는 AB-M128pro-A, 스태핑모터 구동모듈 AM-CS2P 를 구입하여 사용하고 있습니다. 회로결선은 CS2P 에 오른쪽 스태핑모터 연결하였고 12V 3A 어댑터를 이용해 메인보드로부터 12V출력을 점프하여 구동모듈에 연결하였습니다. (모듈 LED에 불 들어와야 동작전압 인가 된건가요? 12V 연결하여도 불은 들어오지않고 있습니다.) 동작확인을 위해 간단한 1상여자 코드로 출력해보았지만 삐-- 소리만 나면서 모터는 돌아가지 않습니다.. SE-SM243 모터에 2-PHASE 1.8도 라고 표시되어 있는데 2상여자방식으로 코딩해야하는건가요? 메뉴엘에 보면 상을 찾는 방법이 나와있는데, 먼저 모터의 상을 찾아준 뒤 모터스펙에 맞게 코딩해야 하는건지.. 초보라 많이 애를 먹고있습니다.. 밑에 예제소스 질문도 올렸는데 많은 조언 부탁드립니다. 감사합니다.
관리자 답변 관리자 · 2014-06-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 아마도 너무 빠르게 상을 바꿔주고 있거나, CS2P 중간위쯤 있는 파란색 가변저항을 적절한 토크로 조정하지않아 전류가 부족해서 그럴수도 있고, cs2p의 12V 2핀 모터용전원에 넣은 전원자체의 전류가 부족해서 그럴수도 있고, 10핀 전원에 gnd와 vcc5V를 연결해야하는데 안해서 그럴수도 있습니다. 위의 내용을 중심으로 확인바랍니다. 감사합니다. > > > 현재 MCU 모듈은 AM-128Pro, > Main Board는 AB-M128pro-A, > 스태핑모터 구동모듈 AM-CS2P 를 구입하여 사용하고 있습니다. > > 회로결선은 CS2P 에 오른쪽 스태핑모터 연결하였고 > 12V 3A 어댑터를 이용해 메인보드로부터 12V출력을 > 점프하여 구동모듈에 연결하였습니다. > (모듈 LED에 불 들어와야 동작전압 인가 된건가요? 12V 연결하여도 불은 들어오지않고 있습니다.) > > 동작확인을 위해 간단한 1상여자 코드로 출력해보았지만 삐-- 소리만 나면서 모터는 돌아가지 않습니다.. > > SE-SM243 모터에 2-PHASE 1.8도 라고 표시되어 있는데 2상여자방식으로 코딩해야하는건가요? > 메뉴엘에 보면 상을 찾는 방법이 나와있는데, 먼저 모터의 상을 찾아준 뒤 모터스펙에 맞게 > 코딩해야 하는건지.. 초보라 많이 애를 먹고있습니다.. > > 밑에 예제소스 질문도 올렸는데 많은 조언 부탁드립니다. > 감사합니다. >
8836 답변완료스테핑모터 예제소스에 대해 박현호 2014-06-24 1,364
안녕하세요, 뉴티씨 홈페이지 자료실에서 제공하는 스태핑모터 예제소스를 구동하려 하는데요, 현재 제가 사용하고 있는 컴파일러는 코드비전AVR 2.05 버전입니다. 뉴티씨에서 제공한 소스가 코드비전 컴파일러와 소스호환이 되는지 궁금합니다. 모터구동 #include <mega128.h> #include <delay.h> #define EX_STEP_PORT PORTC #define EX_STEP_PORT DDRC char nexMotorCLK_1(char step){ char next; switch(step){ case 0x01 : next = 0x02; break; case 0x02 : next = 0x04; break; case 0x04 : next = 0x08; break; case 0x08 : next = 0x01; break; default : next = 0x01; break; } return next; } void main(void) { char step = 0; EX_STEP_DDR = 0xff; while(1){ step = nextMotorCLK_1(step); EX_STEP_PORT = step; delay(100); } } 컴파일시 계속 에러가 뜨는데 소스문제인지 컴파일러 간의 호환문제인지 모르겠네요.. 코드비전 컴파일러 사용시 스태핑모터를 구동하기위한 기본적인 사항들을 알려주시면 감사하겠습니다.
관리자 답변 관리자 · 2014-06-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 소스는 별문제없이 변환하신것같은데 다만 delay문 관련 에러가 아닐까 싶네요. 함수명 확인바랍니다. 감사합니다. > > > 안녕하세요, 뉴티씨 홈페이지 자료실에서 제공하는 스태핑모터 예제소스를 > > 구동하려 하는데요, 현재 제가 사용하고 있는 컴파일러는 코드비전AVR 2.05 버전입니다. > > 뉴티씨에서 제공한 소스가 코드비전 컴파일러와 소스호환이 되는지 궁금합니다. > > 모터구동 > #include <mega128.h> > #include <delay.h> > #define EX_STEP_PORT PORTC > #define EX_STEP_PORT DDRC > > char nexMotorCLK_1(char step){ > char next; > switch(step){ > case 0x01 : next = 0x02; break; > case 0x02 : next = 0x04; break; > case 0x04 : next = 0x08; break; > case 0x08 : next = 0x01; break; > default : next = 0x01; break; > } > return next; > } > > void main(void) > { > char step = 0; > EX_STEP_DDR = 0xff; > while(1){ > step = nextMotorCLK_1(step); > EX_STEP_PORT = step; > delay(100); > } > } > > 컴파일시 계속 에러가 뜨는데 소스문제인지 컴파일러 간의 호환문제인지 모르겠네요.. > 코드비전 컴파일러 사용시 스태핑모터를 구동하기위한 > 기본적인 사항들을 알려주시면 감사하겠습니다. >
8835 답변완료atmega128 전원 연결 했는데 세븐세그먼트와 pb0, pb1이 이상해요 공경태 2014-06-21 1,420
usb-isp에 1번 스위치를 on하고 컴퓨터와 연결했습니다.(12v 전원은 연결 안해습니다.) 그런데 avr이 프로그램도 다운 받지 않았는데 세븐세그먼트에 0~7까지 순서대로 불이 들어오고 pb0와 pb1의 불이 번갈아 켜집니다. avr 상태는 d201의 파란불이 점멸하고 d202는 빨간불이 들어오는데 무엇이 잘못 됐나요?
관리자 답변 관리자 · 2014-06-21
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 본사의 AVR보드에는 제품을 100% 테스트하여 이상없는제품만을 판매하고 있습니다. 따라서 기본 테스트 소스가 다운로드되어있습니다. 이상없는것으로 정상이니 걱정말고 사용하세요. 감사합니다. > > > usb-isp에 1번 스위치를 on하고 컴퓨터와 연결했습니다.(12v 전원은 연결 안해습니다.) > > 그런데 avr이 프로그램도 다운 받지 않았는데 세븐세그먼트에 0~7까지 순서대로 불이 들어오고 > > pb0와 pb1의 불이 번갈아 켜집니다. > > avr 상태는 d201의 파란불이 점멸하고 d202는 빨간불이 들어오는데 > > 무엇이 잘못 됐나요? >
8834 답변완료AM-CS2P에 대해 질문드릴것이 있습니다. 오세형 2014-06-19 1,461
저희가 이 회사의 AM-CS2P (모터 드라이브) 제품을 구입했습니다. 이 모터 드라이브를 이용하여 4017-875 라는 이름의 스텝모터(2상 바이폴라 모터라고합니다)를 제어하려고 합니다. 이 모터에 입력 선이 4개가 있는데(A, /A, B, /B) 이를 사진으로 첨부하였습니다. 이 회사의 AM-CS2P와 모터를 연결하는 방법을 모르겠어서 이렇게 질문을 드립니다. 모터의 4개의 선을 AM-CS2P의 어느 부분에 연결을 해줘야하는지 알고 싶습니다.
관리자 답변 관리자 · 2014-06-19
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 구매하신 모터는 바이폴라방식이고 cs2p는 유니폴라방식이라 서로 호환되지 않는 방식입니다. 따라서 연결이 불가합니다. 맞는방식의 모터인 유니폴라방식의 모터를 구하셔서 사용하시기 바랍니다. 감사합니다. > > > 저희가 이 회사의 AM-CS2P (모터 드라이브) 제품을 구입했습니다. > > 이 모터 드라이브를 이용하여 4017-875 라는 이름의 스텝모터(2상 바이폴라 모터라고합니다)를 제어하려고 > > 합니다. > > 이 모터에 입력 선이 4개가 있는데(A, /A, B, /B) 이를 사진으로 첨부하였습니다. > > 이 회사의 AM-CS2P와 모터를 연결하는 방법을 모르겠어서 이렇게 질문을 드립니다. > > 모터의 4개의 선을 AM-CS2P의 어느 부분에 연결을 해줘야하는지 알고 싶습니다. >
8833 답변완료GLCD 플러스모듈 문의입니다 박진현 2014-06-18 1,391
어떤 예제를 넣어도 화면이 계속 이런 상태네요. 바뀌지도 않고. 지금 이 상태가 고장나있는 상태인가요?
관리자 답변 관리자 · 2014-06-18
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 사진으로볼때 정상으로보이는데 예제소스에서 정의된 것과는다른 곳에 연결한게 아닌가 싶네요. 소스 잘 살펴보시고 그래도 모르겠다면 본사에 점검받기를 귄장합니다. 연결 포트가 소스랑 틀리거나 옵션 설션문제이거나 타겟칩 옵션설정 문제거나 그런것 같네요. 감사합니다. > > > 어떤 예제를 넣어도 화면이 계속 이런 상태네요. 바뀌지도 않고. > > 지금 이 상태가 고장나있는 상태인가요? >
8832 답변완료스테핑모터 구동모듈AM-CS2P 관련 질문 입니다. 최용 2014-06-18 1,283
일단 저는 avr 이 아닌 VHDL로 제어를 했는데요 같은 클락으로 모터를 구동시켰는데 두 모터의 속도가 확연히 다르는데요? 왜 같은 모터드라이버, 모터인데 속도가 달라질까요?
관리자 답변 관리자 · 2014-06-18
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 생성한 상의 모습을 오실로스코프로 찍은후 비교해보세요. 입력이 틀리니 결과가 틀려질것 같습니다. 감사합니다. > > > 일단 저는 avr 이 아닌 VHDL로 제어를 했는데요 > > 같은 클락으로 모터를 구동시켰는데 두 모터의 속도가 확연히 다르는데요? > > 왜 같은 모터드라이버, 모터인데 속도가 달라질까요? >
8831 답변완료결재했구요. 세금계산서 처리 바랍니다. 바이오브레인 2014-06-16 1,364
세금계산서 처리 부탁드립니다. 결재 했습니다.
관리자 답변 관리자 · 2014-06-17
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 요청하신데로 처리해드리겠습니다. 감사합니다. > > > 세금계산서 처리 부탁드립니다. 결재 했습니다. >
8830 답변완료서보모터 A410 제어 관련 문의 이병훈 2014-06-16 1,329
안녕하세요. 서보모터 A410과 AM-CSV를 구매하여 AB-M128pro-A V02 보드에 연결하여 테스트 중입니다. 자료실에 있는 AVR 서보 모터 세미나 pdf 파일에서.. 서보모터의 제어 방법에 보면.. "서보는 20ms 주기로 0.7~2.3ms만 ON 주는 시간에 따라 -90~90도까지 위치가 바뀐채로 멈추어 있게된다." 라고 되어 있는데 여기서 질문 사항은.. 1. 주기는 정확히 20ms가 되어야 하는지요? (18msec 또는 22 msec는 불가한지요?) 2. PWM ON time은 0.7~2.3msec 이어야만 하는지요? (0.5~2.5ms 는 안되는 지요?) 3. A410 모터의 각도와 Pulse ON time에 관한 자료는 없는지요?
관리자 답변 관리자 · 2014-06-17
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 답변을 드립니다. 1.정확하면 좋지만 좀 틀려도 동작합니다. 2.서보모터마다 조금씩 다릅니다. 3.해당 강좌는 기본 서보이고 대부분의 서보에 해당되지만, 본사서보는 이에 맞춰져 있습니다. 감사합니다. > > > 안녕하세요. > > 서보모터 A410과 AM-CSV를 구매하여 AB-M128pro-A V02 보드에 연결하여 테스트 중입니다. > > 자료실에 있는 AVR 서보 모터 세미나 pdf 파일에서.. > 서보모터의 제어 방법에 보면.. > "서보는 20ms 주기로 0.7~2.3ms만 ON 주는 시간에 따라 > -90~90도까지 위치가 바뀐채로 멈추어 있게된다." 라고 되어 있는데 > 여기서 질문 사항은.. > > 1. 주기는 정확히 20ms가 되어야 하는지요? (18msec 또는 22 msec는 불가한지요?) > 2. PWM ON time은 0.7~2.3msec 이어야만 하는지요? (0.5~2.5ms 는 안되는 지요?) > 3. A410 모터의 각도와 Pulse ON time에 관한 자료는 없는지요? >
8829 답변완료[arm7개발보드, 영상인식, LCD] CD에 제공되는 소스에 관해서 질문 드립니다. 김슬기 2014-06-13 1,346
개발보드 : SM-SAM7S256-A 카메라 : AM-CAM V01 LCD : AM-GLCD-P 를 사용하고 있습니다. 1. C컴파일러로 ADS_2.1v을 사용해도 되는 지 2. 프로젝트를 생성하고 Cstartup으로 어떤 것을 추가해야 하는지 (저는 board.h, board_cstartup_iar.s, board_lowlevel.c, board_memories.c, board_memories.h, AT91SAM7S를 추가 했는데 여기서 더 필요한 부분이나 각각의 기능들에 대해서 알려주시면 감사하겠습니다. 이것만으로 예제소스를 컴파일하면 오류가 83개나 나와요...ㅜㅜ) 3. CD에 제공된 ATMEL_ARM소스 -> at91sam7s-ek에 있는 소스들은 어떻게 사용하는지 알고싶습니다~ㅜㅜ 항상 수고 많으세욥!
관리자 답변 관리자 · 2014-06-14
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 제공해드리는 소스는 iar사의 EwARM을 이용한 소스입니다. 따라서, 다른 컴파일러를 쓰시려면 직접 수정하셔야 합니다. ARM의 경우 컴파일러를 바꾸면 매우 많은 부분을 대수술하듯 수정하여야하므로 가능하면 같은 컴파일러를 이용하시기 바랍니다. 그리고 함수 등의 설명이 함께드리는 cd안에 있으므로 참고하시기 바랍니다. 감사합니다. > > > 개발보드 : SM-SAM7S256-A > 카메라 : AM-CAM V01 > LCD : AM-GLCD-P > 를 사용하고 있습니다. > > 1. C컴파일러로 ADS_2.1v을 사용해도 되는 지 > 2. 프로젝트를 생성하고 Cstartup으로 어떤 것을 추가해야 하는지 (저는 board.h, board_cstartup_iar.s, board_lowlevel.c, board_memories.c, board_memories.h, AT91SAM7S를 추가 했는데 여기서 더 필요한 부분이나 각각의 기능들에 대해서 알려주시면 감사하겠습니다. 이것만으로 예제소스를 컴파일하면 오류가 83개나 나와요...ㅜㅜ) > 3. CD에 제공된 ATMEL_ARM소스 -> at91sam7s-ek에 있는 소스들은 어떻게 사용하는지 > > 알고싶습니다~ㅜㅜ > 항상 수고 많으세욥! >
8828 답변완료안녕하세요 타이머를 사용한 스텝모터 2개 제어하는데 궁금한게 있어서 올립니다. 지능시스템연구실 2014-06-13 1,410
현재 스텝모터2개와 ADC센서를 이용해서 ATMEGA 128보드에서 라인트레이서를 구현하려고 합니다. 스텝모터 드라이버는 AM-CS2P이고 스텝모터는 2-phase 스텝모터입니다. 왼쪽으로 회전시 오른쪽 모터를 더 돌리고 왼쪽 모터는 기본만큼만돌고 , 오른쪽으로 회전시 왼쪽 모터를 더 돌리고 오른쪽모터는 기본만큼만 도는 코드를 구현하려고하는데. 드라이버를 한개 사용하고 포트도 하나 사용해서 타이머 오버플로우 루틴으로 제어했습니다. 두 모터를 같이 제어하는것은 타이머 오버플로우 루틴한개만으로도 가능한데. 두개를 따로 제어하려고 하니 어떻게 해야될지 모르겠어서 이렇게 질문 올립니다. 아래 코드입니다. 현재 모터는 PORTC로 ADC는 PORTA로 넣어논 상태입니다. 타이머 루틴을 두개를 따로 돌려서 모터를 제어해야 할거 같은데, 레지스터에 대한 부분을 건드려줘야될것 같은데.. 잘모르겠습니다 ㅠ 도와주세요 ㅠ #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #define MOTOR_PORT PORTC #define MOTOR_PORT_DDR DDRC #define LEFT 0 #define RIGHT 1 #define SW_PORT PINA #define SW_PORT_DDR DDRA #define SPEED_H_LIMIT 200 #define SPEED_L_LIMIT 0 #define LSPEEDUP 1 #define RSPEEDUP 1 #define OK 1 #define NOOK 0 volatile int TURN, LSPEED, RSPEED, timer0_expired=NOOK, timer2_expired=NOOK, lcounter=0, rcounter=0; volatile unsigned char stepleft=0, stepright=0; static int Putchar(char c, FILE *stream); void tx0Char(char message); void tx1Char(char message); void timer0_init(void); static int Putchar(char c, FILE *stream) { tx0Char(c); tx1Char(c); return 0; } // scanf 함수 사용시 추가할 것. int Getchar(void) { while ((UCSR0A & 0x80) == 0); return UDR0; } // UART0 을 이용한 출력 void tx0Char(char message) { while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = message; } // UART1 을 이용한 출력 void tx1Char(char message) { while (((UCSR1A>>UDRE1)&0x01) == 0) ; // UDRE, data register empty UDR1 = message; } 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 = 0x33; PORTG = 0x00; DDRG = 0x03; } //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(); fdevopen(Putchar,0); timer2_init(); timer3_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x40; //timer interrupt sources ETIMSK = 0x04; //extended timer interrupt sources /* 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 } /* 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++); } } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 200KHz // actual value: 200.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xF6; //set count OCR0 = 0x0A; TCCR0 = 0x02; //start timer } ISR(TIMER0_OVF_vect) { TCNT0 = 0xF6; //reload counter value if(lcounter < (SPEED_H_LIMIT - LSPEED)) { lcounter++; } else { timer0_expired = OK; } if(timer0_expired == OK) { //stepright = RIGHTmotorOneClock(stepright, TURN); stepleft = LEFTmotorOneClock(stepleft, TURN); MOTOR_PORT = stepleft; timer0_expired = NOOK; lcounter = 0; } } void timer2_init(void) { TCCR2 = 0x00; //stop //ASSR = 0x00; //set async mode TCNT2 = 0xF6; //set count OCR2 = 0x0A; TCCR2 = 0x02; //start timer } ISR(TIMER2_OVF_vect) { TCNT2 = 0xF6; //reload counter value if(rcounter < (SPEED_H_LIMIT - RSPEED)) { rcounter++; } else { timer2_expired = OK; } if(timer2_expired == OK) { stepright = RIGHTmotorOneClock(stepright, TURN); //stepleft = LEFTmotorOneClock(stepleft, TURN); MOTOR_PORT = stepright; timer2_expired = NOOK; rcounter = 0; } } int main(void) { init_devices(); //insert your functional code here... printf(" \n\n\rStepping Motor test program...\n\r"); MOTOR_PORT_DDR = 0xff; SW_PORT_DDR = 0x00; LSPEED = 50; RSPEED = 50; TURN = RIGHT; while(1) { switch(SW_PORT) { case 0x01: TURN = RIGHT; printf("RIGHT!!\r\n"); break; case 0x02: TURN = LEFT; printf("LEFT!!\r\n"); break; case 0x04: LSPEED += LSPEEDUP; RSPEED = RSPEED; if(LSPEED >=SPEED_H_LIMIT) { LSPEED = SPEED_H_LIMIT; RSPEED = RSPEED; } delay(1); printf("SPEED UP\r\n"); break; default : break; } } return 0; }
관리자 답변 관리자 · 2014-06-13
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 타이머 오버플로우 구문 안에서 if (right) 오른쪽 한번 돌리기 If (left) 왼쪽 한번 돌리기 이렇게 넣고 메인의 while문에서 센서 감지시에 right나 left값을 바꾸면되죠. 감사합니다. > > > 현재 스텝모터2개와 ADC센서를 이용해서 ATMEGA 128보드에서 라인트레이서를 구현하려고 합니다. > > > > 스텝모터 드라이버는 AM-CS2P이고 스텝모터는 2-phase 스텝모터입니다. > > > > 왼쪽으로 회전시 오른쪽 모터를 더 돌리고 왼쪽 모터는 기본만큼만돌고 , 오른쪽으로 회전시 왼쪽 모터를 더 돌리고 오른쪽모터는 기본만큼만 도는 코드를 구현하려고하는데. > > > > 드라이버를 한개 사용하고 포트도 하나 사용해서 타이머 오버플로우 루틴으로 제어했습니다. > > > > 두 모터를 같이 제어하는것은 타이머 오버플로우 루틴한개만으로도 가능한데. > > > > 두개를 따로 제어하려고 하니 어떻게 해야될지 모르겠어서 이렇게 질문 올립니다. > > > > 아래 코드입니다. 현재 모터는 PORTC로 ADC는 PORTA로 넣어논 상태입니다. > > > > 타이머 루틴을 두개를 따로 돌려서 모터를 제어해야 할거 같은데, 레지스터에 대한 부분을 건드려줘야될것 같은데.. > > > > 잘모르겠습니다 ㅠ 도와주세요 ㅠ > > > > #include <avr/io.h> > #include <avr/interrupt.h> > #include <stdio.h> > > > #define MOTOR_PORT PORTC > #define MOTOR_PORT_DDR DDRC > > #define LEFT 0 > #define RIGHT 1 > > #define SW_PORT PINA > #define SW_PORT_DDR DDRA > > #define SPEED_H_LIMIT 200 > #define SPEED_L_LIMIT 0 > #define LSPEEDUP 1 > #define RSPEEDUP 1 > #define OK 1 > #define NOOK 0 > > volatile int TURN, LSPEED, RSPEED, timer0_expired=NOOK, timer2_expired=NOOK, lcounter=0, rcounter=0; > volatile unsigned char stepleft=0, stepright=0; > > static int Putchar(char c, FILE *stream); > void tx0Char(char message); > void tx1Char(char message); > void timer0_init(void); > > > static int Putchar(char c, FILE *stream) > { > tx0Char(c); > tx1Char(c); > return 0; > > } > > > // scanf 함수 사용시 추가할 것. > int Getchar(void) > { > while ((UCSR0A & 0x80) == 0); > return UDR0; > } > > > // UART0 을 이용한 출력 > void tx0Char(char message) > { > while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty > UDR0 = message; > } > > // UART1 을 이용한 출력 > void tx1Char(char message) > { > while (((UCSR1A>>UDRE1)&0x01) == 0) ; // UDRE, data register empty > UDR1 = message; > } > > > 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 = 0x33; > PORTG = 0x00; > DDRG = 0x03; > } > > //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(); > fdevopen(Putchar,0); > timer2_init(); > timer3_init(); > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints > EIMSK = 0x00; > TIMSK = 0x40; //timer interrupt sources > ETIMSK = 0x04; //extended timer interrupt sources > /* > 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 > } > > > > > /* 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++); > } > } > > //TIMER0 initialize - prescale:8 > // WGM: Normal > // desired value: 200KHz > // actual value: 200.000KHz (0.0%) > void timer0_init(void) > { > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0xF6; //set count > OCR0 = 0x0A; > TCCR0 = 0x02; //start timer > } > > ISR(TIMER0_OVF_vect) > { > TCNT0 = 0xF6; //reload counter value > if(lcounter < (SPEED_H_LIMIT - LSPEED)) > { > lcounter++; > } > else > { > timer0_expired = OK; > } > > if(timer0_expired == OK) > { > //stepright = RIGHTmotorOneClock(stepright, TURN); > stepleft = LEFTmotorOneClock(stepleft, TURN); > MOTOR_PORT = stepleft; > timer0_expired = NOOK; > lcounter = 0; > } > } > > void timer2_init(void) > { > TCCR2 = 0x00; //stop > //ASSR = 0x00; //set async mode > TCNT2 = 0xF6; //set count > OCR2 = 0x0A; > TCCR2 = 0x02; //start timer > } > > ISR(TIMER2_OVF_vect) > { > TCNT2 = 0xF6; //reload counter value > if(rcounter < (SPEED_H_LIMIT - RSPEED)) > { > rcounter++; > } > else > { > timer2_expired = OK; > } > > if(timer2_expired == OK) > { > stepright = RIGHTmotorOneClock(stepright, TURN); > //stepleft = LEFTmotorOneClock(stepleft, TURN); > MOTOR_PORT = stepright; > timer2_expired = NOOK; > rcounter = 0; > } > } > > int main(void) > { > init_devices(); > //insert your functional code here... > > printf(" \n\n\rStepping Motor test program...\n\r"); > > MOTOR_PORT_DDR = 0xff; > SW_PORT_DDR = 0x00; > LSPEED = 50; > RSPEED = 50; > TURN = RIGHT; > > while(1) > { > switch(SW_PORT) > { > case 0x01: TURN = RIGHT; > printf("RIGHT!!\r\n"); > break; > case 0x02: TURN = LEFT; > printf("LEFT!!\r\n"); > break; > case 0x04: LSPEED += LSPEEDUP; > RSPEED = RSPEED; > if(LSPEED >=SPEED_H_LIMIT) > { > LSPEED = SPEED_H_LIMIT; > RSPEED = RSPEED; > } > delay(1); > printf("SPEED UP\r\n"); > break; > default : break; > } > } > return 0; > } >
8827 답변완료avr과 와이파이모듈 연결에 대해 문의 드립니다. 김찬우 2014-06-12 2,897
atmega128 WIFI-RS232C 변환모듈V atmega128 와 안드로이드 앱 간의 통신에 wifi모듈을 사용하고 있습니다. avr소스는 uart0를 사용해서 1,2,3,4,q,w,e,r 와 같은 문자를 송, 수신하여 키트를 제어할 예정입니다. 하이퍼터미널을 사용하여 문자를 보내면 원하는 동작이 되고 송, 수신 되는 것을 확인하였습니다. 모듈을 연결하여 실제 통신을 하려 하면 문제가 발생합니다. 와이파이가 연결 되면 키트의 기능들이 지 멋대로 동작 됩니다. 하이퍼터미널로 정상 동작 한다고 하면 이런 문제가 발생하는데 있어서 avr 소스 쪽의 문제는 전혀 없는 게 맞나요? 그리고 와이파이 모듈이 3.3v의 전압 인가가 필요합니다. vcc에 3.3v가 인가 되어야 하는 건 알겠습니다. avr의 tx와 와이 파이 모듈의 rx 를 연결하는데 있어서도 전압 분배 회로를 꾸며주어야 하나요? 마지막으로 5v에서 3.3v로 낮춰주기 위해서 2k옴과 1k옴을 사용하여 전압 분배 회로를 꾸몄습니다. 꾸민 회로를 avr과 연결 했을 때는 멀티미터로 찍어보니까 저희가 원하는 부분에 출력 전압이 3.2v정도 나왔습니다. 그런데 모듈과 연결을 하면 1v정도로 떨어지던데 꼭 레귤레이터를 사용해주어야 하나요?
관리자 답변 관리자 · 2014-06-13
안녕하세요? 고객님, AVR쪽과 와이파이쪽의 읽지 전압이 맞지 않아서 생기는 문제 같네요. 전압 레벨을 맞춰주세요. 한쪽은 3.3V 한쪽은 5V이면 문제가 생겨요. 잘 맞춰주세요. 감사합니다. 감사합니다. > > > atmega128 > WIFI-RS232C 변환모듈V > > atmega128 와 안드로이드 앱 간의 통신에 wifi모듈을 사용하고 있습니다. > > avr소스는 uart0를 사용해서 1,2,3,4,q,w,e,r 와 같은 문자를 송, 수신하여 키트를 제어할 예정입니다. > > 하이퍼터미널을 사용하여 문자를 보내면 원하는 동작이 되고 송, 수신 되는 것을 확인하였습니다. > > 모듈을 연결하여 실제 통신을 하려 하면 문제가 발생합니다. > > 와이파이가 연결 되면 키트의 기능들이 지 멋대로 동작 됩니다. > > 하이퍼터미널로 정상 동작 한다고 하면 이런 문제가 발생하는데 있어서 > > avr 소스 쪽의 문제는 전혀 없는 게 맞나요? > > > > 그리고 와이파이 모듈이 3.3v의 전압 인가가 필요합니다. > > vcc에 3.3v가 인가 되어야 하는 건 알겠습니다. > > avr의 tx와 와이 파이 모듈의 rx 를 연결하는데 있어서도 > > 전압 분배 회로를 꾸며주어야 하나요? > > > > 마지막으로 5v에서 3.3v로 낮춰주기 위해서 2k옴과 1k옴을 > > 사용하여 전압 분배 회로를 꾸몄습니다. > > 꾸민 회로를 avr과 연결 했을 때는 멀티미터로 찍어보니까 > > 저희가 원하는 부분에 출력 전압이 3.2v정도 나왔습니다. > > 그런데 모듈과 연결을 하면 1v정도로 떨어지던데 꼭 레귤레이터를 사용해주어야 하나요? >
8826 답변완료[FuseBit]ATmega128A Fuse Bit 복구 방법 김용태 2014-06-11 1,402
KT M128KIT 를 가지고 있으며, AD_USBISP 및 JTAG ICE mkII 를 가지고 잇습니다. 불행히도 Atmega128A 제작B/D 에 AVRstudio6.2로 제가 Fuse Bit (SPIEN, JTAG EN을 disable 시켜) Device Signature 를 읽지 못해, download 및 debugger가 불가능한 상황입니다. Fuse bit 를 복구하는 방법에 대해 문의드립니다. AD_USBISP 에 있는 USB-Serial 4 pin 커넥터와 특정 복구 프로그램으로 복구가 가능할 것 같은데, 방법을 잘 모르겠습니다. Atmega128A 의 위의 Fuse Bit 를 잘 못 셋팅했을때 복구를 하는 방법 문의드립니다.
관리자 답변 관리자 · 2014-06-13
안녕하세요? 고객님, 저희 뉴티씨제품을 이용해 주셔서 감사합니다. 온라인 강의에서 AVR강의실에 가서 인공호흡을 찾아보세요. 잘 안되시면 본사에서 as받으세요. 감사합니다. > > > KT M128KIT 를 가지고 있으며, AD_USBISP 및 JTAG ICE mkII 를 가지고 잇습니다. > > 불행히도 Atmega128A 제작B/D 에 AVRstudio6.2로 제가 Fuse Bit (SPIEN, JTAG EN을 disable 시켜) Device Signature 를 읽지 못해, download 및 debugger가 불가능한 상황입니다. > > Fuse bit 를 복구하는 방법에 대해 문의드립니다. > > AD_USBISP 에 있는 USB-Serial 4 pin 커넥터와 특정 복구 프로그램으로 복구가 가능할 것 같은데, 방법을 잘 모르겠습니다. > > Atmega128A 의 위의 Fuse Bit 를 잘 못 셋팅했을때 복구를 하는 방법 문의드립니다. >
8825 답변완료128pro-A 간단 테스트 질문요!ㅠㅠ 박현호 2014-06-10 1,356
간단히 led에 불이 들어오게 하려는데 컴파일러에서 'STK500 error entering programming mode'가 자꾸 뜹니다 ㅠ 설정을 잘 못한거 같은데 결선도 문제가 있는지 싶어 문의 드립니다 ㅠ 먼저 MCU모듈은 Atmega128A 이구요, 메인보드는 AM128pro-A, 컴파일러는 코드비전 2.05.6 버젼입니다. usbisp 드라이버 설치는 끝냈고 com포트도 확인했고 메인보드 메뉴얼대로 설정은 다 끝낸거 같은데 build all, program the chip 하면 다운로드가 안되네요 ㅠ 혹시 외부전원을 안주면 usbisp에서 전원공급 모드로 바꿔줘야 다운로드도 가능한지, 메인보드 on/off 스위치도 다운로드할때 on시켜줘야 다운로드가 되는건지, 그 외 정상적인 다운로드를 위해서 기본적인 셋팅방법 좀 부탁드립니다 ㅠ
관리자 답변 관리자 · 2014-06-13
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용해 주셔서 감사합니다. 메인보드에 전원은 당연히 들어와야해요. 아답타 등으로 전원을 주지 않으면, usbisp에서 전원스위치를 넣어주면됩니다. USBISP V03.6의 경우는 딥스위치 중 안쪽 스위치를 ON 으로 하고 쓰세요. 감사합니다. > > > 간단히 led에 불이 들어오게 하려는데 > > 컴파일러에서 'STK500 error entering programming mode'가 자꾸 뜹니다 ㅠ > 설정을 잘 못한거 같은데 결선도 문제가 있는지 싶어 문의 드립니다 ㅠ > > 먼저 MCU모듈은 Atmega128A 이구요, 메인보드는 AM128pro-A, 컴파일러는 코드비전 2.05.6 버젼입니다. > > usbisp 드라이버 설치는 끝냈고 com포트도 확인했고 메인보드 메뉴얼대로 설정은 다 끝낸거 같은데 > build all, program the chip 하면 다운로드가 안되네요 ㅠ > > 혹시 외부전원을 안주면 usbisp에서 전원공급 모드로 바꿔줘야 다운로드도 가능한지, > 메인보드 on/off 스위치도 다운로드할때 on시켜줘야 다운로드가 되는건지, > > 그 외 정상적인 다운로드를 위해서 기본적인 셋팅방법 좀 부탁드립니다 ㅠ >
8824 답변완료[AB-S52]8051 개발보드 구입 관련 고경문 2014-06-10 1,432
8051을 공부하기 위해 EVB를 찾던 중 엘레파츠에서 AB-S52 상품을 발견했습니다. 하지만 품절이라 구매가 불가능해서 문의를 드립니다. 더 이상 제작하여 판매할 계획은 없는지요?
관리자 답변 관리자 · 2014-06-10
안녕하세요? 고객님, 저희 뉴티씨를 이용해주셔서 감사합니다. 본사에서만 소량구매가능합니다. 지속적으로 한동안은 소량전화주문만은 가능합니다. 시간이 며칠걸리지만 금주내로 발송가능합니다. 본사에 전화주문해주세요. 감사합니다. > > > 8051을 공부하기 위해 EVB를 찾던 중 엘레파츠에서 AB-S52 상품을 발견했습니다. > 하지만 품절이라 구매가 불가능해서 문의를 드립니다. > 더 이상 제작하여 판매할 계획은 없는지요? >