Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 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를 적어주는 곳에 어떻게 넣어야 하나요? 기본 클럭을 사용한다고 하면요.
감사합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
구매하신 모듈은 본사의 모듈이 아닙니다. 제조사로 문의하여 주시기 바랍니다.
하지만, 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도 보고 여기서 나온 강의자료를 봐도 잘이해가안가는데
물어볼 사람은없고 죄송해요 조금만 도와주세요 ㅜㅜ
;
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
답변하여 드릴께요.
>안녕하세요
>제가 공부를해보았는데 확실한지모르겠어서요 ㅜㅜ
>주위에 물어볼사람이 없어서 이렇게 물어봅니다. 죄송합니다. ㅜㅜ 답변조금만해주세용 ㅜㅜ
>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 |
|
아래 코드에서 원점을 찿으려면 어떻게 해야하죠
참고로 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 : davidryu@newtc.co.kr
// 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);
}
관리자 답변
<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 고장체크를 할 수 있는 방법이 없습니까?????
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
>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 짜리 사용하려고 하는데
위의 두 제품중 어느 것에 적합 할까요?
감사합니다,
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
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 : davidryu@newtc.co.kr
// 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에 원하는 수를 저장하는방법으로 했거든요 ㅜㅜ 어떻게 해야할까요
죄송하지만 좀 도와주세요 ㅜㅜ
관리자 답변
안녕하세요
> 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 : davidryu@newtc.co.kr
>// 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);
}
관리자 답변
포트"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 : davidryu@newtc.co.kr
// 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번 핀에서 입력을 받는데 소스에서그 핀에서입력을 받는지 설정을해줘야하나요?
어떻게 해야하나요 ㅜㅜ
조금만도와주세요 부탁드립니다.ㅜㅜ
관리자 답변
안녕하세요
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 : davidryu@newtc.co.kr
>// 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 식으로 하려면.. 어떻게 해야하나요??
포트로 제어가 가능한지, 아니면.. 다른 방법이 있나요?
답변 부탁드리겠습니다 수고하세요!
관리자 답변
안녕하세요
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(); <--- 이 함수는 어떤 함수 인가요?
관리자 답변
안녕하세요
KT-M128 보드 기준으로 작성된 내용의 문서입니다.
ktm128_init(); 에 붙어 있는 KT-M128 보드 주변 디바이스의 초기화 함수입니다.
생략 하셔도 됩니다.
수고하세요
>AVR 128을 공부하기 막 시작했는데요..
>
>온도센서를 이용해서 LCD에 값을 띄울려고 합니다.
>
>ADC 실습 편에 보면 예제용 소스가 있는데
>
>ktm128_init(); <--- 이 함수는 어떤 함수 인가요?
>
>
|
||||
| 4838 | 답변완료안녕하세요. 엔코더와 ATmega128에 대해서 질문드립니다. | 이대성 | 2010-04-02 | 1,454 |
|
안녕하세요.
제가 지식이 정말 많이 부족해서 조언좀 얻고자 질문드립니다.
이번에 엡솔루트형 엔코더 AC36Biss/SSI라는 제품을 사용하라는 명령을 받았습니다.
http://www.hengstler.com/en/products/shop.php?catID=1002
RS-422 시리얼 출력형인듯 싶습니다.
26LS31,26LS32를 사용해서 드라이버를 만들어야 하는 것인지
아니면 LS7166 카운터를 사용해서 써야 하는것인지..;;
엡솔루트형이면 2진 출력값이 나와서 바로 MCU에 사용하면 되는줄로만 알았는데..
위 제품을 사용해서 회전값을 얻을려면 어떻게 해야 하는지.. 잘 모르겠습니다.
배선을 어떻게 해야하고 IC는 뭘 써야하고..;;
얻은 값에 대한 연산은 프로그램으로 할 생각입니다.
회전값에 대한 정보만 컴퓨터로 보내는 작업을 한다면
MCU는 ATmega128-pro를 구매해서 사용해도 되는 것인지 궁금합니다.
또한 엔코더 1개가 아닌
총 6개를 사용해서 회전각을 6개 얻어야 하는데
MCU를 몇 개를 사용해야 하는 것인지 아니면 처리하는 것인지도 잘 모르겠구요..;
아무리 찾아봐도 정보를 얻을 수 없어서.. 답답하기만 하네요.
약간의 힌트라도 얻을 수 있을까 싶어서 글 남깁니다.
게시판 성격에 어긋난 질문이 아니라면 단 한 마디라도 좋으니..
답변좀 부탁드리겠습니다.
수고하세요.
관리자 답변
안녕하세요
AC36Biss/SSI 는
rs422 출력 및 a,b 이진 출력 두가지 다 지원하네요.
둘중에 편한 방법을 사용하면되고요
엔코더 6개의 회전값만 뽑아내는 것이라면 ATmega128-pro 하나만 사용해도
됩니다.
수고하세요
>안녕하세요.
>
>제가 지식이 정말 많이 부족해서 조언좀 얻고자 질문드립니다.
>
>이번에 엡솔루트형 엔코더 AC36Biss/SSI라는 제품을 사용하라는 명령을 받았습니다.
>
>http://www.hengstler.com/en/products/shop.php?catID=1002
>
>RS-422 시리얼 출력형인듯 싶습니다.
>
>26LS31,26LS32를 사용해서 드라이버를 만들어야 하는 것인지
>
>아니면 LS7166 카운터를 사용해서 써야 하는것인지..;;
>
>엡솔루트형이면 2진 출력값이 나와서 바로 MCU에 사용하면 되는줄로만 알았는데..
>
>위 제품을 사용해서 회전값을 얻을려면 어떻게 해야 하는지.. 잘 모르겠습니다.
>
>배선을 어떻게 해야하고 IC는 뭘 써야하고..;;
>
>얻은 값에 대한 연산은 프로그램으로 할 생각입니다.
>
>회전값에 대한 정보만 컴퓨터로 보내는 작업을 한다면
>
>MCU는 ATmega128-pro를 구매해서 사용해도 되는 것인지 궁금합니다.
>
>또한 엔코더 1개가 아닌
>
>총 6개를 사용해서 회전각을 6개 얻어야 하는데
>
>MCU를 몇 개를 사용해야 하는 것인지 아니면 처리하는 것인지도 잘 모르겠구요..;
>
>아무리 찾아봐도 정보를 얻을 수 없어서.. 답답하기만 하네요.
>
>약간의 힌트라도 얻을 수 있을까 싶어서 글 남깁니다.
>
>게시판 성격에 어긋난 질문이 아니라면 단 한 마디라도 좋으니..
>
>답변좀 부탁드리겠습니다.
>
>수고하세요.
>
>
>
|
||||
| 4837 | 답변완료안녕하세요~ 그래픽 엘씨디 관한 질문입니다. | 김진환 | 2010-04-02 | 1,342 |
|
안녕하세요 그래픽 엘씨디 HY-12864k-801-R 을 구입 해서 사용하려고하는데요.
ex_graphic_lcd3 이 소스를 넣어서 하려고 하는데
컴파일 하는 과정에서 이런 에러가 나는데
!E <library>(80) : area 'data' not large enought
어떻게 해야 하죠?? ㅠㅠ
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
ICCAVR 데모버전 사용시에 최초 45일간은 풀버전 사용이 가능해서, 그 때는 별 문제가 없는 데,
45일이 지나면 4kb 제한이 걸리게 됩니다. 그 때, 다른 예제들은 그 때도 별 문제가 없는 데,
유일하게 그래픽 LCD 예제는 폰트 사용으로 메모리를 많이 사용하게 되므로, 결과 헥사 파일의 사이즈가 많이 커지게 되어서, 데모버전의 4kb로는 부족합니다.
따라서, 다른 PC에 새롭게 ICCAVR을 깔아서, 컴파일 해서, 넣어 보시면 정상 동작할 것 같네요.
또는 ICCAVR Pro 버전을 본사에서 구매하여 사용하셔도 문제 없을 것 같구요.
일단은 금액이 문제라면, 다른 PC에 새롭게 ICCAVR을 깔거나, PC를 포맷하여 다시 깔면 다시 45일 사용이 가능하니까, 그렇게 한 번 해보세요~
수고하세요.
>안녕하세요 그래픽 엘씨디 HY-12864k-801-R 을 구입 해서 사용하려고하는데요.
>
>ex_graphic_lcd3 이 소스를 넣어서 하려고 하는데
>
>컴파일 하는 과정에서 이런 에러가 나는데
>
>
>!E <library>(80) : area 'data' not large enought
>
>어떻게 해야 하죠?? ㅠㅠ
|
||||
| 4836 | 답변완료모터구동모듈 | 이호 | 2010-04-02 | 1,355 |
|
m128소형보드에는 단순히 건전지만 연결하고
모터구동모듈에 12v를 연결한다면
소형보드로 pwm제어가 가능한가요?
관리자 답변
안녕하세요? 고객님,
m128 소형보드에는 아답타 입력 쪽 또는 12V 입력이라고 표시된 커넥터 쪽에 7.5V 이상의 밧데리라면, 동작이 가능하겠구요. 전류는 최소 순간 150mA 이상이 출력 가능한 모델이라면 문제 없을 거라고 생각합니다.
모터 구동 모듈 및 모터에 모터 구동에 충분한 전류의 12V를 입력을 준다면, PWM은 가능합니다.
수고하세요.
>m128소형보드에는 단순히 건전지만 연결하고
>모터구동모듈에 12v를 연결한다면
>소형보드로 pwm제어가 가능한가요?
|
||||
| 4835 | 답변완료시리얼 통신 사용시 Debug를 위한 scanf 방법 | 안재철 | 2010-04-02 | 1,476 |
|
avrstudio를 사용합니다.
시리얼 통신시 Printf는 잘 동작하는데, Scanf 는 동작이 되질 않습니다.
참고가 될만한 예제가 있는지요?
관리자 답변
안녕하세요? 고객님,
지금 테스트 해보기가 어렵지만, 이렇게하면 동작할 것 같네요.
참고하시기 바랍니다. 한 번 해보시고, 결과 올려 주세요.
지금 시간이 너무 늦어서 장비가 없는 곳에 있어서요.
수고하세요.
>avrstudio를 사용합니다.
>
>시리얼 통신시 Printf는 잘 동작하는데, Scanf 는 동작이 되질 않습니다.
>
>참고가 될만한 예제가 있는지요?
|
||||
| 4834 | 답변완료급합니다 ㅠㅠ 답변부탁드려요~ | 성병훈 | 2010-04-01 | 1,319 |
|
어제 문의 드렸던 학생입니다 ^^
일단 isp선이랑 너무 감사드리구요~^^택배도 정말 감사해요~ ㅎㅎ
오늘 물건을 받아서 알려주신데로...
전원공급( 오실로스코프 이용하여 + 7805 = 5v 형성)
iar embeded work bench 프로그램으로 컴파일 (에러 0)
toast prog2005 퓨즈비트 알려주신데로 설정. bootsz0, z1 sut0 설정,
128에 불들어오는 거 확인하고서
read를 했는데...글쎄...프로그램 다운은 잘 되는데...
계속 같은 소스만 실행되네요...(처음에 넣은거...)
포트 설정같은거 확인 다 했구요...
led로 실험 중인데....계속 ...계속 같은 내용만 실행이...ㅠㅠ
만든것은....128이용해서 적외선 수신장치 이구요...
참...브릿지 다이오드 w06m_829 쓰는데...이거 건너뛰고 전원연결하면...실행되고 있네요...
다이오드에 선 연결하면...."디바이스가 틀립니다" 메세지 뜨구요...ㅠㅠ
무엇이 문제일까요.......??
오늘까지 성공해야하는데...어디가 문제인건지...도무지 모르겠네요...
답변부탁드릴게요...^^* (직접여쭈어 볼려구 전화했는데 퇴근하셧나보더라구요 ㅠㅠ)
그럼 수고하세요~!~
!!!! 추가 내용이 있어서 또 쓰게 됩니다 계속 하다보니 상황이 급변해서요 ㅜㅜ
지금 막 브릿지 다이오드가 아무래도 저희가 만든 전원 공급과 전에 구매해서 아답타로 한것이 차이가 있는게 아닌가 싶어 전원공급을 브릿지 다이오드를 거치지 않고 공급을 해봤습니다. 그랬더니 명령을 먹었습니다. 근데 문제가 발생 ㅜㅜ
명령을 먹는데 led에 불이 들어오지 않는거에요 ㅜㅜ 그래서 소스를 분석하다가 포트가 다르단걸 알고 b에서c포트로 바꿔줬더니 불이 들어 오더라구요
근데 또 !!! 이번엔 불도 들어오고 명령도 먹는데 소스에서 구동하고자 하는 예를 들어 왼쪽으로 led점등 이동이나 안쪽에서 밖으로 퍼지는 것들이 실행이 안되고 계속 명령을 전달해도 켜져만 있어요 ㅜㅜ 살려주세요 ㅜㅜ 도움청합니다. ㅜㅜ
관리자 답변
안녕하세요? 고객님,
잘 받으셨나 보네요.^^
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의 많은 기능과 메모리를 잘 활용하고 싶다면, 안정된 회로를 전원부 설계를 하는 것이 필수적인데, 시스템에 따라서 열이 나도 되는 지, 열이 안나야 하는 지, 제품 생산 가격은 얼마선에서 시스템을 설계해야 하는 지에 따라서, 전원부 회로 설계가 달라지겠다.
포트 B의 특성을 읽어 보면, ISP 선들이 몰려 있어서, 그런 부분에서, 굳이 포트 B를 써야 한다면, 일단, 포트 B에 물린 회로를 빼 놓고, 다운로드 한 후에, 다시 껴서 확인하는 것이 좋겠구요.
안 그런 경우도 있지만, 고객님의 경우 영향을 받는 것 같아서 그렇게 해야 겠습니다.
그리고, 상황을 읽어보면, 뭔가 작업하시면서 포트를 망가뜨린게 아닌가 싶은데요.
일단, 포트 제어를 통하여 포트 체크하는 아래의 예제를 물려서, 모든 포트의 출력을 체크해 보세요.
- 아래 -
http://www.newtc.co.kr/board/view.php?id=pds&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=포트&select_arrange=headnum&desc=asc&no=248
그러고도 안되면, 본사로 보내서 다시 점검 받는 게 좋겠네요.
수고하세요.
>어제 문의 드렸던 학생입니다 ^^
>일단 isp선이랑 너무 감사드리구요~^^택배도 정말 감사해요~ ㅎㅎ
>
>오늘 물건을 받아서 알려주신데로...
>
>전원공급( 오실로스코프 이용하여 + 7805 = 5v 형성)
>iar embeded work bench 프로그램으로 컴파일 (에러 0)
>toast prog2005 퓨즈비트 알려주신데로 설정. bootsz0, z1 sut0 설정,
>128에 불들어오는 거 확인하고서
>
>read를 했는데...글쎄...프로그램 다운은 잘 되는데...
>계속 같은 소스만 실행되네요...(처음에 넣은거...)
>포트 설정같은거 확인 다 했구요...
>led로 실험 중인데....계속 ...계속 같은 내용만 실행이...ㅠㅠ
>만든것은....128이용해서 적외선 수신장치 이구요...
>참...브릿지 다이오드 w06m_829 쓰는데...이거 건너뛰고 전원연결하면...실행되고 있네요...
>다이오드에 선 연결하면...."디바이스가 틀립니다" 메세지 뜨구요...ㅠㅠ
>
>무엇이 문제일까요.......??
>오늘까지 성공해야하는데...어디가 문제인건지...도무지 모르겠네요...
>
>답변부탁드릴게요...^^* (직접여쭈어 볼려구 전화했는데 퇴근하셧나보더라구요 ㅠㅠ)
>
>그럼 수고하세요~!~
>
>!!!! 추가 내용이 있어서 또 쓰게 됩니다 계속 하다보니 상황이 급변해서요 ㅜㅜ
>지금 막 브릿지 다이오드가 아무래도 저희가 만든 전원 공급과 전에 구매해서 아답타로 한것이 차이가 있는게 아닌가 싶어 전원공급을 브릿지 다이오드를 거치지 않고 공급을 해봤습니다. 그랬더니 명령을 먹었습니다. 근데 문제가 발생 ㅜㅜ
>명령을 먹는데 led에 불이 들어오지 않는거에요 ㅜㅜ 그래서 소스를 분석하다가 포트가 다르단걸 알고 b에서c포트로 바꿔줬더니 불이 들어 오더라구요
>근데 또 !!! 이번엔 불도 들어오고 명령도 먹는데 소스에서 구동하고자 하는 예를 들어 왼쪽으로 led점등 이동이나 안쪽에서 밖으로 퍼지는 것들이 실행이 안되고 계속 명령을 전달해도 켜져만 있어요 ㅜㅜ 살려주세요 ㅜㅜ 도움청합니다. ㅜㅜ
|
||||
