로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
8508 답변완료am-3axis-v2 에 관한 문의입니다.(2) 변광열 2013-11-24 1,437
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모터의 제어가 이루어지는지 건지 궁금합니다. > > 감사합니다. > >
8498 답변완료ad-encoder 질문 드립니다. 강석일 2013-11-20 1,359
현재 AM-DC2-2D 와 AD-ENCODER를 같이 연결하였습니다. 배워가는 입장이라 올려주신 소스를 보고있지만 잘 모르겠는 부분이 많네요. WinAVR + AVRstudio 를 사용하고 있습니다. 자료실에 올려놓으신 압축파일을 풀어보니 TESTUART와 timer128 두가지가 있더군요. 사실 제가 UART를 아직 배우지 않아서 소스를 봐도 잘 모르겠더라구요. 1) 엔코더값을 측정할수 있는 방법이 TESTUART, timer128 이 두가지로 나뉘는건가요? 2) 그렇다면 UART는 컴퓨터와 통신하여 컴퓨터로 값을 받아내는건지요?
관리자 답변 관리자 · 2013-11-22
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 본 소스에서 TESTUART.c만 보시면 됩니다. 프로젝트만 여시면 그 파일밖에 안보일 텐데, timer128.c 파일은 타이머 테스트 시에 썻던 파일인데, 여기 남아 있었네요. 현재는 UART를 통하여 엔코더를 읽은 데이터를 표시하는 겁니다. 어딘가로 엔코더 읽은 값을 표시해줘야 하니까요. 감사합니다. > > > 현재 AM-DC2-2D 와 AD-ENCODER를 같이 연결하였습니다. > > 배워가는 입장이라 올려주신 소스를 보고있지만 잘 모르겠는 부분이 많네요. > > WinAVR + AVRstudio 를 사용하고 있습니다. > > 자료실에 올려놓으신 압축파일을 풀어보니 TESTUART와 timer128 두가지가 있더군요. > > 사실 제가 UART를 아직 배우지 않아서 소스를 봐도 잘 모르겠더라구요. > > > 1) 엔코더값을 측정할수 있는 방법이 TESTUART, timer128 이 두가지로 나뉘는건가요? > > 2) 그렇다면 UART는 컴퓨터와 통신하여 컴퓨터로 값을 받아내는건지요? >
8497 답변완료ab-m2560 확장 램 이장훈 2013-11-19 1,398
ab-m2560 에 달려있는 atmega 2560에 32킬로바이트 확장램이 달려있는 게 맞나요? 맞다면 코드비전의 메뉴에서 configure project 의 c compiler 부분에서 external SRAM size 에 0을 넣으면 소스가 동작을 하고 external SRAM size 에 32768을 넣으면 소스가 동작을 안하는데 원인을 알 수 있을 까요? 소스 첨부합니다
관리자 답변 관리자 · 2013-11-20
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 32kB 확장 램을 달아 쓰는 방법은 두 가지가 있습니다. 한가지는 0x0000 - 7FFF까지 달아서 쓰고 실제로는 확장 영역 중 0x2200-0x7fff 영역을 추가로 쓰는 것이고, 다른 한 가지는 0x8000 - 0xffff 까지 달아서 쓰는 겁니다. 본사에서는 후자를 선택하여 회로 설계되어 있습니다. 그런데, 코드 비전 코드 마법사에서는 그것을 그렇게 선택하여 쓰는 것이 나와있지 않은 것 같습니다. 그리고, 절대 어드레스 정의해서 쓸 수도 있는 데, 그런 부분들도 빠져 있습니다. 2560 모듈의 제품 메뉴얼에 보면 추가램 사용 방법들이 자세히 설명되어 있으니, 참고 바랍니다. 주로 ICCAVR 기준으로 되어 있으나, 참고하여 보시면 될겁니다. 감사합니다. > > > ab-m2560 에 달려있는 atmega 2560에 32킬로바이트 확장램이 달려있는 게 맞나요? > > 맞다면 코드비전의 메뉴에서 configure project 의 c compiler 부분에서 > > external SRAM size 에 0을 넣으면 소스가 동작을 하고 > > external SRAM size 에 32768을 넣으면 소스가 동작을 안하는데 > > 원인을 알 수 있을 까요? > > 소스 첨부합니다 >
8496 답변완료DL16을 사용한 라인트레이서요 조민성 2013-11-18 1,408
AB-S52 귀사제품으로 라인트레이서를 만들 수 있다고 하셨는데 혹시 저희가 AB-S52로 만든 라인트레이서 소스를 의뢰하면 만들어 주시는지 또 혹시나 저희가 추가적인 기능을 부탁드리면 같이 넣어서 만들어 주시는지 알고싶습니다
관리자 답변 관리자 · 2013-11-20
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 죄송하지만, 해당 소스는 본사에서 제공하는 자료실의 예제 등을 이용하여, 직접 구현하셔야 합니다. 본사에서 고객님의 요구하는 소스 등을 추가로 구현해 드리거나, 하지는 않고 있습니다. 양해 부탁드립니다. 감사합니다. > > > AB-S52 귀사제품으로 라인트레이서를 만들 수 있다고 하셨는데 혹시 저희가 AB-S52로 만든 라인트레이서 소스를 의뢰하면 만들어 주시는지 또 혹시나 저희가 추가적인 기능을 부탁드리면 같이 넣어서 만들어 주시는지 알고싶습니다 >
8495 답변완료Relay 전원공급 보드(4 Ch) AM-RB04-B에 대해 문의드립니다. 주종익 2013-11-18 1,440
AM-RB04-B 전원공급 보드 설명에 보면, 외부전원 220V 혹은 내부전원 12V, 5V를 사용할 수 있다고 나와있습니다. 이 말이, 외부전원과 내부전원 2가지를 같이 사용해야 한다는 건가요? 아니면 외부전원 1개만 혹은 내부전원 1개만 연결해도 작동이 된다는 건가요?
관리자 답변 관리자 · 2013-11-19
안녕하세요? 고객님, 외부전원 쪽으로 (이 때는 점퍼 설정을 다 빼놓아야 합니다.) AC 220V를 넣어서, 각 채널로 AC220V를 넣었다가 말았다가 할 수도 있고, DC 5V나 12V 24V 등을 넣었다가 말았다가 할 수도 있고, 또는 각채널로 넣었다가 말았다가 할 전원 소스를 아답타쪽 입력 12V 또는 내부 전원 5v를 쓸 수도 있다는 말인데요. 이 때는 점퍼 설정 2개를 해야 합니다. 감사합니다. > > > AM-RB04-B 전원공급 보드 설명에 보면, > > 외부전원 220V 혹은 내부전원 12V, 5V를 사용할 수 있다고 나와있습니다. > > 이 말이, 외부전원과 내부전원 2가지를 같이 사용해야 한다는 건가요? > > 아니면 외부전원 1개만 혹은 내부전원 1개만 연결해도 작동이 된다는 건가요? >
8494 답변완료lib_AT91SAM7S.h 헤더 파일의 문법 질문 주호석 2013-11-17 1,446
안녕하세요? IAR ARM Compiler 에서 lib_AT91SAM7S.h 헤더 파일을 Include 시켜서 프로그래밍을 하던 도중, 한 가지 의문이 생겼습니다. void AT91F_PIO_CfgPullup( AT91PS_PIO pPio, // \arg pointer to a PIO controller unsigned int pullupEnable) // \arg enable pullup on PIO { // Connect or not Pullup pPio->PIO_PPUDR = ~pullupEnable; pPio->PIO_PPUER = pullupEnable; } 위와 같은 PIO 함수를 사용할 때, 왜 "AT91F_PIO_CfgPullup(PIO_PPUER, LED);" 이런 식으로 사용을 하지 않고 "AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, LED);" 이렇게 설정을 하여 사용을 하는 것 인지요? 또한 "AT91C_BASE_PIOA"는 어떠한 역할을 하는 레지스터 인지요? (실제로 "AT91F_PIO_CfgPullup(PIO_PPUER, LED);" 의 식으로 설정을 하여 Compile을 하려고 하였을 때, PIO_PPUER은 정의가 되지 않은 레지스터라는 에러 메시지가 출력이 되었습니다.) 자세한 설명을 해 주시면 감사 드리겠습니다. 감사합니다.
관리자 답변 관리자 · 2013-11-17
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 답변 드릴께요. > > 안녕하세요? > IAR ARM Compiler 에서 lib_AT91SAM7S.h 헤더 파일을 Include 시켜서 > 프로그래밍을 하던 도중, 한 가지 의문이 생겼습니다. > > > void AT91F_PIO_CfgPullup( > AT91PS_PIO pPio, // \arg pointer to a PIO controller > unsigned int pullupEnable) // \arg enable pullup on PIO > { > // Connect or not Pullup > pPio->PIO_PPUDR = ~pullupEnable; > pPio->PIO_PPUER = pullupEnable; > } > > > 위와 같은 PIO 함수를 사용할 때, 왜 "AT91F_PIO_CfgPullup(PIO_PPUER, LED);" 이런 식으로 > 사용을 하지 않고 "AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, LED);" 이렇게 설정을 하여 사용을 > 하는 것 인지요? 또한 "AT91C_BASE_PIOA"는 어떠한 역할을 하는 레지스터 인지요? ==> 대부분의 AT91F_PIO 함수들은 AT91C_BASE_PIOA 라는 주소를 첫번째 인수로 갖습니다. 기본적으로, 아래와 같이 됩니다. // PIO 클럭을 활성화 시킨다. AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ; // LED 로 연결된 PIO 를 출력으로 설정한다. AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ; // LED0 출력을 0로 한다. AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED0) ; // LED1 출력을 1로 한다. AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1) ; 여기서, PIOA를 기본주소로 하여, 각 내부 함수에서 offset 값으로 레지스터들을 읽어 들이는 식으로 되어 있습니다. 그래서 그렇습니다. 그리고, 뒤의 인수가 대부분 바로 실제 셋팅하거나 하는 값입니다. 그래서, 꼭 ATMEL에서 제공해주는 함수를 사용하는 한은 AT91C_BASE_PIOA 라고 해야 합니다. 만약, 직접 만들어서 해보고 싶다면, 데이터시트를 보고 레지스터를 직접 셋팅해도 됩니다. 감사합니다. > (실제로 "AT91F_PIO_CfgPullup(PIO_PPUER, LED);" 의 식으로 설정을 하여 Compile을 하려고 > > 하였을 때, PIO_PPUER은 정의가 되지 않은 레지스터라는 에러 메시지가 출력이 되었습니다.) > > > 자세한 설명을 해 주시면 감사 드리겠습니다. > > 감사합니다. >