로그인 | 회원가입 | 주문 조회
총 10,748개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
8513 답변완료FM-CY6S-KIT 키트에서 포트 신호입력방법 백지은 2013-11-25 1,453
FPGA에서 간단한 25kHz 시그널을 PORTA의 4개 핀으로 출력하려고합니다. 근데, PORTA에 Enable 핀과 Dir핀이 있더라구요. Jtag으로 구운다음에 오실로스코프로 핀 출력을 확인해봤는데, 입력신호와 다른 시그널이 PORTA 전체에 똑같이 입력되어있었습니다. 제가 다른 입력신호를 줬는데 그게 입력이 제대로 안된거같습니다. 이경우에 원래 저렇게 기본 시그널이 나오나요? 그리고 Enable 핀은 VCC로, Dir핀은 GND로 되어있던데요. 거기에 5V 전원을 인가해줘야 프로그램된 신호가 나오는 건가요? 아니면 Enable과 Dir는 5V를 따로 주고, 프로그램할때 신호를 따로 넣어줘야하나요? ---------------------------------- module inverter_signal(clk, reset, sw_sig1, sw_sig2, sw_sig3, sw_sig4); input clk, reset; output sw_sig1; // switch 1 output sw_sig2; // switch 3 inverse - output sw_sig3; // siwtch 3 output sw_sig4; // switch 1 inverse - reg [31:0] clk_count; reg sw_sig1; reg sw_sig3; parameter SEC_sig1 = 2500; // when 25us, it must be 2500 always@(posedge clk) if(!reset) clk_count <= 0; else if(clk_count < SEC_sig1) clk_count <= clk_count+1; else clk_count <= 0; always@(posedge clk) if(clk_count <= 1250) sw_sig1 = 1; else if(clk_count > 1250) sw_sig1 = 0; always@(posedge clk) if(clk_count > 500 && clk_count <= 1750) sw_sig3 = 1; else sw_sig3 = 0; assign sw_sig4 =~ sw_sig1; assign sw_sig2 =~ sw_sig3; endmodule --------------------------------------------------
관리자 답변 관리자 · 2013-11-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변 드릴께요. > FPGA에서 간단한 25kHz 시그널을 PORTA의 4개 핀으로 출력하려고합니다. > > 근데, PORTA에 Enable 핀과 Dir핀이 있더라구요. > Jtag으로 구운다음에 오실로스코프로 핀 출력을 확인해봤는데, > 입력신호와 다른 시그널이 PORTA 전체에 똑같이 입력되어있었습니다. > 제가 다른 입력신호를 줬는데 그게 입력이 제대로 안된거같습니다. 이경우에 > 원래 저렇게 기본 시그널이 나오나요? ==> 무슨 말씀이신지 10번정도 읽어봐도 잘 정확히 이해가 안갑니다. 좀 더 풀어서 얘기해 주세요. > > 그리고 > > Enable 핀은 VCC로, Dir핀은 GND로 되어있던데요. 거기에 5V 전원을 인가해줘야 > 프로그램된 신호가 나오는 건가요? 아니면 Enable과 Dir는 5V를 따로 주고, 프로그램할때 > 신호를 따로 넣어줘야하나요? ==> Enable에 0을 줘야 일단, 포트 제어가 Enable이 될 거구요. Dir 핀에 0을 넣어줘야 입력으로 사용할 겁니다. 감사합니다. > > > ---------------------------------- > module inverter_signal(clk, reset, sw_sig1, sw_sig2, sw_sig3, sw_sig4); > > input clk, reset; > > > output sw_sig1; // switch 1 > output sw_sig2; // switch 3 inverse - > output sw_sig3; // siwtch 3 > output sw_sig4; // switch 1 inverse - > > reg [31:0] clk_count; > reg sw_sig1; > reg sw_sig3; > > > parameter SEC_sig1 = 2500; // when 25us, it must be 2500 > > > always@(posedge clk) > > > if(!reset) > > clk_count <= 0; > > else > > if(clk_count < SEC_sig1) > > clk_count <= clk_count+1; > > else > > clk_count <= 0; > > > always@(posedge clk) > > > if(clk_count <= 1250) > > sw_sig1 = 1; > > else if(clk_count > 1250) > > sw_sig1 = 0; > > > always@(posedge clk) > > > if(clk_count > 500 && clk_count <= 1750) > > sw_sig3 = 1; > > > else > > sw_sig3 = 0; > > > > > > assign sw_sig4 =~ sw_sig1; > assign sw_sig2 =~ sw_sig3; > > endmodule > > -------------------------------------------------- >
8512 답변완료Tiny2313 기본코드 류대우 2013-11-25 1,443
//ICC-AVR application builder : 2013-11-25 오후 2:31:34 // Target : T2313 // Crystal: 1.0000Mhz #include <iot2313v.h> #include <macros.h> void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTD = 0x00; DDRD = 0x40; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x00; 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... while(1){ PORTD |=0b01000000; delay(1000); PORTD |=0b00000000; delay(1000); } }
관리자 답변 관리자 · 2013-11-25
내부 클럭 사용시의 예제입니다. > > > //ICC-AVR application builder : 2013-11-25 오후 2:31:34 > // Target : T2313 > // Crystal: 1.0000Mhz > > #include <iot2313v.h> > #include <macros.h> > > void port_init(void) > { > PORTA = 0x00; > DDRA = 0x00; > PORTB = 0x00; > DDRB = 0x00; > PORTD = 0x00; > DDRD = 0x40; > } > > //call this routine to initialize all peripherals > void init_devices(void) > { > //stop errant interrupts until set up > CLI(); //disable all interrupts > port_init(); > > MCUCR = 0x00; > GIMSK = 0x00; > TIMSK = 0x00; > 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... > while(1){ > PORTD |=0b01000000; > delay(1000); > PORTD |=0b00000000; > delay(1000); > } > } >
8511 답변완료네...라인트레이서요ㅠㅠ 조민성 2013-11-25 1,374
그래서 소스바꿀때는 모터구동포트랑 센서포트랑 포트선언 이거만바꾸면되는거에요???
관리자 답변 관리자 · 2013-11-25
안녕하세요? 고객님, 포트들 바꾸면 되지만, 8051보드의 경우는 IRS 센서는 아날로그 출력이라서, 해당 8051 보드에서 ADC가 되지 않으므로, 안되구요. IRS4D의 경우, 디지털 출력이라 8051에서 값을 읽는 것이 가능하므로, 쓰실 수 있습니다. 감사합니다. > > > 그래서 소스바꿀때는 모터구동포트랑 센서포트랑 포트선언 이거만바꾸면되는거에요??? >
8510 답변완료다음의 AT91SAM7S256 타이머 카운터 0 소스 코드에 대하여 확인을 부탁 드립니다. 주호석 2013-11-25 1,722
안녕하세요? 한 블로그에 나와있는 소스 코드를 참고하여,IAR ARM 컴파일러에서 제공된 헤더 화일의 레지스터 및 함수를 활용하여 다음과 같이 타이머 카운터 0 코드를 프로그래밍 해 보았습니다. #include <AT91SAM7S256.h> #include <lib_AT91SAM7S.h> static volatile unsigned int Count_ms; void Timer_Handler(void); void AT91SAM7S256_TC0(void) { AT91F_TC0_CfgPMC(); // Enable peripheral clock in PMC for TC0. *AT91C_TC0_CCR = AT91C_TC_CLKDIS; // Disable peripheral clock in TC0. AT91F_TC_InterruptDisable(AT91C_BASE_TC0, AT91C_TC_COVFS | AT91C_TC_LOVRS | AT91C_TC_CPAS | AT91C_TC_CPBS | AT91C_TC_CPCS | AT91C_TC_LDRAS | AT91C_TC_LDRBS | AT91C_TC_ETRGS); //Disable timer counter 0 Interrupt. *AT91C_TC0_SR; // Read timer counter 0 register. (initialize timer counter 0 register) *AT91C_TC0_CMR = (AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_CPCTRG); // TCCLKS(clock division) of // TC0_CMR is set as 128.(TCCLKS = 0x3)| // Enable RC Compare Trigger.(CPCTRG = 1) *AT91C_TC0_RC = 375; // Count the divided clock by 375, to count 1ms. AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, AT91C_AIC_PRIOR, AT91C_AIC_SRCTYPE_HIGH_LEVEL, Timer_Handler); AT91F_TC_InterruptEnable(AT91C_BASE_TC0, AT91C_TC_CPCS); AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC0); *AT91C_TC0_CCR = AT91C_TC_CLKEN; *AT91C_TC0_CCR = AT91C_TC_SWTRG; } void Timer_Handler(void) { *AT91C_TC0_SR; ++Count_ms; return; } void Delay_ms(unsigned int ms_set) { Count_ms = 0; while(ms_set > Count_ms); } 위의 소스 코드가 참조해 드린 블로그에 나와있는 것처럼 올바르게 프로그래밍 한 것인지, 그리고 레지스터 또한 올바르게 사용되어 졌는지를 지적해 주시면 감사 드리겠습니다. 감사합니다. P.S : 인터럽트 벡터를 지정할 때 핸들러 형식으로 함수를 사용하는 이유, 그리고 인터럽트 소스 벡터 레지스터(AIC Source Vector Register)를 왜 배열형으로 사용하는 지의 이유에 대해서도 설명해 주시면 대단히 감사 드리겠습니다.
관리자 답변 관리자 · 2013-11-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 본사에서 고객님이 직접 코딩하시거나, 외부 코딩된 자료를 검증해 드리거나 하는 서비스는 해 드리지 못하고 있으니, 참고하시기 바랍니다. 거기까지 제공해 드리면 좋은데 해드리지 못하는 부분 죄송하게 생각합니다. 본사의 온라인 강좌에 가시면, 부족하지만, 몇가지 강좌가 제공되고 있으니, 그 부분 참고 바랍니다. 감사합니다. > > > 안녕하세요? > > > 한 블로그에 나와있는 소스 코드를 참고하여,IAR ARM 컴파일러에서 > > 제공된 헤더 화일의 레지스터 및 함수를 활용하여 다음과 같이 > > 타이머 카운터 0 코드를 프로그래밍 해 보았습니다. > > > #include <AT91SAM7S256.h> > #include <lib_AT91SAM7S.h> > > static volatile unsigned int Count_ms; > > void Timer_Handler(void); > > void AT91SAM7S256_TC0(void) > { > AT91F_TC0_CfgPMC(); // Enable peripheral clock in PMC for TC0. > *AT91C_TC0_CCR = AT91C_TC_CLKDIS; // Disable peripheral clock in TC0. > AT91F_TC_InterruptDisable(AT91C_BASE_TC0, AT91C_TC_COVFS | AT91C_TC_LOVRS | AT91C_TC_CPAS | > AT91C_TC_CPBS | AT91C_TC_CPCS | AT91C_TC_LDRAS | AT91C_TC_LDRBS | > AT91C_TC_ETRGS); //Disable timer counter 0 Interrupt. > *AT91C_TC0_SR; // Read timer counter 0 register. (initialize timer counter 0 register) > *AT91C_TC0_CMR = (AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_CPCTRG); // TCCLKS(clock division) of > // TC0_CMR is set as 128.(TCCLKS = 0x3)| > // Enable RC Compare Trigger.(CPCTRG = 1) > *AT91C_TC0_RC = 375; // Count the divided clock by 375, to count 1ms. > AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, AT91C_AIC_PRIOR, AT91C_AIC_SRCTYPE_HIGH_LEVEL, Timer_Handler); > AT91F_TC_InterruptEnable(AT91C_BASE_TC0, AT91C_TC_CPCS); > AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC0); > *AT91C_TC0_CCR = AT91C_TC_CLKEN; > *AT91C_TC0_CCR = AT91C_TC_SWTRG; > } > > void Timer_Handler(void) > { > *AT91C_TC0_SR; > ++Count_ms; > return; > } > > void Delay_ms(unsigned int ms_set) > { > Count_ms = 0; > while(ms_set > Count_ms); > } > > > 위의 소스 코드가 참조해 드린 블로그에 나와있는 것처럼 올바르게 > > 프로그래밍 한 것인지, 그리고 레지스터 또한 올바르게 사용되어 졌는지를 > > 지적해 주시면 감사 드리겠습니다. > > > 감사합니다. > > > > P.S : 인터럽트 벡터를 지정할 때 핸들러 형식으로 함수를 사용하는 이유, > > 그리고 인터럽트 소스 벡터 레지스터(AIC Source Vector Register)를 > > 왜 배열형으로 사용하는 지의 이유에 대해서도 설명해 주시면 대단히 > > 감사 드리겠습니다. >
8509 답변완료AM-DC2-2D 문의입니다. 김상학 2013-11-25 1,364
AM-DC2-2D 개봉하고, 코딩다 하고 오늘 처음으로 구동하는건데 이전에 언코더 장착형 dc모터 구동되는가 테스트해볼려고 한번 하고 오늘 처음 돌렸는데 맛갔네요 ㅡ ㅡ;;; 잭 문제인지 확인하려고 다 물려봣는데. 문제는 AM-DC2-2D 모듈입니다.. 이거 원;; 두번째 테스트때 뻥나버리다뇨;;;
관리자 답변 관리자 · 2013-11-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 혹시, 물리신 DC 모터가 어떤 제품인지요? 모터 드라이버 스펙보다 전류사용이 높은 제품이라면, 망가질 수 있습니다. 모터 스펙을 살펴 보시고 올려 보시면 좋겠습니다. 감사합니다. > > > AM-DC2-2D 개봉하고, 코딩다 하고 오늘 처음으로 구동하는건데 > > 이전에 언코더 장착형 dc모터 구동되는가 테스트해볼려고 한번 하고 > > 오늘 처음 돌렸는데 > > 맛갔네요 ㅡ ㅡ;;; > > 잭 문제인지 확인하려고 다 물려봣는데. > > 문제는 AM-DC2-2D 모듈입니다.. 이거 원;; 두번째 테스트때 뻥나버리다뇨;;; >
8508 답변완료am-3axis-v2 에 관한 문의입니다.(2) 변광열 2013-11-24 1,438
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=126388 위와 같이 질문에 대해 답해주셔서 우선 감사드리구요. 제가 하고자 하는 것은 가속도계를 이용한 각도검출입니다. 자료실에 있는 avrstudio용 예제파일을 이용하여 정지상태의 가속도계 ADC결과는 대략 다음과 같습니다. ref_X: 296 ref_Y: 308 ref_Z: 468 센서는 3.3V에서 동작하는데, 저의 AREF 설정은 5.0V 이므로 가속도 계산을 다음과 같이 하였습니다. sumX = sumY = sumZ = 0; for(i=2; i<9; i++){ sumX = sumX + data0[i]; sumY = sumY + data2[i]; sumZ = sumZ + data4[i]; } ADC_X = (sum0 / 7.0); ADC_Y = (sum2 / 7.0); ADC_Z = (sum4 / 7.0); Vout_X = ((int)ADC_X - ref_X) * 5.0/1024; Vout_Y = ((int)ADC_Y - ref_Y) * 5.0/1024; Vout_Z = ((int)ADC_Z - ref_Z) * 5.0/1024; acc_X = Vout_X / sensitivity; acc_Y = Vout_Y / sensitivity; acc_Z = Vout_Z / sensitivity; 처음 질문에 대해 답해주신 내용을 보니까 3.3V로 환산하라고 하셨는데 그럴필요없이 그냥 Scale_factor 구할 떄 3.3V 대신 5.0V 쓰면 되는 것 아닌가요? 꼭 좀 답변바라겠습니다. (Scale_factor = 전압/분해능/감도) 어쩃든 위와 같은 계산코드를 이용하여 단위[g]인 가속도값을 계산하였고, 가속도값 acc_X, acc_Y는 -1~1 사이값만 가질 수 있도록 제한하였습니다. 각도(deg)계산은 다음과 같습니다. pitch = asin(acc_Y) * 180/pi; roll = asin(acc_X) * 180/pi; 그랬더니 제가 원하던 0~90도까지 값이 나오더라구요. 제가 제대로 한게 맞나요? 전압 부분때문에 애매하네요; 최종목표는 자이로+가속도계+상보필터 입니다.
관리자 답변 관리자 · 2013-11-25
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변 드리겠습니다. > > http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=126388 > 위와 같이 질문에 대해 답해주셔서 우선 감사드리구요. > 제가 하고자 하는 것은 가속도계를 이용한 각도검출입니다. > 자료실에 있는 avrstudio용 예제파일을 이용하여 정지상태의 가속도계 ADC결과는 대략 다음과 같습니다. > > ref_X: 296 ref_Y: 308 ref_Z: 468 > > 센서는 3.3V에서 동작하는데, 저의 AREF 설정은 5.0V 이므로 가속도 계산을 다음과 같이 하였습니다. ==> AREF를 5V로 하면, 출력은 3.3V 기준으로 값이 나오니까 값이 작게 나올 수밖에 없습니다. AREF를 5V 로 한다고 해서, 출력 전압값들이 커지는 것은 아니니까요. 출력 전압값은 3.3V 스케일로 나오는 데, 결과값은 5V까지 보는 거니까. 3.3V ~ 5V 사이 값은 절대로 안나오겠죠. > > sumX = sumY = sumZ = 0; > > for(i=2; i<9; i++){ > sumX = sumX + data0[i]; > sumY = sumY + data2[i]; > sumZ = sumZ + data4[i]; > } > ADC_X = (sum0 / 7.0); > ADC_Y = (sum2 / 7.0); > ADC_Z = (sum4 / 7.0); > > Vout_X = ((int)ADC_X - ref_X) * 5.0/1024; > Vout_Y = ((int)ADC_Y - ref_Y) * 5.0/1024; > Vout_Z = ((int)ADC_Z - ref_Z) * 5.0/1024; > > acc_X = Vout_X / sensitivity; > acc_Y = Vout_Y / sensitivity; > acc_Z = Vout_Z / sensitivity; > > 처음 질문에 대해 답해주신 내용을 보니까 3.3V로 환산하라고 하셨는데 그럴필요없이 그냥 Scale_factor 구할 떄 3.3V 대신 5.0V 쓰면 되는 것 아닌가요? 꼭 좀 답변바라겠습니다. (Scale_factor = 전압/분해능/감도) > > 어쩃든 위와 같은 계산코드를 이용하여 단위[g]인 가속도값을 계산하였고, 가속도값 acc_X, acc_Y는 -1~1 사이값만 가질 수 있도록 제한하였습니다. 각도(deg)계산은 다음과 같습니다. > > pitch = asin(acc_Y) * 180/pi; > roll = asin(acc_X) * 180/pi; > > 그랬더니 제가 원하던 0~90도까지 값이 나오더라구요. ==> 저도 말씀하신 내용이 복잡해서, 보내주신 내용으로는 사실 잘 모르겠습니다. 하지만, 제대로 나오신다니, 자세히 체크해 보시면 되신다고 하니, 맞을 것 같네요. > > 제가 제대로 한게 맞나요? 전압 부분때문에 애매하네요; ==> 직접 검증 해 보시는 게 좋겠습니다. 직접 보고 있는 게 아니라 좀 헛갈립니다. > 최종목표는 자이로+가속도계+상보필터 입니다. > 감사합니다.
8507 답변완료iccv8 데모프로그램 박준상 2013-11-22 1,389
iccv8 데모프로그램이 사용기한이 끝났는데 연장을 어떻게 해야 한가요??/
관리자 답변 관리자 · 2013-11-23
안녕하세요 고객님, 데모프로그램 사용기간인 45일이 끝나도 4kB헥사까지는 문제없이 동작하므로 많은 예제가 여전히 사용가능합니다. 그러나 일부 조금만 커져도 에러가나죠. PC를 포맷하고 다시깔거나 비상업용버전을 사서쓰면됩니다. 아니면 iccavr v7깔아서 .c소스파일은 그대로쓰고 프로젝트만 다시만들어 쓰면 뎝니다. 감사합니다. > > > iccv8 데모프로그램이 사용기한이 끝났는데 연장을 어떻게 해야 한가요??/ >
8506 답변완료라인트레이서 소스 관련 질문드립니다. 조민성 2013-11-22 1,428
라인트레이서 소스부분에 각 PORT마다 선언을 해주었는데 제품 사진에 보면 포트 네개중에 하나만 적외선센서와 연결되있고 나머지는 연결이 안되어 있습니다. 그러면 나머지 포트 세개는 사용을 안하는 것인가요? 각 포트마다 어디에 쓰이는지좀 알려주세요. (A번포트는 적외선 센서에 쓰였다 이런식으로 ) 또 DL16으로 만든 트레이서에서 소스부분을 참고하여 AB-S52로 만든 트레이서의 소스를 만들려고 하는데 포트선언부분이랑 센서부분만 바꿔야 하는지 아니면 싹 다 바꿔야 하는지 가르쳐주세요
관리자 답변 관리자 · 2013-11-23
안녕하세요 고객님, 지금 퇴근해서 어느포트인지 알수 없으나, 한포트는 모터드라이버와 한포트는 센서와 연결하여 사용합니다. 감사합니다. > > > 라인트레이서 소스부분에 각 PORT마다 선언을 해주었는데 제품 사진에 보면 포트 네개중에 하나만 적외선센서와 연결되있고 나머지는 연결이 안되어 있습니다. > 그러면 나머지 포트 세개는 사용을 안하는 것인가요? > 각 포트마다 어디에 쓰이는지좀 알려주세요. (A번포트는 적외선 센서에 쓰였다 이런식으로 ) > 또 DL16으로 만든 트레이서에서 소스부분을 참고하여 AB-S52로 만든 트레이서의 소스를 만들려고 하는데 포트선언부분이랑 센서부분만 바꿔야 하는지 아니면 싹 다 바꿔야 하는지 가르쳐주세요 >
8505 답변완료스테핑모터구동모듈AM-CS2P(3A용) 이윤정 2013-11-22 1,382
포트 연결 8 bit 데이터쪽에 GND와 5V연결되는 곳은 알겠는데, 그 외에 8개 단자는 1,2,3,4,단자는 왼쪽모터 A B /A /B 5,6,7,8단자는 오른쪽모터A B /A /B 인 것도 알겠습니다... 그런데 이 경우 일일이 전압을 A만에 주고 그담엔 B만주고.. 이런식으로 하면 구동은 되겠으나,,한번 전압을 인가하면 자동으로 굴러가진 않는 것 같습니다.. 어떻게 전압을 인가해야 자동으로 구동되게 할 수 있나요..?? 지식이 많이 부족하여 아무리 찾아봐도 모르겠네요.ㅠㅠ 혹시 매틀랩의 pulse generator로 사각파로 0,1을 만드니깐, 그것을 각 A,B,/A,/B에 다른 사각파를 넣어서 동작을 하게 하면 되는건가요? 참고: AM-CS2P와 스테핑모터와 매틀랩 simulink로만 세그웨이를 제어하려고 합니다. 빠른답변 주시면 매우 감사합니다.
관리자 답변 관리자 · 2013-11-23
안녕하세요 고객님, DC모터처럼 전압주면 계속 굴러가는것을 생각하셨나 봅니다. CS2P는 파형을 매번 생성해줘야하구요. 매틀랩이든 avr이든 파형을 생성해넣어주기만하면됩니다. 그리고 MS2를 쓸경 한핀에 구형파 펄스만 줘도 그 속도에 맞춰서 돌아갑니다. 감사합니다. > > > 포트 연결 8 bit 데이터쪽에 GND와 5V연결되는 곳은 알겠는데, > 그 외에 8개 단자는 1,2,3,4,단자는 왼쪽모터 A B /A /B 5,6,7,8단자는 오른쪽모터A B /A /B 인 것도 알겠습니다... > 그런데 이 경우 일일이 전압을 A만에 주고 그담엔 B만주고.. 이런식으로 하면 구동은 되겠으나,,한번 전압을 인가하면 자동으로 굴러가진 않는 것 같습니다.. > > 어떻게 전압을 인가해야 자동으로 구동되게 할 수 있나요..?? 지식이 많이 부족하여 아무리 찾아봐도 모르겠네요.ㅠㅠ > > 혹시 매틀랩의 pulse generator로 사각파로 0,1을 만드니깐, 그것을 각 A,B,/A,/B에 다른 사각파를 넣어서 동작을 하게 하면 되는건가요? > > 참고: AM-CS2P와 스테핑모터와 매틀랩 simulink로만 세그웨이를 제어하려고 합니다. > > 빠른답변 주시면 매우 감사합니다. >
8504 답변완료am-3axis-v2 에 관한 문의입니다. 변광열 2013-11-21 1,395
안녕하세요. 요즘 귀사의 가속도센서를 이용하여 ADC를 통해 가속도값을 받아보고 있는데요. 몇가지 질문사항이 있어 이렇게 글을 남깁니다. 제가 사용하고 있는 환경은 다음과 같습니다. HW : ATmega128pro SW : AVRstudio4 + winAVR Sensor : am-3axis-ver2 + am-3axis-p 자료실에 있는 AVRstudio용 가속도 ADC 예제 파일을 받아 아트메가에 포팅 후 터미널로 결과를 보니 다음과 같더군요.(정적인 상태) X: 296 Y: 303 Z: 465 X: 296 Y: 303 Z: 464 X: 297 Y: 304 Z: 465 X: 297 Y: 304 Z: 466 X: 296 Y: 304 Z: 465 대략 위와 같은 결과가 출력되고 있는데, (질문1)이게 올바른 결과인가요? 예제파일을 참고하여 제가 짠 코드(아래에 첨부)도 위와 같은 결과를 보여주더군요. 그래서 결과값이 확실치 않아서 계측기로 x,y,z 축 각각에 대한 아날로그 전압값을 측정해 보니 다음과 같았습니다. (계측값) (manual에 표시된 값) X(0g) : 1.66V 1.65V (=Vcc/2) Y(0g) : 1.68V 1.65V (=Vcc/2) Z(1g) : 2.55V 2.31V 약간의 차이는 있으나 결과가 매뉴얼에 표시된 것과 유사하더군요. (질문2) ADC 분해능이 10비트이므로 아날로그 전압값을 ADC하게 되면 0~1023 사이의 값을 가진다고 알고 있습니다. 즉, Vcc=3.3V 이므로 정지상태의 ADC결과(0~1023)가 "X: 297 Y: 304 Z: 466" 와 같을 때 전압값은 다음과 같이 계산 되어 집니다. (3.3V기준의 ADC결과를 전압값으로 환산한 값) X(0g) : 0.96V Y(0g) : 0.98V Z(1g) : 1.50V 이 같은 결과는 계측된 전압값과의 오차가 약 1.5배 이상이나 됩니다. 그 이유가 궁금합니다. 만약 결과가 적절하다면 정적인 상태에서 x,y,z의 가속도 출력이 0가 되도록 할려면 offset 값을 빼주어야겠죠? 상세한 답변 부탁 드리겠습니다. 추가로 제가 짠 코드 첨부하겠습니다. 참고로 코드를 보시면 아시겠지만 g_sel[1,2]값은 기본값인 0,0 입니다. #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 /************************************************************************************************ * 전역변수 선언 ************************************************************************************************/ volatile unsigned int ch0,ch2,ch4; volatile unsigned int sumX,sumY,sumZ; volatile unsigned int x_data[10],y_data[10],z_data[10]; volatile double meanX,meanY,meanZ; /************************************************************************************************ * 함수 선언 ************************************************************************************************/ void adc_data(); void sort(unsigned int arr[]); void init_port(); void init_devices(); void init_syetem(); /************************************************************************************************ * 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; } /************************************************************************************************ * ADC 관련 함수 정의 ************************************************************************************************/ void adc_data(){ ch0 = ch2 = ch4 = 0; //X ADCSRA &= ~(1<<ADEN); // ADC disable ADMUX = (0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 0<<MUX1 | 0<<MUX0); //PF0 ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start while((ADCSRA & 0x10) != 0x10); ch0 = ADCW; //Y ADCSRA &= ~(1<<ADEN); // ADC disable ADMUX = (0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 1<<MUX1 | 0<<MUX0); //PF2 ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start while((ADCSRA & 0x10) != 0x10); ch2 = ADCW; //Z ADCSRA &= ~(1<<ADEN); // ADC disable ADMUX = (0<<MUX4 | 0<<MUX3 | 1<<MUX2 | 0<<MUX1 | 0<<MUX0); //PF4 ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start while((ADCSRA & 0x10) != 0x10); ch4 = ADCW; // printf("X: %d Y: %d Z: %d\r\n", ch0,ch2,ch4); } /************************************************************************************************ * 시스템 초기화 함수 정의 ************************************************************************************************/ void init_port(){ DDRF_ADC = 0x00; } void init_devices(){ cli(); // disable all interrupts init_uart0(); init_adc(); 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; for(i=0;i<10;i++){ x_data[i] = 0; y_data[i] = 0; z_data[i] = 0; } init_system(); while(1){ for(i=0;i<10;i++){ adc_data(); x_data[i] = ch0; y_data[i] = ch2; z_data[i] = ch4; } sort(x_data); sort(y_data); sort(z_data); sumX = sumY = sumZ = 0; for(i=2;i<9;i++){ sumX = sumX + x_data[i]; sumY = sumY + y_data[i]; sumZ = sumZ + z_data[i]; } meanX = meanY = meanZ = 0; meanX = sumX / 8.0; meanY = sumY / 8.0; meanZ = sumZ / 8.0; // printf("X: %d Y: %d Z: %d\r\n", sumX,sumY,sumZ); printf("X: %d Y: %d Z: %d\r\n", (int)meanX, (int)meanY, (int)meanZ); } return 0; }
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변 드릴께요. > > 안녕하세요. 요즘 귀사의 가속도센서를 이용하여 ADC를 통해 가속도값을 받아보고 있는데요. > 몇가지 질문사항이 있어 이렇게 글을 남깁니다. > 제가 사용하고 있는 환경은 다음과 같습니다. > HW : ATmega128pro > SW : AVRstudio4 + winAVR > Sensor : am-3axis-ver2 + am-3axis-p > > 자료실에 있는 AVRstudio용 가속도 ADC 예제 파일을 받아 아트메가에 포팅 후 터미널로 결과를 보니 다음과 같더군요.(정적인 상태) > > X: 296 Y: 303 Z: 465 > X: 296 Y: 303 Z: 464 > X: 297 Y: 304 Z: 465 > X: 297 Y: 304 Z: 466 > X: 296 Y: 304 Z: 465 > > 대략 위와 같은 결과가 출력되고 있는데, (질문1)이게 올바른 결과인가요? ==> 네 올바른 결과입니다. 약간씩은 칩제조후, 생산, 판매, 유통상 여러가지 공정상 오차가 생길 수밖에 없습니다. 소프트웨어 적으로 보정하여 써야 하는 것으로 제조사에서도 얘기하고 있습니다. > 예제파일을 참고하여 제가 짠 코드(아래에 첨부)도 위와 같은 결과를 보여주더군요. > 그래서 결과값이 확실치 않아서 계측기로 x,y,z 축 각각에 대한 아날로그 전압값을 측정해 보니 다음과 같았습니다. > > (계측값) (manual에 표시된 값) > X(0g) : 1.66V 1.65V (=Vcc/2) > Y(0g) : 1.68V 1.65V (=Vcc/2) > Z(1g) : 2.55V 2.31V > > 약간의 차이는 있으나 결과가 매뉴얼에 표시된 것과 유사하더군요. ==> 네, 맞습니다. > (질문2) ADC 분해능이 10비트이므로 아날로그 전압값을 ADC하게 되면 0~1023 사이의 값을 가진다고 알고 있습니다. 즉, Vcc=3.3V 이므로 정지상태의 ADC결과(0~1023)가 "X: 297 Y: 304 Z: 466" 와 같을 때 전압값은 다음과 같이 계산 되어 집니다. ===> ADC 자체는 AREF가 5V 기준으로 되어 있을 겁니다. ADC 후, 다시 3.3V 기준으로 환산하여 적용하셔야 합니다. > (3.3V기준의 ADC결과를 전압값으로 환산한 값) > X(0g) : 0.96V > Y(0g) : 0.98V > Z(1g) : 1.50V > > 이 같은 결과는 계측된 전압값과의 오차가 약 1.5배 이상이나 됩니다. 그 이유가 궁금합니다. > 만약 결과가 적절하다면 정적인 상태에서 x,y,z의 가속도 출력이 0가 되도록 할려면 offset 값을 빼주어야겠죠? ==> 이건 아니라는 것을 아시겠죠? 감사합니다. > 상세한 답변 부탁 드리겠습니다. > 추가로 제가 짠 코드 첨부하겠습니다. 참고로 코드를 보시면 아시겠지만 g_sel[1,2]값은 기본값인 0,0 입니다. > > #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 > /************************************************************************************************ > * 전역변수 선언 > ************************************************************************************************/ > volatile unsigned int ch0,ch2,ch4; > volatile unsigned int sumX,sumY,sumZ; > volatile unsigned int x_data[10],y_data[10],z_data[10]; > volatile double meanX,meanY,meanZ; > /************************************************************************************************ > * 함수 선언 > ************************************************************************************************/ > void adc_data(); > void sort(unsigned int arr[]); > void init_port(); > void init_devices(); > void init_syetem(); > /************************************************************************************************ > * 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; > } > /************************************************************************************************ > * ADC 관련 함수 정의 > ************************************************************************************************/ > void adc_data(){ > > ch0 = ch2 = ch4 = 0; > //X > ADCSRA &= ~(1<<ADEN); // ADC disable > ADMUX = (0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 0<<MUX1 | 0<<MUX0); //PF0 > ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start > while((ADCSRA & 0x10) != 0x10); > ch0 = ADCW; > //Y > ADCSRA &= ~(1<<ADEN); // ADC disable > ADMUX = (0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 1<<MUX1 | 0<<MUX0); //PF2 > ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start > while((ADCSRA & 0x10) != 0x10); > ch2 = ADCW; > //Z > ADCSRA &= ~(1<<ADEN); // ADC disable > ADMUX = (0<<MUX4 | 0<<MUX3 | 1<<MUX2 | 0<<MUX1 | 0<<MUX0); //PF4 > ADCSRA |= (1<<ADEN | 1<<ADSC); // ADC enable & start > while((ADCSRA & 0x10) != 0x10); > ch4 = ADCW; > > // printf("X: %d Y: %d Z: %d\r\n", ch0,ch2,ch4); > > } > /************************************************************************************************ > * 시스템 초기화 함수 정의 > ************************************************************************************************/ > void init_port(){ > DDRF_ADC = 0x00; > } > void init_devices(){ > cli(); // disable all interrupts > init_uart0(); > init_adc(); > 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; > > for(i=0;i<10;i++){ > x_data[i] = 0; > y_data[i] = 0; > z_data[i] = 0; > } > > init_system(); > > while(1){ > for(i=0;i<10;i++){ > adc_data(); > x_data[i] = ch0; > y_data[i] = ch2; > z_data[i] = ch4; > } > sort(x_data); > sort(y_data); > sort(z_data); > > sumX = sumY = sumZ = 0; > > for(i=2;i<9;i++){ > sumX = sumX + x_data[i]; > sumY = sumY + y_data[i]; > sumZ = sumZ + z_data[i]; > } > > meanX = meanY = meanZ = 0; > > meanX = sumX / 8.0; > meanY = sumY / 8.0; > meanZ = sumZ / 8.0; > > // printf("X: %d Y: %d Z: %d\r\n", sumX,sumY,sumZ); > printf("X: %d Y: %d Z: %d\r\n", (int)meanX, (int)meanY, (int)meanZ); > } > return 0; > } >
8503 답변완료센서에 대해 질문드립니다. 조민성 2013-11-21 1,429
DL16에 달리는 센서와 AB-S52에 달리는 센서가 종류가 다른것인가요?? 다르면 AB-S52에 어떤 센서를 써야되고 여기 파는지좀 알려주세요
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. KR-DL16에서는 센서가 아날로그 타입의 2개의 적외선 부이구요. 결과적으로 AB-S52에 달아야 하는 센서는 AM-IRS4D LT적외선 센서모듈(디지털 4채널)이구요. KR-DL16에 달려 있던 센서는 ADC가 되는 AM-IRS 아날로그 센서입니다. 감사합니다. > > > DL16에 달리는 센서와 AB-S52에 달리는 센서가 종류가 다른것인가요?? > 다르면 AB-S52에 어떤 센서를 써야되고 여기 파는지좀 알려주세요 >
8502 답변완료다음의 설명이 레지스터 및 레지스터를 다루는 함수를 옳게 이해한 것 인지요? 주호석 2013-11-21 1,563
안녕하세요? 다음의 제가 드리는 설명이 말씀드린 제목과 같이 옳게 이해한 것인지를 여쭈어 드리려고 합니다. /* AT91SAM7S256의 레지스터(구조체 포함)가 설정된 헤더 화일 및 레지스터를 사용할 */ /* 수 있도록 미리 설정된 함수를 가지고 있는 헤더 화일을 Include 시킴 */ #include <AT91SAM7S256.h> #include <lib_AT91SAM7S.h> /* AT91SAM7S256의 포트의 0번 Bit 단자를 PBIT0로 정의 */ #define PA0 1<<0 #define PBIT0 PA0 /* AT91SAM7S256의 Peripheral Device들에 대하여 Clock공급을 허용하는 함수, */ /* lib_AT91SAM7S에서 참조 */ //*---------------------------------------------------------------------------- //* \fn AT91F_PMC_EnablePeriphClock //* \brief Enable peripheral clock //*---------------------------------------------------------------------------- void AT91F_PMC_EnablePeriphClock ( AT91PS_PMC pPMC, // \arg pointer to PMC controller unsigned int periphIds) // \arg IDs of peripherals to enable { pPMC->PMC_PCER = periphIds; } /* 함수에 Peripheral Input Output Device의 Base Address 및 0번 비트를 정의한 값을 입력 */ AT91F_PMC_EnablePeriphClock(AT91C_BASE_PIOA,PBIT0); 함수에 입력된 값들이 적용되는 원리에 대한 저의 분석 : 1. 구조체 변수인 AT91PS_PMC는 포인터 변수인 pPMC를 가지고 있으며, 위의 함수에서 pPMC는 AT91C_BASE_PIOA의 Base Address를 가진다. 2. AT91C_BASE_PIOA의 Base Address를 가진 pPMC는 다시 PMC_PCER 레지스터를 가리키고 있으며, 이 레지스터에는 PBIT0의 값이 들어가게 된다. 3. PMC_PCER 레지스터는 컴파일러(IAR ARM Compiler 등)에서 AT91SAM7S256칩을 사용하는 것으로 설정을 할 때 컴파일러가 자동적으로 인식을 하며, 또한 자동적으로 Offset값이 부여가 된다. 위와 같은 설명이 제가 올바르게 이해한 것 인지를 확인해 주시고, 자세한 지적 말씀을 주시면 감사 드리겠습니다. 감사합니다.
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변 드릴께요. > 안녕하세요? > > 다음의 제가 드리는 설명이 말씀드린 제목과 같이 옳게 이해한 것인지를 여쭈어 드리려고 합니다. > > /* AT91SAM7S256의 레지스터(구조체 포함)가 설정된 헤더 화일 및 레지스터를 사용할 */ > /* 수 있도록 미리 설정된 함수를 가지고 있는 헤더 화일을 Include 시킴 */ > #include <AT91SAM7S256.h> > #include <lib_AT91SAM7S.h> > > > /* AT91SAM7S256의 포트의 0번 Bit 단자를 PBIT0로 정의 */ > #define PA0 1<<0 > #define PBIT0 PA0 > > > /* AT91SAM7S256의 Peripheral Device들에 대하여 Clock공급을 허용하는 함수, */ > /* lib_AT91SAM7S에서 참조 */ > //*---------------------------------------------------------------------------- > //* \fn AT91F_PMC_EnablePeriphClock > //* \brief Enable peripheral clock > //*---------------------------------------------------------------------------- > void AT91F_PMC_EnablePeriphClock ( > AT91PS_PMC pPMC, // \arg pointer to PMC controller > unsigned int periphIds) // \arg IDs of peripherals to enable > { > pPMC->PMC_PCER = periphIds; > } > > > /* 함수에 Peripheral Input Output Device의 Base Address 및 0번 비트를 정의한 값을 입력 */ > AT91F_PMC_EnablePeriphClock(AT91C_BASE_PIOA,PBIT0); > > > 함수에 입력된 값들이 적용되는 원리에 대한 저의 분석 : > > 1. 구조체 변수인 AT91PS_PMC는 포인터 변수인 pPMC를 가지고 있으며, 위의 함수에서 pPMC는 > AT91C_BASE_PIOA의 Base Address를 가진다. ==> 우선, AT91C_BASE_PIOA는 AT91SAM7S256.h에 선언되어 있습니다. #define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address ==> 또한, 같은 파일에 PMC의 기본 주소는 아래와 같이 선언되어 있습니다. #define AT91C_BASE_PMC (AT91_CAST(AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address 아래는 AT91PS_PMC의 스트럭쳐입니다. typedef struct _AT91S_PMC { AT91_REG PMC_SCER; // System Clock Enable Register AT91_REG PMC_SCDR; // System Clock Disable Register AT91_REG PMC_SCSR; // System Clock Status Register AT91_REG Reserved0[1]; // AT91_REG PMC_PCER; // Peripheral Clock Enable Register AT91_REG PMC_PCDR; // Peripheral Clock Disable Register AT91_REG PMC_PCSR; // Peripheral Clock Status Register AT91_REG Reserved1[1]; // AT91_REG PMC_MOR; // Main Oscillator Register AT91_REG PMC_MCFR; // Main Clock Frequency Register AT91_REG Reserved2[1]; // AT91_REG PMC_PLLR; // PLL Register AT91_REG PMC_MCKR; // Master Clock Register AT91_REG Reserved3[3]; // AT91_REG PMC_PCKR[3]; // Programmable Clock Register AT91_REG Reserved4[5]; // AT91_REG PMC_IER; // Interrupt Enable Register AT91_REG PMC_IDR; // Interrupt Disable Register AT91_REG PMC_SR; // Status Register AT91_REG PMC_IMR; // Interrupt Mask Register } AT91S_PMC, *AT91PS_PMC; > > 2. AT91C_BASE_PIOA의 Base Address를 가진 pPMC는 다시 PMC_PCER 레지스터를 가리키고 > 있으며, 이 레지스터에는 PBIT0의 값이 들어가게 된다. ==> 아래는 Offset값이네요. 그래서, PMC_SCER이 AT91C_BASE_PMC의 BASE Address가 됩니다. define PMC_SCER (AT91_CAST(AT91_REG *) 0x00000000) // (PMC_SCER) System Clock Enable Register #define PMC_SCDR (AT91_CAST(AT91_REG *) 0x00000004) // (PMC_SCDR) System Clock Disable Register #define PMC_SCSR (AT91_CAST(AT91_REG *) 0x00000008) // (PMC_SCSR) System Clock Status Register #define PMC_PCER (AT91_CAST(AT91_REG *) 0x00000010) // (PMC_PCER) Peripheral Clock Enable Register #define PMC_PCDR (AT91_CAST(AT91_REG *) 0x00000014) // (PMC_PCDR) Peripheral Clock Disable Register #define PMC_PCSR (AT91_CAST(AT91_REG *) 0x00000018) // (PMC_PCSR) Peripheral Clock Status Register #define PMC_MCKR (AT91_CAST(AT91_REG *) 0x00000030) // (PMC_MCKR) Master Clock Register #define PMC_PCKR (AT91_CAST(AT91_REG *) 0x00000040) // (PMC_PCKR) Programmable Clock Register #define PMC_IER (AT91_CAST(AT91_REG *) 0x00000060) // (PMC_IER) Interrupt Enable Register #define PMC_IDR (AT91_CAST(AT91_REG *) 0x00000064) // (PMC_IDR) Interrupt Disable Register #define PMC_SR (AT91_CAST(AT91_REG *) 0x00000068) // (PMC_SR) Status Register #define PMC_IMR (AT91_CAST(AT91_REG *) 0x0000006C) // (PMC_IMR) Interrupt Mask Register > 3. PMC_PCER 레지스터는 컴파일러(IAR ARM Compiler 등)에서 AT91SAM7S256칩을 사용하는 것으로 > 설정을 할 때 컴파일러가 자동적으로 인식을 하며, 또한 자동적으로 Offset값이 부여가 된다. ==> 위에서 셋팅이 되어 있기 때문에, 컴파일러가 그렇게 인식합니다. 오프셋이 위와 같이 주어져 있지요. > > > 위와 같은 설명이 제가 올바르게 이해한 것 인지를 확인해 주시고, 자세한 지적 말씀을 주시면 > > 감사 드리겠습니다. > > > 감사합니다. > ==> 감사합니다.
8501 답변완료Atmega128 문의드립니다. 김능환 2013-11-21 1,326
Atmega128을 사용하는 개발용 보드를 구매하고 싶습니다. RS-232 Port 2개가 Dual로서 FullDuflex로 동작하는 개발 키트가 필요로 합니다. ATmega128, RS-232 Port 2개, full duplex 이 3가지가 만족하는 제품이 있는지 궁금합니다. 만족하는 제품이 없다면 판매하고 계시는 제품 구성을 통하여 저 사양을 만족 시킬수 있는지도 알려 주셨으면 합니다. 답변 부탁드립니다. 수고하세요
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 본사의 ATMEGA128 모듈들은 모두 UART가 2개씩 뽑혀 있습니다. 그런데, 일반적으로 RS-232C 라고 하는 것은 MAX232 계열의 칩들이 붙어 있는 건데, 그것은 AM-128PRO나 AM-128RAM 모듈이나, AM-128USB 모듈이 있습니다. 이 모듈들을 장착한 메인보드들은 AB-M128PRO-A 또는 AB-M128-A 보드 그리고 AB-M128USB 보드가 있습니다. 그칩에 붙어있지 않으면, TTL Level의 UART를 출력합니다. 이는 AM-128PL 칩이 있겠습니다. 이 모듈을 장착한 메인보드는 AB-M128-B 보드가 있습니다. 모두 풀듀플렉스를 지원하도록 제작되어 있습니다. 감사합니다. > > > Atmega128을 사용하는 개발용 보드를 구매하고 싶습니다. > > RS-232 Port 2개가 Dual로서 FullDuflex로 동작하는 개발 키트가 필요로 합니다. > > ATmega128, > > RS-232 Port 2개, > > full duplex > > 이 3가지가 만족하는 제품이 있는지 궁금합니다. > > > > 만족하는 제품이 없다면 판매하고 계시는 제품 구성을 통하여 > > 저 사양을 만족 시킬수 있는지도 알려 주셨으면 합니다. > > 답변 부탁드립니다. > > 수고하세요 >
8500 답변완료ab-m2560 확장 램 (2) 이장훈 2013-11-21 1,386
AM-128RAM 에서는 앞의 소스와 같게 하고 (XMCRA = 0x80; XMCRB = 0x80; 이 빠지고 MCUCR = 0x80; 이 부분이 들어갔습니다.) external SRAM size 를 32768 로 넣었더니 잘 되었습니다. AM-128RAM 은 0x2200 ~ 0x7FFF 를 쓰나요?
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, $1100 - $7FFF 까지 맵핑되어 있으며, 즉, 28kB만 외부 메모리를 사용하고 있습니다. $0000 - $10FF 까지의 4kB는 내부 메모리를 우선 사용하기 떄문입니다. 외부메모리의 기본적인 동작은 MCUCR 의 Bit7 SRE (External SRAM/XMEM Enable) 를 1로 초기화 시켜주면 됩니다. 즉, 말씀하신데로 MCUCR = 0x80으로 하면 되죠. 첨부된 그림은 AM-128RAM 메뉴얼의 일부입니다. 감사합니다. > > > AM-128RAM 에서는 앞의 소스와 같게 하고 > > (XMCRA = 0x80; XMCRB = 0x80; 이 빠지고 > > MCUCR = 0x80; 이 부분이 들어갔습니다.) > > external SRAM size 를 32768 로 넣었더니 잘 되었습니다. > > AM-128RAM 은 0x2200 ~ 0x7FFF 를 쓰나요? >
8499 답변완료AM-DC2-2D 사용시 모터 제어 조주안 2013-11-20 1,382
AM-DC2-2D 를 사용하면서 DC모터의 속도, 위치를 제어하려고 합니다. 제가 가진 모터가 값이 저렴한 일반 DC모터(링크1)인데요, 그냥 8000천원짜리 모터 드라이버(링크2)로 제어하려고 하니 낮은 PWM에는 아예 움직이질 않습니다. 그렇다면 AM-DC2-2D와 같이 사용했을 때, 이 모터에 대한 속도와 위치의 제어는 가능할까요? 그것도 아니라면 인코더 혹은 기어가 포함된 모터를 AM-DC2-2D와 같이 구동시켜야만 제가 원하는 DC모터의 제어가 이루어지는지 건지 궁금합니다. 감사합니다.
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사하빈다. 링크하신 제품에 관한 내용은 본사의 제품이 아니라 잘 알 수가 없네요. 그 내용은 그 해당 제품의 제조사에 문의 바랍니다. 하지만, AM-DC2-2D를 이용할 경우, PWM 제어가 가능합니다. 어떤 DC 모터이든, 최저로 돌릴 수 있는 Duty가 있게 마련입니다. 모터의 최저 기동 토크가 있기 때문입니다. 모터에 따라, 모두 다르죠. 모터의 속도제어는 본 회로만으로 가능하지만, 위치 제어를 하려면, 엔코더가 포함된 모터를 본사의 엔코더 모듈과 함께 사용해야 가능하겠습니다. 감사합니다. > > > AM-DC2-2D 를 사용하면서 DC모터의 속도, 위치를 제어하려고 합니다. > > 제가 가진 모터가 값이 저렴한 일반 DC모터(링크1)인데요, > 그냥 8000천원짜리 모터 드라이버(링크2)로 제어하려고 하니 낮은 PWM에는 아예 움직이질 않습니다. > > 그렇다면 AM-DC2-2D와 같이 사용했을 때, 이 모터에 대한 속도와 위치의 제어는 가능할까요? > > 그것도 아니라면 인코더 혹은 기어가 포함된 모터를 AM-DC2-2D와 같이 구동시켜야만 > 제가 원하는 DC모터의 제어가 이루어지는지 건지 궁금합니다. > > 감사합니다. > >