로그인 | 회원가입 | 주문 조회
총 10,748개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
4853 답변완료AT91SAM7S256에 대해 레지스터 문의합니다. 정의종 2010-04-05 1,386
프로그램 레지스터 보면, 상태 레지스터 말고,, 예를 들면 인터럽트 허용, 금지, 상태 레지스터 이렇게 나누어져 있던데.. 허용과 금지를 둘다 enable시키면 어떤것이 우선인지요?? 물론 만든 제조사 atmel에서 그렇게 만든거겠지만, 혹시 아시나 싶어 문의드립니다. 그리고, 소스예제에 보면, 1) pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS; 2) pUSART->US_CR = AT91C_US_RXEN | AT91C_US_TXEN; IAR컴파일러 경우, 이런식으로 같은 레지스터에 연속하여 다른 값을 입력하는 경우, 1)의 값은, 없어지는게 맞는데.. 동작은 잘되는 걸로 봐서 무슨 특이 점이 있는건지..궁금합니다.
관리자 답변 NEWTC · 2010-04-05
안녕하세요 한개의 레지스터를 3개로 분활해 놓았다고 생각 하시면 되고요 상태 허용 금지 로 나눠것 맞습니다. >허용과 금지를 둘다 enable시키면 어떤것이 우선인지요?? 이질문에 이상합니다. 동시에 셋이 가능합니까? 두개 금지와 허용 레지스터를 동시에 라이트하는것이 불가능합니다. ^^ 1. 허용rge = 금지reg = 0x0000 0000; 2. 금지reg = 0x0000 0000; 허용rge= 0x0000 0000; 즉 1.2나 문맥상 동일합니다. 마지막에 쓰여지 레지스터를 인식하다는 말입니다. 수고하세요 >프로그램 레지스터 보면, 상태 레지스터 말고,, > >예를 들면 인터럽트 허용, 금지, 상태 레지스터 이렇게 나누어져 있던데.. > >허용과 금지를 둘다 enable시키면 어떤것이 우선인지요?? > >물론 만든 제조사 atmel에서 그렇게 만든거겠지만, 혹시 아시나 싶어 문의드립니다. > >
4852 답변완료스텝모터관련 답변부탁드립니다. 강민혁 2010-04-05 1,410
부산대학교 전자전기공학부학생입니다. 이번에 텀 프로젝트 과제로 논리회로 설계를 이용하여 10상태의 출력을 내는 시스템을 만들어야합니다. 주제는 자유주제이고 저희가 생각한것이 보드게임인데 어떤 출력이 들어가면 그 출력만큼 스텝모터를 제어하여서 예를들어 동그란 보드게임판이 있으면 실로 보드게임 판 전체를 연결해서 그 실에 말을 연결하고 모터의 회전하는 각도를 조절하여 보드판 위의 말을 움직이게 하는것입니다. 아니면 모터에 바퀴를 연결하여 모터가 말이 되어서 움직이게 할려고 합니다. 아직 2학년이라서 그런 시스템에 대한 이해가 아직 많이 부족합니다. 제가 듣기로는 스템모터와 그것을 제어하는 모듈이 필요하다고 들엇는데.. 전체적인 견적과 시스템에 대한 설명도 같이 해주시면 정말 사드리겠습니다.
관리자 답변 NEWTC · 2010-04-05
안녕하세요 >이번에 텀 프로젝트 과제로 논리회로 설계를 이용하여 10상태의 출력??? 논리회로 설계 라면 게이트나 플립플롭으로 제작해야 한다.?라는 것이 아닐까요? 저희쪽 mcu 마이컴 에 논리언어 ? C 를 짜서 마이컴에 넣어서 동작 시키는 것입니다. 비슷하다면 비슷할수도 있지만,, 프로젝트 과제에 대해서 알아보시길 바랍니다. 제품소개에 가시면 라인트래이서를 참고 하시면 될것 같고요 하드웨어적으로만 구동 되는 것이 아닙니다. 코드를 다운로드하여 사용해야 합니다. 수고하세요 >부산대학교 전자전기공학부학생입니다. >이번에 텀 프로젝트 과제로 논리회로 설계를 이용하여 10상태의 출력을 내는 시스템을 만들어야합니다. >주제는 자유주제이고 >저희가 생각한것이 >보드게임인데 어떤 출력이 들어가면 그 출력만큼 스텝모터를 제어하여서 >예를들어 동그란 보드게임판이 있으면 실로 보드게임 판 전체를 연결해서 그 실에 말을 연결하고 >모터의 회전하는 각도를 조절하여 보드판 위의 말을 움직이게 하는것입니다. 아니면 모터에 바퀴를 연결하여 모터가 말이 되어서 움직이게 할려고 합니다. >아직 2학년이라서 그런 시스템에 대한 이해가 아직 많이 부족합니다. >제가 듣기로는 스템모터와 그것을 제어하는 모듈이 필요하다고 들엇는데.. >전체적인 견적과 시스템에 대한 설명도 같이 해주시면 정말 사드리겠습니다. >
4851 답변완료AM-128PRO 제품 구매 관련 문의 드립니다. 배해한 2010-04-05 1,442
안녕하세요. 귀사의 판매 제품중 AVR MEGA 128 모듈(AM-128PRO)을 반조립 상태에서 구매할 수 있을까요? 제가 원하는 형태는 기본 IC, 수동소자만 조립죈 상태로 완제품에서 2열핀헤드, 각종소켓이 조립되지 않은 상태입니다. 만약 구입 가능하다면 어떤 경로로 가능한지 알려주시면 감사하겠습니다. 수고하세요.
관리자 답변 NEWTC · 2010-04-05
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사드립니다. 구매 가능하시구요. 4개 단위로 주문이 가능합니다. 즉, 4개, 8개, 12개....이런 식입니다. 그리고, 양이 많아지게 되면, 필요한 부분만 주문하여 생산 가능합니다. 소량의 경우 가격은 24,200원이 되구요.(소량의 경우 생산 비용이 많이 발생합니다.) 대량의 경우에는 기존 AM-128PRO와 동일한 가격으로 공급이 가능합니다. 본사로 전화(02-704-4774) 연락 주시면 되구요. 수량, 조립상태, 납기 등을 정확히 말씀 나누시면 됩니다. 수고하세요. >안녕하세요. >귀사의 판매 제품중 AVR MEGA 128 모듈(AM-128PRO)을 반조립 상태에서 구매할 수 있을까요? >제가 원하는 형태는 >기본 IC, 수동소자만 조립죈 상태로 >완제품에서 2열핀헤드, 각종소켓이 조립되지 않은 상태입니다. >만약 구입 가능하다면 어떤 경로로 가능한지 알려주시면 감사하겠습니다. >수고하세요. >
4850 답변완료질문이있습니다^^ 김영훈 2010-04-05 1,320
안녕하세요! 다름이아니고 대학교에서 프로젝트를 처음 하고있는 학생인데요.. 프로젝트가 차량도난방지입니다 mcu는 AM-128PL사용하고있습니다 센서 <-----> mcu <------>AM-RFMOD AM-RFMOD <------>AD-USBSERIAL<------>pc 이런 시스템을 구성하려고 부품을 다 구입을해놓은상태인데요... 1번째 질문은.. 처음 맞닥드리는 문제점이... 전원관련 문제더라구요.. mcu부분에 5v 전원을 넣게되있던데.. 5v를 어떻게 맞춰야할지를 모르겠더라구요... 6v 또는 4.5v 로도 사용이 가능한가요? 2번째 질문은.. mcu에 전원을 넣어주면.. mcu부분에있는 RF모듈에는 전원이 같이들어가는건가요?아니면 따로 전원을 넣어줘야하나요? 3번째 질문은.. PC와 연결되는쪽에 RF모듈의 전원문제인데요.. AM-RFMOD <------>AD-USBSERIAL<------>pc 이렇게 되어있을때 RF모듈에 전원을 연결을 해줘야하는건가요? 아니면 자동으로 pc에서 전원을 끌어다 사용하나요? 너무 두서없이 질문드려서 죄송합니다ㅠ.ㅠ 자세한 답변 부탁드립니다^^
관리자 답변 NEWTC · 2010-04-05
안녕하세요 1. 모듈 형태의 제품은 직접 5볼트 전압 맞추어 넣어줘야 하며, 키트로 판매되고있는 제품은 메인보드에서 전압을 5볼트로 변경시켜주는 레큘레이터가 있습니다. 2. 키트 형태의 제품에는 메인보드를 보시면 rf모듈들과 연결이 가능하도록 4핀 컨넥터가 있습니다. 전원도 같이 넘어갑니다. 3. AD-USBSERIAL는 usb 전원을 사용합니다. 그리고 4핀 콘넥터와 rf 연결시 전원도 넘어갑니다. AD-USBSERIAL연결법은 usb로 연결, 4핀 컨넥터 와 rf 모듈을 연결하시면 됩니다. 수고하세요 >안녕하세요! >다름이아니고 대학교에서 프로젝트를 처음 하고있는 학생인데요.. >프로젝트가 차량도난방지입니다 >mcu는 AM-128PL사용하고있습니다 >센서 <-----> mcu <------>AM-RFMOD >AM-RFMOD <------>AD-USBSERIAL<------>pc >이런 시스템을 구성하려고 부품을 다 구입을해놓은상태인데요... > >1번째 질문은.. >처음 맞닥드리는 문제점이... >전원관련 문제더라구요.. >mcu부분에 5v 전원을 넣게되있던데.. >5v를 어떻게 맞춰야할지를 모르겠더라구요... >6v 또는 4.5v 로도 사용이 가능한가요? > >2번째 질문은.. >mcu에 전원을 넣어주면.. >mcu부분에있는 RF모듈에는 전원이 같이들어가는건가요?아니면 따로 전원을 넣어줘야하나요? > >3번째 질문은.. >PC와 연결되는쪽에 RF모듈의 전원문제인데요.. >AM-RFMOD <------>AD-USBSERIAL<------>pc >이렇게 되어있을때 RF모듈에 전원을 연결을 해줘야하는건가요? >아니면 자동으로 pc에서 전원을 끌어다 사용하나요? > >너무 두서없이 질문드려서 죄송합니다ㅠ.ㅠ >자세한 답변 부탁드립니다^^
4849 답변완료스텝모터관련 질문입니다. 이기우 2010-04-05 1,357
안녕하세요 뉴티씨 홈페이지나 카페 통해서 정말 도움 많이 받고있습니다. 감사드리구요 제가 스텝모터랑 LED를 동시에 제어해야하는데 스텝모터가 속력이 굉장히 최대한 빠르게 나와주어야합니다. 여기서 판매하는 스텝모터와 구동드라이버를 사용한다면 속력을 어느정도까지 낼수있는지와 그 빠른속력으로 도는 와중에도 LED의 점등이 제어되야하거든요 0도일때만 켜지고 나머지는 꺼져야합니다. 도는 와중에도 0도 즉 12시 방향 일때만 led가 켜져야 합니다. 여기서 끝이 아니라 스위치를 누르면 90도씩 옮겨가야합니다. 스위치를 한번 누르면 0도에서만 켜지던놈이 90도에서만 켜지고 또 누르면 90도에서만 켜지던놈이 180도 에서만 켜지고 3000rpm 이상은 나와주어야하는데 이런 제어가 가능할지 가능하다면 카페에 올려주신 구동소스에 led 소스를 어떤식으로 첨가해주어야하는지 탈조를 피하려면 어떻게 해야하는지 자세한 답변 부탁드립니다^^ 너무 막무가내로 질문드려서 죄송합니다.
관리자 답변 NEWTC · 2010-04-05
안녕하세요 일반적인 스텝모터의 최대속도는 2400rpm 정도입니다. 그이상의 탈조가 일어납니다. 원하시는 3000rpm 이상은 잘없는 것로 알고 있습니다. 스텝모터는 한바퀴 클럭수가 정해져있어 90 180... 원하는 회전만큼이동 시킬수 있습니다. 아래 코드 시퀸스는 구현가능하고요 스텝모터에 속도는 원하시는 만큼 나오지 않습니다. 제공되는 예제코드외에는 코드수정을 해드릴지 않습니다. 직접 구현해야되는 부분입니다. 수고하세요 >안녕하세요 > >뉴티씨 홈페이지나 >카페 통해서 정말 도움 많이 받고있습니다. >감사드리구요 > >제가 스텝모터랑 LED를 동시에 제어해야하는데 >스텝모터가 속력이 굉장히 최대한 빠르게 나와주어야합니다. > >여기서 판매하는 스텝모터와 구동드라이버를 사용한다면 >속력을 어느정도까지 낼수있는지와 > >그 빠른속력으로 도는 와중에도 >LED의 점등이 제어되야하거든요 > >0도일때만 켜지고 나머지는 꺼져야합니다. >도는 와중에도 0도 즉 12시 방향 일때만 led가 켜져야 합니다. >여기서 끝이 아니라 >스위치를 누르면 90도씩 옮겨가야합니다. > >스위치를 한번 누르면 0도에서만 켜지던놈이 90도에서만 켜지고 >또 누르면 90도에서만 켜지던놈이 180도 에서만 켜지고 > >3000rpm 이상은 나와주어야하는데 >이런 제어가 가능할지 >가능하다면 >카페에 올려주신 구동소스에 led 소스를 어떤식으로 첨가해주어야하는지 >탈조를 피하려면 어떻게 해야하는지 > >자세한 답변 부탁드립니다^^ >너무 막무가내로 질문드려서 죄송합니다. > > > > > >
4848 답변완료ATMS-128v1에 관련해서 질문 드립니다. 정대철 2010-04-04 1,461
얼마전에 ATMS-128 v1을 구입하였는데요 이 모듈의 사용 설명서를 보면, 모델명은 SMD ATmega128 module인데 구성품이라고 첨부된 그림에 chip을 직접 보면 ATMEGA2561 이라고 적혀있거든요? ICC avr을 사용하거나 할때 atmega128(please see note)에 체크를 해야 하나요, 아니면 atmega2561에 해야 하는건가요?? 그리고 ATMS-128v1을 보면 clock에 16MHz가 있고 CPU 클럭은 8Mhz( 16Mhz: optional ) 이던데요 AVR 강좌에서 icc AVR 설정 하면서 11.059Mhz를 적어주는 곳에 어떻게 넣어야 하나요? 기본 클럭을 사용한다고 하면요. 감사합니다.
관리자 답변 NEWTC · 2010-04-04
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 구매하신 모듈은 본사의 모듈이 아닙니다. 제조사로 문의하여 주시기 바랍니다. 하지만, ICCAVR 관련된 질문에서 답변하여 드리죠. 땜하여 사용하시는 칩에 따라 다릅니다. 실제로 어떤 칩을 땜하여 사용하시는 지를 보고 선택하여 쓰셔야 겠습니다. 클럭도 마찬가지구요. 본 게시판은, 본사 고객님들에게 뉴티씨 제품에 관한 질문에 답해 드려서, 보다 편리한 사용을 도와 드리기 위한 게시판입니다. 타사 제품에 관한 답변은 저희가 할 수 있는 영역을 벗어나고, 저희가 답변하는 것도 도리가 아닌 것 같습니다. 제조사로 문의하여 주시기 바랍니다. 수고하세요. >얼마전에 ATMS-128 v1을 구입하였는데요 > >이 모듈의 사용 설명서를 보면, 모델명은 SMD ATmega128 module인데 > > >구성품이라고 첨부된 그림에 chip을 직접 보면 ATMEGA2561 이라고 적혀있거든요? > >ICC avr을 사용하거나 할때 atmega128(please see note)에 체크를 해야 하나요, 아니면 atmega2561에 해야 하는건가요?? > >그리고 ATMS-128v1을 보면 clock에 16MHz가 있고 CPU 클럭은 8Mhz( 16Mhz: optional ) 이던데요 > >AVR 강좌에서 icc AVR 설정 하면서 11.059Mhz를 적어주는 곳에 어떻게 넣어야 하나요? 기본 클럭을 사용한다고 하면요. > >감사합니다.
4847 답변완료안녕하세요 정혜현 2010-04-03 1,482
안녕하세요 제가 공부를해보았는데 확실한지모르겠어서요 ㅜㅜ 주위에 물어볼사람이 없어서 이렇게 물어봅니다. 죄송합니다. ㅜㅜ 답변조금만해주세용 ㅜㅜ LM35DZ 를 이용해서 온도를 측정하고자 합니다. OPAMP를 이용해 10배 증폭을 하고자 합니다. 증폭비와 레퍼런스전압과 관계가 있나요? 레퍼런스전압에대해 정확한 이해를 잘 못하겠습니다.ㅜㅜ 레퍼런스는 어떻게 해야하는건가요 ㅜㅜ? //ADC initialize // Conversion time: 75uS void adc_init(void) { ADCSRA = 0x00; //ADC비 활성화 ADMUX = 0x00; //이거는 INPUT을 ADC0 핀에서 받음. //외부의 AREF단자로 입력된 전압이용 ACSR = 0x80; /ACSR의 의미를 모르겠습니다. ADCSRA = 0xC6; //11000110 ->ADC활성화&ADC변환시작&단일모드&64Division } adc_init()함수에서 질문입니다. 1. 맨처음에 ADCSRA = 0x00 이렇게 해놓고 왜 4번째줄에서 ADCSRA= 0xC6을 또 선언하나요? 그냥 4번째줄것만 선언해주면되지않나요? 전 freerun모드를 실행하고자하는데 그럼 11100110 즉 E6로 바꿔주면되는거죠? 2. ACSR의 의미를 모르겠습니다 . ADC에 관한 파워포인트자료에 나와있지가 않네요..ㅜㅜ // 입력으로 들어오는 채널의 ADC를 스타트 시킨다. void startConvertion(unsigned char ch) { ADCSRA = ADCSRA & 0x3f; ADMUX = 0x60 | (ch & 0x0f); ADCSRA = ADCSRA | 0xc0; } 3. 진행순서가 main 에서 adc_init()한다음에 startConvertion이함수로오는걸로 알고있는데 그럼 ADCSRA=ADCSRA & 0x3f 자나요 그럼 처음에 이미 기존에 맨 위에서 init함수에서 ADCSRA = 0xC6; 이렇게 선언해줬으니까 기존 11000110 * 0x3f =11000110 *111111 =11000110 그럼 결국 기존의 값이 아닌가요? 왜 한번 더 해주는거죠 ? 4.ADMUX = 0x60 | (ch & 0x0f); main함수에서 starConvertion(0) 0부터 7까지 호출하잖아요 왜 해주는것인가요? 숫자에 따라 무슨차이가나는건가요 ADMUX를 변경해주려고 하는건가요? 그럼 만약 만약에 ch를 0으로 받고 그다음에 1111 곱해주고 그다음에 1100000더해주는건가요? 왜 이런 과정을 거쳐서 main함수에서 i 0부터 7에 따라 값을 이렇게 바꿔주는건가요? 그냥 ADMUX초기화 한값으로 그대로 놓으면 되는거 아니에요? 5. 왜 또 ADCSRA = ADCSRA | 0xc0;이렇게 선언해주나요? 첫번째줄에서 결국 그대로 하면 11000110 이 나왔는데 그럼 여기에 11000000을 더해주는건가요? 그럼 11000110 결국 또 똑같은거 아닌가요? 그렇다면 구지 왜 해주는거죠 ? // startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다. unsigned char readConvertData(void) { volatile unsigned char temp; while((ADCSRA & 0x10)==0); ADCSRA = ADCSRA | 0x10; temp = ADCL; temp = ADCH; ADCSRA = ADCSRA | 0x10; return temp; } 6번 솔직히 readConvertData함수는 전체적으로 잘 이해가 가질않습니다.. ㅜㅜ temp=ADCL; temp=ADCH; 이렇게 하는지도 잘모르겠습니다ㅜㅜ 그리고 왜 ADCSRA | 0X10; 을 왜 두번써주는지도 모르겟꾸요 그리고 왜 하는지도 모르겠구요 while((ADCSRA & 0x10)==0); 이함수는 공부를 해보아도 전체적으로 이해가 잘안갑니다 ... void main(void) { volatile unsigned char i, temp; init_devices(); //insert your functional code here... printf(" \\n\\n\\rADC test program...\\n\\r"); PORTG = 0x0f; delay(1000); PORTG = 0x00; PORTF = 0x00; while(1){ for(i=0; i<8; i++){ startConvertion(i); // Left sensor Converting temp = readConvertData(); printf("ch %d : %d\\n\\r", i, temp); } PORTG ++; delay(600); printf("\\n\\r"); } } 7.//insert your functional code here... 이부분에 저는 그럼 그냥 계산에서 그 전압출력을 온도로 바꿔줄수있는 식을 써넣으면되는건가요 ? 이번에 정말 마음먹고 잘해보고싶었는데 AVR강의도 듣고 datasheet도 보고 여기서 나온 강의자료를 봐도 잘이해가안가는데 물어볼 사람은없고 죄송해요 조금만 도와주세요 ㅜㅜ ;
관리자 답변 NEWTC · 2010-04-04
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 답변하여 드릴께요. >안녕하세요 >제가 공부를해보았는데 확실한지모르겠어서요 ㅜㅜ >주위에 물어볼사람이 없어서 이렇게 물어봅니다. 죄송합니다. ㅜㅜ 답변조금만해주세용 ㅜㅜ >LM35DZ 를 이용해서 온도를 측정하고자 합니다. >OPAMP를 이용해 10배 증폭을 하고자 합니다. >증폭비와 레퍼런스전압과 관계가 있나요? ==> 우선, AVR에서는 ADC가 크게 두 가지 방법이 있습니다.싱글포인트 입력 방법고, 디퍼렌셜 입력(2지점 사이전압으로 하는) 방법입니다. 디퍼렌셜 입력의 경우, AVR 내부에서 200배 등의 전압 증폭도 가능합니다. 즉, 복잡한 하드웨어를 생략하고 콘덴서 마이크 정도는 직접 입력받을 수 있다는 말이 됩니다. 싱글 포인트 입력 방법이 보통인데요. 0~AREF 까지의 전압사이의 값을 AD 컨버팅 하여, 받게 됩니다. AREF는 그런 의미이지요. 즉, 본사의 보드를 사용할 경우에는 기본적으로는 5V에 AREF가 붙어있게 됩니다. 그래서, 5V를 최대 1024(0~1023)단계로 나눈 값중 하나를 출력하게 되겠지요. 하지만, 출력되어 있는 AREF 핀구멍에 3.3V를 연결하면 AREF가 3.3V에 붙게 되어서, 0~3.3V 사이의 값을 1024 단계로 출력하게 됩니다. 이 때, Sampe & Hold 회로가 내장되어 있음을 인식하세요. >레퍼런스전압에대해 정확한 이해를 잘 못하겠습니다.ㅜㅜ >레퍼런스는 어떻게 해야하는건가요 ㅜㅜ? ==> 본사의 보드를 사용한다면, AREF가 풀업되어 있어서, 그냥 두면 5V로 연결되지만, 모듈만 쓴다면, 연결이 되어 있지 않으므로, 별도로 연결하여 주어야 합니다. 위에서 답한 것을 참고하세요. 쉽게 말해서, AREF는 ADC의 변환 범위를 정해 준다고 보면 되겠습니다. 혹여나, 그 값을 넘어서는 값들에 대해서는 AVR은 최대 값으로 인식하여 출력하게 됩니다. 싱글포인트 입력시에는 0~AVCC, 0~AREF, 0~Internal Reference Voltage(보통 2.56V) 중 하나를 선택하여 쓸 수 있습니다. 다만, AREF핀에 외부 전압이 가해지고 있을 때는 반드시 비교하는 전압 소스로 AREF만 선택해야 합니다. 만약, AVCC나 Internal 로 선택하게 되면, 쇼트가 되어 칩이 망가지게 될 수도 있습니다. 반드시 이 점을 주의하세요. 따라서, AVCC나 Internal로 선택하여 사용시에는 반드시 AREF에 전압을 연결하시면 안됩니다. 이 경우 노이즈 정밀도를 좋게 하여 주기 위하여, AREF와 GND 사이에 104와 같은 Capacitor 를 연결하여 주는 것도 좋은 방법입니다. > >//ADC initialize >// Conversion time: 75uS >void adc_init(void) >{ > ADCSRA = 0x00; //ADC비 활성화 > ADMUX = 0x00; //이거는 INPUT을 ADC0 핀에서 받음. > //외부의 AREF단자로 입력된 전압이용 > ACSR = 0x80; /ACSR의 의미를 모르겠습니다. > ADCSRA = 0xC6; //11000110 ->ADC활성화&ADC변환시작&단일모드&64Division >} > > >adc_init()함수에서 질문입니다. > > >1. 맨처음에 ADCSRA = 0x00 이렇게 해놓고 왜 4번째줄에서 ADCSRA= 0xC6을 또 선언하나요? >그냥 4번째줄것만 선언해주면되지않나요? 전 freerun모드를 실행하고자하는데 그럼 >11100110 즉 E6로 바꿔주면되는거죠? ==> ADC를 처음에 비 활성화 한 후에, 나중에 모든 설정을 끝 낸 후에 ADC를 활성화 해주는 것인데요. 물론, 고객님의 말처럼 해도 동작은 문제 없겠지만, 그래도 생길 수 있는 오류를 막아주자는 의도로 쓰여진 코드입니다. 시스템 초기화 시에 인터럽트를 막아놨다가, 다 초기화 하면 인터럽트를 활성화 하는 것과 같은 의도지요. > >2. ACSR의 의미를 모르겠습니다 . ADC에 관한 파워포인트자료에 나와있지가 않네요..ㅜㅜ ==> 모든 것은 데이터시트를 참고하세요. 강의 자료는 그를 기초로 하여 작성된 것이니까요. 이렇게 해 두면, Comparator를 끄게 되고, 이는 전력 소모를 막아줍니다. 그리고, IDLE 모드로 진입시에도 만약 ADC가 켜져 있으면, 자동으로 컨버전을 시작하게 되죠. 또한, 이를 통해서, 필요없는 기능을 끄게 되어서, 노이즈 부분에서도 약간의 향상을 기대합니다. > > >// 입력으로 들어오는 채널의 ADC를 스타트 시킨다. >void startConvertion(unsigned char ch) >{ > ADCSRA = ADCSRA & 0x3f; > ADMUX = 0x60 | (ch & 0x0f); > ADCSRA = ADCSRA | 0xc0; >} > >3. 진행순서가 main 에서 adc_init()한다음에 startConvertion이함수로오는걸로 알고있는데 >그럼 ADCSRA=ADCSRA & 0x3f 자나요 그럼 처음에 이미 기존에 맨 위에서 init함수에서 >ADCSRA = 0xC6; 이렇게 선언해줬으니까 기존 11000110 * 0x3f >=11000110 *111111 =11000110 그럼 결국 기존의 값이 아닌가요? 왜 한번 더 해주는거죠 ? ==> 컨버전 모드에는 Single Conversion과 Free running 모드가 있는 데, 여기서 ADCSRA의 D5인 ADFR 값에 의해 싱글 컨버전으로 선택되어 있죠? 싱글 컨버전 시에는 컨버전을 시작하기 전에 반드시 채널을 선택합니다. 우선, 기존의 ADC 변환을 종료한 후에, ADC 자체 기능도 OFF 시켜놓고, 채널을 변경하고, 다시 ADC를 Enable 하는 수순을 밟고 있음을 알 수 있습니다. 그리고, 자세히 보면, 11000110 * 0x3f = 00000110 이 됩니다. 그 후 채널 변경하고, 그런 후에, 다시 00000110 + 11000000 = 11000110을 해서, ADC를 켜고 시작합니다. > > >4.ADMUX = 0x60 | (ch & 0x0f); >main함수에서 starConvertion(0) 0부터 7까지 호출하잖아요 왜 해주는것인가요? >숫자에 따라 무슨차이가나는건가요 ADMUX를 변경해주려고 하는건가요? >그럼 만약 만약에 ch를 0으로 받고 그다음에 1111 곱해주고 그다음에 1100000더해주는건가요? >왜 이런 과정을 거쳐서 main함수에서 i 0부터 7에 따라 값을 이렇게 바꿔주는건가요? >그냥 ADMUX초기화 한값으로 그대로 놓으면 되는거 아니에요? ==> 그럼요. 8개 채널을 모두 컨버전 하여 그 값을 보고자 합입니다. 그냥, 8개 채널을 다 하는 예제를 준거죠. 하지만, 한 채널만 쓴다면, 굳이 이 과정은 필요 없겠습니다. > >5. 왜 또 ADCSRA = ADCSRA | 0xc0;이렇게 선언해주나요? >첫번째줄에서 결국 그대로 하면 11000110 이 나왔는데 그럼 여기에 11000000을 더해주는건가요? >그럼 11000110 결국 또 똑같은거 아닌가요? 그렇다면 구지 왜 해주는거죠 ? ==> 아까 설명했죠? 채널을 변경했으니, 다시 ADC를 시작하라는 명령입니다. > > > >// startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다. >unsigned char readConvertData(void) >{ > volatile unsigned char temp; > while((ADCSRA & 0x10)==0); > ADCSRA = ADCSRA | 0x10; > temp = ADCL; > temp = ADCH; > ADCSRA = ADCSRA | 0x10; > return temp; >} > > >6번 솔직히 readConvertData함수는 전체적으로 잘 이해가 가질않습니다.. ㅜㅜ >temp=ADCL; >temp=ADCH; >이렇게 하는지도 잘모르겠습니다ㅜㅜ >그리고 왜 ADCSRA | 0X10; 을 왜 두번써주는지도 모르겟꾸요 그리고 왜 하는지도 모르겠구요 >while((ADCSRA & 0x10)==0); > >이함수는 공부를 해보아도 전체적으로 이해가 잘안갑니다 ... ==> 이부분 좋은 질문인데요. 데이터 시트를 보지 않으면 이해할 수가 없습니다. 데이터시트에는 ADC 값을 받을 때, 반드시 ADCL을 받고서 다음 ADCH를 받도록 되어 있습니다. 여기서는 ADCL 의 값을 무시하고, ADCH만을 사용하기 위해서 두번 받은 겁니다. 그렇게 하지 않으면, 값을 받을 수 없으니까요. 소스를 자세히 보면, ADMUX 안에 있는 ADLAR 이라는 비트 즉, D5에 1을 주고 있습니다. 이것은 Left adjusted 즉, 왼쪽으로 정렬해서, 값을 보여줍니다. 이 말은, 하위 2비트를 버려버리기 위해서, 상위 8비트만 쓰기 위해서 16비트 변수에 10비트의 값을 받아서, 상위 8비트만 쓰기 위해서 소스 상에서 왼쪽 정렬했다는 말입니다. 그러고서는 temp에 그 상위 8비트를 받아서, 넘겨주는 구조입니다. >void main(void) >{ > volatile unsigned char i, temp; > > init_devices(); > //insert your functional code here... > printf(" \\n\\n\\rADC test program...\\n\\r"); > PORTG = 0x0f; > delay(1000); > PORTG = 0x00; > PORTF = 0x00; > while(1){ > for(i=0; i<8; i++){ > startConvertion(i); // Left sensor Converting > temp = readConvertData(); > printf("ch %d : %d\\n\\r", i, temp); > } > PORTG ++; > delay(600); > printf("\\n\\r"); > > } >} >>7.//insert your functional code here... > 이부분에 저는 그럼 그냥 계산에서 그 전압출력을 온도로 바꿔줄수있는 식을 써넣으면되는건가요 ? ==> 아니죠......그건 while문 안에 있는 ADC 값을 읽어와서 printf 하고 있잖아요? 그 printf 하는 부분 바로 전에 변환해서 printf 하면 되겠네요. 열심히 공부하세요. 수고하세요. > > >이번에 정말 마음먹고 잘해보고싶었는데 >AVR강의도 듣고 datasheet도 보고 여기서 나온 강의자료를 봐도 잘이해가안가는데 >물어볼 사람은없고 죄송해요 조금만 도와주세요 ㅜㅜ > > > > > > > > > > >;
4846 답변완료 AB-M16-B와 AM-MS2 그리고 SM9K스탭 모터에 관해 문의 김태현 2010-04-03 1,756
아래 코드에서 원점을 &#52287;으려면 어떻게 해야하죠 참고로 AB-M16-B와 AM-MS2 그리고 SM9K스탭 모터를 사용하고있습니다 DELAY를 사용해서 위치 제어를 45도씩 하려합니다 도움 부탁 드립니다. // LineTracer Application : 07-03-09 오후 12:09:10 // Target : M16 // 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 // /* 마이크로 스텝드라이버 구동 소스 포트 연결 Enable : PORTB 7번핀 Mode1 : PORTB 5번핀 Mode0 : PORTB 4번핀 R_DIR : PORTB 3번핀 R_CLK : PORTB 2번핀 L_DIR : PORTB 1번핀 L_CLK : PORTB 0번핀 */ #include <iom16v.h> #include <macros.h> #include <stdio.h> #define MOTOR_PORT PORTC // 스테핑 모터 연결 포트 #define MOTOR_PORT_DDR DDRC // 스테핑 모터 연결 포트의 DDR REG #define MOTOR_ENABLE (MOTOR_PORT = MOTOR_PORT|0x80) #define MOTOR_DISABLE (MOTOR_PORT = MOTOR_PORT&0x7f) #define MOTOR_STEP_M0 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x00) #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) #define MOTOR_LEFT_CLK (MOTOR_PORT = MOTOR_PORT^0x01) #define MOTOR_RIGHT_CLK (MOTOR_PORT = MOTOR_PORT^0x04) #define MOTOR_LEFT_CW (MOTOR_PORT = MOTOR_PORT&0xfd) #define MOTOR_LEFT_CCW (MOTOR_PORT = MOTOR_PORT|0x02) #define MOTOR_RIGHT_CW (MOTOR_PORT = MOTOR_PORT&0xf7) #define MOTOR_RIGHT_CCW (MOTOR_PORT = MOTOR_PORT|0x08) void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0xff; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xFF; } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 10KHz // actual value: 10.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop TCNT0 = 0x38; //set count OCR0 = 0xC8; //set compare TCCR0 = 0x02; //start timer } #pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { TCNT0 = 0x38; //reload counter value MOTOR_LEFT_CLK; MOTOR_RIGHT_CLK; PORTB = ~PORTB; /*if(MOTOR_PORT & 0x01){ MOTOR_PORT = MOTOR_PORT & 0xfe; }else{ MOTOR_PORT = MOTOR_PORT | 0x01; } */ } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x67; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x18; } int putchar(char c) { while (((UCSRA>>UDRE)&0x01) == 0) ; // UDRE, data register empty UDR = c; return c; } // scanf 함수 사용시 추가할 것. int getchar(void) { while ((UCSRA & 0x80) == 0); return UDR; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init(); uart0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x01; //timer interrupt sources SEI(0); //re-enable interrupts //all peripherals are now initialized } int i; // void main(void) { init_devices(); //insert your functional code here... printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); MOTOR_PORT_DDR = 0xff; MOTOR_ENABLE; MOTOR_STEP_M3; for(i=0; i<=10;i++) { MOTOR_PORT_DDR = 0x00; delay(i*100); MOTOR_PORT_DDR = 0xff; MOTOR_LEFT_CW; MOTOR_RIGHT_CCW; delay(900); MOTOR_PORT_DDR = 0x00; delay(i*100); MOTOR_PORT_DDR = 0xff; MOTOR_LEFT_CCW; MOTOR_RIGHT_CCW; delay(900); } MOTOR_PORT_DDR = 0x00; while(1); }
관리자 답변 owsfehn · 2010-04-24
<a href=http://www.watchesshow.com target=_blank>http://www.watchesshow.com</a> replica watches <a href=http://www.watchesshow.com/rolex-watches.html target=_blank>http://www.watchesshow.com/rolex-watches.html</a> replica rolex watches <a href=http://www.watchesshow.com/cartier-watches.html target=_blank>http://www.watchesshow.com/cartier-watches.html</a> replica cartier watches <a href=http://www.watchesshow.com/breitling-watches.html target=_blank>http://www.watchesshow.com/breitling-watches.html</a> replica breitling watches <a href=http://www.watchesshow.com/tag_heuer-watches.html target=_blank>http://www.watchesshow.com/tag_heuer-watches.html</a> replica tag heuer watches <a href=http://www.watchesshow.com/omega-watches.html target=_blank>http://www.watchesshow.com/omega-watches.html</a> replica omega watches <a href=http://www.watchesshow.com/a_lange_and_sohne-watches.html target=_blank>http://www.watchesshow.com/a_lange_and_sohne-watches.html</a> Replica A Lange and Sohne Watches <a href=http://www.watchesshow.com/armani-watches.html target=_blank>http://www.watchesshow.com/armani-watches.html</a> Replica ARMANI Watches <a href=http://www.watchesshow.com/audemars_piguet-watches.html target=_blank>http://www.watchesshow.com/audemars_piguet-watches.html</a> Replica AUDEMARS PIGUET Watches <a href=http://www.watchesshow.com/bell_and_ross-watches.html target=_blank>http://www.watchesshow.com/bell_and_ross-watches.html</a> Replica BELL AND ROSS Watches <a href=http://www.watchesshow.com/bvlgari-watches.html target=_blank>http://www.watchesshow.com/bvlgari-watches.html</a> Replica BVLGARI Watches <a href=http://www.watchesshow.com/franck_muller-watches.html target=_blank>http://www.watchesshow.com/franck_muller-watches.html</a> Replica FRANCK MULLER Watches <a href=http://www.watchesshow.com/gucci-watches.html target=_blank>http://www.watchesshow.com/gucci-watches.html</a> Replica GUCCI Watches <a href=http://www.watchesshow.com/hublot-watches.html target=_blank>http://www.watchesshow.com/hublot-watches.html</a> Replica HUBLOT Watches <a href=http://www.watchesshow.com/iwc-watches.html target=_blank>http://www.watchesshow.com/iwc-watches.html</a> Replica IWC Watches <a href=http://www.watchesshow.com/longines-watches.html target=_blank>http://www.watchesshow.com/longines-watches.html</a> Replica LONGINES Watches <a href=http://www.watchesshow.com/lv-watches.html target=_blank>http://www.watchesshow.com/lv-watches.html</a> Replica LV Watches <a href=http://www.watchesshow.com/montblanc-watches.html target=_blank>http://www.watchesshow.com/montblanc-watches.html</a> Replica MONTBLANC Watches <a href=http://www.watchesshow.com/movado-watches.html target=_blank>http://www.watchesshow.com/movado-watches.html</a> Replica MOVADO Watches <a href=http://www.watchesshow.com/panerai-watches.html target=_blank>http://www.watchesshow.com/panerai-watches.html</a> Replica PANERAI Watches <a href=http://www.watchesshow.com/parmigiani-watches.html target=_blank>http://www.watchesshow.com/parmigiani-watches.html</a> Replica PARMIGIANI Watches <a href=http://www.watchesshow.com/patek_philippe-watches.html target=_blank>http://www.watchesshow.com/patek_philippe-watches.html</a> Replica PATEK PHILIPPE Watches <a href=http://www.watchesshow.com/rado-watches.html target=_blank>http://www.watchesshow.com/rado-watches.html</a> Replica RADO Watches <a href=http://www.watchesshow.com/tissot-watches.html target=_blank>http://www.watchesshow.com/tissot-watches.html</a> Replica TISSOT Watches <a href=http://www.watchesshow.com/tudor-watches.html target=_blank>http://www.watchesshow.com/tudor-watches.html</a> Replica TUDOR Watches <a href=http://www.watchesshow.com/vacheron_constantin-watches.html target=_blank>http://www.watchesshow.com/vacheron_constantin-watches.html</a> Replica VACHERON CONSTANTIN Watches <a href=http://www.watchesshow.com/miscellaneous-watches.html target=_blank>http://www.watchesshow.com/miscellaneous-watches.html</a> Replica Miscellaneous Watches
4845 답변완료max232 관련질문과 usb-isp-L v03및 고장질문 설악산너구리 2010-04-03 1,356
1) max232 없이 USB-ISP-L V03 uart 4핀과 AB-M128-B(소형보드) 128칩이 붙은보드에 uart0 4핀을 직접연결해도 디버깅가능한가요??? ( usb-isp-L v03 4핀이 USB-to serial 되는걸로 알고있음) 2) 칩이 고장나거나 usb-isp-L 고장체크를 할 수 있는 방법이 없습니까?????
관리자 답변 NEWTC · 2010-04-04
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. >1) max232 없이 USB-ISP-L V03 uart 4핀과 AB-M128-B(소형보드) 128칩이 붙은보드에 uart0 4핀을 직접연결해도 디버깅가능한가요??? ( usb-isp-L v03 4핀이 USB-to serial 되는걸로 알고있음) ==> 네 가능합니다. 그런 의도로 4핀 커넥터가 만들어져 있는 것입니다. 보드와는 1:1로 연결하면 TX-RX가 크로스로 연결 됩니다. > >2) 칩이 고장나거나 usb-isp-L 고장체크를 할 수 있는 방법이 없습니까????? ==> USBISP 고장을 판단하는 것은 일단, 드라이버가 잡히는 지 확인하시구요. 고객님이 확인할 수 있는 방법은 정상인 것으로 확인된 AVR에 연결하여 다운로딩과 퓨즈, EEPROM 다운로드 등을 해 보시고, 정상적으로 보는 지 확인하는 것입니다. 안되시면, 본사로 A/S 보내서 하시면 됩니다. A/S 요령은 FAQ에 있습니다. 그리고, 여러사람이 함께 사용하는 공간이므로 반드시 다음부터는 본명으로 질문하여 주시기 바랍니다. 감사합니다.
4844 답변완료AM-DC1-4D 와 AM-DC1-3D 이연석 2010-04-03 1,516
표에 보면 AM-DC1-4D 는 최대전류 4A AM-DC1-3D 는 최대전류 3A (peak 6A) 나오는데 1. AM-DC1-4D 는 4A 까지는 계속적으로 사용 할수 있는 것인가요? 2. AM-DC1-3D 는 6A 까지 사용 할수 있는데 잠깐의 시간동안만 사용 가능 한것인가요? 저희가 모터 를 정격전류 2A 짜리 사용하려고 하는데 위의 두 제품중 어느 것에 적합 할까요? 감사합니다,
관리자 답변 NEWTC · 2010-04-03
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 1-4D와 1-3D는 말하는 기준이 다릅니다. 즉, 1-4D는 순간이라도 4A가 되면, 바로 망가지게 됩니다. 즉, 최대전류이지만, 사실 피크 전류를 의미합니다. 그리고, 1-3D는 순간은 6A를 버티고, 최대 3A 정도를 버팁니다. 사실, 여기서 사용한 IC의 데이터 시트 상에 그렇게 표현이 되어 있어서, 고민 끝에, 그렇게 쓴 것입니다. 제가 볼 때는 정격전류 2A 정도 사용하는 모터라면, 피크까지 사용할 때는, 대략 3배 정도의 전류가 피크로 튀기도 합니다. 1-3D를 쓰는 것이 안정적이라고 판단됩니다. 하지만, 피크까지 쓰지 않는다면, 1-4D를 쓰는 것도 나쁘지 않은 선택일 것 같습니다. 상황에 따라서, 다른 것이니 어느정도 상황까지 쓰는 지 고려하여 쓰시면 되겠습니다. 다만, 저더러 한가지만 추천해 달라고 한다면, 보다 안정적인 1-3D를 추천해 드리고 싶습니다. 수고하세요. >표에 보면 > >AM-DC1-4D 는 최대전류 4A > >AM-DC1-3D 는 최대전류 3A (peak 6A) 나오는데 > >1. AM-DC1-4D 는 4A 까지는 계속적으로 사용 할수 있는 것인가요? > >2. AM-DC1-3D 는 6A 까지 사용 할수 있는데 잠깐의 시간동안만 사용 가능 한것인가요? > > >저희가 모터 를 정격전류 2A 짜리 사용하려고 하는데 > >위의 두 제품중 어느 것에 적합 할까요? > >감사합니다, >
4843 답변완료다시한번 ㅜㅜ 정혜현 2010-04-02 1,434
//ICC-AVR application builder : 2005-05-23 오후 8:41:55 // Target : M128 // Crystal: 16Mhz // // 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> void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xff; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; 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 = 0x08; } 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 } // 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 delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } // void main(void) { unsigned char ch0,ah0,al0; init_devices(); while(1) { ADMUX = 0x42; ADCSRA=0xC6; al0 = ADCL; ah0 = ADCH; ch0 = al0+ah0*256; printf(" Tem. : %d \\r\\n", ch0); delay(500); ch0 = 0; } } 이렇게햇는데 44 또는 45 이렇게나와요;; 저희는 저항 아무것도 연결안하고 바로 그냥 센서를 바로 연결했거든요.. 그런데 만약 온도센서에 입김을 불면 출력 데이타가 올라가긴합니다. 그런데 저희가 ch0 = al0+ah0*256; 이식에서 256을 바꾸나 안바꾸나 겨속 45 44 가 나옵니다.. 왜이러는걸까요? ch0 = al0+ah0*256; 이식이 출력값에 별다른 영향을 주지 못하는것같습니다. 그리고 또 입깁을 불면 값이 올라가니까 온도가 측정되는것 같긴합니다만.. //ADCSRA &= 0x7f; //ADCSRA |= 0xC0; 이 두게의 명령문의 의미를 정확하게 모르겠습니다. 왜 저렇게 하는지 ㅜㅜ그래서 저걸 말고 그냥 저는 ADCSRA에 원하는 수를 저장하는방법으로 했거든요 ㅜㅜ 어떻게 해야할까요 죄송하지만 좀 도와주세요 ㅜㅜ
관리자 답변 NEWTC · 2010-04-02
안녕하세요 > ADMUX = 0x42; PORTF2번째 포트를 사용하다는 말입니다. 포트 핀은 0~ 7 순입니다. /ADCSRA &= 0x7f; ADC를 끈다 말입니다. >//ADCSRA |= 0xC0; ADC 를 구동하다는 말이고요 http://www.newtc.co.kr/board/view.php?id=pds&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=adc&select_arrange=headnum&desc=asc&no=212 밑의 코드는 KT-M128 관련된 코드입니다. 비슷하지만, 위 링크된 코드를 사용 하세요 수고하세요 >//ICC-AVR application builder : 2005-05-23 오후 8:41:55 >// Target : M128 >// Crystal: 16Mhz >// >// 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> > >void port_init(void) >{ > PORTA = 0x00; > DDRA = 0x00; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0xff; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > 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 = 0x08; >} > >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 >} > >// 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 delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} > >// >void main(void) >{ > unsigned char ch0,ah0,al0; > > init_devices(); > > while(1) > { > > ADMUX = 0x42; > > ADCSRA=0xC6; > > > > al0 = ADCL; > ah0 = ADCH; > ch0 = al0+ah0*256; > printf(" Tem. : %d \\r\\n", ch0); > delay(500); > ch0 = 0; > > > > } > > >} > > > > 이렇게햇는데 44 또는 45 이렇게나와요;; >저희는 저항 아무것도 연결안하고 바로 그냥 센서를 바로 연결했거든요.. > >그런데 만약 온도센서에 입김을 불면 출력 데이타가 올라가긴합니다. >그런데 저희가 ch0 = al0+ah0*256; >이식에서 256을 바꾸나 안바꾸나 겨속 45 44 가 나옵니다.. >왜이러는걸까요? >ch0 = al0+ah0*256; 이식이 출력값에 별다른 영향을 주지 못하는것같습니다. >그리고 또 입깁을 불면 값이 올라가니까 온도가 측정되는것 같긴합니다만.. > > >//ADCSRA &= 0x7f; > >//ADCSRA |= 0xC0; >이 두게의 명령문의 의미를 정확하게 모르겠습니다. > >왜 저렇게 하는지 ㅜㅜ그래서 저걸 말고 그냥 저는 ADCSRA에 원하는 수를 저장하는방법으로 했거든요 ㅜㅜ 어떻게 해야할까요 > >죄송하지만 좀 도와주세요 ㅜㅜ
4842 답변완료AM-MS2 문의요 태현 2010-04-02 1,663
AB-M16-B 와 AM-MS2를 사용하여 SM9K를 45도씩 제어하려 합니다. 테스트프로그램 구동하니 계속 돌기만하는데 ...제가 초보라 잘몰라서요.. MS2 MODE STEP은 초기 H H 라 GND를 5번과 6번에 연결하려 하는데 맞는건지요. HH로 설정해야지만 STEP 제어가 되는건가요? 그리고 MOTOR_STEP_M0; // 속도가 변하는거? MOTOR_LEFT_CW; //MS2 좌측이란건가요? MOTOR_RIGHT_CW; //MS2 우측이란건가요? PORTB=0x01; // 포트 "B"데 포트 "C"에서만 작동 되던데요..무슨 이유인지요? #include <iom16v.h> #include <macros.h> #include <stdio.h> #define MOTOR_PORT PORTC // 스테핑 모터 연결 포트 #define MOTOR_PORT_DDR DDRC // 스테핑 모터 연결 포트의 DDR REG #define MOTOR_ENABLE (MOTOR_PORT = MOTOR_PORT|0x80) #define MOTOR_DISABLE (MOTOR_PORT = MOTOR_PORT&0x7f) #define MOTOR_STEP_M0 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x00) #define MOTOR_STEP_M1 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x10) #define MOTOR_STEP_M2 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x20) #define MOTOR_STEP_M3 (MOTOR_PORT = (MOTOR_PORT&0xcf)|0x30) #define MOTOR_LEFT_CLK (MOTOR_PORT = MOTOR_PORT^0x01) #define MOTOR_RIGHT_CLK (MOTOR_PORT = MOTOR_PORT^0x04) #define MOTOR_LEFT_CW (MOTOR_PORT = MOTOR_PORT&0xfd) #define MOTOR_LEFT_CCW (MOTOR_PORT = MOTOR_PORT|0x02) #define MOTOR_RIGHT_CW (MOTOR_PORT = MOTOR_PORT&0xf7) #define MOTOR_RIGHT_CCW (MOTOR_PORT = MOTOR_PORT|0x08) void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0xff; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xFF; } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 10KHz // actual value: 10.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop TCNT0 = 0x38; //set count OCR0 = 0xC8; //set compare TCCR0 = 0x02; //start timer } #pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { TCNT0 = 0x38; //reload counter value MOTOR_LEFT_CLK; MOTOR_RIGHT_CLK; PORTB = ~PORTB; /* if(MOTOR_PORT & 0x01){ MOTOR_PORT = MOTOR_PORT & 0xfe; }else{ MOTOR_PORT = MOTOR_PORT | 0x01; } */ } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x67; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x18; } int putchar(char c) { while (((UCSRA>>UDRE)&0x01) == 0) ; // UDRE, data register empty UDR = c; return c; } // scanf 함수 사용시 추가할 것. int getchar(void) { while ((UCSRA & 0x80) == 0); return UDR; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init(); uart0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x01; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } // void main(void) { init_devices(); //insert your functional code here... printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); MOTOR_PORT_DDR = 0xff; MOTOR_ENABLE; MOTOR_STEP_M0; MOTOR_LEFT_CW; MOTOR_RIGHT_CW; PORTB=0x01; /* 타이머로 마이크로 스텝 드라이버 구동 */ while(1); }
관리자 답변 태현 · 2010-04-02
포트"c"의 활성 이유는 알겠는데요..... 스탭제어를 하려면 CLK 로 명령을 줘야하나요?
4841 답변완료궁금합니다. ㅜㅜ 정혜현 2010-04-02 1,469
안녕하세요 저는 LM35DZ를 이용해서 온도를 측정하고자 합니다. ATMega128의 내부 증폭을 이용하고자 합니다. 그래서 온도 센서를 바로 연결하였습니다 ADC 포트가 잇는 PORTF 에 1번핀 즉 ADC0핀에 온도센서의 Vout을 연결하고 온도센서 VCC & GND도 역시 PORTF에 있는 VCC(portF9번핀)&GND(portF10번pin)에 연결하였씁니다. 우선 전 이 연결방법이 맞는지 의문이 듭니다;; //ICC-AVR application builder : 2005-05-23 오후 8:41:55 // Target : M128 // Crystal: 16Mhz // // 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> void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xff; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; } 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 = 0x08; } 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 } // 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 delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } void main(void) { unsigned char result, AD; init_devices(); ADCSRA = 0x00; //disable adc ADMUX = 0x09; //select adc input 0(원래0x00) -> gain10으로 설정 positive ADC1 negative ADC0 ACSR = 0x80; //80(10000000) ADCSRA = 0xC6; //원래C6(11000110):adc활성화,ADC변환시작,단일adc.110:64clk분주 //바꾼e7(11100111):adc활성화,ADC변환시작,freerun,111:분주 128분주 delay(1000); result = ADCL + ADCH * 256; delay(1000); while(1) { AD = ADCL + ADCH * 256; result = (result * 9 + AD) / 10; printf("%d \\r",result); delay(1000); // 500ms 대기 } } 이렇게 하면 안되는가요?? 어떻게 해야할까요.. 제가 이걸 처음사용하는거라많이 서툽니다.. ADC를 잘읽어보긴 했는데 읽어보는거랑 또 프로그램짜는거랑 많이 다른것같아서요 ㅜㅜ 우선 전 ADC0즉 PORTF1번 핀에서 입력을 받는데 소스에서그 핀에서입력을 받는지 설정을해줘야하나요? 어떻게 해야하나요 ㅜㅜ 조금만도와주세요 부탁드립니다.ㅜㅜ
관리자 답변 NEWTC · 2010-04-02
안녕하세요 LM35DZ 를 PORTF에 연결하는 방법은 맞습니다. LM35DZ 출력되는 아날로그 값을 왜 증폭해서 받아야하는 이유를 모르겠습니다. LM35DZ 출력레벨이 1mV 미만으로 변하는 값이라면 증폭해서 읽어야 하지만;; 아니라면 스케일 조정이 필요가 없는 것 같네요 ADMUX << 이 레지스터로 증폭및 adc 채널을 조정하는 핀입니다. ADMUX = 0x00 PORTF0 핀의 아날로그 값을 선택합니다. ADMUX = 0x01 PORTF1 핀의 아날로그 값을 선택합니다. 배율로을 사용하려면 차동differential 입력입니다. 두선을 입력핀으로 사용해야 합니다. 그러나 LM35DZ 는 출력핀이 하나만 있으므로 싱클엔디드로만 사용하셔야 합니다. 증폭을 할수없다는 말이죠 제공되는 예제코드를 채널만 조정해서 값이 변하는지 확인해 보시길 바랍니다. 수고하세요 >안녕하세요 > >저는 LM35DZ를 이용해서 온도를 측정하고자 합니다. > >ATMega128의 내부 증폭을 이용하고자 합니다. > >그래서 온도 센서를 바로 연결하였습니다 > >ADC 포트가 잇는 PORTF 에 1번핀 즉 ADC0핀에 온도센서의 Vout을 연결하고 > >온도센서 VCC & GND도 역시 PORTF에 있는 VCC(portF9번핀)&GND(portF10번pin)에 연결하였씁니다. > >우선 전 이 연결방법이 맞는지 의문이 듭니다;; > > > > > > > >//ICC-AVR application builder : 2005-05-23 오후 8:41:55 >// Target : M128 >// Crystal: 16Mhz >// >// 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> > >void port_init(void) >{ > PORTA = 0x00; > DDRA = 0x00; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0xff; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x03; >} > > >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 = 0x08; >} > >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 >} > >// 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 delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} > > >void main(void) >{ > unsigned char result, AD; > > > > init_devices(); > > ADCSRA = 0x00; //disable adc > ADMUX = 0x09; //select adc input 0(원래0x00) -> gain10으로 설정 positive ADC1 negative ADC0 > ACSR = 0x80; //80(10000000) > ADCSRA = 0xC6; //원래C6(11000110):adc활성화,ADC변환시작,단일adc.110:64clk분주 > //바꾼e7(11100111):adc활성화,ADC변환시작,freerun,111:분주 128분주 > delay(1000); > > result = ADCL + ADCH * 256; > delay(1000); > while(1) > { > > AD = ADCL + ADCH * 256; > result = (result * 9 + AD) / 10; > > printf("%d \\r",result); > delay(1000); // 500ms 대기 > } > > >} > > > > > > >이렇게 하면 안되는가요?? > >어떻게 해야할까요.. > >제가 이걸 처음사용하는거라많이 서툽니다.. > > > >ADC를 잘읽어보긴 했는데 읽어보는거랑 또 프로그램짜는거랑 많이 다른것같아서요 ㅜㅜ > > > >우선 전 ADC0즉 PORTF1번 핀에서 입력을 받는데 소스에서그 핀에서입력을 받는지 설정을해줘야하나요? > >어떻게 해야하나요 ㅜㅜ > > > >조금만도와주세요 부탁드립니다.ㅜㅜ > > > > >
4840 답변완료ATMega128 Pro개발키트(완제품)KD-128PRO-C 전원부 질문입니다.. 노영래 2010-04-02 1,369
안녕하세요. 전원부 질문인데요.. 오른쪽 하단에 J122가 12V출력이고, J123도 12V 출력인데 메뉴얼보니까. 아답터로 들어가는 12V에서 바로 연결돼있는거 같은데요.. J122랑 J123을 on/off 식으로 하려면.. 어떻게 해야하나요?? 포트로 제어가 가능한지, 아니면.. 다른 방법이 있나요? 답변 부탁드리겠습니다 수고하세요!
관리자 답변 NEWTC · 2010-04-02
안녕하세요 J122/ J123 두개의 컨넥터 전압출력을 포트로 제어 하고 싶다는 말인가요 ? 현재 보드로는 포트제어로 외부 출력으로 가는 컨넥터 제어를 하지못합니다. AM-RB04-B 릴레이보드와 같은 것 사용하여 외부 전원을 포트로 제어가 가능합니다. 수고하세요 >안녕하세요. >전원부 질문인데요.. >오른쪽 하단에 J122가 12V출력이고, >J123도 12V 출력인데 메뉴얼보니까. >아답터로 들어가는 12V에서 바로 연결돼있는거 같은데요.. > >J122랑 J123을 on/off 식으로 하려면.. 어떻게 해야하나요?? > >포트로 제어가 가능한지, 아니면.. 다른 방법이 있나요? > >답변 부탁드리겠습니다 수고하세요!
4839 답변완료LM35DZ를 사용하려고 합니다. 신정훈 2010-04-02 1,457
AVR 128을 공부하기 막 시작했는데요.. 온도센서를 이용해서 LCD에 값을 띄울려고 합니다. ADC 실습 편에 보면 예제용 소스가 있는데 ktm128_init(); <--- 이 함수는 어떤 함수 인가요?
관리자 답변 NEWTC · 2010-04-02
안녕하세요 KT-M128 보드 기준으로 작성된 내용의 문서입니다. ktm128_init(); 에 붙어 있는 KT-M128 보드 주변 디바이스의 초기화 함수입니다. 생략 하셔도 됩니다. 수고하세요 >AVR 128을 공부하기 막 시작했는데요.. > >온도센서를 이용해서 LCD에 값을 띄울려고 합니다. > >ADC 실습 편에 보면 예제용 소스가 있는데 > >ktm128_init(); <--- 이 함수는 어떤 함수 인가요? > >