Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 6543 | 답변완료led가;... 정말 죄송합니다.... | 신승현 | 2011-10-26 | 1,302 |
|
void main(void){
unsigned char ah0,al0;
unsigned char ah1,al1;
unsigned int ch0, ch1, cht;
int sensor0, sensor1, sensor_t;
init_devices();
ADCSRA &= 0x7f;
ADMUX = 0x40; // 외부의 AVCC 단자로 입력된 전압을 사용, ADC0 사용
while(1){
sensor0 = 0;
sensor1 = 0;
sensor_t =0;
ch0 = 0;
ch1 = 0;
ADCSRA = 0xc7; //ADC 활설화 및 시작, 단일변환모드, 분주비 = 128
ADMUX = 0x40;
al0 = ADCL;
ah0 = ADCH;
ch0 = al0+ah0*256;
ADMUX = 0x41;
al1 = ADCL;
ah1 = ADCH;
ch1 = al1+ah1*256;
printf("data : %d\\r\\n", ch0);
printf("data : %d\\r\\n", ch1);
sensor0 = (ch0>=100);
sensor1 = (ch1>=100);
sensor_t = sensor0+(sensor1*16);
switch(sensor_t){ //PORTB = led
case 0x01 : PORTB = 0x0f; break;
case 0x10 : PORTB = 0xf0; break;
case 0x11 : PORTB = 0xff; break;
default : PORTB = 0xaa; break;
}
}
}
정말 죄송합니다... 계속 같은걸로 질문이 올라가네요;..
지금 적외선 센서를 2개를 같이 구동하는 중입니다.
적외선센서 1개만 구동만 하면(ch1에 관한 정보를 지웠을때)
정상적으로 led가 들어오는데
위와 같은 코드로 하면 2개의 센서 어떤거든지 하나의 센서를
가리면 case 0x11 << 이쪽으로 넘어가서 led 불이 모두 켜집니다.
물론 센서 둘다 가렸을때도 그쪽으로 넘어가고요...
안가리면 default 로 넘어갑니다만.... 뭐가 잘못되서 그런건가요;;;
설마 PORTB에 led를 연결한게 잘못된건가요??;;
관리자 답변
아래 문장이 이해가 안가네요.
sensor0 = (ch0>=100);
sensor1 = (ch1>=100);
뭘 하시려던 건가요? 문법이 어긋난것 같습니다만.
수고하세요.
>void main(void){
> unsigned char ah0,al0;
> unsigned char ah1,al1;
> unsigned int ch0, ch1, cht;
> int sensor0, sensor1, sensor_t;
> init_devices();
> ADCSRA &= 0x7f;
> ADMUX = 0x40; // 외부의 AVCC 단자로 입력된 전압을 사용, ADC0 사용
>
> while(1){
> sensor0 = 0;
> sensor1 = 0;
> sensor_t =0;
> ch0 = 0;
> ch1 = 0;
> ADCSRA = 0xc7; //ADC 활설화 및 시작, 단일변환모드, 분주비 = 128
> ADMUX = 0x40;
> al0 = ADCL;
> ah0 = ADCH;
> ch0 = al0+ah0*256;
> ADMUX = 0x41;
> al1 = ADCL;
> ah1 = ADCH;
> ch1 = al1+ah1*256;
> printf("data : %d\\r\\n", ch0);
> printf("data : %d\\r\\n", ch1);
> sensor0 = (ch0>=100);
> sensor1 = (ch1>=100);
> sensor_t = sensor0+(sensor1*16);
> switch(sensor_t){ //PORTB = led
> case 0x01 : PORTB = 0x0f; break;
> case 0x10 : PORTB = 0xf0; break;
> case 0x11 : PORTB = 0xff; break;
> default : PORTB = 0xaa; break;
> }
> }
>}
>
>정말 죄송합니다... 계속 같은걸로 질문이 올라가네요;..
>
>지금 적외선 센서를 2개를 같이 구동하는 중입니다.
>
>적외선센서 1개만 구동만 하면(ch1에 관한 정보를 지웠을때)
>
>정상적으로 led가 들어오는데
>
>위와 같은 코드로 하면 2개의 센서 어떤거든지 하나의 센서를
>
>가리면 case 0x11 << 이쪽으로 넘어가서 led 불이 모두 켜집니다.
>
>물론 센서 둘다 가렸을때도 그쪽으로 넘어가고요...
>
>안가리면 default 로 넘어갑니다만.... 뭐가 잘못되서 그런건가요;;;
>
>설마 PORTB에 led를 연결한게 잘못된건가요??;;
|
||||
| 6542 | 답변완료다른이유는 없을까요? | 이학경 | 2011-10-27 | 1,200 |
|
#include <avr/io.h>
#include <util/delay.h>
void uart_tx(char data){while(!(UCSR0A&(1<<UDRE0)));UDR0=data;}
int main(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x08; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;
        while(1){uart_tx('a');_delay_ms(1000);}
}
말씀하신 소스를 이용해보았는데도 작동이 안됩니다.
작성한것은 하이퍼터미널에 a라는값을 1초마다 뿌려주는건데요.
포트나 컴파일 하이퍼터미널 문제가인가해서 간단한 LED소스만들어서 구동 확인해 보았습니다.
문제없이 잘 작동됩니다.
하지만 <0>데이터만 출력됩니다.
다른원인이 있을까요?
관리자 답변
해결하셨다니 다행입니다.
수고하세요.
>#include <avr/io.h>
>#include <util/delay.h>
>
>void uart_tx(char data){while(!(UCSR0A&(1<<UDRE0)));UDR0=data;}
>
>int main(void)
>{
>UCSR0B = 0x00; //disable while setting baud rate
>UCSR0A = 0x00;
>UCSR0C = 0x06;
>UBRR0L = 0x08; //set baud rate lo
>UBRR0H = 0x00; //set baud rate hi
>UCSR0B = 0x98;
> while(1){uart_tx('a');_delay_ms(1000);}
>}
>
>
>
>말씀하신 소스를 이용해보았는데도 작동이 안됩니다.
>작성한것은 하이퍼터미널에 a라는값을 1초마다 뿌려주는건데요.
>포트나 컴파일 하이퍼터미널 문제가인가해서 간단한 LED소스만들어서 구동 확인해 보았습니다.
>문제없이 잘 작동됩니다.
>
>하지만 <0>데이터만 출력됩니다.
>다른원인이 있을까요?
>
|
||||
| 6541 | 답변완료AB-S52 보드 사용자 입니다.. | 양선모 | 2011-10-27 | 1,162 |
|
ps/2 키보드의 data 선을 p3.4 에 다이렉트로 연결하였고,
또한 clock도 p3.3에 다이렉트로 연결하였습니다..
구글에서 소스파일을 구하여 실행해 보았는데
키보드 초기화 명령 FF값을 키보드로 전송을 하면 ACK(FA)가 돌아오지 않고
7F 라는 값이 돌아옵니다...
포트에 ps/2를 다이렉트로 연결해도 문제가 없는지 궁금합니다..
만약 아니된다면 어떻게 해야 하나요?
관리자 답변
안녕하세요? 고객님,
FA Acknowledge
AA Power On Self Test Passed (BAT Completed)
EE See Echo Command (Host Commands)
FE Resend - Upon receipt of the resend command the Host should re-transmit the last byte sent.
00 Error or Buffer Overflow
FF Error or Buffer Overflow
2.3.1) Special Commands the Keyboard can Send to the Controller
00 Keyboard buffer overflowed
AA Selftest passed
FA The command sent was received correctly
FE The command sent was received poorly. Please resend.
--------------------------------------------------------------------------------
2.3.2) Special Commands the Controller can Send to the Keyboard
ED Set the LEDs according to next byte I send
bit 0=Scroll lock 1=on
bit 1=Num lock
bit 2=Caps lock
bits 3-7 must be 0
F4 clear the key buffer and start scanning
F6 restore default values
FE retransmit last character, please
FF Reset, you stupid keyboard!
--------------------------------------------------------------------------------
1) Special Commands the Keyboard can Send to the Controller
00 Keyboard buffer overflowed
AA Selftest passed
FA The command sent was received correctly
FE The command sent was received poorly. Please resend.
--------------------------------------------------------------------------------
2) Special Commands the Controller can Send to the Keyboard
ED Set the LEDs according to next byte I send
bit 0=Scroll lock 1=on
bit 1=Num lock
bit 2=Caps lock
bits 3-7 must be 0
F4 clear the key buffer and start scanning
F6 restore default values
FE retransmit last character, please
FF Reset, you stupid keyboard!
아시다 시피 이런 것이라서, 뭔가 잘못 하신 것 같은데요.
아니면, 혹시, 데이터 분석이 빠졌다거나, 뭔가가 잘못되어 있는 것 같습니다.
파일 하나를 첨부하였는 데, 좀 참고되시지 않을까 생각합니다.
주로 질문하신 부분이 사실, 본 게시판 답변의 성격은 아니라 벗어난 것이긴 합니다만,
옛날 자료가 좀 있어서, 답변해 드립니다.
수고하세요.
>ps/2 키보드의 data 선을 p3.4 에 다이렉트로 연결하였고,
>또한 clock도 p3.3에 다이렉트로 연결하였습니다..
>
>구글에서 소스파일을 구하여 실행해 보았는데
>
>키보드 초기화 명령 FF값을 키보드로 전송을 하면 ACK(FA)가 돌아오지 않고
>7F 라는 값이 돌아옵니다...
>
>포트에 ps/2를 다이렉트로 연결해도 문제가 없는지 궁금합니다..
>만약 아니된다면 어떻게 해야 하나요?
>
>
>
|
||||
| 6540 | 답변완료도움부탁드립니다. atmega2560입니다. | 이학경 | 2011-10-27 | 1,332 |
|
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void uart_tx(char data){while(!(UCSR0A&(1<<UDRE0)));UDR0=data;}
int main(void)
{ DDRE=2; // TXD0 PORTE.1
UCSR0A=0; UCSR0B=0x98; UCSR0C=6; UBRR0H=0; UBRR0L=103; // USART0 9600
sei();
while(1){uart_tx('a');_delay_ms(1000);}
}
UART통신을 할경우 하이퍼터미널에서 <0>값만 출력되는 문제입니다.
초기화 함수와 전송 함수 두게로 구성된 간략한 소스입니다.
칩은 ATMEGA2560 16Mhz입니다.
1.
전송함수는 다 똑같은함수이고 초기화 함수는 속도다르게해서 두가지를 사용했습니다.
9600bps : UCSR0A=0; UCSR0B=8; UCSR0C=6; UBRR0H=0; UBRR0L=103;
115200bps : UCSR0B = 0x00;UCSR0A = 0x00;UCSR0C = 0x06;UBRR0L = 0x08; UBRR0H = 0x00; UCSR0B = 0x98;
2.
출력이 되는것을 확인하기위해 포트출력소스를 넣었습니다.
int main(void){ DDRE=2; while(1){ PORTE^=2; _delay_us(500);} }
당연하지만 이상한 데이터가 하이퍼터미널에 뿌려졌고
LED를 연결해서보니 해당포트에 불이 들어오는것을 확인할수 있었습니다.
1번으로 소스가 문제가없다고 생각했고 2번으로 시리얼통신에도 문제가 없다고 생각했습니다.
혹시 모듈자체에 1,2번 Rs232핀이 달려잇어서 이것
관리자 답변
안녕하세요, 뉴티씨입니다. 문의 내용 확인하였습니다. 추가 문의사항은 newtc@newtc.co.kr 또는 02-704-4774로 연락 주시기 바랍니다. 감사합니다.
|
||||
| 6539 | 답변완료AM-DC2-2D전압이...-가 나옵니다... | 김태완 | 2011-10-27 | 1,361 |
|
저번에 무선수신기로 한다고 했던 사람인데요...
현재 모터 컨넥터 부분에 전압 체크를 하면 마이너스 전압이 나옵니다
이유를 잘 모르겠습니다
그리고 잘안돼서 모듈이 제대로 동작하는지 보기위해
일반 dc모터를 연결하고 pwm에 5v, dir,enable에 gnd를 걸고 9번과 10번에도 5볼트와 gnd를 연결했습니다만 모터가 작동하질 않네요...물론 모터용 전압도 5볼트줬습니다...
아 그리고 혹시 뉴티씨에서는 FV컨버터는 팔지 않나요??
질문이 주저리주저리 많았습니다
답변 부탁드리겠습니다
관리자 답변
안녕하세요? 모터컨트롤러의 방향핀을 반대로 하세요. 즉, DIR 선의 커넥션을 바꿔보세요.
VCC에 하셨다면 GND로 바꾸고 VCC에 하셨다면 GND로 바꿔주세요.
그럼, 모터 출력 쪽에서 플러스 전압이 나올겁니다.
그리고, 나머지는 지난 번 처럼 하세요.
즉, 이 경우 모터용 전압을 5V를 주면 변화가 없습니다. 지난 번 답변을 참고하세요.
수고하세요.
>저번에 무선수신기로 한다고 했던 사람인데요...
>
>현재 모터 컨넥터 부분에 전압 체크를 하면 마이너스 전압이 나옵니다
>
>이유를 잘 모르겠습니다
>
>그리고 잘안돼서 모듈이 제대로 동작하는지 보기위해
>
>일반 dc모터를 연결하고 pwm에 5v, dir,enable에 gnd를 걸고 9번과 10번에도 5볼트와 gnd를 연결했습니다만 모터가 작동하질 않네요...물론 모터용 전압도 5볼트줬습니다...
>
>
>아 그리고 혹시 뉴티씨에서는 FV컨버터는 팔지 않나요??
>
>질문이 주저리주저리 많았습니다
>
>답변 부탁드리겠습니다
|
||||
| 6538 | 답변완료atmega2560 퓨즈비트에 관하여질문드립니다.(내용삭제) | 이학경 | 2011-10-27 | 1,299 |
|
글을 잘못올렸습니다. 해결했습니다. 감사합니다.
관리자 답변
네 감사합니다.
잘 되셨다니, 다행입니다.
수고하세요.
>글을 잘못올렸습니다. 해결했습니다. 감사합니다.
|
||||
| 6537 | 답변완료Atmega2561을 iccAVR에서 컴파일을 하는 방법을 가르쳐주세요 | 평화곰돌이 | 2011-10-27 | 1,394 |
|
Option에서 2561을 설정을 했고요
처음 iccavr을 설정하는 방법을 알고 싶습니다.
관리자 답변
안녕하세요? 고객님,
128과 2561은 크게 다르지 않습니다.
다만, 설정 부분이 약간 달라지는 데요.
혹시나 해서, 프로그램 소스 작성하는 것부터 해서 모든 부분을 그림으로 만들었습니다.
첨부파일을 참고하여 보세요.
수고하세요.
>Option에서 2561을 설정을 했고요
>처음 iccavr을 설정하는 방법을 알고 싶습니다.
>
|
||||
| 6536 | 답변완료음원소스 전달용 RCA라인 및 RCA잭 관련해서 여쭤봅니다. | 1234 | 2011-10-27 | 1,352 |
|
내용은 이렇습니다.
1. 아날로그음원(3.5pi 단자로 출력되는 스테레오 소스) ->
2. [RCA_L] [RCA_R] ->
3. [ADC_L] [ADC_R]->
4. AVR128 ->
5. [ADC_SPEAKER_L] [ADC_SPEAKER_R]
그냥 이렇게 하면 되는건지 무언가 더 추가해야하는건지 잘모르겠습니다.
좋은 가르침 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
무엇을 하시려는 것인지요?
알려주신 내용만으로는 알기 어렵습니다. 좀 더 자세히 부탁합니다.
혹시, 짐작을 해 보면, 아날로그 음원 내용을 RCA 단자를 통해서 커넥터로 연결하여 AVR 의 ADC 포트에 각각 두 채널을 입력한 후에,
다시 AVR에서 무슨 처리를 해서, DAC 로 해서 스피커로 출력하려는 건가요?
만약에 맞다면, 제 생각은 이렇습니다.
AVR의 ADC는 채널 하나만 한다고 했을 때 15k 샘플링이 한계입니다.
즉, 이론적으로도 7.5kHz가 나이퀴스트 주파수가 되고,
음성을 주고 받는 것도 음질이 전화음질 정도밖에는 안된다는 게 됩니다.
또한, 거기서 뭔가 데이터를 처리해서 출력까지 한다면, 과연 AVR이 할 수 있는 것인지 좀 따져봐야 합니다.
좀 더 자세히 올려보세요.
수고하세요.
>내용은 이렇습니다.
>
>1. 아날로그음원(3.5pi 단자로 출력되는 스테레오 소스) ->
>2. [RCA_L] [RCA_R] ->
>3. [ADC_L] [ADC_R]->
>4. AVR128 ->
>5. [ADC_SPEAKER_L] [ADC_SPEAKER_R]
>
>그냥 이렇게 하면 되는건지 무언가 더 추가해야하는건지 잘모르겠습니다.
>
>좋은 가르침 부탁드립니다.
|
||||
| 6535 | 답변완료책이 출간되었나요? | 김경민 | 2011-10-28 | 1,400 |
|
키트와 책을 사서 보려는데
kt-128 관련책이 나왔는지요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
네, 책은 KT-M128 관련하여 두 권이 나와 있습니다.
둘 다 현재는 본사에서만 판매하고 있습니다만, 조만간에 대형 서점에서도 판매할 예정입니다.
KT-M128 리얼 가이드 라는 책과 킷트 구매하면 함께 드리는 실습 교재 이렇게 두 권이 있습니다.
본사 전화로 구매 관련 문의하시면 됩니다.
수고하세요.
>키트와 책을 사서 보려는데
>kt-128 관련책이 나왔는지요?
|
||||
| 6534 | 답변완료아트메가 128모듈 질문드립니다. | 아트멤 | 2011-10-30 | 1,362 |
|
아트메가 초보입니다.
아트메가 128모듈에 USBISP를 사용하고 있는데요.(전원으로도 사용함)
1. 아트메가 모듈의 6개핀(USBISP랑 연결되는 부분)은 ISP용도 이외에는 사용할수 없나요?
제가 아트메가랑 SD카드랑 연결하려고 하는데 SCK이 겹치네요
그래서 USB랑 SCK랑 충돌하는것인지 아니면 원래 그렇게 연결해야 SCK신호를 받는지 알고싶 습니다.
클락을 아트메가에서 자동으로 만들어내는것인지(만약 건전지 등을 전원으로 사용할 경우)
USB를 통해서 만들어지는 것인지도요
2.아트메가랑 SD카드 연결시
아드메가---------SD카드
PB0(SS) -------- SD-CS
PB1(SCK)--------SCK
PB2(MOSI)--------MOSI
PB3(MISO)--------MISO
이렇게 연결하여 사용하면 되는지 알려주세요
3.USBISP가 계속 초록불이 계속 깜박이면서
다운로드가 안되는데 어떻게 하면 되는지 알려주세요(그림첨부)
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
답변하여 드릴께요.
>아트메가 초보입니다.
>아트메가 128모듈에 USBISP를 사용하고 있는데요.(전원으로도 사용함)
>
>1. 아트메가 모듈의 6개핀(USBISP랑 연결되는 부분)은 ISP용도 이외에는 사용할수 없나요?
==> 다른 용도로 사용 가능합니다. 다만, 이 6핀 중에서 SCK, MOSI, MISO는 가능하면, 다른 용도로 쓰지 않거나, Write 할 때는 연결하지 않고, Write 후에 연결하여 다른 용도로 사용하는 것이 좋겠습니다.
그렇지 않으면, Write 하는 신호들이 제대로 1, 0으로 변하지 않아서, Write에 에러가 나게 됩니다.
> 제가 아트메가랑 SD카드랑 연결하려고 하는데 SCK이 겹치네요
> 그래서 USB랑 SCK랑 충돌하는것인지 아니면 원래 그렇게 연결해야 SCK신호를 받는지 알고싶 습니다.
>클락을 아트메가에서 자동으로 만들어내는것인지(만약 건전지 등을 전원으로 사용할 경우)
>USB를 통해서 만들어지는 것인지도요
--> USBISP에서는 명령을 실행하고, 그 명령에 대한 실행을 하게 되서, 클럭을 만들어서 통신하게 됩니다.
>
>2.아트메가랑 SD카드 연결시
>아드메가---------SD카드
>
>PB0(SS) -------- SD-CS
>PB1(SCK)--------SCK
>PB2(MOSI)--------MOSI
>PB3(MISO)--------MISO
>
>이렇게 연결하여 사용하면 되는지 알려주세요
==> 그렇게 하시면 되겠습니다.
아래 링크 참고하세요.
http://eslectures.blog.me/80138743528
>
>
>3.USBISP가 계속 초록불이 계속 깜박이면서
>다운로드가 안되는데 어떻게 하면 되는지 알려주세요(그림첨부)
==> 위에서 말한것처럼 SPI 선로를 겹치게 쓰셔서 그런 것 같습니다. Write 할 때는 빼 주세요.
수고하세요.
>
>
>
>
>
|
||||
| 6533 | 답변완료자이로 센서애 대해 다시 문의드립니다 | 최승훈 | 2011-10-31 | 1,477 |
|
계속적으로 친절한 답변 해주셔서 감사합니다
저희 프로그램과 시뮬레이션 상으론 각속도만 알면 되도록 했는데요
예를들어 ch0값을 직접 printf로 값을 보려고 합니다.
그래서 저번에 여쭤본건데요
1. 코드상에선 상위 비트와 하위비트로 나누어서 상위비트에 256을 곱해서 ch라는 하나의 문자로 표현했는데 %d로 ch0을 뽑으면 올바른 각속도 값이 나오는것인지 궁금하구요
예를들어 자이로센서 감도가 0.5mV/deg/s인데 실험을 통해 각속도 10일 경우와 20일 경우 등등으로 실험한뒤 printf로 찍히는 값을 비교하여 적당한 비례상수를 곱해줘서 이용하면 되는건가요?? 아니면 찍히는 값에 따라 따로 찍히는 숫자가 정해져 있는건가요?
질문2 밑에 함수는 저번에 각도를 구할때 사용하셨다던 함수인데요 Vx값이 각속도 값인가요?
다른칩으로 구하셨다고 되어있는데 어떤 실험을 통해 저 값이 나올 수 있는지 문의드립니다.
제가 다른칩으로 각을 구했던 함수입니다. 참고하시길 바랍니다.
void MMA7620_value ( void )
{
        FLOAT32 buf[3];
        //AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_1 );
        //DBGU_Transmitter ( 0x0C );
                        
        MMA7620_Average_value ( buf, 1 );        // ADC
        /*
        Vx = buf[0] * SCAIL_VECTER;
        Vy = buf[1] * SCAIL_VECTER;
        Vz = buf[2] * SCAIL_VECTER;
        */
        Vx = buf[0] * 0.00322265625;
        Vy = buf[1] * 0.00322265625;
        Vz = buf[2] * 0.00322265625;
        /*
        printf ( "\\n Vx    : %f", Vx );
        printf ( "\\n Vy    : %f", Vy );
        printf ( "\\n Vz    : %f", Vz );                        
        */                /*                        
                        Dx = uiADC_Dtat[0];// * SCAIL_VECTER;
                        Dy = uiADC_Dtat[1];// * SCAIL_VECTER;
                        Dz = uiADC_Dtat[2];// * SCAIL_VECTER;
                        printf ( "\\n ADCx  : %4d", Dx );
                        printf ( "\\n ADCy  : %4d", Dy );
                        printf ( "\\n ADCz  : %4d", Dz );        
                        */
        
        Ax = (( FLOAT32 )buf[0] - Dx ) * SCAIL_VECTER;// * 180 / PI;
        Ay = (( FLOAT32 )buf[1] - Dy ) * SCAIL_VECTER;// * 180 / PI;
        Az = (( FLOAT32 )buf[2] - Dz ) * SCAIL_VECTER;// * 180 / PI;
        /*                
        printf ( "\\n Ax    : %5.2f", asin(Ax) * 180 / PI );
        printf ( "\\n Ay    : %5.2f", asin(Ay) * 180 / PI );
        printf ( "\\n Az    : %5.2f", asin(Az) * 180 / PI );                        
        */                
        pitch = atan( Ax / sqrt( Ay * Ay + Az * Az  )) * 180 / PI;
        roll  = atan( Ay / sqrt( Ax * Ax + Az * Az  )) * 180 / PI;
        theta = atan( sqrt( Ax * Ax + Ay * Ay ) / Az ) * 180 / PI;
        /*
        printf ( "\\n pitch : %5.2f", pitch );
        printf ( "\\n roll  : %5.2f", roll  );
        printf ( "\\n theta : %5.2f", theta );        
        */
}
질문3. 다음질문입니다. 일단 하이퍼터미널을 통해 값을 뽑고 있지만 예를들어 자이로가 오른쪽 왼쪽으로 돌았지만 값이 둘다 양수값으로 나올수 밖에 없는걸로 보여서요..
부호를 확인하는 방법이 궁금합니다. 코드상으론 배열 8 9에서왼쪽 오른쪽을 구분한다고 한 것 같은데.. 잘 이해가 안가서 문의드립니다.
사용하는 코드는 센서에 올려주신 코드를 이용하고 있고 사용하는 프로그램은 codevision입니다.
항상 친절한 답변 다시한번 더 감사드립니다.
관리자 답변
안녕하세요, 뉴티씨입니다. 문의 내용 확인하였습니다. 추가 문의사항은 newtc@newtc.co.kr 또는 02-704-4774로 연락 주시기 바랍니다. 감사합니다.
|
||||
| 6532 | 답변완료적외선센서 관련 질문 다시 드립니다. | 신승현 | 2011-10-31 | 1,362 |
|
void main(void){
unsigned char ah0,al0;
unsigned char ah1,al1;
unsigned int ch0, ch1, cht;
int sensor0, sensor1, sensor_t;
init_devices();
ADCSRA &= 0x7f;
ADMUX = 0x40; // 외부의 AVCC 단자로 입력된 전압을 사용, ADC0 사용
while(1){
sensor0 = 0;
sensor1 = 0;
sensor_t =0;
ch0 = 0;
ch1 = 0;
ADCSRA = 0xc7; //ADC 활설화 및 시작, 단일변환모드, 분주비 = 128
ADMUX = 0x40;
al0 = ADCL;
ah0 = ADCH;
ch0 = al0+ah0*256;
ADMUX = 0x41;
al1 = ADCL;
ah1 = ADCH;
ch1 = al1+ah1*256;
printf("data : %d\\r\\n", ch0);
printf("data : %d\\r\\n", ch1);
if (ch0 >= 100){
sensor0 = 0x01;
}
if (ch1 >= 100){
sensor1 = 0x01;
}
sensor_t = sensor0+(sensor1*16);
switch(sensor_t){ //PORTB = led
case 0x01 : PORTB = 0x0f; break;
case 0x10 : PORTB = 0xf0; break;
case 0x11 : PORTB = 0xff; break;
default : PORTB = 0xaa; break;
}
}
}
이런식으로 짯는데요 1번 센서와 2번 센서 둘중 하나 어떤걸 읽어도 무조건 case 0x11로
들어가내요... 소스 상의 문제인거 같은데 어디가 문제인지 정확하게 모르겠습니다.
그리고 지금 1번 센서 하고 2번 센서하고 그냥 선을 연결해서 둘다 외부 Vcc에 연결해
놓았습니다. 여기다 이제 자이로 센서까지 연결하려는데 AVR에 무리는 없을 런지요.
쉽게 말해서 외부 Vcc에 병렬로 1번 적외선센서, 2번 적외선센서, 자이로센서 연결하려는
겁니다.
관리자 답변
안녕하세요?
값의 범위가 ch0, ch1 모두 1024까지인데요.
현재 보면, 100을 넘으면 다 0x01로 바꿔주고 있습니다.
그래서, 다 값이 100을 넘으니까 0x01이 되서, 합치니까 0x11 이 되는 것 같습니다.
그 부분 다시 들여다 보면 좋겠네요.
수고하세요.
>void main(void){
> unsigned char ah0,al0;
> unsigned char ah1,al1;
> unsigned int ch0, ch1, cht;
> int sensor0, sensor1, sensor_t;
> init_devices();
> ADCSRA &= 0x7f;
> ADMUX = 0x40; // 외부의 AVCC 단자로 입력된 전압을 사용, ADC0 사용
>
> while(1){
> sensor0 = 0;
> sensor1 = 0;
> sensor_t =0;
> ch0 = 0;
> ch1 = 0;
> ADCSRA = 0xc7; //ADC 활설화 및 시작, 단일변환모드, 분주비 = 128
> ADMUX = 0x40;
> al0 = ADCL;
> ah0 = ADCH;
> ch0 = al0+ah0*256;
> ADMUX = 0x41;
> al1 = ADCL;
> ah1 = ADCH;
> ch1 = al1+ah1*256;
> printf("data : %d\\r\\n", ch0);
> printf("data : %d\\r\\n", ch1);
> if (ch0 >= 100){
> sensor0 = 0x01;
> }
> if (ch1 >= 100){
> sensor1 = 0x01;
> }
> sensor_t = sensor0+(sensor1*16);
> switch(sensor_t){ //PORTB = led
> case 0x01 : PORTB = 0x0f; break;
> case 0x10 : PORTB = 0xf0; break;
> case 0x11 : PORTB = 0xff; break;
> default : PORTB = 0xaa; break;
> }
> }
>}
>
>이런식으로 짯는데요 1번 센서와 2번 센서 둘중 하나 어떤걸 읽어도 무조건 case 0x11로
>
>들어가내요... 소스 상의 문제인거 같은데 어디가 문제인지 정확하게 모르겠습니다.
>
>그리고 지금 1번 센서 하고 2번 센서하고 그냥 선을 연결해서 둘다 외부 Vcc에 연결해
>
>놓았습니다. 여기다 이제 자이로 센서까지 연결하려는데 AVR에 무리는 없을 런지요.
>
>쉽게 말해서 외부 Vcc에 병렬로 1번 적외선센서, 2번 적외선센서, 자이로센서 연결하려는
>
>겁니다.
|
||||
| 6531 | 답변완료스텝모터 문제입니다. | 김규진 | 2011-10-31 | 1,339 |
|
안녕하세요. 전화드렸던 김규진입니다.
소스 올려드립니다.
코드비전 이용했습니다.
#include <mega128.h>
#include <delay.h>
unsigned char left_forward[8] = {0x09, 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08}; // 정방향
unsigned char left_backward[8] = {0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09}; // 역방향
unsigned char i;
void main(void)
{
// 포트 초기화
DDRA = 0xFF; // 포트 A 출력 설정
DDRD = 0xF0; // 포트 C 출력 설정
PORTD = 0xFF;
// 인터럽트 초기화
EICRA = 0b00000000; // 외부 인터럽트4 : low 레벨
EIMSK = 0b00001111; // 외부 인터럽트4 인에이블
SREG = 0x80; // 전역 인터럽트 인에이블 비트 셋
while(1); // 무한 루프
}
// 외부 인터럽트1 서비스 루틴
interrupt [EXT_INT0] void external_int0(void)
{
for(i = 0; i < 8; i++){
PORTA = left_forward[i];
delay_ms(80);
}
}
interrupt [EXT_INT1] void external_int1(void)
{
for(i = 0; i < 8; i++){
PORTA = left_backward[i];
delay_ms(80);
}
}
두번째 소스입니다. 그냥 단순하게 포트출력 딜레이 준겁니다.
#include <mega128.h>
#include <delay.h>
void main(void)
{
// 포트 초기화
DDRA = 0xFF; // 포트 A 출력 설정
DDRD = 0xF0; // 포트 C 출력 설정
PORTD = 0xFF;
// 인터럽트 초기화
EICRA = 0b00000000; // 외부 인터럽트4 : low 레벨
EIMSK = 0b00001111; // 외부 인터럽트4 인에이블
SREG = 0x80; // 전역 인터럽트 인에이블 비트 셋
while(1); // 무한 루프
}
// 외부 인터럽트1 서비스 루틴
interrupt [EXT_INT0] void external_int0(void)
{
PORTA = 0x09;
delay_ms(80);
PORTA = 0x01;
delay_ms(80);
PORTA = 0x03;
delay_ms(80);
PORTA = 0x02;
delay_ms(80);
PORTA = 0x06;
delay_ms(80);
PORTA = 0x04;
delay_ms(80);
PORTA = 0x0c;
delay_ms(80);
PORTA = 0x08;
delay_ms(80);
}
interrupt [EXT_INT1] void external_int1(void)
{
PORTA = 0x08;
delay_ms(80);
PORTA = 0x0c;
delay_ms(80);
PORTA = 0x04;
delay_ms(80);
PORTA = 0x06;
delay_ms(80);
PORTA = 0x02;
delay_ms(80);
PORTA = 0x03;
delay_ms(80);
PORTA = 0x01;
delay_ms(80);
PORTA = 0x09;
delay_ms(80);
}
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
한 스텝이라는 것이 0x09, 0x01.....이렇게 된 코드에서
예를 들면 0x09 하나가 한 스텝입니다.
고객님의 경우는 8개를 다 해야 한 스텝으로 알고 계신 것 같습니다.
코드가 그렇게 되어 있네요.
현재 1-2상 여자 방식이라서 한 스텝에 반 돌아가는 데, 즉, 1.8도 / 스텝 모터는 0.9도 / 스텝으로 돌아가게 됩니다. 본사의 SM243이나 SM9k 모터는 모두 1.8도 / 스텝 이라서 1-2상 여자 방식으로 돌리게 되면 0.9도/스텝으로 돌아갑니다.
수고하세요.
>안녕하세요. 전화드렸던 김규진입니다.
>
>소스 올려드립니다.
>코드비전 이용했습니다.
>
>#include <mega128.h>
>#include <delay.h>
>
>unsigned char left_forward[8] = {0x09, 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08}; // 정방향
>unsigned char left_backward[8] = {0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09}; // 역방향
>
>unsigned char i;
>
>void main(void)
>{
> // 포트 초기화
> DDRA = 0xFF; // 포트 A 출력 설정
> DDRD = 0xF0; // 포트 C 출력 설정
> PORTD = 0xFF;
>
> // 인터럽트 초기화
> EICRA = 0b00000000; // 외부 인터럽트4 : low 레벨
> EIMSK = 0b00001111; // 외부 인터럽트4 인에이블
> SREG = 0x80; // 전역 인터럽트 인에이블 비트 셋
>
> while(1); // 무한 루프
>}
>
>// 외부 인터럽트1 서비스 루틴
>interrupt [EXT_INT0] void external_int0(void)
>{
> for(i = 0; i < 8; i++){
> PORTA = left_forward[i];
> delay_ms(80);
> }
>}
>interrupt [EXT_INT1] void external_int1(void)
>{
> for(i = 0; i < 8; i++){
> PORTA = left_backward[i];
> delay_ms(80);
> }
>}
>
>
>
>
>
>
>
>
>두번째 소스입니다. 그냥 단순하게 포트출력 딜레이 준겁니다.
>
>#include <mega128.h>
>#include <delay.h>
>
>void main(void)
>{
> // 포트 초기화
> DDRA = 0xFF; // 포트 A 출력 설정
> DDRD = 0xF0; // 포트 C 출력 설정
> PORTD = 0xFF;
>
> // 인터럽트 초기화
> EICRA = 0b00000000; // 외부 인터럽트4 : low 레벨
> EIMSK = 0b00001111; // 외부 인터럽트4 인에이블
> SREG = 0x80; // 전역 인터럽트 인에이블 비트 셋
>
> while(1); // 무한 루프
>}
>
>// 외부 인터럽트1 서비스 루틴
>interrupt [EXT_INT0] void external_int0(void)
>{
> PORTA = 0x09;
> delay_ms(80);
> PORTA = 0x01;
> delay_ms(80);
> PORTA = 0x03;
> delay_ms(80);
> PORTA = 0x02;
> delay_ms(80);
> PORTA = 0x06;
> delay_ms(80);
> PORTA = 0x04;
> delay_ms(80);
> PORTA = 0x0c;
> delay_ms(80);
> PORTA = 0x08;
> delay_ms(80);
>}
>
>interrupt [EXT_INT1] void external_int1(void)
>{
> PORTA = 0x08;
> delay_ms(80);
> PORTA = 0x0c;
> delay_ms(80);
> PORTA = 0x04;
> delay_ms(80);
> PORTA = 0x06;
> delay_ms(80);
> PORTA = 0x02;
> delay_ms(80);
> PORTA = 0x03;
> delay_ms(80);
> PORTA = 0x01;
> delay_ms(80);
> PORTA = 0x09;
> delay_ms(80);
>
>}
|
||||
| 6530 | 답변완료atmega128 칩의 이상 | 최호석 | 2011-10-31 | 1,491 |
|
안녕하세요
일전에 단체주문한 한양대학교 생체공학과 조교 최호석 입니다.
다름이 아니라 저희가 주문한 AB-M128-A 모델중 하나의 제품이
칩모듈이 이상이 있어서 PC에서 아예 인식이 되지 않습니다.
다른것의 모듈을 떼서 붙이면 인식이 잘 되는것으로 보아
딱 그 제품의 모듈만 이상이 있는거같은데요.
수리나 교체를 받고싶은데 어떻게 하면 좋을까요?
안녕히계세요
최호석 드림
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
본사로 택배나 직접 내방하여 보내주시면, 새 제품으로 교체하여 드리겠습니다.
이 경우 택배를 이용하실 경우 택배비 등도 모두 무료 처리 됩니다.
수고하세요.
>안녕하세요
>
>일전에 단체주문한 한양대학교 생체공학과 조교 최호석 입니다.
>
>다름이 아니라 저희가 주문한 AB-M128-A 모델중 하나의 제품이
>칩모듈이 이상이 있어서 PC에서 아예 인식이 되지 않습니다.
>
>다른것의 모듈을 떼서 붙이면 인식이 잘 되는것으로 보아
>딱 그 제품의 모듈만 이상이 있는거같은데요.
>
>수리나 교체를 받고싶은데 어떻게 하면 좋을까요?
>
>안녕히계세요
>
>최호석 드림
|
||||
| 6529 | 답변완료atmega 128 이용 오류관련 문의드립니다. | 질문자 | 2011-10-31 | 1,391 |
|
현재 위도우 64비트를 사용중인데요
홈페이지에서 맞는 드라이버를 설치하고 avr studio까지 모두 설치를 하였습니다.
프로그램을 입력후 AVR을 connect 시키면 HW settings 창에 ' A problem occured when executing the command. See the command output for more info' 이라고 뜹니다.
전원을 모두 제대로 꽂았는데 왜 이렇게 뜨는지 모르겟습니다.
오류사진 첨부햇습니다. 해결 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
어떤 제품을 이용 중이신가요?
전문가용 버전은 HW settings까지 지원합니다만, 일반용 버전은 그 페이지는 지원하지 않습니다.
수고하세요.
>현재 위도우 64비트를 사용중인데요
>홈페이지에서 맞는 드라이버를 설치하고 avr studio까지 모두 설치를 하였습니다.
>프로그램을 입력후 AVR을 connect 시키면 HW settings 창에 ' A problem occured when executing the command. See the command output for more info' 이라고 뜹니다.
>전원을 모두 제대로 꽂았는데 왜 이렇게 뜨는지 모르겟습니다.
>오류사진 첨부햇습니다. 해결 부탁드립니다.
|
||||
