Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 1103 | 답변완료후방감지기 | 정현성 | 2008-05-27 | 1,513 |
|
후방감지기 소스를 받았는데요... 그냥 거리 측정기 소스인것 같네요...
50cm일때 led 한 개에 불이들어오고 30cm일때 led 한 개 더 불이들어오면서 총 두 개의 led가 불이 들어오게 하는 소스는 없나요?
관리자 답변
안녕하세요? 고객님,
입맛에 딱 맞는 소스를 드리기는 어렵구요.
거리를 측정해서, 가까워 질 수록 뚜뚜 주기가 빨라지게 하는 소스였습니다.
참고하시구요.
>후방감지기 소스를 받았는데요... 그냥 거리 측정기 소스인것 같네요...
>50cm일때 led 한 개에 불이들어오고 30cm일때 led 한 개 더 불이들어오면서 총 두 개의 led가 불이 들어오게 하는 소스는 없나요?
|
||||
| 1102 | 답변완료Safety gnd가 무엇인가요? | 윤동현 | 2008-05-27 | 1,596 |
|
http://www.newtc.co.kr/product_img/AB-M128-B_1.jpg
요 링크의 사진이 제가 구입한 AVR입니다.
어제 문의를 통해
"220V 전압 공급되는 벽에 있는 커넥터를 보면, 220V용 동그란 구멍 두개 외에도 옆에 약간 누런색의 접지가 튀어나와 있습니다. 그게 SAFETY GROUND라는 것인데요. 거기에 메인보드의 GND를 연결하시면 됩니다."
라고 해 주셨는지 아직 정확히 이해하지 못했습니다.
접지봉이라면 J618이라고 적혀 있는 노란봉 인가요? GND라 적혀 있어 접지봉이라 생각하고 있는데 여기에 제가 사용한 포트의 GND와 연결을 해 보았으나,
똑같이 USBISP를 뽑으면 자기 맘대로 움직이는 현상은 계속되더라구요 ㅠ.ㅠ
그래서 송구스럽지만, 좀더 정확한 설명 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
보다 자세히 답변해 드릴께요.
USB, RS-232C, Parallel 과 같은 디바이스들은 Inter-System Ground Noise라는 것에 노출되기 싶습니다. 그러한 것들이 시스템의 fail을 유도할 수 있구요.
그런 것들을 제거하기 위한 노력이 소수의 장소에서는 꼭 필요합니다.
대부분 그런 것들을 하지 않아도 정상동작하지만, 간혹 심각한 노이즈 요인이 되어
시스템을 실패할 수 있도록 하는 원인이 됩니다. 고객님의 경우가 그러한 경우에 해당할 수 있을 것 같구요. 오디오 시스템의 경우에도 허밍이나 그런 것들이 같은 원인에 의해서, 발생하게 되고, 그러한 것들을 제거하기 위한 노력은 인터넷이나 공개 또는 비공개 자료를 통하여 많이 보실 수 있습니다.
원래는 Safety Ground라는 것은 안전규격으로 수출 등 완제품을 생산하여 수출하거나 할 때 반드시 거쳐야 하는 규격 중의 하나입니다. 전기 쇼크 등에 대비하여 장비나 사람의 안전을 위하여 필수적인 규격입니다. safety ground를 한 후, 어느정도 잘 되었는 지 테스터로 측정하는 방법 등도 대학원 등에서는 강의가 이루어 지고 있습니다. 간혹 학부 과정에서도 다루시는 교수님들이 있긴 하더군요.
쉽게는 멀티탭 사진을 올려 놨는 데요. 화살표 있는 곳에 보시면, 누런 쇠가 나와 있죠? 거기에 보드의 GND를 연결하시면 쉽게 안전 접지를 하실 수 있습니다.
또, 궁금하신 부분이 있으시면 올려 주시면, 성심 성의껏 답변해 드릴께요.
그리고, 인터넷에서 찾은 첨부 문서를 참고하시기 바랍니다.
감사합니다.
>http://www.newtc.co.kr/product_img/AB-M128-B_1.jpg
>요 링크의 사진이 제가 구입한 AVR입니다.
>
>어제 문의를 통해
>
>"220V 전압 공급되는 벽에 있는 커넥터를 보면, 220V용 동그란 구멍 두개 외에도 옆에 약간 누런색의 접지가 튀어나와 있습니다. 그게 SAFETY GROUND라는 것인데요. 거기에 메인보드의 GND를 연결하시면 됩니다."
>
>라고 해 주셨는지 아직 정확히 이해하지 못했습니다.
>접지봉이라면 J618이라고 적혀 있는 노란봉 인가요? GND라 적혀 있어 접지봉이라 생각하고 있는데 여기에 제가 사용한 포트의 GND와 연결을 해 보았으나,
>똑같이 USBISP를 뽑으면 자기 맘대로 움직이는 현상은 계속되더라구요 ㅠ.ㅠ
>
>그래서 송구스럽지만, 좀더 정확한 설명 부탁드립니다.
|
||||
| 1101 | 답변완료도와주세요 | 김손범 | 2008-05-27 | 1,367 |
|
구입한 보드로 열심히 공부 중입니다.
이번에 3개의 화면을 랜덤 하게 디스플레이 하려고 하는데
c에서 처럼 랜덤 함수가 있는 것도 아니고
어떻게 해야 할지 모르겠습니다.
어떻게 해야 랜덤하게 함수를 받을수 있을 까요??
관리자 답변
안녕하세요? 고객님,
자료실의 ICCAVR 온라인 HELP를 클릭해 보시면,
rand를 검색하실 수 있습니다.
아래 함수가 검색이 되네요.
stdlib.h를 인클루드 하신 후에, 사용하시면 될 듯 싶습니다.
- 아래-
int rand(void)
returns a pseudo-random number between 0 and RAND_MAX.
void srand(unsigned seed)
initializes the seed value for subsequent rand() calls.
수고하세용.
>구입한 보드로 열심히 공부 중입니다.
>이번에 3개의 화면을 랜덤 하게 디스플레이 하려고 하는데
>c에서 처럼 랜덤 함수가 있는 것도 아니고
>어떻게 해야 할지 모르겠습니다.
>어떻게 해야 랜덤하게 함수를 받을수 있을 까요??
|
||||
| 1100 | 답변완료Can not Program Flash에러.. | 제홍모 | 2008-05-27 | 1,521 |
|
안녕하세요
AM-128PL을 구입하여 하나 하나 따라가면서 실습해 보고 있는 중입니다.
컴파일러는 ICC 이고 STK-200지원 ISP다운로더를 사용하고 있습니다.
어제 부터 다운로드 할 때마다
Can not program flash 에러가 나오는 데 원인을 모르겠습니다.
그런데 Code vision이나 ponyprog에서는 또 잘 되고 있습니다.
뭐가 문제일까요?
관리자 답변
안녕하세요? 고객님,
ICCAVR을 재설치 해 주시기 바랍니다.
간혹 설치 될 때, 잘못되면 그런 경우가 있습니다.
감사합니다.
>안녕하세요
> AM-128PL을 구입하여 하나 하나 따라가면서 실습해 보고 있는 중입니다.
>컴파일러는 ICC 이고 STK-200지원 ISP다운로더를 사용하고 있습니다.
>어제 부터 다운로드 할 때마다
>Can not program flash 에러가 나오는 데 원인을 모르겠습니다.
>그런데 Code vision이나 ponyprog에서는 또 잘 되고 있습니다.
>뭐가 문제일까요?
|
||||
| 1099 | 답변완료스테핑모터 드라이버 전원질문입니다. | 윤건호 | 2008-05-26 | 1,442 |
|
안녕하세요^^ 오늘 뉴테크 잠깐 들렸던 학생입니다
신속하고 자세한 답변 감사드립니다.
스테핑모터 드라이버 AM-CS2P (3A용)에서
스테핑모터를 2개 사용하면 전원이 24V 6A들어가야하는것인지요?
1개라면 12V라하셨는데 2개여서 24V인지 궁금합니다.
관리자 답변
안녕하세요? 고객님,
풀토크로 돌리신다면 24V 6A가 공급되어야 하겠지요. 그렇지만, 실제로 파워의 효율 등을 고려한다면 24V 8A 정도가 되는 게 좋겠구요.
그러나, 실제로 쓰시는 토크가 풀토크는 아닐 것으로 생각됩니다.
보고 적당한 것으로 고르셔야 합니다. 전류량에 따라 가격이 비싸니까요.^^
스테핑 모터는 원래 모터의 스펙보다 4-6배는 높게 주시는 것이 좋습니다.
즉, 4V용 스테핑 모터가 드라이버를 쓸 경우 12V라도 돌아는 가지만, 24V면 풀토크를 얻을 수 있다는 것입니다.
도움이 되셨기를 바랍니다.
감사합니다.
>안녕하세요^^ 오늘 뉴테크 잠깐 들렸던 학생입니다
>
>신속하고 자세한 답변 감사드립니다.
>
>스테핑모터 드라이버 AM-CS2P (3A용)에서
>
>스테핑모터를 2개 사용하면 전원이 24V 6A들어가야하는것인지요?
>
>1개라면 12V라하셨는데 2개여서 24V인지 궁금합니다.
|
||||
| 1098 | 답변완료스피커에 대한 질문입니다 | 오창화 | 2008-05-26 | 1,502 |
|
+,- 만 있는 스피커를 구입해서ATmega128Pro 킷트와 연결하여 소리를 내고 싶은데 +.-를 어떻게 연결을 해야하는지 모르겠습니다,그리고 +,-만 있는 스피커로도 ATmega128Pro 킷트에 연결해서 사용할 수 있는지 궁금합니다. 자세하게 가르쳐 주세요
관리자 답변
안녕하세요? 고객님,
저희 N.T.C를 이용해 주셔서 감사합니다.
스피커가 소리를 내는 원리는 판이 떨리는 것입니다.
그 떨리는 주파수에 따라 다른 소리가 나게 됩니다.
따라서, 타이머 등으로 주파수를 만들어서 떨게 만들어 주면 되겠지요?
예제가 아래에 있구요.
더 많은 예제가 자료실->기존자료실에 있으니, 사운드 관련 예제를 참고하세요.
- 아래 -
http://www.newtc.co.kr/board/view.php?id=pds&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=224
감사합니다.
>+,- 만 있는 스피커를 구입해서ATmega128Pro 킷트와 연결하여 소리를 내고 싶은데 +.-를 어떻게 연결을 해야하는지 모르겠습니다,그리고 +,-만 있는 스피커로도 ATmega128Pro 킷트에 연결해서 사용할 수 있는지 궁금합니다. 자세하게 가르쳐 주세요
|
||||
| 1097 | 답변완료후방감지기 | 정현성 | 2008-05-26 | 1,559 |
|
오늘 소스 올려주신다고 했는데 아직 안 올라와 있어서 확인차 글 남깁니다
관리자 답변
안녕하세요? 고객님,
약속드린 소스를 올려드립니다.
감사합니다.
>오늘 소스 올려주신다고 했는데 아직 안 올라와 있어서 확인차 글 남깁니다
|
||||
| 1096 | 답변완료USBISP 문의 | 정순길 | 2008-05-26 | 1,569 |
|
Fujitsu MB90F342AS 제품에 사용 가능한지 알려주시기 바랍니다
만약 USBISP가 범용제품이 아니라면 USB-UART 제품은 범용인지 확인 바랍니다.
관리자 답변
안녕하세요? 고객님,
저희 USBISP는 AVR을 위한 usb 방식의 프로그래머입니다.
따라서, 후지쯔 16LX 계열의 mcu에서는 사용하실수 없습니다.
하지만, usbuart 제품은 사용이 가능하겠네요.
저두 usbuart를 사용하여, 시리얼로 8fx 계열을 다운로드 하고 있습니다.
감사합니다.
>Fujitsu MB90F342AS 제품에 사용 가능한지 알려주시기 바랍니다
>
>만약 USBISP가 범용제품이 아니라면 USB-UART 제품은 범용인지 확인 바랍니다.
|
||||
| 1095 | 답변완료RC서보모터와 서보모터랑 다른가요?? | 권혁민 | 2008-05-26 | 1,522 |
|
두가지가 서로 다른건가요??
서보모터에 관한 예제를 실행시키면 움직임이 좀 ......
예제소스의 main에 내의 while문속의 if문이 이해가 안 됩니다.
관리자 답변
안녕하세요? 고객님,
RC 서보모터도 서보 모터의 종류중 하나입니다.
RC 서보모터 들이 서보모터 회사마다 조금씩 달라서, 소스를 조금씩 수정하셔야 합니다.
PWM 타이밍을 서보회사마다 서로 다르게 가져가서, 모든 서보에 맞게 프로그램을 짜 올려 드리기는 어렵습니다.
따라서, 서보의 특성을 파악하시기 위하여 약간씩 타이밍을 바꿔 보셔야 합니다.
MAIN문내의 WHILE문 속의 IF 문이라는 것이 어떤 소스를 말씀하시는 것인지 구체적으로 올려 주셔야 답변이 가능할 것 같습니다.
감사합니다.
>두가지가 서로 다른건가요??
>
>서보모터에 관한 예제를 실행시키면 움직임이 좀 ......
>
>예제소스의 main에 내의 while문속의 if문이 이해가 안 됩니다.
|
||||
| 1094 | 답변완료AVR 보드 과열문제 | 조현경 | 2008-05-26 | 1,515 |
|
AB-M128-B 보드에서 과열문제가 발생했습니다
소스코딩 다 하고 AVR에 집어넣은 후 구현까지 문제없었는데
몇번 한 후 하룻밤 지나고 난 뒤 보드에 전원을 공급하기만 하면
1~2초 뒤에 Atmega에서 열이 발생합니다. 제대로 작동도 안되구요
전화로 문의했더니 Q&A에 올리라고 하셔서 여기다 글 남깁니다
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사드립니다.
당황하지 마시구요.
쓰시던 보드와 나머지 환경을 그대로 저희 회사로 가져와 보시는 것이 좋겠습니다.
외부 확장 보드 쪽의 문제일 수도 있으니, 가져 오시면, 어떻게 바꾸시라고 조언이 가능할 것 같네요.
A/S 처리 하셔야 할 것 같구요. FAQ에 있는 저희 회사 A/S 규정에 의해 처리됩니다.
감사합니다.
>AB-M128-B 보드에서 과열문제가 발생했습니다
>
>소스코딩 다 하고 AVR에 집어넣은 후 구현까지 문제없었는데
>
>몇번 한 후 하룻밤 지나고 난 뒤 보드에 전원을 공급하기만 하면
>
>1~2초 뒤에 Atmega에서 열이 발생합니다. 제대로 작동도 안되구요
>
>전화로 문의했더니 Q&A에 올리라고 하셔서 여기다 글 남깁니다
|
||||
| 1093 | 답변완료스테핑모터 구동드라이버 질문입니다. | 윤건호 | 2008-05-26 | 1,592 |
|
스테핑 모터 클럭 구동모듈
AM-MS2(3A용)
이거에 SE-SM9 모터를 2개달아서 사용할예정인데
아답타를 3A짜리를 써야하는지 6A 짜리를 써야하는지 문의드립니다.
그리고 모듈의 MCU와 연결하는 커넥터단자의 GND와
모듈의 12V전원이 들어가는단자의 GND가 연결이 되어있어
2개의 GND를 넣으면 커넥터 옆 드라이버 부분에 열이 어마어마하게 많이 발생합니다.
그래서 커넥터단자의 GND를 빼고 사용하였는데도 맨위의 저항이 엄청나게 뜨거워집니다.
원래 이런건가요? 왜 메뉴얼에는 이런설명이 하나도 안되어있죠?
아니면 제 스텝모터드라이버만 불량인건가요?
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사드립니다.
저희 MS2에 사용된 모듈은 원래 풀토크 사용시에 방열판을 달아서, 사용하여야 합니다. 열이 많이 날 수 있기 때문이지요. 만들어진 목적이 교육용/개발용으로 만들어진 모듈이라 최대 토크시에 발생할 수 있는 열에 대비한 방열판은 별도로 부착하여 쓰셔야 합니다. 대부분은 최대 토크까지는 쓰지 않고, 저렴하게 구매하여 사용하실 수 있도록 하기 위하여 그렇게 만들어져 있습니다.
현재, 산업용으로 쓰실 수 있도록, 사용 편리성을 위한 입출력 관계 및 전류량 등의 여러가지 부분을 고려하여 제작하려고 준비하고 있으니, 가격은 좀 올라가겠지만, 더 나은 제품을 조만간에 만나실 수 있을 겁니다. 하지만, 합리적인 가격으로 제공해 드릴 것을 약속드립니다.
또한, 사용되는 전류를 예측 가능하시면, 그 만큼에 맞게 아답타를 쓰시면 되겠지만, 예측이 어려우시다면, 최대 각 포트당 24V 3A씩이므로 6A짜리를 쓰시는 것이 좋겠구요. 여유있게 효율성 등을 생각한 마진을 고려하여 8A 24V를 쓰시는 것이 이상적이겠습니다.
하지만, 그럴 경우 전원부 가격이 많이 올라가게 되므로, 가능하다면, 사용되는 토크량에 따른 전류량을 예측하여 사용하는 것이 좋겠습니다.
계속 열이 많이 나신다면, 직접 가져 오시면 테스트해봐 드릴 수도 있구요.
직접 봐야 어떻게 하시는 것이 좋겠다고 좀더 나은 조언을 해드릴 수도 있을 것 같네요.
감사합니다.
>스테핑 모터 클럭 구동모듈
>AM-MS2(3A용)
>
>이거에 SE-SM9 모터를 2개달아서 사용할예정인데
>
>아답타를 3A짜리를 써야하는지 6A 짜리를 써야하는지 문의드립니다.
>
>그리고 모듈의 MCU와 연결하는 커넥터단자의 GND와
>
>모듈의 12V전원이 들어가는단자의 GND가 연결이 되어있어
>
>2개의 GND를 넣으면 커넥터 옆 드라이버 부분에 열이 어마어마하게 많이 발생합니다.
>
>그래서 커넥터단자의 GND를 빼고 사용하였는데도 맨위의 저항이 엄청나게 뜨거워집니다.
>
>원래 이런건가요? 왜 메뉴얼에는 이런설명이 하나도 안되어있죠?
>
>아니면 제 스텝모터드라이버만 불량인건가요?
|
||||
| 1092 | 답변완료SE-SM9 모터에 맞는 바퀴는 없나요?? | 윤건호 | 2008-05-26 | 1,559 |
|
모터 축이 두꺼운데 거기에 맞는 바퀴가 있는지좀 알려주세요.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C. 제품을 이용하여 주셔서 감사드립니다.
간혹 같은 질문을 하시는 고객님들이 있습니다.
헌데, 예전에 그런 제품이 있었는 데요. 지금은 없어졌습니다.
현재 구하기가 어려우실 겁니다.
조만간에 저희도 거기에 맞는 바퀴 생산을 고려 중입니다.
감사합니다.
>모터 축이 두꺼운데 거기에 맞는 바퀴가 있는지좀 알려주세요.
|
||||
| 1091 | 답변완료센서 입력 방법과 usbisp에 대해서 질문이 있습니다. | 윤동현 | 2008-05-26 | 1,534 |
|
안녕하세요^^
AVR에 대해 몇가지 물어볼 것이 있어서 이렇게 글을 씁니다.
지금 AVR로 작품을 만들려고 시도 중인데..
제가 완전 초보라서 그리 쉽지 않네요.
그래도 그럴저럭 NTC 홈피와 친구의 도움으로 잘 하고 있는데..
막막하게 절 막히게 하는 것이 있으서 이렇게 질문을 합니다.
위 첨부한 코드가 제가 만들어 볼까 생각중인 작품인데요.
거리센서나 스위치로 입력이 들어오면 서보모터가 들어온 입력값에 의해서
제가 원하는 각도로 움직이는 프로그램을 만들려 합니다.
if((KEY_IN_SENSOR & 0x10) && (DTstatus == ON)) { //거리센서를 통해 입력이 먼저 들어올 경우
KEY_IN_SW_DIR = 0xff;
motor_move(5,7);//두번째 뚜껑이 올라감.
DTstatus = OFF;
sensor = ON;
} else if((KEY_IN_SENSOR & 0x10) && (DTstatus == OFF)) {
}else{
if(sensor == ON) {
motor_move(5,15);
motor_move(2,23);
motor_init();
KEY_IN_SW_DIR = 0x00;
sensor = OFF;
}
DTstatus =ON;
}
문제는 여기서 부터 막힌다는 건데..
usbisp를 이용하여 프로그램을 AVR에 로팅하고
KEY_IN_SENSOR에 sensor를 이용하여 입력을 주면, 제가 원하는 대로 움직입니다.
그런데 여기서 usbisp를 AVR에서 빼고 작동시키는 모터가 자기 맘대로 움직입니다.
다시 usbisp를 꽂고 작동시키면 모터는 제가 원하는 대로 움직이구요..
과연 무엇이 문제인지 모르겠습니다. AVR에 잘못된건지 아님 보드가 잘못된건지, 아님 USBISP가 잘못된 건지, 제가 짠 코드가 완전 잘못된 것인지 전혀 모르겠습니다.
위와 같이 코드를 짜면 안되는 건지?
물어볼 수 있는 곳이 여기 뿐이라서 이렇게 간절히 물어봅니다.
관리자 답변
안녕하세요? 고객님,
간혹 고객님과 같은 문의를 하시는 분들이 있습니다.
답은 접지를 제대로 하시면 문제 없이 동작 할겁니다.
무슨 말이냐면요.
Safety ground라는 것이 있습니다. 안전을 위한 그라운드를 말하는 건데요.
220V 전압 공급되는 벽에 있는 커넥터를 보면, 220V용 동그란 구멍 두개 외에도 옆에 약간 누런색의 접지가 튀어나와 있습니다. 그게 SAFETY GROUND라는 것인데요. 거기에 메인보드의 GND를 연결하시면 됩니다.
또한, PC에 공급되는 전원도 마찬가지로 접지용 멀티탭을 사용하여 주시는 것이 좋겠습니다. 대부분의 PC에서는 이상이 없지만, 공장지대 근처이거나, 주변에 모터를 돌리는 곳이 있다거나, 노이즈 원인이 많은 곳에서 산다거나 할경우 그런 일이 있을 수 있습니다. 반드시 접지용 멀티탭을 사용하셔서, 안전하게 PC도 보호하시고, 장비도 이상 없이 쓰시기 바랍니다. 계속 그렇게 하지 않고 작업할 경우, 장비도 망가질 수 있을 것 같습니다. 반드시, 보호용으로 접지를 하시고 사용하시기 바랍니다.
감사합니다.
>안녕하세요^^
>AVR에 대해 몇가지 물어볼 것이 있어서 이렇게 글을 씁니다.
>
>지금 AVR로 작품을 만들려고 시도 중인데..
>제가 완전 초보라서 그리 쉽지 않네요.
>그래도 그럴저럭 NTC 홈피와 친구의 도움으로 잘 하고 있는데..
>막막하게 절 막히게 하는 것이 있으서 이렇게 질문을 합니다.
>
>위 첨부한 코드가 제가 만들어 볼까 생각중인 작품인데요.
>
>거리센서나 스위치로 입력이 들어오면 서보모터가 들어온 입력값에 의해서
>제가 원하는 각도로 움직이는 프로그램을 만들려 합니다.
>
> if((KEY_IN_SENSOR & 0x10) && (DTstatus == ON)) { //거리센서를 통해 입력이 먼저 들어올 경우
> KEY_IN_SW_DIR = 0xff;
> motor_move(5,7);//두번째 뚜껑이 올라감.
> DTstatus = OFF;
> sensor = ON;
> } else if((KEY_IN_SENSOR & 0x10) && (DTstatus == OFF)) {
> }else{
> if(sensor == ON) {
> motor_move(5,15);
> motor_move(2,23);
> motor_init();
> KEY_IN_SW_DIR = 0x00;
> sensor = OFF;
> }
> DTstatus =ON;
> }
>
>문제는 여기서 부터 막힌다는 건데..
>usbisp를 이용하여 프로그램을 AVR에 로팅하고
>KEY_IN_SENSOR에 sensor를 이용하여 입력을 주면, 제가 원하는 대로 움직입니다.
>
>그런데 여기서 usbisp를 AVR에서 빼고 작동시키는 모터가 자기 맘대로 움직입니다.
>다시 usbisp를 꽂고 작동시키면 모터는 제가 원하는 대로 움직이구요..
>
>과연 무엇이 문제인지 모르겠습니다. AVR에 잘못된건지 아님 보드가 잘못된건지, 아님 USBISP가 잘못된 건지, 제가 짠 코드가 완전 잘못된 것인지 전혀 모르겠습니다.
>
>위와 같이 코드를 짜면 안되는 건지?
>물어볼 수 있는 곳이 여기 뿐이라서 이렇게 간절히 물어봅니다.
|
||||
| 1090 | 답변완료오랜만에 질문이요^^ | 김규범 | 2008-05-25 | 1,471 |
|
다른프로젝트 때문에.... ADC쪽을 못하다가 지금에서야 잡게 되었습니다.
하는 도중에 궁금점이 있어서 이렇게 왔습니다.
//ICC-AVR application builder : 2005-05-23 오후 8:41:55
// Target : M128
// Crystal: 16Mhz
#include <iom128v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0xff;
DDRA = 0xff;
PORTB = 0xff;
DDRB = 0xff;
PORTC = 0xff; //m103 output only
DDRC = 0x00;
PORTD = 0xff;
DDRD = 0x00;
PORTE = 0xff;
DDRE = 0x00;
PORTF = 0xff;
DDRF = 0x00;
PORTG = 0x1f;
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;
}
//ADC initialize
// Conversion time: 75uS
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0xc7; //select adc input 7
ACSR = 0x80;
ADCSRA = 0xe7;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_init();
uart0_init();
adc_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
}
// 입력으로 들어오는 채널의 ADC를 스타트 시킨다.
void startConvertion(unsigned int ch)
{
ADCSRA = ADCSRA & 0x3f;
//if( ADMUX == 0xc0) ADMUX = 0xc7;
//else ADMUX = 0xc0;
ADMUX = 0xc0;
ADCSRA = ADCSRA | 0xe0;
}
// startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다.
int readConvertData(void)
{
int value = 0x0000;
value = (ADCL)&0x00ff;
value |= (ADCH << 8);
value &= 0x03ff;
//delay(25);
return value;
}
void delay(int n)
{
volatile int i,j;
for(i=1;i<n;i++)
{
for(j=1;j<600;j++);
}
}
void main(void)
{
volatile unsigned int i;
unsigned int value1, value2;
unsigned char a;
a='<';
init_devices();
//insert your functional code here...
//printf(" \\n\\n\\rADC test program...\\n\\r");
PORTG = 0x0f;
PORTA = 0x01;
delay(1000);
PORTA = 0xff;
PORTG = 0xff;
PORTF = 0x00;
while(1){
startConvertion(0); // Left sensor Converting
value1 = readConvertData();
delay(25);
startConvertion(7); // Left sensor Converting
value2 = readConvertData();
printf("%d%c%d",value1,a,value2);
printf("\\n");
}
}
제가 원하는 체널 2개에서 오는 넘을 체크하는건 맞는거 같습니다..
그런데 원하는건 1초에 천번샘플링되게 하려고 저번에 물어봤었는데..
타이머를 쓰셔서, 1ms 간격마다 한번씩 ADC 하도록 하면 될 것 같네요.
이렇게 답변을 받았는데...
강좌부분에 타이머 쓰는 게 있더라구요....그래서 하려고하니까 거기선 20us로 설정해놨던데....
// 20us 타이머와 10ms 타이머용 변수를 만든다
int twenty_ustimer,Half_sectimer;
//TIMER0 initialize - prescale:1
// WGM: Normal
// desired value: 20uSec
// actual value: 19.984uSec (0.1%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x23; //set count
OCR0 = 0xDD;
TCCR0 = 0x01; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
twenty_ustimer++; // 20us마다 timer0 오버플로우 걸리면 20us 타이머를 하나씩 증가시킨다.
if(twenty_ustimer>=25000){ //20us 타이머가 25000보다 크면 즉,0.5초마다 1초 타이머를 하나씩 증가시킨다.
if(Half_sectimer==SETOK)
Half_sectimer = SETCANCLE;
else
Half_sectimer = SETOK;
twenty_ustimer=0; // 20us 타이머 0으로 초기화
}
TCNT0 = 0x23; //reload counter value 이 값은 실제 오실로 스코프로 찍어서, 정확한 값을 결정한다.
//이유: 실제로는 이 값대로 되어야 하나, 인터럽트 함수에서 많은 라인들로 인하여 값이 느려진다.
}
어느쪽에 20이라고 설정해줬는지 궁금합니다..
그리고 1초로 하려면 어느부분을 바꿔줘야 하나요?????
또한 강좌부분에 보니까 printf문을 같이 사용할수 없다고 하던데....
자세히쫌 가르쳐주셨으면 하네요....
관리자 답변
안녕하세요? 고객님,
timer0_init() 쪽에서 레지스터 들을 변화 시킴으로써 시간을 변경하게 됩니다.
그 중에서 TCNT0 값을 타이머 0 오버플로우가 날 때마다 다시 그 값으로 바꿔 줌으로써 다시 카운팅을 시작하게 됩니다.
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
TCNT0 = 0x23;
}
AVR 기본강좌 : http://www.NewTC.co.kr/강좌/AVR기본강좌.zip
avr 기본강좌->타이머편을 참고하시기 바랍니다.
감사합니다.
//TIMER0 initialize - prescale:1
// WGM: Normal
// desired value: 20uSec
// actual value: 19.984uSec (0.1%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x23; //set count
OCR0 = 0xDD;
TCCR0 = 0x01; //start timer
}
>다른프로젝트 때문에.... ADC쪽을 못하다가 지금에서야 잡게 되었습니다.
>
>하는 도중에 궁금점이 있어서 이렇게 왔습니다.
>
>
>
>//ICC-AVR application builder : 2005-05-23 오후 8:41:55
>// Target : M128
>// Crystal: 16Mhz
>
>#include <iom128v.h>
>#include <macros.h>
>
>
>void port_init(void)
>{
> PORTA = 0xff;
> DDRA = 0xff;
> PORTB = 0xff;
> DDRB = 0xff;
> PORTC = 0xff; //m103 output only
> DDRC = 0x00;
> PORTD = 0xff;
> DDRD = 0x00;
> PORTE = 0xff;
> DDRE = 0x00;
> PORTF = 0xff;
> DDRF = 0x00;
> PORTG = 0x1f;
> 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;
>}
>
>//ADC initialize
>// Conversion time: 75uS
>void adc_init(void)
>{
> ADCSRA = 0x00; //disable adc
> ADMUX = 0xc7; //select adc input 7
> ACSR = 0x80;
> ADCSRA = 0xe7;
>}
>
>//call this routine to initialize all peripherals
>void init_devices(void)
>{
> //stop errant interrupts until set up
> CLI(); //disable all interrupts
> XDIV = 0x00; //xtal divider
> XMCRA = 0x00; //external memory
> port_init();
> uart0_init();
> adc_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
>}
>
>// 입력으로 들어오는 채널의 ADC를 스타트 시킨다.
>void startConvertion(unsigned int ch)
>{
> ADCSRA = ADCSRA & 0x3f;
> //if( ADMUX == 0xc0) ADMUX = 0xc7;
> //else ADMUX = 0xc0;
> ADMUX = 0xc0;
> ADCSRA = ADCSRA | 0xe0;
>}
>
>// startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다.
>int readConvertData(void)
>{
> int value = 0x0000;
>
> value = (ADCL)&0x00ff;
> value |= (ADCH << 8);
> value &= 0x03ff;
> //delay(25);
> return value;
>}
>
>void delay(int n)
>{
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<600;j++);
> }
>}
>
>void main(void)
>{
> volatile unsigned int i;
> unsigned int value1, value2;
> unsigned char a;
> a='<';
>
> init_devices();
> //insert your functional code here...
> //printf(" \\n\\n\\rADC test program...\\n\\r");
> PORTG = 0x0f;
> PORTA = 0x01;
> delay(1000);
> PORTA = 0xff;
> PORTG = 0xff;
> PORTF = 0x00;
> while(1){
>
> startConvertion(0); // Left sensor Converting
> value1 = readConvertData();
>
> delay(25);
> startConvertion(7); // Left sensor Converting
> value2 = readConvertData();
>
>
>
> printf("%d%c%d",value1,a,value2);
> printf("\\n");
>
> }
>}
>
>제가 원하는 체널 2개에서 오는 넘을 체크하는건 맞는거 같습니다..
>
>그런데 원하는건 1초에 천번샘플링되게 하려고 저번에 물어봤었는데..
>
>타이머를 쓰셔서, 1ms 간격마다 한번씩 ADC 하도록 하면 될 것 같네요.
>
>이렇게 답변을 받았는데...
>
>강좌부분에 타이머 쓰는 게 있더라구요....그래서 하려고하니까 거기선 20us로 설정해놨던데....
>
>// 20us 타이머와 10ms 타이머용 변수를 만든다
>int twenty_ustimer,Half_sectimer;
>
>//TIMER0 initialize - prescale:1
>// WGM: Normal
>// desired value: 20uSec
>// actual value: 19.984uSec (0.1%)
>void timer0_init(void)
>{
> TCCR0 = 0x00; //stop
> ASSR = 0x00; //set async mode
> TCNT0 = 0x23; //set count
> OCR0 = 0xDD;
> TCCR0 = 0x01; //start timer
>}
>
>#pragma interrupt_handler timer0_ovf_isr:17
>void timer0_ovf_isr(void)
>{
> twenty_ustimer++; // 20us마다 timer0 오버플로우 걸리면 20us 타이머를 하나씩 증가시킨다.
> if(twenty_ustimer>=25000){ //20us 타이머가 25000보다 크면 즉,0.5초마다 1초 타이머를 하나씩 증가시킨다.
> if(Half_sectimer==SETOK)
> Half_sectimer = SETCANCLE;
> else
> Half_sectimer = SETOK;
> twenty_ustimer=0; // 20us 타이머 0으로 초기화
> }
>
> TCNT0 = 0x23; //reload counter value 이 값은 실제 오실로 스코프로 찍어서, 정확한 값을 결정한다.
> //이유: 실제로는 이 값대로 되어야 하나, 인터럽트 함수에서 많은 라인들로 인하여 값이 느려진다.
>}
>
>
>어느쪽에 20이라고 설정해줬는지 궁금합니다..
>
>그리고 1초로 하려면 어느부분을 바꿔줘야 하나요?????
>
>또한 강좌부분에 보니까 printf문을 같이 사용할수 없다고 하던데....
>
>자세히쫌 가르쳐주셨으면 하네요....
|
||||
| 1089 | 답변완료am-cs2p 모듈 질문 | 박준석 | 2008-05-25 | 1,508 |
|
또 글 남기네요...
모듈에 왼쪽 바퀴 부분이 이상합니다...
오른쪽 모터입력부분에는 오실로스코프로 찍었을때 a,a',b,b' 파형이 나오는데요....
왼쪽 바퀴부분에는 b, b' 는 파형이 나오는데요....a,a' 는 파형이 안나오네요...
오른쪽 바퀴는 돌아가는데....왼쪽 바퀴는 소리만 나고 버벅거립니다...
관리자 답변
안녕하세요? 고객님,
저희 N.T.C는 고객님의 질문을 빠른 시간 안에 잘 처리해 드리기 위하여 늘 노력하고 있습니다. 언제든 질문 있으시면 남겨 주시면, 최선을 다하여 처리해 드리겠습니다.
모터구동 모듈에 들어가는 전원이 몇 볼트 인지가 궁금합니다.
모터 구동부에 공급되는 전류가 딸리다 보니 생긴 증상은 아닐까요?
아답타를 몇 암페어 몇볼트를 쓰셨는 지 확인해 보시기 바랍니다.
가능한 최대 토크를 내시려면 양쪽 구동시 24V, 8A 정도 짜리를 쓰시는 것이 좋겠습니다. 한 쪽 당 풀토크시 3A까지 사용될 수 있고, 효율도 생각해야 하니까요.
감사합니다.
>또 글 남기네요...
>
>모듈에 왼쪽 바퀴 부분이 이상합니다...
>오른쪽 모터입력부분에는 오실로스코프로 찍었을때 a,a',b,b' 파형이 나오는데요....
>왼쪽 바퀴부분에는 b, b' 는 파형이 나오는데요....a,a' 는 파형이 안나오네요...
>오른쪽 바퀴는 돌아가는데....왼쪽 바퀴는 소리만 나고 버벅거립니다...
|
||||
