Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 4598 | 답변완료[질문] 제 ATMEGA128 PRO가 고장난것 같습니다. 봐주세요 | 김관회 | 2010-02-17 | 1,388 |
|
증상은 USART 연결이 잘됐었는데.
갑자기 잘안되구요(몇번씩 연결을 시도하다보면 연결됩니다) 그리고 더 큰 문제는
연결된 후에 데이터가 좀 문제가 있다는것입니다.
예를 들어
printf("LED ON");
delay(1000);
printf("LED OFF");
이런형태로 하면 LED ON 뒤에 LED OFF가 하이퍼터미널로 넘어와야하는데 LED ON만 계속 찍히고 참고로 같은소스 그대로 잘됐었습니다..
실제 1~2초 간격으로 led를 온/오프하는 소스가 잘됐었는데 지금은 그냥 계속 켜져있습니다.
갑작스레 생긴일이라 대처가 안되네요;;
구입한지는 이제 한달 된듯보이는데..
제 생각에는 물리적으로 atmega128 PRO의 어떤 부품?에 문제가 생긴게 아닌가합니다.
되던 코드가 복잡한코드도 아니고 저런 단순코드인데 갑자기 안되는거 보면요..
구매한지 1주일도 훨씬 지났고 유료처리되겠지만요 이대로 버려지는것보단 나을듯해서
글남깁니다. 물론 보셔야 겠지만.. 택배비도 왕복 제가 부담하므로 사실 수리비가 1만원가까이
나올바에는 그냥 버리는게 나은상황이라.. 그리고 보통 수리기간이 얼마나 걸리는지도
궁금하네요 조언구해봅니다.
관리자 답변
안녕하세요? 고객님, 저희 (주)뉴티씨(NEWTC) 제품을 이용하여 주셔서 감사합니다.
저희 (주)뉴티씨(NEWTC) 에서는 A/S의 경우 유상과 무상 처리가 있습니다.
고객님의 경우 유상 서비스에 해당합니다. 비용은 9,900원입니다.
하지만, 저희가 받아보고, 고장이 아닌 경우도 절반 이상인데, 고객님의 경우 혹시, 퓨즈비트가 변경된 것이 아닌가 싶습니다. 퓨즈비트가 0xffd9ef로 나오는 지 확인하시고, 그렇지 않다면, 퓨즈를 바꿔주면 정상동작 하지 않을까 싶습니다. 그것도 아니라면, 본사로 보내주세요.
천재 지변이나 소비자 과실의 경우 유상처리되며, 실비 부담만 받고 있습니다.
이 경우 보내고 받는 택배비는 소비자께서 부담하셔야 합니다.
CJ택배(1588-5353)를 이용하시거나 또는, 작은 것은 우체국 택배를 이용하셔도 편리하고 저렴합니다.
무상처리의 경우 구매 직후 제품자체의 하자가 있을 경우가 되겠습니다. 택배를 발송해 주시면 택배로 A/S도 가능합니다. 이 경우, 택배비와 수리비는 저희 (주)뉴티씨(NEWTC)에서 부담합니다. 무상 처리를 받으시려면, 이상 증상 발생 경위, 현재 나타나는 증상 등을 정확히 적어서 함께 보내주셔야 무상 처리 판단후 처리가 가능합니다.
기본적으로 전화 상담 보다는 Q&A를 이용하여 주시구요, 자세히 남겨 주시면, 그만큼 자세히 답변하여 드립니다. 업무시간이 아닌 경우에는 전화를 받지 못하오니, 양해 바랍니다. 이 경우에는 팩스, 이 메일이나 Q&A를 통해서 A/S 건에 관하여 메시지를 남겨 주시면 처리해 드리겠습니다.
발송하실 주소 :
서울특별시 용산구 한강로 3가 16-85 GS한강에클라트 521호 (주)뉴티씨(NEWTC) A/S 담당자 (앞)
02-704-4774
감사합니다.
>증상은 USART 연결이 잘됐었는데.
>
>갑자기 잘안되구요(몇번씩 연결을 시도하다보면 연결됩니다) 그리고 더 큰 문제는
>
>연결된 후에 데이터가 좀 문제가 있다는것입니다.
>
>예를 들어
>
>printf("LED ON");
>delay(1000);
>printf("LED OFF");
>
>이런형태로 하면 LED ON 뒤에 LED OFF가 하이퍼터미널로 넘어와야하는데 LED ON만 계속 찍히고 참고로 같은소스 그대로 잘됐었습니다..
>
>실제 1~2초 간격으로 led를 온/오프하는 소스가 잘됐었는데 지금은 그냥 계속 켜져있습니다.
>
>갑작스레 생긴일이라 대처가 안되네요;;
>
>구입한지는 이제 한달 된듯보이는데..
>
>제 생각에는 물리적으로 atmega128 PRO의 어떤 부품?에 문제가 생긴게 아닌가합니다.
>
>되던 코드가 복잡한코드도 아니고 저런 단순코드인데 갑자기 안되는거 보면요..
>
>구매한지 1주일도 훨씬 지났고 유료처리되겠지만요 이대로 버려지는것보단 나을듯해서
>
>글남깁니다. 물론 보셔야 겠지만.. 택배비도 왕복 제가 부담하므로 사실 수리비가 1만원가까이
>
>나올바에는 그냥 버리는게 나은상황이라.. 그리고 보통 수리기간이 얼마나 걸리는지도
>
>궁금하네요 조언구해봅니다.
|
||||
| 4597 | 답변완료온습도센서모듈관련 | 김병호 | 2010-02-17 | 1,380 |
|
아까 전화드렸던 학생입니다..
다름이 아니라 온습도센서모듈..
알려주셨던것 가르쳐주시면 감사하겠습니다..^^
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
첨부된 소스는 본사 고객님 중 한 분이 짜서 올려주신 소스입니다.
참고하시구요.
데이터 시트도 함께 올려 드렸습니다.
SHT11 쓰시면 저렴합니다.
- 구매처 -
http://www.eleparts.co.kr/front/productdetail.php?productcode=005043001000000008&sort=
습도 센서의 경우 전용 필터 캡도 있네요.
http://www.eleparts.co.kr/front/productdetail.php?productcode=005043001000000009&sort=
수고하세요.
>아까 전화드렸던 학생입니다..
>
>다름이 아니라 온습도센서모듈..
>
>알려주셨던것 가르쳐주시면 감사하겠습니다..^^
|
||||
| 4596 | 답변완료SM-WJTAG 핀배열 질문입니다.. | 지한결 | 2010-02-17 | 1,390 |
|
SM-WJTAG 핀배열에 대한 정보를 찾을수 없어 이렇게 문의를 드립니다.
혹, 위 모델이 ARM9 을 지원하는지도 알고 싶습니다..
답변 부탁드립니다..
관리자 답변
안녕하세요
그림에 핀베열을 첨부해고요.
확인해 보시길 바랍니다.
ARM7 이나 ARM9 동일한 프로토콜을 사용합니다.
즉 ARM9 가능합니다.
수고하세요
>SM-WJTAG 핀배열에 대한 정보를 찾을수 없어 이렇게 문의를 드립니다.
>
>혹, 위 모델이 ARM9 을 지원하는지도 알고 싶습니다..
>
>답변 부탁드립니다..
|
||||
| 4595 | 답변완료ISP 스위치 | 임성균 | 2010-02-17 | 1,344 |
|
ISP 2번스위치 기능은 무엇입니까?
관리자 답변
안녕하세요
usbisp V03 에 DIP 스위치를 말하는것 같군요.
-1번은 타겟보드에 전원을 공급하는 용도 입니다.
( 많은 전류를 소모하는 보드에는 권장을 하지않습니다.)
-2.번은 isp펌웨어 업그레이드 할때 사용합니다.
저희쪽에서 사용하는 핀입니다. ISP 사용자가 사용할 수 없는 핀입니다.
수고하세요
>ISP 2번스위치 기능은 무엇입니까?
|
||||
| 4594 | 답변완료at-128(AB- M128-B) PORTF | 김병호 | 2010-02-17 | 1,434 |
|
at-128(AB- M128-B) PORTF 연결선 제품명 좀 알려 주실수 있나요??
관리자 답변
네, 고객님,
SE-MIN1 케이블입니다.
본사(02-704-4774)와 대리점인 용산 에스와이 전자(02-704-4376)에서 구매 가능하십니다.
수고하세요.
>at-128(AB- M128-B) PORTF 연결선 제품명 좀 알려 주실수 있나요??
|
||||
| 4593 | 답변완료듀얼렌즈 Co2센서모듈 (SH-300-ND)에 관한 질문입니다. | 김병호 | 2010-02-17 | 1,446 |
|
Co2센서모듈(SH-300-ND)과 습도센서모듈(USB245-SHT) 이 두개 모듈을
AVR MEGA 128보드에 (AB-M128-B)에 연결하려고 하는데
어떻게 연결해야 하는지 방법을 알려주세요.
빠른 답변 부탁드립니다.
혹시 연결 시에 필요한 부품이나 그런게 있으면 그 모델명도 상세히 첨부해주시면
감사드리겠습니다
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
CO2 센서나 습도 센서는 본사의 제품이 아니어서, 정확한 사용법은 센서 데이터 시트를 참고하여 연결하셔야 할 것 같습니다.
CO2 센서는 찾아보니, CN1 커넥터에 GND, VCC, AnalogDataOut(0~3V)가 있는 것 같네요.
VCC전압을 확인하여, 해당 전압에 연결하여 주고, Analog Data는 F 포트에 연결하여 ADC 하여 받으면 될 것 같네요.
사용하시려는 습도 센서는 자세한 설명을 찾을 수 없어서, 설명해 드리기 어렵습니다.
그 제품 판매 회사로 해당 커넥터들의 세부 스펙을 받으셔서, 디지탈 타입이면, 포트에 연결하여 사용하시거나, 아날로그 데이터로 나오면, ADC 포트인 F 포트로 연결하여 사용하시기 바랍니다.
ADC사용법은 강좌->AVR 강좌의 초초보 강좌나 ADC 강좌를 참고 바랍니다.
수고하세요.
>Co2센서모듈(SH-300-ND)과 습도센서모듈(USB245-SHT) 이 두개 모듈을
>
>AVR MEGA 128보드에 (AB-M128-B)에 연결하려고 하는데
>
>어떻게 연결해야 하는지 방법을 알려주세요.
>
>빠른 답변 부탁드립니다.
>
>혹시 연결 시에 필요한 부품이나 그런게 있으면 그 모델명도 상세히 첨부해주시면
>
>감사드리겠습니다
|
||||
| 4592 | 답변완료at91sam7s 시리즈에서요 | 이상현 | 2010-02-16 | 1,379 |
|
1. R314 0옴이던데 이부분은 그냥 선으로 연결하면 되는건가요?
2. usb쪽에 쇼트키 다이오드 쓰셧는데 그건 다른걸로 대체 못하나요? 대체한다면 용량은?
3. AM_JTAG에서 R312 부분에 N.C라고 되어있는데 이 부분은 몇 옴짜리를 써야되나요?
관리자 답변
안녕하세요
>1. R314 0옴이던데 이부분은 그냥 선으로 연결하면 되는건가요?
선으로 연결해도 무방합니다.
>2. usb쪽에 쇼트키 다이오드 쓰셧는데 그건 다른걸로 대체 못하나요? 대체한다면 용량은?
선으로 연결해도 무방합니다.
>3. AM_JTAG에서 R312 부분에 N.C라고 되어있는데 이 부분은 몇 옴짜리를 써야되나요?
N.C. 는 not connection 연결을 안하다는 뜻입니다.
수고하세요
>1. R314 0옴이던데 이부분은 그냥 선으로 연결하면 되는건가요?
>2. usb쪽에 쇼트키 다이오드 쓰셧는데 그건 다른걸로 대체 못하나요? 대체한다면 용량은?
>3. AM_JTAG에서 R312 부분에 N.C라고 되어있는데 이 부분은 몇 옴짜리를 써야되나요?
|
||||
| 4591 | 답변완료DC모터 컨트롤러 | 봉세연 | 2010-02-16 | 1,431 |
|
라인트레이서 키트에 있는
DC모터 구동보드를 직접 만들고 싶은데요..
그 재료중에 DC모터 컨트롤러(9개 핀달린 긴거)는 따로 파는 게 아닌가요??
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
라인트레이서 중에서 조립품을 이용하시면 좋을 것 같네요.
직접 떔을 해가는 제품이고, 저렴하게 이용이 가능합니다.
본사에서는 부품별로 별도로 판매하고 있지는 않습니다.
라인트레이서용 부품을 한데 묶어서 한꺼번에 조립용 킷트에 판매하고 있습니다.
수고하세요.
>라인트레이서 키트에 있는
>DC모터 구동보드를 직접 만들고 싶은데요..
>그 재료중에 DC모터 컨트롤러(9개 핀달린 긴거)는 따로 파는 게 아닌가요??
|
||||
| 4590 | 답변완료안녕하십니까. 딜레이 질문 했던 학생입니다. | 김동규 | 2010-02-16 | 1,358 |
|
혼자 유추해 내려고 계산도 여러번 해보고 했는데....
조금 어렵네요...
다시 한번 질문 올리겠습니다.
for(i=0; i<1000; i++){
for(i=0; i<677; i++){
}
}
저렇게 1초라고 하셨는데...제가 변형 해서 사용해 보려고 이리저리 유추 해봤는데...음
for문이 4클럭이고...4*1000*4*677 * (1/16000000) = 0.677 이라고 나오는데 제가 계산 한게
틀린것인가요....
관리자 답변
안녕하세요
C 문장으로 클럭 사이클이 유추하기가 어렵습니다.
for문이 4사이클이라고는 하지만
처음 for문으로 들어가고 변수 지정등....
for문에서 for문으로 들어갈때...
저런곳에 소용되는 시간들이 있습니다.
c문장 보다는 asm 이..
asm 보다는 타이머가 정확합니다.
수고하세요
>혼자 유추해 내려고 계산도 여러번 해보고 했는데....
>조금 어렵네요...
>다시 한번 질문 올리겠습니다.
>
>for(i=0; i<1000; i++){
> for(i=0; i<677; i++){
> }
>}
>
>저렇게 1초라고 하셨는데...제가 변형 해서 사용해 보려고 이리저리 유추 해봤는데...음
>for문이 4클럭이고...4*1000*4*677 * (1/16000000) = 0.677 이라고 나오는데 제가 계산 한게
>틀린것인가요....
>
>
|
||||
| 4589 | 답변완료AD-USBISP V02 에서 89S52 연결이 안됩니다.. | 이종민 | 2010-02-16 | 1,357 |
|
안녕하세요^^
새해 복 많이 받으세요
AD-USBISP V02 를 사용중입니다..
89S52를 연결 하려고 하는데 안됩니다..
신호선 6줄만 연결 되어 있습니다.
Reset 단에는 5.1k 저항 gnd 되어 있습니다.
Cap 은 달지 않고 있습니다..(Reset signal 이 AVR 과 반대 인가 봅니다..)
AVR Studio 1.5 사용중 입니다.
Connecting 누르고
Platform : STK500 or AVRISP
Port : Auto 선택하여 Connect... 버튼 클릭하면 download 창으로 넘어 갑니다.
Device.. : AT89S52
Programming Mode : ISP mode 로 선택 되어저 있습니다..
녹색 LED 깜빡일때 89S52 연결하고 전원 넣고
Read Signature 하면 읽어 오지 못하고 에러 뜹니다...
장치관리자의 포트에 Prolific USB to Serial Comm Port(COM2)
떠있습니다.
무었을 어떻게 해야 하는지요..
관리자 답변
안녕하세요
타겟보드가 어떻것을 사용하고 있나요?
>AVR Studio 1.5 사용중 입니다.
1,5버젼이 없는것로 알고있습니다.
지금보통 사용하시는 AVR Studio 는 4.12~4.17 사이 입니다.
다시 버젼 확인해 보시고요.
8051은 reset 풀다운 입니다. avr 과는 반대입니다.
Read Signature를 하시면 0x1e 0x52 0x06 라고 나와야 정상입니다.
ISP에 문제가 있어 보입니다.
AD-USBISP를 사용하시는 버젼이 V02 이시면 저희쪽으로 보내시어
AD-USBISP 점검 및 수리 그리고, V03버전의 펌웨어 업데이트를
받아 보시길 바랍니다.
수고하세요
>안녕하세요^^
>새해 복 많이 받으세요
>
>AD-USBISP V02 를 사용중입니다..
>89S52를 연결 하려고 하는데 안됩니다..
>신호선 6줄만 연결 되어 있습니다.
>Reset 단에는 5.1k 저항 gnd 되어 있습니다.
>Cap 은 달지 않고 있습니다..(Reset signal 이 AVR 과 반대 인가 봅니다..)
>
>AVR Studio 1.5 사용중 입니다.
>Connecting 누르고
>Platform : STK500 or AVRISP
>Port : Auto 선택하여 Connect... 버튼 클릭하면 download 창으로 넘어 갑니다.
>Device.. : AT89S52
>Programming Mode : ISP mode 로 선택 되어저 있습니다..
>
>녹색 LED 깜빡일때 89S52 연결하고 전원 넣고
>Read Signature 하면 읽어 오지 못하고 에러 뜹니다...
>
>장치관리자의 포트에 Prolific USB to Serial Comm Port(COM2)
>떠있습니다.
>
>무었을 어떻게 해야 하는지요..
>
|
||||
| 4588 | 답변완료usb isp v03을 사용중인데요. | 주성탁 | 2010-02-16 | 1,328 |
|
avr이 아닌 다른 pic에 다운로드하는데
usb isp v03을 사용할수 있는지요?
포니프로같은 외부 프로그램에서는 동작을 안하는지
궁금합니다.
관리자 답변
안녕하세요
usb isp v03 는 avr 및 atmel의 일부 8051만 다운로드가 가능합니다.
당연히 pic 다운로드가 안됩니다.
그리고, ponyprog라는 툴은 usb isp v03 를 지원하지 않습니다.
수고하세요
>avr이 아닌 다른 pic에 다운로드하는데
>usb isp v03을 사용할수 있는지요?
>포니프로같은 외부 프로그램에서는 동작을 안하는지
>궁금합니다.
|
||||
| 4587 | 답변완료DC 모터 구동 모듈(Single 4A) 사용하기 위해 필요한 라인들... | 이승철 | 2010-02-15 | 1,313 |
|
이 모듈 구동하기 위해서
10핀 케이블이랑
파워 2핀만 있으면 구동가능한가요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
본사의 AVR이나 ARM, 8051, FPGA 등이 꼽혀 있는 메인 보드도 있어야 합니다.
거기서, 명령을 내려야 겠지요.
수고하세요.
>이 모듈 구동하기 위해서
>10핀 케이블이랑
>파워 2핀만 있으면 구동가능한가요?
|
||||
| 4586 | 답변완료led 점등할려고 합니다 | 박영재 | 2010-02-15 | 1,336 |
|
AB-M128-B 보드와AM-TL8을 이용하여 PORTA 에 led 점등할려고 합니다
AM-TL8 의 예제소스에서
#include <iom128v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
int main(void)
{
init_devices();
while(1){
PORTA = 0x01;
delay(1000);
PORTA = 0x02;
delay(5000);
PORTA = 0x04;
delay(1000);
PORTA = 0x08;
delay(5000);
PORTF = 0x10;
delay(1000);
PORTF = 0x20;
delay(1000);
}
}
void delay(int n)
{
volatile int i,j;
for(i=1;i<n;i++)
{
for(j=1;j<600;j++);
}
}
이렇게하여 점등을 하였습니다
그런데 여기에서
PORTA = 0x01 를 DO 로
PORTA = 0x02 를 RE 로
PORTA = 0x04 를 MI
PORTA = 0x08 를 FA
PORTA = 0x10 를 SO
PORTA = 0x20 를 LA 의 문자로 취환하여 적을려고 하는데 즉
DO;
delay(1000);
RE;
delay(5000);
MI;
delay(1000);
FA;
delay(5000);
SO;
delay(1000);
LA;
delay(1000);
이렇게입니다
그래서 선행처리를 아래와같이선언하고 아래와같이 고쳐서 해보았는데
#include <iom128v.h>
#include <macros.h>
#define DO PORTA = 0x01 // PORTA = 0x01을 DO로 취환
#define RE PORTA = 0x02 // PORTA = 0x02을 RE로 취환
#define MI PORTA = 0x04
#define FA PORTA = 0x08
#define SO PORTA = 0x10
#define LA PORTA = 0x20
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
int main(void)
{
init_devices();
while(1){
DO;
delay(1000);
RE;
delay(5000);
MI;
delay(1000);
FA;
delay(5000);
SO;
delay(1000);
LA;
delay(1000);
}
}
void delay(int n)
{
volatile int i,j;
for(i=1;i<n;i++)
{
for(j=1;j<600;j++);
}
}
를 컴파일하여 다운로드했는데 않되는군요
어떻게고쳐야할지 부탁합니다
요점은 PORTA = 0x01 을 다른 간단한 문자로 취환하고 싶습니다
관리자 답변
안녕하세요?
괄호로 묶어 보세요~
#define LA (PORTA = 0x20)
현재 테스트 할 수 있는 환경이 안되는 곳이라서, 테스트 할 수는 없지만, 될 것 같네요.
수고하세요.
>AB-M128-B 보드와AM-TL8을 이용하여 PORTA 에 led 점등할려고 합니다
>AM-TL8 의 예제소스에서
>
>#include <iom128v.h>
>#include <macros.h>
>
>void port_init(void)
>{
> PORTA = 0x00;
> DDRA = 0xFF;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00;
> DDRC = 0x00;
> PORTD = 0x00;
> DDRD = 0x00;
> PORTE = 0x00;
> DDRE = 0x00;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x00;
>}
>
>
>int main(void)
>{
>
> init_devices();
>
> while(1){
>
>
> PORTA = 0x01;
> delay(1000);
> PORTA = 0x02;
> delay(5000);
> PORTA = 0x04;
> delay(1000);
> PORTA = 0x08;
> delay(5000);
> PORTF = 0x10;
> delay(1000);
> PORTF = 0x20;
> delay(1000);
>
> }
>
>}
>
>
>void delay(int n)
>{
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<600;j++);
> }
>}
>
>이렇게하여 점등을 하였습니다
>그런데 여기에서
>
>
>
> PORTA = 0x01 를 DO 로
> PORTA = 0x02 를 RE 로
> PORTA = 0x04 를 MI
> PORTA = 0x08 를 FA
> PORTA = 0x10 를 SO
> PORTA = 0x20 를 LA 의 문자로 취환하여 적을려고 하는데 즉
>
> DO;
> delay(1000);
> RE;
> delay(5000);
> MI;
> delay(1000);
> FA;
> delay(5000);
> SO;
> delay(1000);
> LA;
> delay(1000);
>이렇게입니다
>
>그래서 선행처리를 아래와같이선언하고 아래와같이 고쳐서 해보았는데
>
>
>#include <iom128v.h>
>#include <macros.h>
>#define DO PORTA = 0x01 // PORTA = 0x01을 DO로 취환
>#define RE PORTA = 0x02 // PORTA = 0x02을 RE로 취환
>#define MI PORTA = 0x04
>#define FA PORTA = 0x08
>#define SO PORTA = 0x10
>#define LA PORTA = 0x20
>void port_init(void)
>{
> PORTA = 0x00;
> DDRA = 0xFF;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00;
> DDRC = 0x00;
> PORTD = 0x00;
> DDRD = 0x00;
> PORTE = 0x00;
> DDRE = 0x00;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x00;
>}
>
>
>int main(void)
>{
>
> init_devices();
>
> while(1){
>
>
> DO;
> delay(1000);
> RE;
> delay(5000);
> MI;
> delay(1000);
> FA;
> delay(5000);
> SO;
> delay(1000);
> LA;
> delay(1000);
>
> }
>
>}
>
>
>void delay(int n)
>{
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<600;j++);
> }
>}
>
>를 컴파일하여 다운로드했는데 않되는군요
>어떻게고쳐야할지 부탁합니다
>요점은 PORTA = 0x01 을 다른 간단한 문자로 취환하고 싶습니다
>
|
||||
| 4585 | 답변완료안녕하십니까. 딜레이 질문좀 드리겠습니다. | 김동규 | 2010-02-13 | 1,459 |
|
코드비전에서 딜레이 헤더파일이나 다른 분들이 쓰시는 딜레이를 보면
ms or us로 어느정도 시간이 정확하게 맞게 사용 하시는거 같습니다.
icc에는 딜레이를 직접만들어서 사용하는데 정확한 시간을 알기가 어려운것 같습니다.
그래서 제가 공부좀 하다가
for문의 경우 4클럭을 차지 한다고 알고 있습니다. 그래서 포문에 포문을 계속 줘서 딜레이를 조절 해보고 싶습니다.
아트메가 128을 사용하고 크리스탈은 16메가 헤르츠 입니다.
그렇다면 16클럭을 흘린다면 1마이크로 세컨드가 지난다고 생각하고 있습니다.
void dellay(int n){
volatile int i1, j1, j2, j3;
for(i1=1; i1<n; i1++) { //4클럭
for(j1=1; j1<4; j1++){ //4클럭
for(j2=1; j2<4; j2++){ //4클럭
for(j3=1; j3<4; j3++); //4클럭
}
}
}
}
함수를 위와같이 정의 할시 16클럭이 지나가는 것인가요...아니면 64클럭이 지나가는 것인가요?
어떤분이 코드비전에서 딜레이를 만들어 놓으신걸 봤는데 의미없이 클럭을 사용하는 명령어...
#asm volatile(""); #asm volatile(""); //4클럭
을 사용하는 분이 계시는거 같은데....icc에서는 명령어가틀려서 사용할수가 없었습니다. 그래서 포문 네개로 만들어봤는데...가능 한것인가요....
icc에는 저렇게 의미없이 클럭을 사용하는 명령어가 없나요?
관리자 답변
안녕하세요? 고객님,
asm(""); 이렇게 쓰면 될 것 같습니다.
그리고, for(i=0;i<1000;i++){
for(i=0;i<677;i++){
}
}
이렇게 하면 ICCAVR에서 대략 1초가 되더군요.
그리고, 아무 함수나 만들어서, 아무것도 안하는 함수를 하나 실행하면,
20us 걸립니다.
delay로 정확한 딜레이 시간을 만드는 것은 중간에 끼어드는 인터럽트 루틴 등에 따라서, 시간이 달라지게 됩니다. 따라서, 꼭 필요하다면, 타이머로 시간을 만들어 사용하는 것이 좋겠습니다.
수고하세요.
>코드비전에서 딜레이 헤더파일이나 다른 분들이 쓰시는 딜레이를 보면
>ms or us로 어느정도 시간이 정확하게 맞게 사용 하시는거 같습니다.
>icc에는 딜레이를 직접만들어서 사용하는데 정확한 시간을 알기가 어려운것 같습니다.
>
>그래서 제가 공부좀 하다가
>for문의 경우 4클럭을 차지 한다고 알고 있습니다. 그래서 포문에 포문을 계속 줘서 딜레이를 조절 해보고 싶습니다.
>
>
>
>아트메가 128을 사용하고 크리스탈은 16메가 헤르츠 입니다.
>
>그렇다면 16클럭을 흘린다면 1마이크로 세컨드가 지난다고 생각하고 있습니다.
>
>void dellay(int n){
> volatile int i1, j1, j2, j3;
> for(i1=1; i1<n; i1++) { //4클럭
> for(j1=1; j1<4; j1++){ //4클럭
> for(j2=1; j2<4; j2++){ //4클럭
> for(j3=1; j3<4; j3++); //4클럭
>
> }
>
> }
> }
> }
>
>
>함수를 위와같이 정의 할시 16클럭이 지나가는 것인가요...아니면 64클럭이 지나가는 것인가요?
>
>어떤분이 코드비전에서 딜레이를 만들어 놓으신걸 봤는데 의미없이 클럭을 사용하는 명령어...
>#asm volatile(""); #asm volatile(""); //4클럭
>을 사용하는 분이 계시는거 같은데....icc에서는 명령어가틀려서 사용할수가 없었습니다. 그래서 포문 네개로 만들어봤는데...가능 한것인가요....
>
>icc에는 저렇게 의미없이 클럭을 사용하는 명령어가 없나요?
|
||||
| 4584 | 답변완료스위치 보드 입력 문의 | 원호천 | 2010-02-12 | 1,402 |
|
사용제품 : KD-128Rro, AM-TS8
사용컴파일러 : WinAVR20100110, AVR Studio 4.0
안녕하세요? 귀사의 제품을 구입하여 여러가지 테스트를 해보던 중 이상한 점이 발견되어 질의드립니다.
먼저, 테스트 환경은 아래와 같습니다.
1. 포트 D에 스위치 보드 AM-TS8을 연결
2. 8개의 스위치를 각각 눌렀을 때 FND의 첫번째에 숫자가 1~8까지 표시
(ex. 세번째 스위치를 눌렀을 때 FND의 첫번째에 3이 표시됨)
그런데, 포트 D의 설정을 DDRD = 0x00으로 설정하면 스위치 입력이 제대로 되지 않습니다.
이상한 것은 DDRD=0xFF으로 설정하면 제대로 작동이 잘 된다는 것입니다.
아래 소스를 첨부합니다.
#include <avr/io.h>
//딜레이 함수 설정
void Delay_us(unsigned char time_us)
{ register unsigned char i;
for(i = 0; i < time_us; i++)
{ asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
}
}
void Delay_ms(unsigned int time_ms)
{ register unsigned int i;
for(i = 0; i < time_ms; i++)
{ Delay_us(250);
Delay_us(250);
Delay_us(250);
Delay_us(250);
}
}
int main(void)
{
DDRA = 0xFF; //FND에 숫자를 표시하기 위한 출력 설정
DDRC = 0xFF; //FND on을 위한 출력 설정
DDRD = 0x00; //포트 D의 모든 비트를 입력으로 설정
//이렇게 설정하면 스위치가 제대로 입력되지 않습니다.
int i;
i = 0;
PORTC = 0x0E; //FND의 첫번째만 사용
PORTA = 0x3F; //이 부분도 약간 이상합니다. FND에 초기에 0을 표시하도록 했는데 처음 실행하면 6이 표시됩니다.
while(1)
{
//스위치 입력에 따른 i값 설정
//스위치의 반복입력을 막기 위한 딜레이 함수호출
if(PIND & 0b10000000){i=1;Delay_ms(150);}
if(PIND & 0b01000000){i=2;Delay_ms(150);}
if(PIND & 0b00100000){i=3;Delay_ms(150);}
if(PIND & 0b00010000){i=4;Delay_ms(150);}
if(PIND & 0b00001000){i=5;Delay_ms(150);}
if(PIND & 0b00000100){i=6;Delay_ms(150);}
if(PIND & 0b00000010){i=7;Delay_ms(150);}
if(PIND & 0b00000001){i=8;Delay_ms(150);}
//값에 따른 FND에 숫자 표시
switch(i)
{
case 1 : PORTA = 0x06;
break;
case 2 : PORTA = 0x5B;
break;
case 3 : PORTA = 0x4F;
break;
case 4 : PORTA = 0x66;
break;
case 5 : PORTA = 0x6d;
break;
case 6 : PORTA = 0x7d;
break;
case 7 : PORTA = 0x27;
break;
case 8 : PORTA = 0x7F;
break;
}
}
}
분명이 입력 선언은 DDRD = 0x00이 맞는데 왜 이런 현상이 발생할까요?
혹시 내부 풀업저항때문일까 의문의 들어 SFIOR = 0x40를 선언해봤는데도 상황은 똑같습니다.
그리고 질문이 하나 더 있는데요,
AM-TS8 스위치 보드를 포트 E에 연결한 후 AVR Studio에서 다운로드하면,
ISP Mode Error이 발생(첨부파일 참조)하는데 이건 왜 그런 것인지요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
PORTD에는 UART1의 RXD1, TXD1이 각각 D2, D3로 배치되어 있으며, KD-128PRO 킷트의 AM-128PRO 모듈의 MAX3232에 연결되어 있습니다. 이것으로 영향을 받을 수 있구요. 또한,D0, D1에는 I2C의 SCL, SDA를 위하여 각각 저항들에 연결되어 풀업된 것처럼 되어 있습니다.
따라서, DS1307 관련된 회로들의 영향을 받을 수 있습니다.
아마 그래서, 스위치 입력이 안 되는 것일 겁니다.
고객님처럼 불편을 겪는 고객님들을 위하여, 본사에서 준비한 보드가 AVR MEGA 128 개발보드(소형) AB-M128-B 입니다. 이 보드를 이용하면, 위에서 생기는 문제들은 전혀 없이 사용하실 수 있습니다. 포트만 쫙 뽑아 놓았으니까요.
현재 가지고 계신 KD-128PRO 보드는 여러가지가 달려 있고, 기본적인 포트들이 뽑혀 있어서, 출력용으로는 모든 포트를 별 문제 없이 사용이 가능하지만, 입력으로 사용시에는 주의할 포트들이 일부 있습니다. 회로를 참고하셔서 사용하시구요.
ATMEGA128의 각포트 및 핀들의 다음 특징들도 참고하시면 좋습니다.
기본적으로 모든 포트는 GPIO로 사용이 가능하다. 하지만, 마다 각각 기능이 있어서, 사용시에 주의가 필요한데, 일반적으로 주의할 사항을 몇가지 기록하여 보았다.
G포트 : 외부 메모리 사용시에 사용되는 제어신호인 /WR, /RD, ALE를 주의한다.
외부 메모리로 동시에 사용시에 이 부분과 GND 사이에 만약 커패시터가 연결된 회로를
구성하게 되면, 외부 메모리 억세스에 실패할 가능성이 높다. 따라서, 이 경우
이 핀들과 GND 사이에 커패시터를 연결하지 않도록 주의한다.
F 포트 :
ADC 용으로 사용 가능하다. ADC 할 때는 만약 외부 전압으로 AREF를 쓴다면,
external AREF에 연결되는 전압을 꼭 센서의 출력 범위와 맞춰 주도록 한다.
그래야만 정밀한 결과를 얻을 수 있다.
또한, AVCC, internal 2.56V ref 전압도 사용이 가능한데, 이 경우 AREF가 외부 DC 전압에
고정되어 있다면, 선택할 수 없으므로, 반드시 이 경우 AREF는 연결하지 않아야 한다.
또한, 이 경우에는 AREF와 GND 사이에 커패시터를 하나 달아주는 것이 노이즈를 막아주는
역할을 한다.
퓨즈 비트의 JTGAEN를 Enable(0) 해 놓을 경우 JTAG 핀들에 해당하는 핀들인 이 포트의
D4~D7이 사용 불가하니, 주의 바란다. 그래서, 본사에서는 출시하는 모든 포트를 사용하기
위하여 퓨즈비트를 JTAGEN이 disable(1)로 되어 있다.
E포트 : D0, D1 이 각각 RXD0, TXD0 기능도 하도록 되어 있다. 따라서, UART0를 초기화 하게
되면, D0, D1이 각각 평상시에 High 로 전압이 올라가 있게 된다. 즉, 이 경우 포트로 사용
이 불가하다. 따라서, 이 경우 왜 이 핀들이 출력이 항상 High로만 나오는가 고민하지
않기 바란다.
D포트 : D2, D3가 각각 RXD1, TXD1 기능도 하도록 되어 있다. 따라서, UART1을 초기화 하게
되면, D0, D1이 각각 평상시에 High 로 전압이 올라가 있게 된다. 즉, 이 경우 포트로
사용이 불가하다. 따라서, 이 경우 왜 이 핀들이 출력이 항상 High로만 나오는가 고민하지
않기 바란다.
B 포트 :
PB1의 SCK 핀은 매우 민감한 클럭 핀이다. SPI 통신을 할 때, 특히 민감하게 반응한다.
따라서, 이 선을 SPI로 사용할 때는 꼭 가장 가까운 곳에 디바이스를 위치하게 해야 하면,
그렇게 하기 어렵다면, PCB 캐드 작업 시에 바깥쪽으로 그라운드와 연결된 GUART Line을
양쪽 및 반대면 PCB에 생성하여 그 선을 따라가면서 싸 주어서, 노이즈가 끼지 못하도록 해
주어야 한다. 높은 정도의 속도와 정밀도가 필요한 경우에 이렇게 반드시 해 주어야 한다.
4층 정도로 만들어서, 반대면에서의 노이즈를 GND 판으로 막아주는 것도 좋겠다.
또한, SCK 핀이 있는 PB1와 GND 사이에 커패시터가 회로적으로 연결되게 되면, 클럭이
커패시터로 인하여 떨지 못하게 되어서, SCK를 사용하기 어렵게 되므로, 주의한다.
어쩔 수 없이 커패시터를 써야 할 사용할 상황이거나 다른 회로를 이 핀에 부가하여야 한다면,
반드시 PB1에서 1k옴 정도의 직렬 저항을 하나 거친 후에 커패시터를 쓰거나 다른 회로를 부가
하여 쓰도록 한다. 이렇게 하지 않으면, ISP 다운로딩 자체에도 문제가 생길 수 있다.
이런 경우를 종종 보아 왔으며, 반드시 주의하여 방지하도록 한다.
또한, AVR은 전압에 매우 민감하다. TTL Level의 5V 전압을 사용하는 AVR 시리즈의 경우
4.5~5.5V 까지만 정상동작하며, 그 이상의 전압을 가하게 되면, 경우에 따라 바로 망가지게 될 수도 있으며, 오래 지속될 경우, 고장이 나기도 하는 데, 이 고장의 경우 고장 부위에 따라서
동작 자체는 잘 되지만, ISP 다운로딩이 안되는 문제가 발생하기도 한다.
또한, 일부 핀이 동작이 안 되거나, 동작은 되지만, AVR칩에서 열이 많이 나는 고장이 생기기도 한다. 이러한 경우, 어느 정도 시간이 지나면 어떤 상황으로 진행될 지 보장할 수 없는 상황이 되므로,
반드시 칩을 교체하는 것이 좋다.
8비트 프로세서 중에서 AVR의 많은 기능과 메모리를 잘 활용하고 싶다면, 안정된 회로를 전원부 설계를 하는 것이 필수적인데, 시스템에 따라서 열이 나도 되는 지, 열이 안나야 하는 지, 제품 생산 가격은 얼마선에서 시스템을 설계해야 하는 지에 따라서, 전원부 회로 설계가 달라지겠다.
수고하세요.
>사용제품 : KD-128Rro, AM-TS8
>사용컴파일러 : WinAVR20100110, AVR Studio 4.0
>
>안녕하세요? 귀사의 제품을 구입하여 여러가지 테스트를 해보던 중 이상한 점이 발견되어 질의드립니다.
>먼저, 테스트 환경은 아래와 같습니다.
>1. 포트 D에 스위치 보드 AM-TS8을 연결
>2. 8개의 스위치를 각각 눌렀을 때 FND의 첫번째에 숫자가 1~8까지 표시
>(ex. 세번째 스위치를 눌렀을 때 FND의 첫번째에 3이 표시됨)
>
>그런데, 포트 D의 설정을 DDRD = 0x00으로 설정하면 스위치 입력이 제대로 되지 않습니다.
>이상한 것은 DDRD=0xFF으로 설정하면 제대로 작동이 잘 된다는 것입니다.
>아래 소스를 첨부합니다.
>
>#include <avr/io.h>
>
>//딜레이 함수 설정
>void Delay_us(unsigned char time_us)
>{ register unsigned char i;
> for(i = 0; i < time_us; i++)
> { asm volatile(" PUSH R0 ");
> asm volatile(" POP R0 ");
> asm volatile(" PUSH R0 ");
> asm volatile(" POP R0 ");
> asm volatile(" PUSH R0 ");
> asm volatile(" POP R0 ");
> }
>}
>void Delay_ms(unsigned int time_ms)
>{ register unsigned int i;
> for(i = 0; i < time_ms; i++)
> { Delay_us(250);
> Delay_us(250);
> Delay_us(250);
> Delay_us(250);
> }
>}
>
>int main(void)
>{
> DDRA = 0xFF; //FND에 숫자를 표시하기 위한 출력 설정
> DDRC = 0xFF; //FND on을 위한 출력 설정
> DDRD = 0x00; //포트 D의 모든 비트를 입력으로 설정
> //이렇게 설정하면 스위치가 제대로 입력되지 않습니다.
>
> int i;
> i = 0;
>
> PORTC = 0x0E; //FND의 첫번째만 사용
> PORTA = 0x3F; //이 부분도 약간 이상합니다. FND에 초기에 0을 표시하도록 했는데 처음 실행하면 6이 표시됩니다.
>
> while(1)
> {
> //스위치 입력에 따른 i값 설정
> //스위치의 반복입력을 막기 위한 딜레이 함수호출
> if(PIND & 0b10000000){i=1;Delay_ms(150);}
> if(PIND & 0b01000000){i=2;Delay_ms(150);}
> if(PIND & 0b00100000){i=3;Delay_ms(150);}
> if(PIND & 0b00010000){i=4;Delay_ms(150);}
> if(PIND & 0b00001000){i=5;Delay_ms(150);}
> if(PIND & 0b00000100){i=6;Delay_ms(150);}
> if(PIND & 0b00000010){i=7;Delay_ms(150);}
> if(PIND & 0b00000001){i=8;Delay_ms(150);}
>
> //값에 따른 FND에 숫자 표시
> switch(i)
> {
> case 1 : PORTA = 0x06;
> break;
> case 2 : PORTA = 0x5B;
> break;
> case 3 : PORTA = 0x4F;
> break;
> case 4 : PORTA = 0x66;
> break;
> case 5 : PORTA = 0x6d;
> break;
> case 6 : PORTA = 0x7d;
> break;
> case 7 : PORTA = 0x27;
> break;
> case 8 : PORTA = 0x7F;
> break;
> }
>
> }
>
>}
>
>분명이 입력 선언은 DDRD = 0x00이 맞는데 왜 이런 현상이 발생할까요?
>혹시 내부 풀업저항때문일까 의문의 들어 SFIOR = 0x40를 선언해봤는데도 상황은 똑같습니다.
|
||||
