Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 1463 | 답변완료Atmega8535 로 lcd 제어는 문제점 | 최만휴 | 2008-08-20 | 1,831 |
|
반갑습니다.
AVR 관련해서 study 한지 얼마안된 초보 개발자 입니다.
다름이 아니오라 atmega8535로 lcd를 제어하는데 문제점이 있어서 이렇게 질문을
드립니다.
아래와 같은 소스파일로 실행하였는데
(EW AVR 5.xx 바탕에서 디버기 완료후 Writing,C 포트를 사용하여 LCD를 제어함)
16*2 lcd의 한줄만 (ㅁㅁㅁㅁㅁㅁㅁㅁ로켜지기만함) 켜지고 나머지는 실행이 안됨
실행시 atmega16 헤더파일 소스를 atmega8535 헤더파일 소스로 바꾸어서 실행함
무엇이 문제인지 모르겠습니다.
---------------------------아 래--------------------------------------
/*******************************************************************************
작 : LCD 모듈에 문자를 표시하는 기본 프로그램으로 LCD 모듈에 시간을
표시하는 프로그램.
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
| | | | | | | |
D7 D6 D5 D4 X EN R/-W RS
ATMEGA16의 PORTC에 연결된 LCD 모듈은 4비트 방식
Device : Atmega16-16AI
Clock : 8MHz
개발 환경 : IAR EWAVR 2.28A
*******************************************************************************/
#include<iom16.h> // ATMEGA16 IO 정의 --> iom8538.h로 바꿔서 실행함
#include<ina90.h> // AVR 패밀리를 위한 내장함수 정의(inavr.h, comp_a90.h)
#define ENABLE (PORTC |= 0x04) // LCD ENable
#define DISABLE (PORTC &= 0xFB) // LCD Disable
void init_PORTC(void)
{
DDRC = 0xFF; // 포트 C 출력
PORTC=0xFF; // 초기 값
}
/*void wait_busy_flag(void)
{
unsigned char busy_flag;
PORTC|=0x06; //PC2(EN)=1 PC1(R/-W)=1 PC0(RS)=0
DDRC &=0x7F; //PORTC7 입력
do{
busy_flag = PINC;
}while( busy_flag & 0x80);
DDRC|=0x80;
PORTC=0xFF;
}*/
void wait_busy_flag(void)
{
unsigned int i;
for(i=0;i<5000; i++);
}
void m_delay(unsigned int m) //딜레이 루틴
{
unsigned int i, j;
for(i=0;i<m;i++)
for(j=0;j<1140;j++); //8MHz : 1msec 1500
}
void u_delay(unsigned int u) //딜레이 루틴
{
unsigned int i, j;
for(i=0;i<u;i++)
for(j=0;j<9;j++); //8MHz : 10usec 15
}
void instruction_out(unsigned char b)//명령어 쓰기 함수
{
PORTC=b&0xF0; //상위 4BIT 출력
ENABLE; //ENABLE
u_delay(5);
DISABLE; //DISABLE
PORTC=(b&0x0F)<<4; //하위 4BIT 출력
ENABLE; //ENABLE
u_delay(5);
DISABLE; //DISABLE
wait_busy_flag(); //명령어 수행이 완료될떄까지 지연
}
void char_out(unsigned char b) //LCD에 한문자 출력 함수
{
PORTC=(b&0xF0)|0x01; //상위 4BIT 출력
ENABLE; //ENABLE
u_delay(5);
DISABLE; //DISABLE
PORTC=((b&0x0F)<<4)|0x01; //하위 4BIT 출력
ENABLE; //ENABLE
u_delay(5);
DISABLE; //DISABLE
wait_busy_flag(); //명령어 수행이 완료될때까지 지연
}
void string_out(unsigned char b, unsigned char *str) //문자열 출력 함수
{
unsigned int i=0;
instruction_out(b);
do{
char_out(str[i]);
}while(str[++i]!='\\0');
}
void init_LCD(void) //LCD초기화 루틴
{
m_delay(20);
instruction_out(0x28); //LCD FUNCTION SET(16*2LINE, 4BIT, 5*8DOT)
wait_busy_flag(); //명령어 수행이 완료 될떄까지의 딜레이
instruction_out(0x0C); //LCD DISPLAY ON,CURSOR OFF
instruction_out(0x06); //LCD ENTRY MODE SET
instruction_out(0x02); //RETURN HOME
instruction_out(0x01); //LCD CLEAR
}
void main(void)
{
unsigned int a, hour, min, sec;
init_LCD();
instruction_out(0x01); // LCD를 지운다.
string_out(0x82, "Timer"); // LCD의 첫번째 라인
instruction_out(0xC6); //LCD에 문자 출력 위치 지정
char_out(':'); //문자 출력
while(1) //무한 루프
{
for(a=0;a<2;a++) //AM,PM 변환루프
{
for(hour=0;hour<12;hour++) //시간 변환 루프
{
for(min=0;min<60;min++) //분 변환 루프
{
for(sec=0;sec<60;sec++) //초 변환 루프
{
if(a==0)
string_out(0xC0, "AM"); //a가 0일 경우 AM을 출력
else
string_out(0xC0, "PM"); //a가 1일 경우 PM을 출력
instruction_out(0xC3); char_out('0'+hour/10); //시간의 10^1 출력
instruction_out(0xC4); char_out('0'+hour%10); //시간의 10^0 출력
instruction_out(0xC8); char_out('0'+min/10); //분의 10^1 출력
instruction_out(0xC9); char_out('0'+min%10); //분의 10^0 출력
instruction_out(0xCD); char_out('0'+sec/10); //초의 10^1 출력
instruction_out(0xCE); char_out('0'+sec%10); //초의 10^0 출력
instruction_out(0xCB); char_out(':'); // ':' 문자 출력
m_delay(1000);
instruction_out(0xCB); char_out(' '); // ' ' 문자 출력
m_delay(1000);
}
}
}
}
}
}
--------------------------------------------------------------------------
몇가지 질문사항이 있습니다.
1. atmega16 바탕에서 작성된 프로그램을 header file 만 바꾸어서 atmega8535로 실행해도 문제가 되지는 않는 것인지?
2. 위의 실행파일은 디버깅되며, hex 파일로 바꾸어서 atmega8535 에 writing 했는데 왜 실행이 않되는 것인지?
3. atmega16 과 atmega8535 의 datasheet 를 참고하여 비교한 결과 메모리 용량만 다른데 혹시 내부 메모리의 배열이 다른것은 아닌지?
빠른 해결 부탁 드립니다.
감사합니다.
관리자 답변
안녕하세요?
저희 N.T.C를 방문해 주셔서 감사합니다.
본 게시판은 저희 제품 사용시에 생기는 문제점이나 어려움 등을 빠른 시간내에 해결해 드리기 위하여 운영되고 있습니다.
물론, 모든분들 소스를 일일이 봐드리면 더욱 좋겠지만, 시간이 여의치 않아서 소스코드까지 세세하게 봐드리지는 못하고 있습니다. 죄송하게 생각합니다. 하지만, 자료실과 기존자료실에서 예제를 다양하게 운영하고 있습니다. 찾으시는 텍스트 LCD나 그래픽 LCD 관련 예제 소스들도 여러개가 있습니다. ATMEGA128용이긴 하지만요.
저희 제품 중에는 8535 제품이 현재 없어서, 8535로 프로그래밍 할 때의 사항을 일일이 조사해 드리기는 어려움이 있습니다.
하지만, 간단한 질문이라 답변해 드립니다.
1. 헤더 파일 이름만 변경하여 쓰시는 데, 컴파일이 에러 안나고 이상이 없다면 문제가 없겠지만, 현재 소스 자체가 기본적인 레지스터 셋팅 등은 하지 않고 있습니다.
소스를 기본적인 부분도 좀 짜주시는 것이 안정적인 동작을 위해 좋을 것 같습니다.
2. 헥스로 바꾸셨다고 해도, 기본적인 메모리 관련 레지스터 셋팅 등이 전혀 없어서 동작하지 않을 수도 있습니다.
3. 그리고 컴파일러에 MCU가 바뀌었음을 알려주어야 합니다. 셋팅 시에 분명히 체크해 보시기 바랍니다.
8비트 제어로 하는 LCD 제어 예제 소스가 저희 회사 자료실에 ATMEGA128 기준으로
몇가지 나와 있습니다. 물론 ICCAVR 이라는 컴파일러를 사용하고 있지만,
그걸로 환경을 바꾸셔서 해 보신다면, 좀 더 도와드리기가 편할 것 같습니다.
열심히 하시기 바랍니다.
감사합니다.
>반갑습니다.
>
>AVR 관련해서 study 한지 얼마안된 초보 개발자 입니다.
>
>다름이 아니오라 atmega8535로 lcd를 제어하는데 문제점이 있어서 이렇게 질문을
>
>드립니다.
>
>아래와 같은 소스파일로 실행하였는데
>(EW AVR 5.xx 바탕에서 디버기 완료후 Writing,C 포트를 사용하여 LCD를 제어함)
>
>16*2 lcd의 한줄만 (ㅁㅁㅁㅁㅁㅁㅁㅁ로켜지기만함) 켜지고 나머지는 실행이 안됨
>
>실행시 atmega16 헤더파일 소스를 atmega8535 헤더파일 소스로 바꾸어서 실행함
>
>무엇이 문제인지 모르겠습니다.
>
>
>---------------------------아 래--------------------------------------
>/*******************************************************************************
> 작 : LCD 모듈에 문자를 표시하는 기본 프로그램으로 LCD 모듈에 시간을
> 표시하는 프로그램.
>
> PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
> | | | | | | | |
> D7 D6 D5 D4 X EN R/-W RS
>
>
> ATMEGA16의 PORTC에 연결된 LCD 모듈은 4비트 방식
>
>Device : Atmega16-16AI
>Clock : 8MHz
>개발 환경 : IAR EWAVR 2.28A
>*******************************************************************************/
>
>#include<iom16.h> // ATMEGA16 IO 정의 --> iom8538.h로 바꿔서 실행함
>#include<ina90.h> // AVR 패밀리를 위한 내장함수 정의(inavr.h, comp_a90.h)
>
>#define ENABLE (PORTC |= 0x04) // LCD ENable
>#define DISABLE (PORTC &= 0xFB) // LCD Disable
>
>
>void init_PORTC(void)
>{
> DDRC = 0xFF; // 포트 C 출력
> PORTC=0xFF; // 초기 값
>}
>
>
>/*void wait_busy_flag(void)
> {
> unsigned char busy_flag;
>
> PORTC|=0x06; //PC2(EN)=1 PC1(R/-W)=1 PC0(RS)=0
> DDRC &=0x7F; //PORTC7 입력
>
> do{
> busy_flag = PINC;
> }while( busy_flag & 0x80);
> DDRC|=0x80;
> PORTC=0xFF;
> }*/
>
>
>void wait_busy_flag(void)
>{
> unsigned int i;
>
> for(i=0;i<5000; i++);
>}
>
>
>void m_delay(unsigned int m) //딜레이 루틴
>{
> unsigned int i, j;
>
> for(i=0;i<m;i++)
> for(j=0;j<1140;j++); //8MHz : 1msec 1500
>}
>
>
>void u_delay(unsigned int u) //딜레이 루틴
>{
> unsigned int i, j;
>
> for(i=0;i<u;i++)
> for(j=0;j<9;j++); //8MHz : 10usec 15
>}
>
>
>void instruction_out(unsigned char b)//명령어 쓰기 함수
>{
> PORTC=b&0xF0; //상위 4BIT 출력
> ENABLE; //ENABLE
> u_delay(5);
> DISABLE; //DISABLE
>
> PORTC=(b&0x0F)<<4; //하위 4BIT 출력
>
> ENABLE; //ENABLE
> u_delay(5);
> DISABLE; //DISABLE
>
> wait_busy_flag(); //명령어 수행이 완료될떄까지 지연
>}
>
>
>void char_out(unsigned char b) //LCD에 한문자 출력 함수
>{
>
> PORTC=(b&0xF0)|0x01; //상위 4BIT 출력
>
> ENABLE; //ENABLE
> u_delay(5);
> DISABLE; //DISABLE
>
> PORTC=((b&0x0F)<<4)|0x01; //하위 4BIT 출력
>
> ENABLE; //ENABLE
> u_delay(5);
> DISABLE; //DISABLE
> wait_busy_flag(); //명령어 수행이 완료될때까지 지연
>}
>
>
>void string_out(unsigned char b, unsigned char *str) //문자열 출력 함수
>{
> unsigned int i=0;
>
> instruction_out(b);
>
> do{
> char_out(str[i]);
> }while(str[++i]!='\\0');
>}
>
>
>void init_LCD(void) //LCD초기화 루틴
>{
> m_delay(20);
>
> instruction_out(0x28); //LCD FUNCTION SET(16*2LINE, 4BIT, 5*8DOT)
> wait_busy_flag(); //명령어 수행이 완료 될떄까지의 딜레이
> instruction_out(0x0C); //LCD DISPLAY ON,CURSOR OFF
> instruction_out(0x06); //LCD ENTRY MODE SET
> instruction_out(0x02); //RETURN HOME
> instruction_out(0x01); //LCD CLEAR
>}
>
>
>void main(void)
>{
> unsigned int a, hour, min, sec;
>
> init_LCD();
>
> instruction_out(0x01); // LCD를 지운다.
>
> string_out(0x82, "Timer"); // LCD의 첫번째 라인
>
> instruction_out(0xC6); //LCD에 문자 출력 위치 지정
> char_out(':'); //문자 출력
>
>
> while(1) //무한 루프
> {
> for(a=0;a<2;a++) //AM,PM 변환루프
> {
> for(hour=0;hour<12;hour++) //시간 변환 루프
> {
> for(min=0;min<60;min++) //분 변환 루프
> {
> for(sec=0;sec<60;sec++) //초 변환 루프
> {
> if(a==0)
> string_out(0xC0, "AM"); //a가 0일 경우 AM을 출력
>
> else
> string_out(0xC0, "PM"); //a가 1일 경우 PM을 출력
>
> instruction_out(0xC3); char_out('0'+hour/10); //시간의 10^1 출력
> instruction_out(0xC4); char_out('0'+hour%10); //시간의 10^0 출력
> instruction_out(0xC8); char_out('0'+min/10); //분의 10^1 출력
> instruction_out(0xC9); char_out('0'+min%10); //분의 10^0 출력
> instruction_out(0xCD); char_out('0'+sec/10); //초의 10^1 출력
> instruction_out(0xCE); char_out('0'+sec%10); //초의 10^0 출력
> instruction_out(0xCB); char_out(':'); // ':' 문자 출력
> m_delay(1000);
> instruction_out(0xCB); char_out(' '); // ' ' 문자 출력
> m_delay(1000);
> }
> }
> }
> }
> }
>}
>
>--------------------------------------------------------------------------
>
>몇가지 질문사항이 있습니다.
>
>1. atmega16 바탕에서 작성된 프로그램을 header file 만 바꾸어서 atmega8535로 실행해도 문제가 되지는 않는 것인지?
>
>2. 위의 실행파일은 디버깅되며, hex 파일로 바꾸어서 atmega8535 에 writing 했는데 왜 실행이 않되는 것인지?
>
>3. atmega16 과 atmega8535 의 datasheet 를 참고하여 비교한 결과 메모리 용량만 다른데 혹시 내부 메모리의 배열이 다른것은 아닌지?
>
>빠른 해결 부탁 드립니다.
>
>감사합니다.
|
||||
| 1462 | 답변완료AM-128PRO A/S문의 | 이정석 | 2008-08-20 | 1,409 |
|
문의사항1>
mega128모듈의
UART0번과 UART1번이 MAX232칩과 구성되어 있는 걸 깜박하고....
칩의 UART0번을 PC와 직접 연결한 후 동작시키다가....
동작이 안되어......점검해보니....
칩 라이팅은 되는데.....PC와 통신이 안 되는 군요....
이런 경우 2만원짜리를....
택배비용이 발생하고...
수리비가 발생되면 고쳐야 할 지 의문이네요....
수리비용과 AS가 가능한지의 여부를 알고 싶습니다.
(저희 학교 수업용교재를 선정중이어서...가급적 빠른시간에 조치받아...
테스트를 해 보고 싶습니다...)
문의사항2>
AVR MEGA 128 모듈(M-128PRO)-19,800원
AVR JTAG 보드 AD-JTAG-33,000원을 이용하여 1교실분의 실습실을 꾸미려고 합니다. 40개을 구매할 때의 견적을 의뢰합니다.
아울러....모듈과 JTAG의 커넥터핀은 동일한 것으로 제작되었면 합니다.
연락처>
경민정보산업공고 정보통신과장 이정석 (031-828-7848)
이메일 : [email protected]
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용해 주셔서 감사드립니다.
저희 본사로 삼성택배를 이용하여 보내주시면, 점검해서 이상 있으면 조치해 드리겠습니다. 전화를 했는 데, 받지 않으시네요. 핸드폰을 남겨 주시면 감사하겠습니다.
감사합니다.
>문의사항1>
>mega128모듈의
>UART0번과 UART1번이 MAX232칩과 구성되어 있는 걸 깜박하고....
>
>칩의 UART0번을 PC와 직접 연결한 후 동작시키다가....
>동작이 안되어......점검해보니....
>칩 라이팅은 되는데.....PC와 통신이 안 되는 군요....
>
>이런 경우 2만원짜리를....
>택배비용이 발생하고...
>수리비가 발생되면 고쳐야 할 지 의문이네요....
>
>수리비용과 AS가 가능한지의 여부를 알고 싶습니다.
>
>(저희 학교 수업용교재를 선정중이어서...가급적 빠른시간에 조치받아...
>테스트를 해 보고 싶습니다...)
>
>문의사항2>
>AVR MEGA 128 모듈(M-128PRO)-19,800원
>AVR JTAG 보드 AD-JTAG-33,000원을 이용하여 1교실분의 실습실을 꾸미려고 합니다. 40개을 구매할 때의 견적을 의뢰합니다.
>아울러....모듈과 JTAG의 커넥터핀은 동일한 것으로 제작되었면 합니다.
>
>연락처>
>경민정보산업공고 정보통신과장 이정석 (031-828-7848)
>이메일 : [email protected]
>
|
||||
| 1461 | 답변완료AM-M-16-B | 김진수 | 2008-08-20 | 1,478 |
|
페이브텍 김진수 부장입니다. 011-863-1966
상기 제품의 ISP케넥터의 pin description을 알려주시면 감사하겠습니다.
관리자 답변
<a href="http://www.loversfree.net/">出会い考察</a><a href="http://www.loved-person.net/">強固な環境で出会える</a><a href="http://www.she-and-holiday.net/">出会い5</a><a href="http://www.favorite-time.net/">新しい出会い!!</a><a href="http://www.touching-relation.net/">出会いコミュニティーサークル</a><a href="http://www.filled-mind.net/">出会い</a><a href="http://www.pure-friend.net/">出会いサイト攻略王</a><a href="http://www.time-with-you.net/">最速の出会いにっき</a><a href="http://www.global-love.com/">無料出会い</a><a href="http://www.love-pheromone.net/">快適な出会いを</a><a href="http://www.51-heart.net/">100%満足な出会い</a><a href="http://www.a-loved.com/">セフレをを体験しませんか?</a><a href="http://www.joint-party.net/">出会いコミュニティサークル</a><a href="http://www.long-time-lover.net/">セフレを応援するサイト</a><a href="http://www.love-feel.net/">出会いを探してます</a><a href="http://www.once-in-a-life.net/">かわいい女の子が大集合!</a><a href="http://www.only-dream.com/">出会いNo.1</a><a href="http://www.painful-together.net/">wakuwaku出会いの広場</a><a href="http://www.purity-favor.net/">逆援助目的サイト</a><a href="http://www.smile-couple.com/">アエギの館</a>
|
||||
| 1460 | 답변완료스테핑 라인트레이서에 관해 | 김국하 | 2008-08-20 | 1,438 |
|
스테핑 라인트레이서(반제품)을 구입해서
잘 조립해서 쓰고 있습니다.
아답터를 이용해서 동작이 잘 이뤄지는걸 알수 있었습니다.
그런데 길을 달리기 위해서는 아답터가 아닌 전지를 사용을
해야 하는데 전압 또는 전류량이 맞지 않아서인지 동작이
제대로 이루어 지지 않습니다.
모터만 작동하지 않는것이 아니라 센서부분도 연결하자마자는
불이 들어오다가 곧 꺼져 버립니다.
대략 18V 1.3A를 사용하였습니다.
어느 정도의 전지를 사용해야 하는지 좀 알려주시면 감사하겠습니다.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
제 생각에는 전압과 전류는 충분한 것 같습니다. 전류가 약간 오랜 시간을 쓰지는 못하실 것 같기는 하지만, 그래도 테스트 하시는 데는 문제 없으신 것 같거든요.
그런데, 제 생각에 문제는 땜에 있지 않나 싶습니다. 땜을 다시 좀 해보시거나,
저희 회사로 가져 오셔서, 문제 진단을 하신 후에 A/S를 받으셔도 되고, 직접 가져가서 하셔도 됩니다. 진단은 무료입니다.
감사합니다.
>스테핑 라인트레이서(반제품)을 구입해서
>잘 조립해서 쓰고 있습니다.
>아답터를 이용해서 동작이 잘 이뤄지는걸 알수 있었습니다.
>그런데 길을 달리기 위해서는 아답터가 아닌 전지를 사용을
>해야 하는데 전압 또는 전류량이 맞지 않아서인지 동작이
>제대로 이루어 지지 않습니다.
>모터만 작동하지 않는것이 아니라 센서부분도 연결하자마자는
>불이 들어오다가 곧 꺼져 버립니다.
>대략 18V 1.3A를 사용하였습니다.
>어느 정도의 전지를 사용해야 하는지 좀 알려주시면 감사하겠습니다.
>
|
||||
| 1459 | 답변완료AM-128PRO 동작 전압 질문입니다. | AM-128PRO | 2008-08-20 | 1,535 |
|
안녕하세요.
AM-128PRO 1.5V 건전지 3개를 직접 연결해서 사용해도 되나요?
그리고 PRO와 PL은 PRO는 ATmega128 -16AI를 사용하고 PL은 ATmega128 -16AU을 사용한다는 것 외에 다른 차이가 있나요?
16AU 가 16AI 보다 메모리 용량이 커서 가격이 비싼데 왜 PRO 가격이 5000원이나 더 비싼지 궁금해서요.
관리자 답변
<a href="http://www.suteki-gal.com/">セックス</a><a href="http://www.glad-glad-reception.com/ntnt/iyashi/">不倫</a><a href="http://www.69117.com/">人妻</a><a href="http://www.special-thanks-deai.net/">ハメ撮り</a><a href="http://www.tikaku-no-koi.com/">アダルト</a><a href="http://www.ero-mon.net/">熟女</a><a href="http://www.fuckin-star.com/">無料アダルト動画</a><a href="http://www.kore114.net/">人妻</a><a href="http://www.is-77-is.net/">セックス</a><a href="http://www.ee072.net/">不倫</a><a href="http://www.wife-sp.com/">不倫</a><a href="http://www.c-cup-c.net/">おっぱい</a><a href="http://www.y-magic.net/">アダルト</a><a href="http://www.happy-deai-day.com/">エロ</a><a href="http://www.one-ero.net/">アダルト</a>
|
||||
| 1458 | 답변완료atmega128 ADC 변환 문제 | 김민회 | 2008-08-19 | 2,190 |
|
현재 펀션제너레이터를 사용하여 -2.5 ~ 2.5v (60hz)를 adc를 사용하여 측정된 결과치를 특정 변수에 저장하려고 합니다.
이를 차동 입력을 사용하여 a/d컨버터 기준전압의 선택에 MUX4~0 값을 01001을 사용하여 +단자에 adc1 -단자에 adc0을
사용하고 있습니다.
현재 입력되는 값이 0v를 기준으로 +값은 부드럽게 들어오는데 -값으로 들어오면 값이 이상한 값들이 들어오고 있습니다.
제가 궁금한 사항은
1. 차등 입력 사용시 -단자를 칩의 adc입력포트쪽 접지에 연결해야 하는지 아니면, 펀션제너레이터에서 나오는 출력의 (-)를
-단자로 정한 adc입력포트쪽에 연결해야 하는건가요?
2. codevision에서 ADCW값을 unsigned int값에 저장을 하는데 이값을 unsigned int가 아니라 int로 선언된 변수에
저장해도 상관없는지 궁금합니다. 차등입력시 -값을 출력해야 하기때문에
3. 차등입력 방식의 경우 2의 보수( 0x0200 ~ 0x01FF == -512 ~ 511)로 값이 표현되는데, adc를 작동시키고 ADCW값을
읽어들일때 이 값을 unsigned int가 아닌 int로 받아서 0x01FF를 넘는 숫자에 대해서 2의 보수화를 취해서 출력하는게
맞나요? 코드 참고
읽어 주셔서 감사하겠습니다.
코드 첨부 - codevision code
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#define ADC_START ADCSRA.6=1
#define ADC_CHECK ADCSRA.6=0
#define ADC_EOC ADCSRA.4
int adc_data; // ADC Value variable
//ADC Free Runnging Mode
void ADC_Init(int channel)
{
ADMUX = channel | 0x45; //차등입력방식 gain 10,(+):adc1 (-):adc0
ADCSRA = 0xa7; //ADCEN, ADC free runnging mode, xtal/128 시스템 클럭:16Mhz
}
void adconversion(void)
{
ADC_START; //ADC_START
while(!(ADC_EOC)); //ADC_Convertion
if(ADCW > 0x01FF) //2의 보수화
adc_data = (~ADCW+1) * (-1);
else
adc_data = ADCW;
}
void main(void)
{
int adc_value[400];
unsigned int cnt = 0;
unsigned int i = 0;
unsigned int k = 0;
// Ports init
DDRC = 0xff; // output Port
DDRF = 0x00; // input Port
// Timer(s)/Counter(s)
TIMSK=0x40;
// USART init
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;//(xtal - 16MHz)
delay_ms(50);
//putsf(TITLE);
//send_prompt();
//adc_data_Initialize();
ADC_Init(0);
for(k = 0 ; k < 400 ; k++)
adc_value[k] = 0;
while(1)
{
for(cnt = 0; cnt < 400; cnt++)
{
adconversion();
adc_value[cnt] = adc_data;
}
delay_us(100);
for( i = 0 ; i<400 ; i++)
{
printf("%02d ",adc_value[i]);
delay_ms(100);
}
for(k = 0 ; k < 400 ; k++)
adc_value[k] = 0;
delay_us(100);
}
}
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
답변해 드릴께요.
1.-단에 연결해야 겠죠.
2. int로 받으셔도 무방합니다. 값 계산만 잘 하시면 되겠네요.
ADC에서 ADMUX |= 0x4b; 로 잡으시면 Ch1을 +, Ch2를 -로 잡는 것이 맞구요.
그에 대한 변환 결과는 -512~+511 범위의 값을 가지는 데,
표현법이 10비트 2의 보수 표현법을 사용합니다. 따라서 0x200 ~ 0x3ff~ 0 ~ 0x1ff 가 됩니다.
고객님이 짜신 소스를 보면, 아주 잘 짜신 것 같습니다. 그렇게 이용하시는 것도 좋아 보입니다.
if(ADCW > 0x01FF) //2의 보수화
adc_data = (~ADCW+1) * (-1);
else
adc_data = ADCW;
또한, 차동 입력으로 사용하실 경우, 초기가 몇개는 버리시는 것이 좋습니다. 결과값이 정확하지 않으니까요.
그리고, 입력이 없으면, 공기 중의 변하는 미세 전압 값을 증폭해서 나오게 되어서,
값이 계속 변하게 됩니다. 반드시 GND로 연결하시거나, VCC로 연결하시거나 하셔서, 값을 보시는 것이 좋겠습니다.
감사합니다.
>현재 펀션제너레이터를 사용하여 -2.5 ~ 2.5v (60hz)를 adc를 사용하여 측정된 결과치를 특정 변수에 저장하려고 합니다.
>
>
>
>이를 차동 입력을 사용하여 a/d컨버터 기준전압의 선택에 MUX4~0 값을 01001을 사용하여 +단자에 adc1 -단자에 adc0을
>
>
>
>사용하고 있습니다.
>
>
>
>현재 입력되는 값이 0v를 기준으로 +값은 부드럽게 들어오는데 -값으로 들어오면 값이 이상한 값들이 들어오고 있습니다.
>
>
>
>제가 궁금한 사항은
>
>
>
>1. 차등 입력 사용시 -단자를 칩의 adc입력포트쪽 접지에 연결해야 하는지 아니면, 펀션제너레이터에서 나오는 출력의 (-)를
>
> -단자로 정한 adc입력포트쪽에 연결해야 하는건가요?
>
>
>
>2. codevision에서 ADCW값을 unsigned int값에 저장을 하는데 이값을 unsigned int가 아니라 int로 선언된 변수에
>
> 저장해도 상관없는지 궁금합니다. 차등입력시 -값을 출력해야 하기때문에
>
>
>
>3. 차등입력 방식의 경우 2의 보수( 0x0200 ~ 0x01FF == -512 ~ 511)로 값이 표현되는데, adc를 작동시키고 ADCW값을
>
> 읽어들일때 이 값을 unsigned int가 아닌 int로 받아서 0x01FF를 넘는 숫자에 대해서 2의 보수화를 취해서 출력하는게
>
> 맞나요? 코드 참고
>
>
>
>읽어 주셔서 감사하겠습니다.
>
>
>
>코드 첨부 - codevision code
>
>
>
>#include <mega128.h>
>#include <stdio.h>
>#include <delay.h>
>
>#define ADC_START ADCSRA.6=1
>#define ADC_CHECK ADCSRA.6=0
>#define ADC_EOC ADCSRA.4
>
>
>
>int adc_data; // ADC Value variable
>
>
>
>//ADC Free Runnging Mode
>void ADC_Init(int channel)
>{
> ADMUX = channel | 0x45; //차등입력방식 gain 10,(+):adc1 (-):adc0
> ADCSRA = 0xa7; //ADCEN, ADC free runnging mode, xtal/128 시스템 클럭:16Mhz
>}
>
>void adconversion(void)
>{
> ADC_START; //ADC_START
> while(!(ADC_EOC)); //ADC_Convertion
>
> if(ADCW > 0x01FF) //2의 보수화
> adc_data = (~ADCW+1) * (-1);
> else
> adc_data = ADCW;
>}
>
>void main(void)
>{
> int adc_value[400];
> unsigned int cnt = 0;
> unsigned int i = 0;
> unsigned int k = 0;
>
> // Ports init
> DDRC = 0xff; // output Port
> DDRF = 0x00; // input Port
>
> // Timer(s)/Counter(s)
> TIMSK=0x40;
>
> // USART init
> UCSR0A=0x00;
> UCSR0B=0x18;
> UCSR0C=0x06;
> UBRR0H=0x00;
> UBRR0L=0x67;//(xtal - 16MHz)
>
> delay_ms(50);
> //putsf(TITLE);
> //send_prompt();
> //adc_data_Initialize();
> ADC_Init(0);
>
> for(k = 0 ; k < 400 ; k++)
> adc_value[k] = 0;
>
> while(1)
> {
> for(cnt = 0; cnt < 400; cnt++)
> {
> adconversion();
> adc_value[cnt] = adc_data;
> }
> delay_us(100);
> for( i = 0 ; i<400 ; i++)
> {
> printf("%02d ",adc_value[i]);
> delay_ms(100);
> }
>
> for(k = 0 ; k < 400 ; k++)
> adc_value[k] = 0;
> delay_us(100);
> }
>}
>
|
||||
| 1457 | 답변완료2X5 박스케이블 주문 제작 가능한지 문의 드립니다. | 최두리 | 2008-08-19 | 1,472 |
|
저희가 졸업 작품을 하고 있는데요.
길이가 2 미터 정도의 박스케이블을 주문하려고 합니다.
시중에는 잘 안나와 있어서 이렇게 글 올렸습니다.
주문 제작이 가능한지요?
수량은 2개정도 이고요.
관리자 답변
<a href="http://www.decksanddice.com/">自動車保険</a>の<a href="http://www.decksanddice.com/">一括見積もり</a>ならオススメ<a href="http://www.decksanddice.com/">ランキング</a>で徹底<a href="http://www.decksanddice.com/">比較</a>しましょう。<a href="http://www.decksanddice.com/">口コミ</a>による意見も参考になります。<a href="http://www.esthetic-live.net/">エステ</a>に行くなら<a href="http://www.esthetic-live.net/">全国</a>から検索できるポータルサイトを利用してみましょう。<a href="http://www.esthetic-live.net/">アジアンエステ</a>が現在大人気。<a href="http://www.esthetic-live.net/">痩身</a>、<a href="http://www.esthetic-live.net/">メンズエステ</a>などに興味がある方が最近では多いようです。最近では<a href="http://www.eternity-wedding.net/">海外挙式</a>をするカップルが多くなってきております。<a href="http://www.eternity-wedding.net/">結婚式</a>は海外で。<a href="http://www.eternity-wedding.net/">結婚</a>と<a href="http://www.eternity-wedding.net/">海外旅行</a>を一緒にできるので<a href="http://www.eternity-wedding.net/">ウエディング</a>旅行としても人気を集めています。<a href="http://www.fx-victor.net/">FX</a>(<a href="http://www.fx-victor.net/">外国為替証拠金取引</a>)はハイリスクハイリターンな為替<a href="http://www.fx-victor.net/">取引</a>です。<a href="http://www.fx-victor.net/">初心者</a>の方は複数の証券会社を<a href="http://www.fx-victor.net/">比較</a>して自分の取引タイプに合わせて口座開設しましょう。訪問者の数を計測できる<a href="http://www.happy-counter.net/">アクセスカウンター</a>は、<a href="http://www.happy-counter.net/">簡単</a>ですぐにはじめられる<a href="http://www.happy-counter.net/">アクセスカウンタ</a>を使ってみてはいかがですか。<a href="http://www.happy-counter.net/">無料カウンター</a>なので、余計な手続きは必要ありません。<a href="http://www.happy-counter.net/">無料カウンタ</a>ですぐにホームページのアクセス数を計測しましょう。<a href="http://www.homey-home.net/">不動産</a>情報が満載。<a href="http://www.homey-home.net/">賃貸</a>情報から<a href="http://www.homey-home.net/">住宅</a>や<a href="http://www.homey-home.net/">マンション</a>、さらに<a href="http://www.homey-home.net/">一戸建て</a>の物件まで幅広く取り扱っております。最近人気を集めている<a href="http://www.implant-lab.net/">インプラント</a>治療。全国の<a href="http://www.implant-lab.net/">歯科</a><a href="http://www.implant-lab.net/">医院</a>で治療が受けられます。<a href="http://www.implant-lab.net/">料金</a>もそれほど高くなく、すべて合わせてもそれほど<a href="http://www.implant-lab.net/">費用</a>もかからないのでオススメです。<a href="http://www.kabu-load.net/">株</a>を始められる方は<a href="http://www.kabu-load.net/">株式</a>をはじめる前に<a href="http://www.kabu-load.net/">株式投資</a>に関する知識をしっかり身につけておきましょう。<a href="http://www.kabu-load.net/">初心者</a>の方は<a href="http://www.kabu-load.net/">取引</a>をあせって失敗することが多いようです。<a href="http://www.kualia-nails.com/">ネイル</a>に興味があって、<a href="http://www.kualia-nails.com/">ネイリスト</a>を目指している方が<a href="http://www.kualia-nails.com/">ネイルアート</a>を勉強しています。<a href="http://www.kualia-nails.com/">ネイルサロン</a>に就職すれば、<a href="http://www.kualia-nails.com/">ネイルデザイン</a>を勉強することができます。美容に興味がある方はネイルの<a href="http://www.kualia-nails.com/school/index.html">バイオジェルスクール</a>に通いませんか。<a href="http://www.kualia-nails.com/school/index.html">ネイルスクール</a>も大人気開校中。ネイルの<a href="http://www.kualia-nails.com/school/index.html">資格</a>を取得するなら<a href="http://www.kualia-nails.com/school/index.html">東京</a>、<a href="http://www.kualia-nails.com/school/index.html">大阪</a>などを中心に広がるネイルスクールがオススメ。
|
||||
| 1456 | 답변완료초음파 센서 질문입니다. | madin | 2008-08-19 | 1,423 |
|
SRF05 초음파를 사용하고 있습니다.
여기 있는 소스를 이용하는데 거리가 출력되지 않습니다.
PF4번에 트리거 PF6번에 에코를 접속했습니다.
소스가 문제인지 납땜이 문제인지 알 수가 없네요;;
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
#define SersorPort PORTF
#define SersorPinInput PINF
#define ON 1
#define OFF 0
unsigned int dist=0, // 거리
dist_buff=0, // 거리임시저장
buff_cnt=0, // 버퍼카운트
waveflag=0, // 신호플래그
clrcnt=0; // 클리어카운트
unsigned int count=0;
// 트리거 신호 보냄
void Sensor_TRIGGER_ON(void)
{
SersorPort = SersorPort | 0x10;
}
// 트리거 신호 보내지 않음
void Sensor_TRIGGER_OFF(void)
{
SersorPort = SersorPort & 0xEF;
}
//에코 신호
char Sensor_ECHO(void)
{
return ((SersorPinInput & 0x40) >> 6);
}
//트리거 신호
char Sensor_TRIGGER(void)
{
return ( (SersorPinInput & 0x10) >> 4 );
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00; //초기화 확인후, 정의 할 것
PORTF = 0x00;
DDRF = 0xBF;
PORTG = 0x00;
DDRG = 0x03;
}
//TIMER0 initialize - prescale:32
// WGM: Normal
// desired value: 32uSec
// actual value: 32.000uSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0xF0; //set count
OCR0 = 0x10;
TCCR0 = 0x03; //start timer
/*
TCNT0 = 0xF0; //set count
OCR0 = 0x10;
TCCR0 = 0x03; //start timer
*/}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
TCNT0 = 0xf0; //reload counter value
count++; //32usec마다 카운트 올림
if(count>1500) //카운트 1500마다 신호 한번씩 보내고 클리어 카운트 올림
{
Sensor_TRIGGER_ON();
count=0;
clrcnt++;
}
if(clrcnt>50) //클리어 카운트가 100이면 거리버퍼 클리어. 클리어카운트 초기화.
{
dist_buff=0;
clrcnt=0;
}
if(waveflag==OFF) //전단계까지 신호 받은 기억 없는데
{
if(Sensor_ECHO()==ON) //좀전에 받았으면 신호 받았다고 기억함. 버퍼 카운트에 지금까지 카운트 값을 넣어줌
{
waveflag=ON;
buff_cnt=count;
}
Sensor_TRIGGER_OFF(); //트리거 신호 끔
} else if(waveflag==ON) { //신호 받았으면
if(Sensor_ECHO()==OFF) { //에코신호 끝났으면
dist = ((count-buff_cnt)/2); //거리는 카운트 - 버퍼카운트 나누기 2
dist_buff = dist; //거리버퍼는 거리
waveflag = OFF; //플래그 내리고
count = 0; //카운트와 클리어카운트 초기화
clrcnt = 0;
}
}
}
//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 = 0xF8;
}
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
//uart has received a character in UDR
}
#pragma interrupt_handler uart0_udre_isr:20
void uart0_udre_isr(void)
{
//character transferred to shift register so UDR is now empty
}
#pragma interrupt_handler uart0_tx_isr:21
void uart0_tx_isr(void)
{
//character has been transmitted
}
//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();
timer0_init();
uart0_init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x01; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(int msec)
{
int i,j;
for(i=0; i<msec; i++)
for(j=0; j<255; j++);
}
//
void main(void)
{
init_devices();
//insert your functional code here...
while(1)
{
printf("\\n\\r DISTANCE = %d count = %d ",dist,count);
}
}
관리자 답변
안녕하세요? 고객님,
초음파 센서 SRF-04로 후방 감지계를 만든 예제입니다.
소스 코드, 회로도, 문서 모두 올려드립니다.
참고하셔서, 더 좋은 작품 만드시길 바랍니다.
- 문서 -
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=202
수고하세요.
>SRF05 초음파를 사용하고 있습니다.
>
>여기 있는 소스를 이용하는데 거리가 출력되지 않습니다.
>
>
>PF4번에 트리거 PF6번에 에코를 접속했습니다.
>
>소스가 문제인지 납땜이 문제인지 알 수가 없네요;;
>
>
>
> #include <iom128v.h>
>#include <macros.h>
>#include <stdio.h>
>
>#define SersorPort PORTF
>#define SersorPinInput PINF
>
>
>#define ON 1
>#define OFF 0
>
>unsigned int dist=0, // 거리
> dist_buff=0, // 거리임시저장
> buff_cnt=0, // 버퍼카운트
> waveflag=0, // 신호플래그
> clrcnt=0; // 클리어카운트
>unsigned int count=0;
>
>// 트리거 신호 보냄
>void Sensor_TRIGGER_ON(void)
>{
> SersorPort = SersorPort | 0x10;
>}
>
>// 트리거 신호 보내지 않음
>void Sensor_TRIGGER_OFF(void)
>{
> SersorPort = SersorPort & 0xEF;
>}
>
>//에코 신호
>char Sensor_ECHO(void)
>{
> return ((SersorPinInput & 0x40) >> 6);
>}
>
>//트리거 신호
>char Sensor_TRIGGER(void)
>{
> return ( (SersorPinInput & 0x10) >> 4 );
>}
>
>
>void port_init(void)
>{
>PORTA = 0x00;
>DDRA = 0x00;
>PORTB = 0x00;
>DDRB = 0x00;
>PORTC = 0x00; //m103 output only
>DDRC = 0x00;
>PORTD = 0x00;
>DDRD = 0x00;
>PORTE = 0x00;
>DDRE = 0x00; //초기화 확인후, 정의 할 것
>PORTF = 0x00;
>DDRF = 0xBF;
>PORTG = 0x00;
>DDRG = 0x03;
>}
>
>//TIMER0 initialize - prescale:32
>// WGM: Normal
>// desired value: 32uSec
>// actual value: 32.000uSec (0.0%)
>void timer0_init(void)
>{
>TCCR0 = 0x00; //stop
>ASSR = 0x00; //set async mode
>TCNT0 = 0xF0; //set count
>OCR0 = 0x10;
>TCCR0 = 0x03; //start timer
>
>/*
>TCNT0 = 0xF0; //set count
>OCR0 = 0x10;
>TCCR0 = 0x03; //start timer
>*/}
>
>#pragma interrupt_handler timer0_ovf_isr:17
>void timer0_ovf_isr(void)
>{
>TCNT0 = 0xf0; //reload counter value
>count++; //32usec마다 카운트 올림
>
>if(count>1500) //카운트 1500마다 신호 한번씩 보내고 클리어 카운트 올림
>{
> Sensor_TRIGGER_ON();
> count=0;
> clrcnt++;
>}
>
>if(clrcnt>50) //클리어 카운트가 100이면 거리버퍼 클리어. 클리어카운트 초기화.
>{
> dist_buff=0;
> clrcnt=0;
>}
>
>if(waveflag==OFF) //전단계까지 신호 받은 기억 없는데
>{
> if(Sensor_ECHO()==ON) //좀전에 받았으면 신호 받았다고 기억함. 버퍼 카운트에 지금까지 카운트 값을 넣어줌
> {
> waveflag=ON;
> buff_cnt=count;
> }
> Sensor_TRIGGER_OFF(); //트리거 신호 끔
>} else if(waveflag==ON) { //신호 받았으면
> if(Sensor_ECHO()==OFF) { //에코신호 끝났으면
> dist = ((count-buff_cnt)/2); //거리는 카운트 - 버퍼카운트 나누기 2
> dist_buff = dist; //거리버퍼는 거리
> waveflag = OFF; //플래그 내리고
> count = 0; //카운트와 클리어카운트 초기화
> clrcnt = 0;
> }
>}
>
>}
>
>//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 = 0xF8;
>}
>
>#pragma interrupt_handler uart0_rx_isr:19
>void uart0_rx_isr(void)
>{
>//uart has received a character in UDR
>}
>
>#pragma interrupt_handler uart0_udre_isr:20
>void uart0_udre_isr(void)
>{
>//character transferred to shift register so UDR is now empty
>}
>
>#pragma interrupt_handler uart0_tx_isr:21
>void uart0_tx_isr(void)
>{
>//character has been transmitted
>}
>
>//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();
>timer0_init();
>uart0_init();
>
>MCUCR = 0x00;
>EICRA = 0x00; //extended ext ints
>EICRB = 0x00; //extended ext ints
>EIMSK = 0x00;
>TIMSK = 0x01; //timer interrupt sources
>ETIMSK = 0x00; //extended timer interrupt sources
>SEI(); //re-enable interrupts
>//all peripherals are now initialized
>}
>
>void delay(int msec)
>{
> int i,j;
> for(i=0; i<msec; i++)
> for(j=0; j<255; j++);
>}
>
>//
>void main(void)
>{
>init_devices();
>//insert your functional code here...
>while(1)
>{
>
> printf("\\n\\r DISTANCE = %d count = %d ",dist,count);
>
>
>}
>}
>
>
|
||||
| 1455 | 답변완료장비이상 문의합니다 | 전용복 | 2008-08-19 | 1,445 |
|
avr 128키트 제품을 석영전자에서 구매하였습니다.
품목중 AVR ISP Pro AD-ISPPRO제품에 이상이 있습니다.
증상은 연결시 보드가 다운 됩니다.
같은 제품이 있어서 확인시 avr메인보드는 이상없는것을 확인했습니다.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
죄송합니다. 케이블에 불량이 있는 것 같습니다.
저희 회사로 제품을 삼성택배나 우체국택배로 보내주시면, 새 제품으로 교환하여 택배로 보내드리겠습니다. FAQ의 A/S 절차를 참고하시면 편리하게 보내실 수 있습니다. 고객님의 경우 택배비를 전액 저희가 부담합니다. 수신자 부담으로 보내주세요.
감사합니다.
>avr 128키트 제품을 석영전자에서 구매하였습니다.
>
>품목중 AVR ISP Pro AD-ISPPRO제품에 이상이 있습니다.
>
>증상은 연결시 보드가 다운 됩니다.
>
>같은 제품이 있어서 확인시 avr메인보드는 이상없는것을 확인했습니다.
>
>
>
>
>
|
||||
| 1454 | 답변완료AM-3AXIS 가속도 모듈을 구입하고 문제가 생겼습니다. | 신종혁 | 2008-08-18 | 1,387 |
|
오늘 인터넷으로 주문한 AM-3AXIS 모듈이 도착하였습니다.
귀사에서 제공한 메뉴얼을 보고
VCC에3.3V를 인가하고 GND를 연결하였습니다.
그리고 7번핀(X축)에 나오는 전압을 측정하였더니
160mV 가 나오고, 센서를 흔들어보아도 전혀 반응을 하지 않습니다.
제가 사용한 방법이 틀린건가요?
답변을 달아주세요~
관리자 답변
처음에는 안되다가
모드를 01, 10으로 바꾸다 보니까 갑자기 되네요
-_-; 혹시 안되시는분들 Mode를 여러번 바꾸어보세요
갑자기 되요-_-
|
||||
| 1453 | 답변완료스위치 문을 이용한 모터의 구동엔 관해서..질문있습니다.. | 박준혁 | 2008-08-18 | 1,394 |
|
kd-128 pro보드를 사용하구 있구요..
모터구동모듈은 am-ms2 펄스 구동모듈을 사용하고 있습니다.
모터의 구동을 위해 모터 클럭에 관한 함수를 while문 안에 넣어서 구동하면 모터를 구동할 수 있는데,
switch-case문을 이용하여서 코딩을 하려하는데 생각같이 쉽지않아 질문드립니다..
while(1){
if(PIND != 0x00){
keyin = PIND;
}
switch(keyin){
case 1: MOTOR_LEFT_CLK;
delay(2);
MOTOR_LEFT_CLK;
delay(2);
break;
case 2: MOTOR_LEFT_CLK;
delay(3);
MOTOR_LEFT_CLK;
delay(3);
break;
default: ;
}
}
각 스위치의 입력에따라 모터의 속도가 달라지도록 하고 싶습니다.
관리자 답변
안녕하세요? 고객님
말로 설명드리기에는 참 어려움이 있네요.
참고되실 만한, 소스를 제작한 것이 있어서, 올려드리오니, 참고하시기 바랍니다.
타이머를 활용하여, MS2에 넣어주는 클럭을 넣는 타이밍을 조절하면 속도가 조절 됩니다. TS8을 이용하여 속도와 아울러 방향도 조절하도록 프로그래밍 되어 있습니다. 수고하세요.
>kd-128 pro보드를 사용하구 있구요..
>모터구동모듈은 am-ms2 펄스 구동모듈을 사용하고 있습니다.
>
>모터의 구동을 위해 모터 클럭에 관한 함수를 while문 안에 넣어서 구동하면 모터를 구동할 수 있는데,
>
>switch-case문을 이용하여서 코딩을 하려하는데 생각같이 쉽지않아 질문드립니다..
>
>
>while(1){
> if(PIND != 0x00){
> keyin = PIND;
> }
> switch(keyin){
> case 1: MOTOR_LEFT_CLK;
> delay(2);
> MOTOR_LEFT_CLK;
> delay(2);
> break;
> case 2: MOTOR_LEFT_CLK;
> delay(3);
> MOTOR_LEFT_CLK;
> delay(3);
> break;
> default: ;
> }
> }
>
>
>각 스위치의 입력에따라 모터의 속도가 달라지도록 하고 싶습니다.
|
||||
| 1452 | 답변완료전에 질문드렸던사람인대요... | 김대선 | 2008-08-18 | 1,385 |
|
3축가속도센서 소스 질문 드렸던 사람인대요..
코드비전소스는 힘들고 ICCAVR7에 맞는 소스는 주실수 있다고 하셨는데
그거라도 제 메일로 보내주시면 안될까요^^:;
지금보니깐 제 ICCAVR이 7이네요..
빠른시간안에 부탁드립니다 ㅠㅠ
관리자 답변
안녕하세요? 고객님,
요청하신 소스는 첨부하였습니다.
ICCAVR V7 용 소스입니다.
자료실의 3축 가속도 센서용 자료에서 3축 가속도 센서 마우스 용 소스와 윈도우용 소스라고 된 3축 가속도 센서용 소스 두가지를 모두 만들어 드렸습니다. 윈도 프로그램은 자료실과 각각 같은 것을 쓰시면 됩니다.
감사합니다.
>3축가속도센서 소스 질문 드렸던 사람인대요..
>코드비전소스는 힘들고 ICCAVR7에 맞는 소스는 주실수 있다고 하셨는데
>그거라도 제 메일로 보내주시면 안될까요^^:;
>지금보니깐 제 ICCAVR이 7이네요..
>
>빠른시간안에 부탁드립니다 ㅠㅠ
|
||||
| 1451 | 답변완료에구 답변 감사합니다.^^ | 이영균 | 2008-08-18 | 1,376 |
|
Device 3% full.
Cannot find source file D:\\AM_MS2_example\\AM-MS2_ATMEGA128_timer이용\\ex_u_step_driver.c
iccavr에서 새프로젝트를 만들고 c. 파일이나 s. 파일을 불러서 빌드 하면 들어
가는 걸로 아는데 계속 저렇게 되네요....ㅠㅠ
방문하면 직원분이 귀찮으실거같고..
원격으로 혹시 컴파일해서 넣으는거 해주실수있나요??
ㅠ.ㅠ
관리자 답변
직접 방문해 주셔도 되구요. 방문하시면 친절히 답변해 드립니다.
방문이 어려우시면 연락처와 네이트온 ID 남겨 주세요.
감사합니다.
>Device 3% full.
>Cannot find source file D:\\AM_MS2_example\\AM-MS2_ATMEGA128_timer이용\\ex_u_step_driver.c
>
>
>iccavr에서 새프로젝트를 만들고 c. 파일이나 s. 파일을 불러서 빌드 하면 들어
>
>가는 걸로 아는데 계속 저렇게 되네요....ㅠㅠ
>
>방문하면 직원분이 귀찮으실거같고..
>
>
>원격으로 혹시 컴파일해서 넣으는거 해주실수있나요??
>
>ㅠ.ㅠ
|
||||
| 1450 | 답변완료스텝모터 모듈관련 질문입니다 ^^ | 이민진 | 2008-08-18 | 1,426 |
|
297없는걸로 구입했는뎁..
소형스텝모터 4개를 구동시켜려고합니다..
2개식은 같이 움직이기 때문에 움직임은 2개만 있으면됩니답..
스텝모터모듈 1개에 스텝모터를 2개식 연결해서 써도되는지요?
일반적인 라인트레이서에 들어가는 것보다 휠씬 작은 사이즈의 스텝모터를 사용
합니다..
되긴 될듯한뎁..
자세한 답변 바랄께요 ^^ (메일로 주셔도 괜찮습니답~)
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
CS2P를 구매하신 것 같은데요.
전류량이 이상 없도록 선만 굵은 것을 써서, 연결해 주시면,
이상 없을 것 같습니다.
감사합니다.
>297없는걸로 구입했는뎁..
>
>소형스텝모터 4개를 구동시켜려고합니다..
>
>2개식은 같이 움직이기 때문에 움직임은 2개만 있으면됩니답..
>
>스텝모터모듈 1개에 스텝모터를 2개식 연결해서 써도되는지요?
>
>일반적인 라인트레이서에 들어가는 것보다 휠씬 작은 사이즈의 스텝모터를 사용
>
>합니다..
>
>되긴 될듯한뎁..
>
>자세한 답변 바랄께요 ^^ (메일로 주셔도 괜찮습니답~)
|
||||
| 1449 | 답변완료ICCV7과 AVRSTUDIO의 소스 호환성 (printf 디버깅 관련) | MAX | 2008-08-18 | 1,407 |
|
소스 호환성에 대해서 질문 드립니다.
예제 CD에 있는 ex_spaeker.hex를 다운로드 하니
serial port를 통한 디버깅이 정상적으로 잘 됩니다.
SPEAK TEST SAMPLE을 AVR STUDIO에서 컴파일하여 다운로드 하였습니다.
키입력은 정상적으로 되는 것을 확인하였(LED출력)으나 serial 포트로는
잘 되지 않는 것 같습니다.
ICCV7과 AVR STUDIO 소스또는 LIBRARY 의 차이점에 대해서좀 알고 싶고요.
printf를 통한 통신포트 처리에 대해서 좀 자세하게 설명 가능할까요?
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
ICCV7과 AVR Studio의 라이브러리 차이라 하면, 무엇부터 말씀드려야 할 지 좀 막막하네요.
하지만, 우선, 라이브러리 파일 이름에 차이가 있구요.
일부 레지스터의 경우 define 된 이름이 다를 수 있습니다. 대부분 같지만요.
또한, printf를 사용하는 경우, ICCAVR에서는 putchar 함수를 내부 함수로 사용합니다. 아래의 함수들은 시리얼포트 초기화하실 때, RX complete interrupt, TX complete interrupt, Data register Empty interrupt 등을 절대 사용하면 안됩니다. 아래 함수를 필요에 따라서 바꿔 사용하시면, printf 함수로 시리얼 포트 0번 1번 모두에 출력이 가능하고, scanf 함수로 시리얼 포트 0번 1번 모두에 입력이 가능해 지면서, 막강한 printf 함수와 scanf 함수를 사용하여 입력 출력하실 수 있습니다.
본 함수를 잘 바꾸시면, 텍스트 LCD나 그래픽 LCD에도 printf scanf 함수 사용이 가능해 집니다. 참고하세요.
이 함수를 추가 하신후, printf 함수로 출력하시면 UDR0로 출력이 가능합니다.
int putchar(char c)
{
while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty
UDR0 = c;
return c;
}
이 함수를 추가 하신후, printf 함수로 출력하시면 UDR1로 출력이 가능합니다.
int putchar(char c)
{
while (((UCSR1A>>UDRE1)&0x01) == 0) ; // UDRE, data register empty
UDR1 = c;
return c;
}
이 함수를 추가 하신후, scanf 함수로 입력받으시면 시리얼 0번포트에서
입력을 받을 수 있습니다.
char getchar(void)
{
while ((UCSR0A & 0x80) == 0);
return UDR0;
}
이 함수를 추가 하신후, scanf 함수로 입력받으시면 시리얼 1번포트에서
입력을 받을 수 있습니다.
char getchar(void)
{
while ((UCSR1A & 0x80) == 0);
return UDR1;
}
감사합니다.
>소스 호환성에 대해서 질문 드립니다.
>
>예제 CD에 있는 ex_spaeker.hex를 다운로드 하니
>serial port를 통한 디버깅이 정상적으로 잘 됩니다.
>
>SPEAK TEST SAMPLE을 AVR STUDIO에서 컴파일하여 다운로드 하였습니다.
>키입력은 정상적으로 되는 것을 확인하였(LED출력)으나 serial 포트로는
>잘 되지 않는 것 같습니다.
>
>ICCV7과 AVR STUDIO 소스또는 LIBRARY 의 차이점에 대해서좀 알고 싶고요.
>
>printf를 통한 통신포트 처리에 대해서 좀 자세하게 설명 가능할까요?
>
>
>
|
||||
