로그인 | 회원가입 | 주문 조회
총 10,748개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
8558 답변완료저번에 문의했던 사람인데요 김상학 2013-12-09 1,367
어느걸로 엔코더 장착형 dc모터를 테스트 해야하나요? 소스 있다곤 하는데, 전부다 그냥 dc 모터지 그리고 c 파일로 되어있는데, 흠.. 아 그리고 스피드 컨트롤 예제 avr 용은 없나요? 스피드 컨트롤 예제(스위치사용) [email protected] 꼭좀 메일로 2시 전까지 보내주시면 감사하겟습니다.
관리자 답변 관리자 · 2013-12-09
안녕하세요? 고객님, 자료실에서 "[예제소스] 엔코더(encoder) DC모터 제어"로 검색해 보세요. 방향, 속도 등을 AM-TS8 스위치모듈로 조절하는 예제가 있습니다. 참조 바랍니다. > > > 어느걸로 엔코더 장착형 dc모터를 테스트 해야하나요? > > 소스 있다곤 하는데, 전부다 그냥 dc 모터지 그리고 c 파일로 되어있는데, 흠.. > > 아 그리고 스피드 컨트롤 예제 avr 용은 없나요? > > 스피드 컨트롤 예제(스위치사용) [email protected] > > 꼭좀 메일로 2시 전까지 보내주시면 감사하겟습니다. >
8557 답변완료se-dm모터로 도어락 만들고 싶은데... 박재영 2013-12-09 1,375
여기에 맞는 볼트너트 부터 시작해서... 간단하게 졸작으로 만들고 싶은데 재료를 알 수 없을까요? 급합니다...ㅠ
관리자 답변 관리자 · 2013-12-09
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. DM 모터가 기어드 모터이므로, 기본적인 힘은 가지고 있지만, 도어록을 구현할 정도는 아닌 것 같습니다. 다만, SE-DS350 모터를 사용하는 것이 저렴하기도 하고 보다 힘도 좋을 것으로 생각됩니다. 모터 구동 모듈은 AM-DC2-2D나 AM-DC1-3D를 쓰는 것을 추천합니다. 관련 구동 예제는 자료실에 있으니, 참고 바랍니다. 기구적인 부분은 직접 생각하셔서 구현해야 할 것 같습니다. 감사합니다. > > > 여기에 맞는 볼트너트 부터 시작해서... > 간단하게 졸작으로 만들고 싶은데 재료를 알 수 없을까요? > 급합니다...ㅠ >
8556 답변완료se-dm dc기어모터 예제소스는 avrstudio 아닌가요? 박재영 2013-12-09 1,513
여기회사꺼 atmega128 키트 안쓰고 다른거 쓰고 있는데요... //ICC-AVR application builder : 2007-10-17 오후 3:12:00 // 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 MOTORPORT1 PORTC #define ON 1 #define OFF 0 #define CW 1 #define CCW 0 // 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 = 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 = 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 } // Motor Control void M1A(int onoff){ if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x01; else MOTORPORT1 = MOTORPORT1&0xFE; } void M1A_(int onoff){ if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x02; else MOTORPORT1 = MOTORPORT1&0xFD; } void M1B(int onoff){ if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x04; else MOTORPORT1 = MOTORPORT1&0xFB; } void M1B_(int onoff){ if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x08; else MOTORPORT1 = MOTORPORT1&0xF7; } void Motor1(int CWCCW){ if(CWCCW==CW){ M1A(ON); M1A_(OFF); }else{ M1A(OFF); M1A_(ON); } } void Motor2(int CWCCW){ if(CWCCW==CW){ M1B(ON); M1B_(OFF); }else{ M1B(OFF); M1B_(ON); } } 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... printf("TEST for DC motor control"); while(1){ printf("\r\nClockWise"); Motor1(0); Motor2(0); delay(1000); printf("\r\nCounter ClockWise"); Motor1(1); Motor2(1); delay(1000); } } -------------------------------------------------------------- 이거 그냥 단순히 정방향 역방향 돌리는 거 밖에 없죠? PWM 모드는 안되는거죠?
관리자 답변 관리자 · 2013-12-09
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 일단, 아래 예제는 ICCAVR 예제네요. 현재 예제는 PWM은 되지 안는 예제입니다. 그런 부분은 직접 구현하셔야 합니다. 본사의 키트를 사용하지 않는 다고 했지만, 본사의 키트를 사용한다고 해도 PWM을 위해서는 AM-DC2-2D와 같은 DC 모터 구동 모듈을 사용하는 것이 좋겠습니다. 감사합니다. > > > 여기회사꺼 atmega128 키트 안쓰고 다른거 쓰고 있는데요... > //ICC-AVR application builder : 2007-10-17 오후 3:12:00 > // 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 MOTORPORT1 PORTC > > #define ON 1 > #define OFF 0 > #define CW 1 > #define CCW 0 > > // 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 = 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 = 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 > } > > // Motor Control > void M1A(int onoff){ > if(onoff==ON) > MOTORPORT1 = MOTORPORT1|0x01; > else > MOTORPORT1 = MOTORPORT1&0xFE; > } > > void M1A_(int onoff){ > if(onoff==ON) > MOTORPORT1 = MOTORPORT1|0x02; > else > MOTORPORT1 = MOTORPORT1&0xFD; > } > > void M1B(int onoff){ > if(onoff==ON) > MOTORPORT1 = MOTORPORT1|0x04; > else > MOTORPORT1 = MOTORPORT1&0xFB; > } > > void M1B_(int onoff){ > if(onoff==ON) > MOTORPORT1 = MOTORPORT1|0x08; > else > MOTORPORT1 = MOTORPORT1&0xF7; > } > > > void Motor1(int CWCCW){ > if(CWCCW==CW){ > M1A(ON); > M1A_(OFF); > }else{ > M1A(OFF); > M1A_(ON); > } > } > > void Motor2(int CWCCW){ > if(CWCCW==CW){ > M1B(ON); > M1B_(OFF); > }else{ > M1B(OFF); > M1B_(ON); > } > } > > 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... > printf("TEST for DC motor control"); > > while(1){ > printf("\r\nClockWise"); > Motor1(0); > Motor2(0); > delay(1000); > printf("\r\nCounter ClockWise"); > Motor1(1); > Motor2(1); > delay(1000); > } > } > -------------------------------------------------------------- > 이거 그냥 단순히 정방향 역방향 돌리는 거 밖에 없죠? PWM 모드는 안되는거죠? >
8555 답변완료ADC 차동 박덕훈 2013-12-08 1,374
안녕하세요 ATmega128 이제막 배우기 시작한 학생입니다. ADC를 이용하여 가변저항이 움직임에따라 세븐세그먼트에 표시하는 과제를 받았습니다. 0~1023까지 변하는것은 만들었는데 -x ~ x 로 변하게 하는것을 어떻게 만들어야 할지 모르겠어서 글올립니다. 너무 초보적인 질문같지만 도저히 모르겠습니다. 도와주세요. #include <mega128.h> void delay(unsigned int cnt); void display(); char seg_num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int adc = 0; void main(){ DDRC = 0x0F; DDRA = 0xFF; DDRF = 0x00; ADMUX = 0x47; ADCSRA = 0xEF; SREG = 0x80; while(1){ display(); } } void display(){ char N1000, N100, N10, N1; int temp; N1000 = adc/1000; temp = adc%1000; N100 = temp/100; temp = temp%100; N10 = temp/10; N1 = temp%10; PORTC = 0b00000001; PORTA = ~seg_num[N1000]; delay(1); PORTC = 0b00000010; PORTA = ~seg_num[N100]; delay(1); PORTC = 0b00000100; PORTA = ~seg_num[N10]; delay(1); PORTC = 0b00001000; PORTA = ~seg_num[N1]; delay(1); } interrupt[ADC_INT] void adc_int(void){ adc = (int)ADCL + ((int)ADCH << 8); } void delay(unsigned int cnt){ unsigned int i, j; for(i=0; i<cnt; i++){ j = 5000; while(--j); } }
관리자 답변 관리자 · 2013-12-09
안녕하세요? 고객님, 채널을 0번이면 포트 F의 0번 입력으로 signle 입력으로 받는 것이자나요? 채널 1번이면 포트 F의 1번 입력으로 싱글 입력 받는 것이구요. 마찬가지로....데이터 시트에 보면 채널 xx이면 xx(+입력)과 xx(-입력)번 사이의 입력을 받는 다는 식으로 써 있으니, 데이터 시트를 보시기 바랍니다. 간혹 200배 증폭까지 해주는 채널도 있으니, 참고 바랍니다. 좀 더 번역된 자세한 강좌를 원하시면 본 회사 강좌 중에서 온라인강좌 -->AVR 기본강좌 중에서 ADC 강좌 를 참고하세요. 예를 들어서, ADC에서 ADMUX |= 0x4b; 로 잡으시면 Ch1을 +, Ch2를 -로 잡는 것입니다. 그에 대한 변환 결과는 -512~+511 범위의 값을 가지는 데, 표현법이 10비트 2의 보수 표현법을 사용합니다. 따라서 0x200 ~ 0x3ff~ 0 ~ 0x1ff 가 됩니다. 또한, 차동 입력으로 사용하실 경우, 초기가 몇개는 버리시는 것이 좋습니다. 결과값이 정확하지 않으니까요. 또한, 예를 들어서 로드셀의 출력이 전압인지, 저항값인지를 보시고, 저항값일 경우 휘트스톤 브릿지 등으로 사용하여 전압으로 바꿔주는 회로를 구성하셔야 겠구요. 전압일 경우, 내장되어 있는 타입인데, 200배를 했을 때, 혹시 전압이 넘치지는 않는 지 확인하시는 것이 좋겠네요. 그리고, 입력이 없으면, 공기 중의 변하는 미세 전압 값을 증폭해서 나오게 되어서, 값이 계속 변하게 됩니다. 반드시 GND로 연결하시거나, VCC로 연결하시거나 하셔서, 값을 보시는 것이 좋겠습니다. 수고하세요. > > > 안녕하세요 ATmega128 이제막 배우기 시작한 학생입니다. > > ADC를 이용하여 가변저항이 움직임에따라 > > 세븐세그먼트에 표시하는 과제를 받았습니다. > > 0~1023까지 변하는것은 만들었는데 > > -x ~ x 로 변하게 하는것을 어떻게 만들어야 할지 모르겠어서 > > 글올립니다. 너무 초보적인 질문같지만 도저히 모르겠습니다. > > 도와주세요. > > #include <mega128.h> > > void delay(unsigned int cnt); > void display(); > > char seg_num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; > int adc = 0; > > void main(){ > > DDRC = 0x0F; > DDRA = 0xFF; > DDRF = 0x00; > ADMUX = 0x47; > ADCSRA = 0xEF; > > SREG = 0x80; > > while(1){ > display(); > } > } > > void display(){ > char N1000, N100, N10, N1; > int temp; > > N1000 = adc/1000; > temp = adc%1000; > > N100 = temp/100; > temp = temp%100; > > N10 = temp/10; > > N1 = temp%10; > > PORTC = 0b00000001; > PORTA = ~seg_num[N1000]; > delay(1); > > PORTC = 0b00000010; > PORTA = ~seg_num[N100]; > delay(1); > > PORTC = 0b00000100; > PORTA = ~seg_num[N10]; > delay(1); > > PORTC = 0b00001000; > PORTA = ~seg_num[N1]; > delay(1); > } > > interrupt[ADC_INT] void adc_int(void){ > adc = (int)ADCL + ((int)ADCH << 8); > } > > void delay(unsigned int cnt){ > unsigned int i, j; > > for(i=0; i<cnt; i++){ > j = 5000; > while(--j); > } > } >
8554 답변완료AM-TLCD-P 모듈에 질문있습니다. 박재영 2013-12-07 1,364
예를들어 LCD 7번핀부터 14번핀까지 data로 쓸경우 data input라인에 1번핀(7) 부터 8번핀(14)까지 꼽는게 맞나요? 그리고 lcd에 4,5,6번 핀을 RS,RW,E 을 연결하려면 모듈에 Control input에 4번부터 6번까지 그대로 연결하는게 맞는거 아닌가요? 했는데 소스에는 전혀 이상이없는데... 왜 위에 검은줄만 나오는거죠?
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변드릴께요. > 예를들어 LCD 7번핀부터 14번핀까지 data로 쓸경우 > data input라인에 1번핀(7) 부터 8번핀(14)까지 꼽는게 맞나요? ~~> 네 > 그리고 lcd에 4,5,6번 핀을 RS,RW,E 을 연결하려면 > 모듈에 Control input에 4번부터 6번까지 그대로 연결하는게 맞는거 아닌가요? --> 아뇨 각각 control의 0번 1번 2번에 꽂고 프로그램해야하며, 자료실에서 메뉴얼과 예제소스를 보기 바랍니다. 또한 초기화 루틴이 잘못되도 동작하지 않습니다. 감사합니다. > > 했는데 소스에는 전혀 이상이없는데... 왜 위에 검은줄만 나오는거죠? >
8553 답변완료모터 구동 방법에 대해서... 김성용 2013-12-06 1,767
저희가 이번에 atmega128과 모터 구동 모듈을 샀습니다. 저희가 아직 회로 연결에 대해서 잘 배우질 않아서 저희가 결선한게 맞는 것인지 잘 모르겠습니다. 사진을 올리겠습니다. 일단 연결 방식을 12V의 배터리를 연결 하고 모터를 모터 구동모듈을 사진과 같이 연결하였습니다. 이게 제대로 된 연결인지 틀리면 알려주세요 그리고 여기에 맞는 코드를 가르쳐 주시면 고맙겠습니다. 저희가 코드 시작을 #include <mega128.h>라고 하는데 이게 맞는지도 알려주세요 코드 알려주시면 더욱 감사하겠습니다.
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사드립니다. 혹시 사진상으로 보기에 모듈의 5V 입력 커넥터에 배터리 출력을 꽂은게 맞나요? 그렇게 했다면 모듈이 바로 망가졌을것 같네요. 어쩌면 isp도 망가졌겠구요. 그 배터리는 아답타 입력 바로 옆의 2핀 전원 입력용커넥터로 넣어줘야합니다. 그리고 컴파일러를 코드비전 쓰시나 보네요. 본사에는 코드비전 관련되서 교재를 판매중에 있습니다. 참고 바랍니다. Iccavr 컴파일러용 예제소스와 avr studio + winavr예제 소스를 중심으로 자료실에서 배포중입니다. 코드비전으로 검색하면 가장 기본 예제 몇개만 나올겁니다. 나머지는 dc2-2로 검색해보세요. 감사합니다. > > > 저희가 이번에 atmega128과 모터 구동 모듈을 샀습니다. 저희가 아직 회로 연결에 대해서 잘 배우질 않아서 저희가 결선한게 맞는 것인지 잘 모르겠습니다. 사진을 올리겠습니다. 일단 연결 방식을 12V의 배터리를 연결 하고 모터를 모터 구동모듈을 사진과 같이 연결하였습니다. 이게 제대로 된 연결인지 틀리면 알려주세요 그리고 여기에 맞는 코드를 가르쳐 주시면 고맙겠습니다. 저희가 코드 시작을 #include <mega128.h>라고 하는데 이게 맞는지도 알려주세요 코드 알려주시면 더욱 감사하겠습니다. >
8552 답변완료am-dc2-2d 전원 인가 문제 권현기 2013-12-06 1,431
ab-m128-b에 am-dc2-dc 와 se-dm185 모터 1개 ad-encoder am-ts8 제품들을 사용하여 모터제어 예제를 구현해보고자 합니다. avr 보드에는 smps dc 12v 1a 어댑터를 이용해서 12볼트를 인가하면 되겠는데 am-dc2-dc 모터드라이브에 전원을 인가할 마땅한 어댑터를 못구하겠네요 그래서 avr 보드의 12v 출력에서 전원을 빼서 모터드라이브에 인가하려고 하는데요 그래도 괜찮을까요? 모터에 로드는 없고 그냥 공회전 시키려고 합니다. 모터드라이버가 전력을 너무 많이 먹으면 칩이 탈까봐 걱정입니다. 정 안되면 별도의 파워서플라이나 어댑터를 모터드라이브에 달려고 하는데 어뎁터에서 전원선을 몰렉스 형태로 빼오기가 영 힘들어서 그냥 제품을 찾아보니까 쓸만한게 안나오네요. 혹시 추천 해주실수있을까요?
관리자 답변 관리자 · 2013-12-07
네 고객님, 그렇게 하셔도 됩니다. 저도 그렇게 테스트합니다. 감사합니다. > > > ab-m128-b에 > am-dc2-dc 와 > se-dm185 모터 1개 > ad-encoder > am-ts8 > > 제품들을 사용하여 모터제어 예제를 구현해보고자 합니다. > > avr 보드에는 smps dc 12v 1a 어댑터를 이용해서 12볼트를 인가하면 되겠는데 > am-dc2-dc 모터드라이브에 전원을 인가할 마땅한 어댑터를 못구하겠네요 > 그래서 avr 보드의 12v 출력에서 전원을 빼서 모터드라이브에 인가하려고 하는데요 > 그래도 괜찮을까요? 모터에 로드는 없고 그냥 공회전 시키려고 합니다. > 모터드라이버가 전력을 너무 많이 먹으면 칩이 탈까봐 걱정입니다. > > 정 안되면 별도의 파워서플라이나 어댑터를 모터드라이브에 달려고 하는데 > 어뎁터에서 전원선을 몰렉스 형태로 빼오기가 영 힘들어서 > 그냥 제품을 찾아보니까 쓸만한게 안나오네요. 혹시 추천 해주실수있을까요? >
8551 답변완료am-gyro-v02 에 대한 질문입니다. 변광열 2013-12-05 1,434
안녕하세요. 귀사의 자이로를 이용하여 각도출력에 이용하고 있습니다만 몇가지 질문사항이 있어 이렇게 글을 남깁니다. 자이로로 각도를 출력하기 위해선 각속도를 적분하여 사용한다는 것을 잘 알고 있습니다. 그렇게 되면 적분오차가 쌓이겠지요? 그런데 적분오차가 미미할 거라 생각했는데 생각외로 너무너무 큽니다. 이걸 적분오차라 부를 수 있는지도 미지수입니다. 예를 들어 90도 정도 센서를 돌리면 센서의 전압값을 받아 ADC하면 90도로 출력이 됩니다. 다시 0도로 돌아오면 0도에서 크게 벗어난 값이 출력됩니다.(+- 10도 이상) 그렇게 여러번 센서를 움직여보면 출력값이 터무니 없어집니다. 전 이것이 자이로센서의 풀스케일과 관련된다고 생각했습니다. (풀스케일 2000 이더군요.) 그래서 풀스케일을 300~400 정도로 조정하고 싶은데 이 센서는 그게 불가능한것 같군요? 제 코드에 문제가 있을 수도 있는데 좀 봐주세요. 아래에 코드를 첨부하겠습니다. 또한 자이로만으로 제대로된 각도를 얻기 힘들다고 해서 가속도계를 동원해 상보필터를 만들 예정인데요. 자이로 출력결과가 엉망이라면 필터를 만들더라도 결과를 신뢰할 수 없을 것 같네요. 성실한 답변 부탁드리겠습니다. 이것 때문에 몇일 째 시간 낭비만 한것 같네요 ㅠㅠ /************************************************************************************************ * Header files & Macros ************************************************************************************************/ #define F_CPU 16000000UL // clock freq : 16Mhz #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "USART.h" // functions about USART #include "ADC.h" // functions about ADC #define DDRF_ADC DDRF #define scale_vector 9.7533136 // (5000mV/1024)/0.5(0.5 is sensitivity) #define sampling_time 0.01 #define offset 292 // ref_output /************************************************************************************************ * 전역변수 선언 ************************************************************************************************/ volatile unsigned int idx_time; volatile float deg = 0; /************************************************************************************************ * 함수 선언 ************************************************************************************************/ void init_tc0(); void init_port(); void init_devices(); void init_syetem(); int get_adc_data(); void start_time(); void sort(unsigned int arr[]); void swap(volatile unsigned int *a, volatile unsigned int *b); float integral(float rate); /************************************************************************************************ * Interrupt Handler ************************************************************************************************/ SIGNAL(SIG_OVERFLOW0){ TCNT0 = 256-125; ++idx_time; } /************************************************************************************************ * Integral 함수 ************************************************************************************************/ float integral(float rate){ deg += rate * sampling_time; return deg; } /************************************************************************************************ * ADC 관련 함수 ************************************************************************************************/ int get_adc_data(){ ADCSRA &= ~(1<<ADEN); // ADC disable ADMUX = (0<<MUX4 | 0<<MUX3 | 1<<MUX2 | 1<<MUX1 | 0<<MUX0); //PF6 ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start while((ADCSRA & 0x10) != 0x10); return ADCW; } /************************************************************************************************ * Sort & Swap 함수 (오름차순 정리) ************************************************************************************************/ void sort(unsigned int arr[]){ int i, j; for (i=0; i<10; i++){ for (j=i+1; j<11; j++){ if (arr[i] > arr[j]) swap(&arr[i], &arr[j]); } } } void swap(volatile unsigned int *a, volatile unsigned int *b){ volatile unsigned int tmp=*a; *a=*b; *b=tmp; } /************************************************************************************************ * idx_time 초기화 함수 ************************************************************************************************/ void start_time(){ idx_time = 0; } /************************************************************************************************ * Timer초기화 함수 정의 ************************************************************************************************/ void init_tc0(){ TCCR0 = (0<<WGM01 | 0<<WGM00); // normal mode TCNT0 = 256-125; // 1ms 마다 OVERFLOW INT 발생 TIMSK = 1<<TOIE0; // OVERFLOW0 INT enable TCCR0 |= (1<<CS02 | 0<<CS01 | 1<<CS00); // TC0 start (분주128) } /************************************************************************************************ * 시스템 초기화 관련 함수 정의 ************************************************************************************************/ void init_port(){ DDRF_ADC = 0x00; DDRA = 0xFF; } void init_devices(){ cli(); // disable all interrupts init_uart0(); init_adc(); init_tc0(); sei(); // enable all interrupts } void init_system(){ init_port(); init_devices(); stdout = &mystdout; // to use the prinft func _delay_ms(10); // to stabilize the system } /*********************************************************************************************** * Main ***********************************************************************************************/ int main(void){ // 변수 선언 int i; int sumX; unsigned int x_data[10]; float meanX; int dX; float deg_rate; // 변수 초기화 PORTA = _BV(0); // to check period for(i=0;i<10;i++) x_data[i] = 0; meanX = 0; dX = 0; deg_rate = 0; // 시스템 초기화 init_system(); // 카운트 시작 start_time(); while(1){ while(idx_time >= 10){ // sampling time = 10ms PORTA ^= _BV(0); // PA0 toggle for(i=0;i<10;i++){ x_data[i] = get_adc_data(); } start_time(); sort(x_data); sumX = 0; for(i=2;i<8;i++) sumX = sumX + x_data[i]; meanX = (int)((sumX/6.0)+0.5); // 소수 첫째자리에서 반올림 dX = offset - meanX; // 정지상태ADC - 변화된ADC if(dX<2 && dX>=0) // 값이 떨리는 것 보정 dX = 0; if(dX>-2 && dX<=0) dX = 0; deg_rate = dX * scale_vector; deg = integral(deg_rate); printf("pitch : %.1f\r\n",deg); } } return 0; }
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변드릴께요. > > > 안녕하세요. 귀사의 자이로를 이용하여 각도출력에 이용하고 있습니다만 > 몇가지 질문사항이 있어 이렇게 글을 남깁니다. > > 자이로로 각도를 출력하기 위해선 각속도를 적분하여 사용한다는 것을 잘 알고 있습니다. > 그렇게 되면 적분오차가 쌓이겠지요? --> 네 그렇죠 본사에서 공개한 예제소스로 보아도 초당 0.5도 정도 쌓이더군요. 줄어들때도 있구요 > 그런데 적분오차가 미미할 거라 생각했는데 생각외로 너무너무 큽니다. 이걸 적분오차라 부를 수 있는지도 미지수입니다. --> 네 그러므로 기울기 센서 등으로 보정을 합니다. 가속도 센서도 급격한 움직임만 없다는 가정하에서 잘 동작합니다. 따라서 5kHz정도 자이로 값을 읽어서 적분하고 보정은 가속도센서의 값을 사용하되 5kHz로 샘플링하여 100번씩 값을 보고 크게 변하지 않을 경우 값을 참고하는 식으로 해보세요. > > 예를 들어 90도 정도 센서를 돌리면 센서의 전압값을 받아 ADC하면 90도로 출력이 됩니다. 다시 0도로 돌아오면 0도에서 크게 벗어난 값이 출력됩니다.(+- 10도 이상) 그렇게 여러번 센서를 움직여보면 출력값이 터무니 없어집니다. > > 전 이것이 자이로센서의 풀스케일과 관련된다고 생각했습니다. (풀스케일 2000 이더군요.) > 그래서 풀스케일을 300~400 정도로 조정하고 싶은데 이 센서는 그게 불가능한것 같군요? --> 보통 이게 2000도이면 이 이상을 한쪽 방향으로 계속 돌면 에러가 커지므로 초기화를 해야하는 것으로 알고 있었습니다. Adc해서 적분하는 내용으로 코드는 읽었구요. 이 게시판에서 이 이상의 답변은 게시판 성격을 벗어나며 본사에서 이런 부분들까지 모두 시포트해드리기는 어려움을 이해바랍니다. 감사합니다. > > 제 코드에 문제가 있을 수도 있는데 좀 봐주세요. 아래에 코드를 첨부하겠습니다. > > 또한 자이로만으로 제대로된 각도를 얻기 힘들다고 해서 가속도계를 동원해 상보필터를 만들 예정인데요. > 자이로 출력결과가 엉망이라면 필터를 만들더라도 결과를 신뢰할 수 없을 것 같네요. > > 성실한 답변 부탁드리겠습니다. 이것 때문에 몇일 째 시간 낭비만 한것 같네요 ㅠㅠ > > /************************************************************************************************ > * Header files & Macros > ************************************************************************************************/ > #define F_CPU 16000000UL // clock freq : 16Mhz > #include <stdio.h> > #include <avr/io.h> > #include <avr/interrupt.h> > #include <util/delay.h> > #include "USART.h" // functions about USART > #include "ADC.h" // functions about ADC > > #define DDRF_ADC DDRF > #define scale_vector 9.7533136 // (5000mV/1024)/0.5(0.5 is sensitivity) > #define sampling_time 0.01 > #define offset 292 // ref_output > /************************************************************************************************ > * 전역변수 선언 > ************************************************************************************************/ > volatile unsigned int idx_time; > volatile float deg = 0; > /************************************************************************************************ > * 함수 선언 > ************************************************************************************************/ > void init_tc0(); > void init_port(); > void init_devices(); > void init_syetem(); > int get_adc_data(); > void start_time(); > void sort(unsigned int arr[]); > void swap(volatile unsigned int *a, volatile unsigned int *b); > float integral(float rate); > /************************************************************************************************ > * Interrupt Handler > ************************************************************************************************/ > SIGNAL(SIG_OVERFLOW0){ > TCNT0 = 256-125; > ++idx_time; > } > /************************************************************************************************ > * Integral 함수 > ************************************************************************************************/ > float integral(float rate){ > deg += rate * sampling_time; > return deg; > } > /************************************************************************************************ > * ADC 관련 함수 > ************************************************************************************************/ > int get_adc_data(){ > ADCSRA &= ~(1<<ADEN); // ADC disable > ADMUX = (0<<MUX4 | 0<<MUX3 | 1<<MUX2 | 1<<MUX1 | 0<<MUX0); //PF6 > ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start > while((ADCSRA & 0x10) != 0x10); > > return ADCW; > } > /************************************************************************************************ > * Sort & Swap 함수 (오름차순 정리) > ************************************************************************************************/ > void sort(unsigned int arr[]){ > int i, j; > for (i=0; i<10; i++){ > for (j=i+1; j<11; j++){ > if (arr[i] > arr[j]) > swap(&arr[i], &arr[j]); > } > } > } > void swap(volatile unsigned int *a, volatile unsigned int *b){ > volatile unsigned int tmp=*a; > *a=*b; > *b=tmp; > } > /************************************************************************************************ > * idx_time 초기화 함수 > ************************************************************************************************/ > void start_time(){ > idx_time = 0; > } > /************************************************************************************************ > * Timer초기화 함수 정의 > ************************************************************************************************/ > void init_tc0(){ > TCCR0 = (0<<WGM01 | 0<<WGM00); // normal mode > TCNT0 = 256-125; // 1ms 마다 OVERFLOW INT 발생 > TIMSK = 1<<TOIE0; // OVERFLOW0 INT enable > TCCR0 |= (1<<CS02 | 0<<CS01 | 1<<CS00); // TC0 start (분주128) > } > /************************************************************************************************ > * 시스템 초기화 관련 함수 정의 > ************************************************************************************************/ > void init_port(){ > DDRF_ADC = 0x00; > DDRA = 0xFF; > } > void init_devices(){ > cli(); // disable all interrupts > init_uart0(); > init_adc(); > init_tc0(); > sei(); // enable all interrupts > } > void init_system(){ > init_port(); > init_devices(); > stdout = &mystdout; // to use the prinft func > _delay_ms(10); // to stabilize the system > } > /*********************************************************************************************** > * Main > ***********************************************************************************************/ > int main(void){ > // 변수 선언 > int i; > int sumX; > unsigned int x_data[10]; > float meanX; > int dX; > float deg_rate; > // 변수 초기화 > PORTA = _BV(0); // to check period > for(i=0;i<10;i++) > x_data[i] = 0; > meanX = 0; > dX = 0; > deg_rate = 0; > // 시스템 초기화 > init_system(); > // 카운트 시작 > start_time(); > while(1){ > while(idx_time >= 10){ // sampling time = 10ms > PORTA ^= _BV(0); // PA0 toggle > for(i=0;i<10;i++){ > x_data[i] = get_adc_data(); > } > start_time(); > sort(x_data); > sumX = 0; > for(i=2;i<8;i++) > sumX = sumX + x_data[i]; > > meanX = (int)((sumX/6.0)+0.5); // 소수 첫째자리에서 반올림 > > dX = offset - meanX; // 정지상태ADC - 변화된ADC > > if(dX<2 && dX>=0) // 값이 떨리는 것 보정 > dX = 0; > if(dX>-2 && dX<=0) > dX = 0; > > deg_rate = dX * scale_vector; > deg = integral(deg_rate); > > printf("pitch : %.1f\r\n",deg); > } > } > return 0; > } >
8550 답변완료AM-MS2 모터드라이버 관련 질문 있습니다. 서종현 2013-12-05 1,407
AM-MS2를 사용하고 있는데 문제점이 있어 질문 드립니다. - AM-MS2 로 스태핑 모터 2개를 제어 하고 있습니다. 모터 하나당 최대 허용전류 3A 까지 스펙을 맞춘 후 제어 할려고 하는데 질문게시판을 통해서 보니 1.5A 이상 사용시 와트저항 4개를 교체하여 사용하라는 답변이 있었습니다. 만약 최대 허용전류로 사용한다면 어떤 스펙의 저항을 써야 하는지 자세히 좀 부탁드립니다. 현재 부착된 저항은 - 5색저항 - 녹색-> 검정-> 흰색 -> 금색 -> 빨강 입니다. 저항값은 50.9 ohm 이며, 오차율은 ±2 %입니다. 어떤 저항으로 교체해야 할지 꼭 좀 부탁드립니다...ㅠㅠ SLA7062M 모터 드라이버 IC가 자꾸 타버립니다. 부탁드립니다.
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 자주하는 질문에 가서 ms2로 검색해서 보면 정확한 방법과 저항치등이 나옵니다. 본사로 오시거나 택배로도 도움을 드릴수 있습니다만 택배비는 고객님 부담이므로 직접 오시기를 권장합니다. 감사합니다. > > > AM-MS2를 사용하고 있는데 문제점이 있어 질문 드립니다. > > - AM-MS2 로 스태핑 모터 2개를 제어 하고 있습니다. > 모터 하나당 최대 허용전류 3A 까지 스펙을 맞춘 후 제어 할려고 하는데 질문게시판을 통해서 보니 > 1.5A 이상 사용시 와트저항 4개를 교체하여 사용하라는 답변이 있었습니다. > > 만약 최대 허용전류로 사용한다면 어떤 스펙의 저항을 써야 하는지 자세히 좀 부탁드립니다. > > 현재 부착된 저항은 - 5색저항 - 녹색-> 검정-> 흰색 -> 금색 -> 빨강 입니다. > > 저항값은 50.9 ohm 이며, 오차율은 ±2 %입니다. > > > 어떤 저항으로 교체해야 할지 꼭 좀 부탁드립니다...ㅠㅠ > > SLA7062M 모터 드라이버 IC가 자꾸 타버립니다. 부탁드립니다. >
8549 답변완료스테핑모터 SE-SM9K관련 심기훈 2013-12-05 1,374
스테핑모터 연결부분의 길이를 늘리고 싶은데 늘릴 수 있는 방법이 있습니까? 아니면 직접 연결부분을 자르고 납땜을 해도 스테핑모터가 작동하는지 알고 싶습니다.
관리자 답변 관리자 · 2013-12-07
네 직접 연장해도 가능합니다만 이경우 반드시 납땜을 통해서 해야 전류가 제대로 전달될겁니다. 감사합니다. > > > 스테핑모터 연결부분의 길이를 늘리고 싶은데 늘릴 수 있는 방법이 있습니까? > 아니면 직접 연결부분을 자르고 납땜을 해도 스테핑모터가 작동하는지 알고 싶습니다. >
8548 답변완료스테핑 모터 MS2모듈 사용에 관해서 질문 드립니다. 이주인 2013-12-05 1,403
MS2를 사용해서 스테핑 모터를 제어하려고 합니다. 적외선 센서와 외부 버튼 입력에 따라서 스테핑 모터가 정확히 1회전하도록 하려고 합니다 newtc에서 제공되는 MS2예제소스(첨부된 파일)를 참고로 프로그래밍을 하려고 하고있습니다. Timer소스를 사용하고있습니다. 질문 드리겠습니다. 1. 스테핑 클럭 모듈에서는 방향신호인 DIr신호와 속도 신호인 CLK 신호의 빈도에 따라서 조절하는 것으로 알고 있습니다. 회전시간, 회전 각도와 회전속도를 제어하는 부분을 알려주세요. 2. 외부 스위치에 입력에따라서 스테핑모터를 가동하려고 하는데 스테핑 모터의 회전과 정지를 조절하는 부분은 무엇입니까?
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사드립니다.  MOTOR_RIGHT_CLK; 또는  MOTOR_LEFT_CLK; 를 한 번 실행할 때마다, 한 클럭이 각각 오른쪽 왼쪽에 실행됩니다.  즉, 인터럽트 구문 안에서라면,  #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) {   TCNT0 = 0xf0; //reload counter value   MOTOR_LEFT_CLK;   MOTOR_RIGHT_CLK;  }  현재 예를들면 이렇게 구동중일 텐데요.  이렇게 하면 똑같은 속도로 돌잖아요.  맨 위에서 전역변수로 volatile int cnt; 이렇게 선언해 놓구요.  #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) {   cnt++;   TCNT0 = 0xf0; //reload counter value   if(!(cnt%10)){       MOTOR_LEFT_CLK;   }   if(!(cnt%2)){       MOTOR_RIGHT_CLK;   }  }  이렇게 해 보세요. 그럼, 오른쪽이 왼쪽의 5배 빨리 돌거에요.  그리고 mode변경을 해보세요. 현재의 mode3로 둔것을 0으로 바꾸면 8배 정밀히 돌거에요. 클럭을 안들어가도록하면 정지합니다. 감사합니다. > > > MS2를 사용해서 스테핑 모터를 제어하려고 합니다. 적외선 센서와 외부 버튼 입력에 따라서 스테핑 모터가 정확히 1회전하도록 하려고 합니다 > newtc에서 제공되는 MS2예제소스(첨부된 파일)를 참고로 프로그래밍을 하려고 하고있습니다. > Timer소스를 사용하고있습니다. > 질문 드리겠습니다. > > 1. 스테핑 클럭 모듈에서는 방향신호인 DIr신호와 속도 신호인 CLK 신호의 빈도에 따라서 조절하는 것으로 알고 있습니다. 회전시간, 회전 각도와 회전속도를 제어하는 부분을 알려주세요. > > 2. 외부 스위치에 입력에따라서 스테핑모터를 가동하려고 하는데 스테핑 모터의 회전과 정지를 조절하는 부분은 무엇입니까? >
8547 답변완료SE-SM243 , AM-CS2_ (3A용) 관련 발열 질문글.. 황동규 2013-12-05 1,433
CS2P에 12v, 800ma 어댑터로 전원을 주었고 10pin port 쪽에는 데이터 시트대로 5v의 전압과 필요한 시그널 핀을 연결하였습니다. 아트메가 128을 이용해서 모터를 작동시키는데는 문제가없지만 모터를 몇회 구동후 모터를 만져보니 모터가 상당히 뜨거웠습니다. CS2P에는 큰 발열은 없었고요.. CS2P에 달려있는 가변저항을 돌려서 전류도 체크해봤는데 왼쪽 오른쪽 모두 돌려봐도 14ma~ 17ma 정도에서 큰 변화가 없습니다. 모터를 작동하는데에 이 발열이 문제가 되는지 답변 부탁드립니다.. 문제가 있다면 해결 방법 부탁드립니다.
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 답변드릴께요. 전체적으로 전류가 부족하니 전압이 조금씩 오르락내리락할것이고 이로인해 열이 발생할수 있습니다. 또한 토크가 커도 열이 발생할수 있구요. 일단 파워를 본사의 3A 12V같은 좀 큰것으로 바꿔보시고 그런후 가변저항도 적절한 포인트로 회전소리가 좋게 돌기시작하는 지점으로 변경하여 쓰세요. 무조건 크거나 작거나해도 좋은게 아닙니다. 적절한 포인트로해야합니다. 감사합니다. > > > CS2P에 12v, 800ma 어댑터로 전원을 주었고 10pin port 쪽에는 데이터 시트대로 5v의 전압과 필요한 시그널 핀을 연결하였습니다. > > 아트메가 128을 이용해서 모터를 작동시키는데는 문제가없지만 모터를 몇회 구동후 모터를 만져보니 모터가 상당히 뜨거웠습니다. CS2P에는 큰 발열은 없었고요.. > CS2P에 달려있는 가변저항을 돌려서 전류도 체크해봤는데 왼쪽 오른쪽 모두 돌려봐도 14ma~ 17ma 정도에서 큰 변화가 없습니다. > > 모터를 작동하는데에 이 발열이 문제가 되는지 답변 부탁드립니다.. > 문제가 있다면 해결 방법 부탁드립니다. >
8546 답변완료디버그 관련 질문 사항 이성근 2013-12-05 1,432
AD-USBISP 6.0, AVR Studio 6.1, Atmega48PA를 사용하고 있습니다. Tool을 구매할때는 디버깅이 가능하다고 하셨는데 혹시 디버깅을 어떻게 하는지 좀 답변을 부탁드립니다.
관리자 답변 관리자 · 2013-12-07
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. usbisp 6.0은 isp로 다운로딩 장비입니다. 디버깅은 jtag을 사용해야합니다. isp만으론 디버깅은 안됩니다. 답변을 다 살펴봐도 그런 답변을 드린 것은 없네요. 시리얼로 값을 모니터링하는것을 다운로드하고 시리얼 포트로 컴터의 터미널용 프로그램실행해서 보는것은 의미가 있겠습니다. 감사합니다. > > > AD-USBISP 6.0, AVR Studio 6.1, Atmega48PA를 사용하고 있습니다. > Tool을 구매할때는 디버깅이 가능하다고 하셨는데 혹시 디버깅을 > 어떻게 하는지 좀 답변을 부탁드립니다. >
8545 답변완료AM-CAM V01 초소형 교육용 카메라에 관하여 주원기 2013-12-05 1,483
1. uart가 가능하다고 써있어서 회로도를 보았더니 RX,TX 관련 Pin이 없네요.?? 2. 영상출력 포멧이 어떻게되는지 알고 싶습니다. 3. 출력된 영상의 용량은 어느정도 인가요?(대략적으로라도) 답변 부탁드립니다.
관리자 답변 관리자 · 2013-12-05
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사드립니다. 답변드릴께요. > > 1. uart가 가능하다고 써있어서 회로도를 보았더니 RX,TX 관련 Pin이 없네요.?? → sam7s64 나 256 킷트 등을 이용하여 i/o포트로 제어하며 sam7s 등의 킷트에서 uart로 통신 가능합니다. 혹시라도 오해할만한 소지가 있어서 그런것인지 확인토록 하겠습니다. > > 2. 영상출력 포멧이 어떻게되는지 알고 싶습니다. --> 메뉴얼에 매우 자세히 언급됩니다. > > 3. 출력된 영상의 용량은 어느정도 인가요?(대략적으로라도) --> 64 x 64 바이트정도 됩니다. 감사합니다. > 답변 부탁드립니다. >
8544 답변완료dl16 라인트레이서 소스관련 질문입니다. 조민성 2013-12-05 1,358
저희가 라인트레이서 dl16을 구매했는데, 여기에 기능을 추가하려고 하는데 잘 안되서 질문을 올립니다., 생각하고 있는 기능이 1cm정도의 앞에있는 장애물을 탐지하여 출력단자에 HIGH가 나오는 센서를 라인트레이서에 달아서 라인트레이서 메인함수가 동작하다가 장애물을 만날시에 멈추는 그런 기능을 추가하려고 합니다. 그런데 소스관련해서 저희가 생각한것이 검은색 부분을 따라가는 부분에서 원래 짜여진 소스 전체와, 저희가 정지를 시킬 소스 이렇게 두덩어리로 나눠서 IF-ELSE문으로 짜보려고 했습니다. 그런데 작동이 되지 않아서 도움을 청합니다. 원래 기존의 소스를 보면 C포트는 사용을 안하는것 같아서 포트 정의를 DDRC = 0x00으로 입력 방향으로 설정하고, PORTC = 0x00으로 하였습니다. 그리고 검은색 부분 따라가는 소스부분을 수정하였는데 안되서 한번 살펴보시고 조언좀 부탁드립니다! 첨부파일에 수정하셔서 올려주시면 감사하겠습니다. 혹시 설명이 길거나 할시에는 전화해 주시면 감사하겠습니다. 010-6551-0812
관리자 답변 관리자 · 2013-12-07
안녕하세요 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 본 게시판에서는 소스를 수정하여 드리거나 짜드리는 것은 범위에 벗어납니다. 이해해주시기 바랍니다. 본사 소스를 참고하고서 조금씩 공부하여 추가하는것을 원칙으로 하고 있습니다. 가장 간단한 것부터 천천히 해보세요. 감사합니다. > > > 저희가 라인트레이서 dl16을 구매했는데, 여기에 기능을 추가하려고 하는데 잘 안되서 질문을 올립니다., > 생각하고 있는 기능이 1cm정도의 앞에있는 장애물을 탐지하여 출력단자에 HIGH가 나오는 센서를 라인트레이서에 달아서 라인트레이서 메인함수가 동작하다가 장애물을 만날시에 멈추는 그런 기능을 추가하려고 합니다. > 그런데 소스관련해서 저희가 생각한것이 검은색 부분을 따라가는 부분에서 원래 짜여진 소스 전체와, 저희가 정지를 시킬 소스 이렇게 두덩어리로 나눠서 IF-ELSE문으로 짜보려고 했습니다. > 그런데 작동이 되지 않아서 도움을 청합니다. 원래 기존의 소스를 보면 C포트는 사용을 안하는것 같아서 포트 정의를 DDRC = 0x00으로 입력 방향으로 설정하고, PORTC = 0x00으로 하였습니다. > 그리고 검은색 부분 따라가는 소스부분을 수정하였는데 안되서 한번 살펴보시고 조언좀 부탁드립니다! 첨부파일에 수정하셔서 올려주시면 감사하겠습니다. > > 혹시 설명이 길거나 할시에는 전화해 주시면 감사하겠습니다. > 010-6551-0812 > >