Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 9633 | 답변완료AM-2560PRO | 유혁준 | 2016-05-20 | 1,723 |
|
AM-2560PRO
OS : Window8
개발 환경 Codevision 2.05 profesional
단순히 UART통신을 통해 값을 보려 하는 목적입니다.
그리고 저 소스는 자사의 128 모듈에서 잘 돌아 갔던 소스 입니다.
#include <mega2560.h>
#include <delay.h>
#include <string.h>
#include <stdio.h>
unsigned char ch;
unsigned char Buf[100];
unsigned int N_RXDATA;
void UART1_init(void)
{
delay_ms(10);
DDRE = 0xfe; // Port : UART1
UBRR1H = 0; // invalid
UBRR1L = 16; // buade rate 115200 bps
UCSR1A = 0x02; // trans. spd x2
UCSR1B = 0x98; // uart comm., RXC interrupt enable
UCSR1C = 0x06; // no parity, 1 stop bit, 8 data bit
}
void UART1_putch(unsigned char ch)
{while((UCSR1A & 0x20) == 0); UDR1 = ch;}
void UART1_putstrf(flash unsigned char *str)
{unsigned int i=0; for(;str[i] != 0; i++) UART1_putch(str[i]);}
interrupt [USART1_RXC] void UART1_getch(void)
{ch=UDR1; Buf[N_RXDATA]=ch; N_RXDATA=N_RXDATA+1;}
void UART0_init(void)
{
delay_ms(10);
DDRD = 0xfe; // Port : UART0
UBRR0H = 0;
UBRR0L = 16;
UCSR0A = 0x02;
UCSR0B = 0x18;
UCSR0C = 0x06;
}
void main(void)
{
unsigned int i=0;
SREG.7 = 1;
UART0_init();
UART1_init();
while(1){
memset(Buf,0x00,sizeof(Buf));
ch=0x00;
N_RXDATA=0;
//UART1_putstrf("<D\r\n");
//while(ch != 0x0a) {} // 수신 데이터가 \n이면 루프 해제
printf("hello world\n\r");//이렇게 해도 serial상 나와야 맞음
delay_ms(10);
}
}
관리자 답변
UART0에서 bps 통신 속도를 얼마에 Double speed인지 아닌지, 등을 명기해 주세요.
그것에 따라서, 다 달라집니다.
>
>
> AM-2560PRO
> OS : Window8
> 개발 환경 Codevision 2.05 profesional
>
> 단순히 UART통신을 통해 값을 보려 하는 목적입니다.
> 그리고 저 소스는 자사의 128 모듈에서 잘 돌아 갔던 소스 입니다.
>
> #include <mega2560.h>
> #include <delay.h>
> #include <string.h>
> #include <stdio.h>
>
> unsigned char ch;
> unsigned char Buf[100];
> unsigned int N_RXDATA;
> void UART1_init(void)
> {
> delay_ms(10);
> DDRE = 0xfe; // Port : UART1
> UBRR1H = 0; // invalid
> UBRR1L = 16; // buade rate 115200 bps
> UCSR1A = 0x02; // trans. spd x2
> UCSR1B = 0x98; // uart comm., RXC interrupt enable
> UCSR1C = 0x06; // no parity, 1 stop bit, 8 data bit
> }
> void UART1_putch(unsigned char ch)
> {while((UCSR1A & 0x20) == 0); UDR1 = ch;}
> void UART1_putstrf(flash unsigned char *str)
> {unsigned int i=0; for(;str[i] != 0; i++) UART1_putch(str[i]);}
> interrupt [USART1_RXC] void UART1_getch(void)
> {ch=UDR1; Buf[N_RXDATA]=ch; N_RXDATA=N_RXDATA+1;}
> void UART0_init(void)
> {
> delay_ms(10);
> DDRD = 0xfe; // Port : UART0
> UBRR0H = 0;
> UBRR0L = 16;
> UCSR0A = 0x02;
> UCSR0B = 0x18;
> UCSR0C = 0x06;
> }
> void main(void)
> {
> unsigned int i=0;
>
> SREG.7 = 1;
>
> UART0_init();
> UART1_init();
>
> while(1){
> memset(Buf,0x00,sizeof(Buf));
> ch=0x00;
> N_RXDATA=0;
>
> //UART1_putstrf("<D\r\n");
> //while(ch != 0x0a) {} // 수신 데이터가 \n이면 루프 해제
> printf("hello world\n\r");//이렇게 해도 serial상 나와야 맞음
> delay_ms(10);
> }
> }
>
|
||||
| 9632 | 답변완료AD-USBISP V03.6 관련 질문 | 최영철 | 2016-05-23 | 1,752 |
|
안녕하세요.
원래 AD-USBISP V6.0 을 사용하다가 홈페이지를 보고
AD-USBISP V03.6 을 구매하였습니다.
tool 은 ATmel studio 6.1을 사용하여 ATmega 128A 을 사용합니다.
이에, 연결 시 tool 과 link 는 되나 D/L 시 target board 를 읽을 수 없는 error 가 발생합니다.
홈페이지에 6.1 version 을 사용 시 Atmega 128 도 가능하다고 나와 있는데
무었이 문제인지요.... ISP V6.0 은 이상 없습니다.
빠른 답변 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
타겟 전압을 읽을 수 없는 부분 빼고는 나머지 기능은 모두 정상이라야 합니다.
혹시, 드라이버가 정상적으로 잡힌 것인지 확인하시고, 그 부분 이상이 없다면,
본사에서 점검받아 보셔야 합니다.
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=128724&page=6
혹시 드라이버 이상이면, 여기서 드라이버 다운로드 받아서 해 보세요.
감사합니다.
>
>
> 안녕하세요.
> 원래 AD-USBISP V6.0 을 사용하다가 홈페이지를 보고
> AD-USBISP V03.6 을 구매하였습니다.
>
> tool 은 ATmel studio 6.1을 사용하여 ATmega 128A 을 사용합니다.
>
> 이에, 연결 시 tool 과 link 는 되나 D/L 시 target board 를 읽을 수 없는 error 가 발생합니다.
>
> 홈페이지에 6.1 version 을 사용 시 Atmega 128 도 가능하다고 나와 있는데
> 무었이 문제인지요.... ISP V6.0 은 이상 없습니다.
>
> 빠른 답변 부탁드립니다.
>
|
||||
| 9631 | 답변완료AB-M128-B 관련 질문 | 오동현 | 2016-05-23 | 1,570 |
|
스위치 모듈을 해당 보드의 E포트에 꽂아서 사용하면 LED 모듈을 어느 장소에 꽂더라도 불이 안들어오는 부분이 있더군요... 제품에 하자가 있다는 것이 아니라 왜 그런지 이유가 알고 싶습니다 ㅎㅎ
혹시 모르니 소스파일도 첨부하겠습니다.
참고로 mcu 모듈은 AM-128PRO 를 사용합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
AB-M128-B 모듈에는 원래는 AM-128PL 모듈이 꾳혀 있습니다.
그 이유는 AM-128Pro에는 max3232 칩이 붙어 있어서, uart핀들에 영향을 주기 때문입니다.
PORTD2, PORTD3와 PORTE0, PORTE1이 그것입니다.
특히, RX 쪽인 PE0와 PD2가 영향을 많이 받을 수 있습니다.
그래서, 원래 붙어 있는 AM-128PL 모듈을 사용하면 max3232 칩이 붙어 있지 않기 때문에 그런 영향이 없습니다. AB-M128-B 모듈은 그런 목적으로 보드의 다른 회로들이 포트에 영향을 주는 것을 없도록 설계된 보드입니다.
감사합니다.
>
>
> 스위치 모듈을 해당 보드의 E포트에 꽂아서 사용하면 LED 모듈을 어느 장소에 꽂더라도 불이 안들어오는 부분이 있더군요... 제품에 하자가 있다는 것이 아니라 왜 그런지 이유가 알고 싶습니다 ㅎㅎ
> 혹시 모르니 소스파일도 첨부하겠습니다.
> 참고로 mcu 모듈은 AM-128PRO 를 사용합니다.
>
|
||||
| 9630 | 답변완료delay 함수 | 김상진 | 2016-05-26 | 1,860 |
|
스테핑모터 라인트레이서 소스코드에
delay 함수는
몇초짜리인가요?
delay(5)를 내장함수 delay_ms나 delay_us 로 바꾸려면
몇초를 입력해야하나요?
atmega128. codevision 사용합니다
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
delay(5)는 정확히 측정하지않았지만, 대략 1ms정도 됩니다.
감사합니다.
>
>
> 스테핑모터 라인트레이서 소스코드에
>
> delay 함수는
>
> 몇초짜리인가요?
>
> delay(5)를 내장함수 delay_ms나 delay_us 로 바꾸려면
>
> 몇초를 입력해야하나요?
>
> atmega128. codevision 사용합니다
>
|
||||
| 9629 | 답변완료수고하십니다 SE-SM243, AM-CS2P 관련하여 질문있습니다 | 김준영 | 2016-05-26 | 1,922 |
|
현재 SE-SM243스텝모터(2상), AM-CS2P스텝모터 모듈(12V) 로 라인트레이서 진행중입니다
제가 원하는 것은 속도 향상 부분인데요
소스코드는 아래와 같습니다
제 에상으론 delay부분을 줄이면 속도가 올라갈줄알았는데 변화가 없고 delay(5)가 최적의 딜레이 인거 같더라고요
소스코드를 수정하여 속도를 향상할수 있는 방법이 있을까요?
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define MOTOR_PORT PORTD
#define MOTOR_PORT_DDR DDRD
#define SENSOR_PORT PINC
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x03;
}
void init_devices(void)
{
cli(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_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
}
/* Stepping Motor derive---------------------------*/
unsigned char LEFTmotorOneClock(unsigned char step, char dir)
{
step = step & 0x0f;
if(dir){
switch(step){
case 0x09: step=0x01; break;
case 0x01: step=0x03; break;
case 0x03: step=0x02; break;
case 0x02: step=0x06; break;
case 0x06: step=0x04; break;
case 0x04: step=0x0c; break;
case 0x0c: step=0x08; break;
case 0x08: step=0x09; break;
default: step=0x0c; break;
}
}else{
switch(step){
case 0x09: step=0x08; break;
case 0x01: step=0x09; break;
case 0x03: step=0x01; break;
case 0x02: step=0x03; break;
case 0x06: step=0x02; break;
case 0x04: step=0x06; break;
case 0x0c: step=0x04; break;
case 0x08: step=0x0c; break;
default: step=0x0c; break;
}
}
return step;
}
/* Stepping Motor derive---------------------------*/
unsigned char RIGHTmotorOneClock(unsigned char step, char dir)
{
step = step & 0xf0;
if(dir){
switch(step){
case 0x90: step=0x10; break;
case 0x10: step=0x30; break;
case 0x30: step=0x20; break;
case 0x20: step=0x60; break;
case 0x60: step=0x40; break;
case 0x40: step=0xc0; break;
case 0xc0: step=0x80; break;
case 0x80: step=0x90; break;
default: step=0xc0; break;
}
}else{
switch(step){
case 0x90: step=0x80; break;
case 0x10: step=0x90; break;
case 0x30: step=0x10; break;
case 0x20: step=0x30; break;
case 0x60: step=0x20; break;
case 0x40: step=0x60; break;
case 0xc0: step=0x40; break;
case 0x80: step=0xc0; break;
default: step=0xc0; break;
}
}
return step;
}
void delay(int n)
{
volatile int i,j;
for(i=1;i<n;i++)
{
for(j=1;j<400;j++);
}
}
void main(void)
{
unsigned char sensor;
volatile unsigned char stepleft=0, stepright=0;
init_devices();
MOTOR_PORT_DDR = 0xff;
while(1){
sensor = SENSOR_PORT & 0x0F;
switch(sensor)
case 0x0f://0x00001111
stepright = RIGHTmotorOneClock(stepright, 1);
stepleft = LEFTmotorOneClock(stepleft, 0);
delay(5);
PORTB= 0x00;
break;
case 0x0b://0x00001011
stepleft = LEFTmotorOneClock(stepleft, 0);
delay(5);
PORTB= 0x02;
break;
case 0x0d://0x00001101
stepright = RIGHTmotorOneClock(stepright, 1);
delay(5);
PORTB= 0x01;
break;
default:
stepright = RIGHTmotorOneClock(stepright, 1);
stepleft = LEFTmotorOneClock(stepleft, 0);
delay(5);
PORTB= 0x00;
break;
}
MOTOR_PORT = stepleft|stepright;
}
}
관리자 답변
안녕하세요?고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
속도향상을 위해서는 타이머를 사용하세요.
감사합니다.
>
>
> 현재 SE-SM243스텝모터(2상), AM-CS2P스텝모터 모듈(12V) 로 라인트레이서 진행중입니다
>
> 제가 원하는 것은 속도 향상 부분인데요
>
> 소스코드는 아래와 같습니다
>
> 제 에상으론 delay부분을 줄이면 속도가 올라갈줄알았는데 변화가 없고 delay(5)가 최적의 딜레이 인거 같더라고요
>
> 소스코드를 수정하여 속도를 향상할수 있는 방법이 있을까요?
>
> #include <avr/io.h>
> #include <util/delay.h>
> #include <avr/interrupt.h>
> #include <stdio.h>
>
> #define MOTOR_PORT PORTD
> #define MOTOR_PORT_DDR DDRD
> #define SENSOR_PORT PINC
>
> void port_init(void)
> {
> PORTA = 0x00;
> DDRA = 0x00;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00;
> DDRC = 0x00;
> PORTD = 0x00;
> DDRD = 0xFF;
> PORTE = 0x00;
> DDRE = 0x00;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x03;
> }
>
> void init_devices(void)
> {
> cli(); //disable all interrupts
> XDIV = 0x00; //xtal divider
> XMCRA = 0x00; //external memory
> port_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
> }
>
>
> /* Stepping Motor derive---------------------------*/
> unsigned char LEFTmotorOneClock(unsigned char step, char dir)
> {
> step = step & 0x0f;
> if(dir){
> switch(step){
> case 0x09: step=0x01; break;
> case 0x01: step=0x03; break;
> case 0x03: step=0x02; break;
> case 0x02: step=0x06; break;
> case 0x06: step=0x04; break;
> case 0x04: step=0x0c; break;
> case 0x0c: step=0x08; break;
> case 0x08: step=0x09; break;
> default: step=0x0c; break;
> }
> }else{
> switch(step){
> case 0x09: step=0x08; break;
> case 0x01: step=0x09; break;
> case 0x03: step=0x01; break;
> case 0x02: step=0x03; break;
> case 0x06: step=0x02; break;
> case 0x04: step=0x06; break;
> case 0x0c: step=0x04; break;
> case 0x08: step=0x0c; break;
> default: step=0x0c; break;
> }
> }
> return step;
>
> }
>
>
> /* Stepping Motor derive---------------------------*/
> unsigned char RIGHTmotorOneClock(unsigned char step, char dir)
> {
> step = step & 0xf0;
> if(dir){
> switch(step){
> case 0x90: step=0x10; break;
> case 0x10: step=0x30; break;
> case 0x30: step=0x20; break;
> case 0x20: step=0x60; break;
> case 0x60: step=0x40; break;
> case 0x40: step=0xc0; break;
> case 0xc0: step=0x80; break;
> case 0x80: step=0x90; break;
> default: step=0xc0; break;
> }
> }else{
> switch(step){
> case 0x90: step=0x80; break;
> case 0x10: step=0x90; break;
> case 0x30: step=0x10; break;
> case 0x20: step=0x30; break;
> case 0x60: step=0x20; break;
> case 0x40: step=0x60; break;
> case 0xc0: step=0x40; break;
> case 0x80: step=0xc0; break;
> default: step=0xc0; break;
> }
> }
> return step;
> }
>
>
> void delay(int n)
> {
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<400;j++);
> }
> }
>
>
> void main(void)
> {
>
> unsigned char sensor;
> volatile unsigned char stepleft=0, stepright=0;
>
> init_devices();
>
> MOTOR_PORT_DDR = 0xff;
>
> while(1){
> sensor = SENSOR_PORT & 0x0F;
> switch(sensor)
> case 0x0f://0x00001111
> stepright = RIGHTmotorOneClock(stepright, 1);
> stepleft = LEFTmotorOneClock(stepleft, 0);
> delay(5);
> PORTB= 0x00;
> break;
> case 0x0b://0x00001011
> stepleft = LEFTmotorOneClock(stepleft, 0);
> delay(5);
> PORTB= 0x02;
> break;
> case 0x0d://0x00001101
> stepright = RIGHTmotorOneClock(stepright, 1);
> delay(5);
> PORTB= 0x01;
> break;
> default:
> stepright = RIGHTmotorOneClock(stepright, 1);
> stepleft = LEFTmotorOneClock(stepleft, 0);
> delay(5);
> PORTB= 0x00;
> break;
> }
> MOTOR_PORT = stepleft|stepright;
> }
> }
>
|
||||
| 9628 | 답변완료USB-ISP 윈도우10 전용 | 조성환 | 2016-05-25 | 1,722 |
|
따로있나요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
따로 없고, 최신버전 뉴티씨 usbisp는 모두 윈도우10이 지원됩니다.
AD-USBISP V03.6과 V6.0받으시면 됩니다.
감사합니다.
>
>
> 따로있나요?
>
|
||||
| 9627 | 답변완료AB-M128-B 회로도 요청 | 이수현 | 2016-05-24 | 1,749 |
|
kr-dl128 라인트레이서를 구매했는데 안에 동봉도니 cd에
AB-M128-B회로도가 아닌 AB-M128-pro회로도가 있습니다.
AB-M128-B회로도를 보고 싶은데 올려주세요.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
A/S신청 쪽에서 영수증을 올려 주시면,
회로도를 올려 드릴 수 있겠습니다.
감사합니다.
>
>
> kr-dl128 라인트레이서를 구매했는데 안에 동봉도니 cd에
>
> AB-M128-B회로도가 아닌 AB-M128-pro회로도가 있습니다.
>
> AB-M128-B회로도를 보고 싶은데 올려주세요.
>
|
||||
| 9626 | 답변완료am 3axis v03 에서 감지하는 각 축별로의 수치값들을 읽는 코드 보내주세요 | 이한수 | 2016-05-14 | 1,742 |
|
am 3axis v03 에서 읽는 값들을 각도로 환산하는 코드 보내주세요
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
가속도 센서는 정지 상태에서는 기울기 값을 각 축당 알수 있습니다.
각 축의 adc값 예제 소스나 3차원마우스 용 소스 등은 학습용으로만, 공개되어 있으므로 참고하시기 바랍니다.
또한 자료실의 확장모듈쪽에 보면 3축으로 검색하면,pdf자료로 걸려 있으니 참고바랍니다.
저희가 필요한 것을 짜드리지는 않으니 참고 부탁드립니다.
감사합니다.
>
>
> am 3axis v03 에서 읽는 값들을 각도로 환산하는 코드 보내주세요
>
|
||||
| 9625 | 답변완료jtag연결질문 | 이수현 | 2016-05-19 | 1,819 |
|
AVR용 USB-JTAG을 이용해서 라인트레이서 kr-dl128에 연결해서 디버깅을 하려고 합니다.
AVR용 USB-JTAG사용법을 보고 선을 연결했는데 안되서 질문합니다.
1. AVR용 USB-JTAG회로도에는 reset핀이 있는데 제품위에 프린트되있는 곳에는 reset이 없는데 연결을 어떻게 해야되나요 안해도 되는건가요?
2. avr-studio 4.19버전으로 디버깅을 진행하려고하는데 그럼 AVR용 USB-JTAG제품을 업그레이드 해야하나요?
3. AVR용 USB-JTAG으로 디버깅을 진행할때 보드에 AVR용 USB-JTAG통해 전원이 들어가는거 아닌가요?
vcc와 gnd를 연결했는데 보드에 불이 안들어옵니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
사용하시는 AVR용 USB-JTAG의 정확한 제품번호가 무엇인지요?
KR-DL128 키트에는 JTAG 커넥터가 없으므로, ISP만 연결이 가능합니다.
JTAG 연결이 가능한 보드의 예는 AB-M128USB-C 또는 AB-M128PRO-A 등의 보드가 있습니다.
JTAG 커넥터를 엉뚱하게 연결하면 잘못 연결하면 망가질 수 있습니다.
감사합니다.
>
>
> AVR용 USB-JTAG을 이용해서 라인트레이서 kr-dl128에 연결해서 디버깅을 하려고 합니다.
> AVR용 USB-JTAG사용법을 보고 선을 연결했는데 안되서 질문합니다.
>
> 1. AVR용 USB-JTAG회로도에는 reset핀이 있는데 제품위에 프린트되있는 곳에는 reset이 없는데 연결을 어떻게 해야되나요 안해도 되는건가요?
>
> 2. avr-studio 4.19버전으로 디버깅을 진행하려고하는데 그럼 AVR용 USB-JTAG제품을 업그레이드 해야하나요?
>
> 3. AVR용 USB-JTAG으로 디버깅을 진행할때 보드에 AVR용 USB-JTAG통해 전원이 들어가는거 아닌가요?
> vcc와 gnd를 연결했는데 보드에 불이 안들어옵니다.
>
|
||||
| 9624 | 답변완료AM-2560 UART0관련 | 유혁준 | 2016-05-19 | 1,820 |
|
#include <mega2560.h>
#include <delay.h>
#include <string.h>
#include <stdio.h>
unsigned char ch;
unsigned char Buf[100];
unsigned int N_RXDATA;
void UART1_init(void)
{
delay_ms(10);
DDRE = 0xfe; // Port : UART1
UBRR1H = 0; // invalid
UBRR1L = 16; // buade rate 115200 bps
UCSR1A = 0x02; // trans. spd x2
UCSR1B = 0x98; // uart comm., RXC interrupt enable
UCSR1C = 0x06; // no parity, 1 stop bit, 8 data bit
}
void UART1_putch(unsigned char ch)
{while((UCSR1A & 0x20) == 0); UDR1 = ch;}
void UART1_putstrf(flash unsigned char *str)
{unsigned int i=0; for(;str[i] != 0; i++) UART1_putch(str[i]);}
interrupt [USART1_RXC] void UART1_getch(void)
{ch=UDR1; Buf[N_RXDATA]=ch; N_RXDATA=N_RXDATA+1;}
void UART0_init(void)
{
delay_ms(10);
DDRD = 0xfe; // Port : UART0
UBRR0H = 0;
UBRR0L = 16;
UCSR0A = 0x02;
UCSR0B = 0x18;
UCSR0C = 0x06;
}
void main(void)
{
unsigned int i=0;
SREG.7 = 1;
UART0_init();
UART1_init();
while(1){
memset(Buf,0x00,sizeof(Buf));
ch=0x00;
N_RXDATA=0;
//UART1_putstrf("<D\r\n");
//while(ch != 0x0a) {} // 수신 데이터가 \n이면 루프 해제
printf("hello world\n\r",Buf);//이렇게 해도 serial상 나와야 맞음
delay_ms(10);
}
}
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
질문시 작업환경 즉, 컴파일러, AVR 모듈 제품번호, 윈도우 환경,
시리얼 같으면 연결 환경 설명과 사진 등,
각종 필요한 환경 설명을 모두 적어 주셔야 합니다.
또한, 질문이 무엇인지 명확히 적으셔야 알 수 있습니다.
현재 질문 내용인지 그냥 적으신 것인지...잘 의도 파악이 안됩니다.
만약, 115,200 bps로 폴링 방식으로 해서 더블스피드로 초기화 하여 사용하고 싶었던 거라면,
초기화가 틀렸습니다.
감사합니다.
>
>
> #include <mega2560.h>
> #include <delay.h>
> #include <string.h>
> #include <stdio.h>
>
> unsigned char ch;
> unsigned char Buf[100];
> unsigned int N_RXDATA;
> void UART1_init(void)
> {
> delay_ms(10);
> DDRE = 0xfe; // Port : UART1
> UBRR1H = 0; // invalid
> UBRR1L = 16; // buade rate 115200 bps
> UCSR1A = 0x02; // trans. spd x2
> UCSR1B = 0x98; // uart comm., RXC interrupt enable
> UCSR1C = 0x06; // no parity, 1 stop bit, 8 data bit
> }
> void UART1_putch(unsigned char ch)
> {while((UCSR1A & 0x20) == 0); UDR1 = ch;}
> void UART1_putstrf(flash unsigned char *str)
> {unsigned int i=0; for(;str[i] != 0; i++) UART1_putch(str[i]);}
> interrupt [USART1_RXC] void UART1_getch(void)
> {ch=UDR1; Buf[N_RXDATA]=ch; N_RXDATA=N_RXDATA+1;}
> void UART0_init(void)
> {
> delay_ms(10);
> DDRD = 0xfe; // Port : UART0
> UBRR0H = 0;
> UBRR0L = 16;
> UCSR0A = 0x02;
> UCSR0B = 0x18;
> UCSR0C = 0x06;
> }
> void main(void)
> {
> unsigned int i=0;
>
> SREG.7 = 1;
>
> UART0_init();
> UART1_init();
>
> while(1){
> memset(Buf,0x00,sizeof(Buf));
> ch=0x00;
> N_RXDATA=0;
>
> //UART1_putstrf("<D\r\n");
> //while(ch != 0x0a) {} // 수신 데이터가 \n이면 루프 해제
> printf("hello world\n\r",Buf);//이렇게 해도 serial상 나와야 맞음
> delay_ms(10);
> }
> }
>
|
||||
| 9623 | 답변완료아래글 질문 내용 추가합니다 | 김상진 | 2016-05-17 | 1,570 |
|
만약 3.3 v 전원을 인가하게 되면
통신선 연결시 따로 전압분배기를 달지 않아도 되는건가요?
관리자 답변
본사 모듈이용시5V이용하시고 전압분배기 필요없습니다.
감사합니다
>
>
> 만약 3.3 v 전원을 인가하게 되면
>
> 통신선 연결시 따로 전압분배기를 달지 않아도 되는건가요?
>
|
||||
| 9622 | 답변완료블루투스 모듈 연결 질문 | 김상진 | 2016-05-17 | 1,561 |
|
ab m128 b 보드에
블루투스모듈(슬레이브) 를 달아서 스마트폰과 통신을 하려고 합니다
블루투스 모듈이 5v 전원을 사용한다고 하던데 전원은 보드의 5v 를 그대로 인가한다하고
tx. rx 통신선 연결시 전압분배회로 같은 것을 추가해주어야하나요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
전원은 GND와 VCC에 gnd와 5V인가하시면되시구요.
전압분배회로는 필요없고 RX. TX만 서로 크로스해주시면 됩니다.
감사합니다
>
>
> ab m128 b 보드에
>
> 블루투스모듈(슬레이브) 를 달아서 스마트폰과 통신을 하려고 합니다
>
> 블루투스 모듈이 5v 전원을 사용한다고 하던데 전원은 보드의 5v 를 그대로 인가한다하고
>
> tx. rx 통신선 연결시 전압분배회로 같은 것을 추가해주어야하나요?
>
|
||||
| 9621 | 답변완료ISP Mode Error에 관해 질문드립니다. | 김성헌 | 2016-05-17 | 1,990 |
|
USB 전원용 케이블 (SE-USBPOWER)
AVR용 USB-ISP 라이트 V03.5(AD-USBISP-L V03.5)
AVR MEGA 8 모듈 라이트 (AM-8PL) 를 사용중이고
AVR Studio 4 를 사용중입니다.
구매후 처음 사용하려고하는데
코드를 칩에 넣으려고 Program을 누르면
ISP Mode Error라고 뜨면서 오류가 납니다.
Main 탭에서 ISP 주파수를 아무리 낮춰봐도 해결이 안되네요.
드라이브는 다 설치했구요... 핀도 제대로 연결했어요
뭐가 고장이 난건지 ㅠㅠ
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
본사로 전체를 가지고 방문하시면 그 자리에서 처리해드리며,
택배로도 AS가능합니다.
감사합니다.
>
>
> USB 전원용 케이블 (SE-USBPOWER)
>
> AVR용 USB-ISP 라이트 V03.5(AD-USBISP-L V03.5)
>
> AVR MEGA 8 모듈 라이트 (AM-8PL) 를 사용중이고
>
> AVR Studio 4 를 사용중입니다.
>
> 구매후 처음 사용하려고하는데
>
> 코드를 칩에 넣으려고 Program을 누르면
>
> ISP Mode Error라고 뜨면서 오류가 납니다.
>
> Main 탭에서 ISP 주파수를 아무리 낮춰봐도 해결이 안되네요.
>
> 드라이브는 다 설치했구요... 핀도 제대로 연결했어요
>
> 뭐가 고장이 난건지 ㅠㅠ
>
|
||||
| 9620 | 답변완료am 3axis v03 자이로센서 질문드립니다 답변 바로 달아주세요~!! | 이한수 | 2016-05-14 | 1,778 |
|
이 센서를 사용 할 때 VCC를 아두이노 3.3V 에 연결하고 X,Y,Z축 센서는 아두이노 아날로그 핀에 연결하고
GND 는 GND에 꽂고 나머지 P/D, F/S, S/T 는 연결 안하거나 그라운드에 물려주면 되는거죠?
S/T 는 셀프테스틑 모드 해서 테스르 할 때 쓰는건 알겠고 P/D 는 파워 다운과 F/S 풀스케일의 모드를 잘 모르겠습니다 풀스케일은 연결안하면 2g 모드고 vcc를 주면 6g 라서 민감도 가 더 커진다고 하는데, F/S 과 P/D에 VCC를 준다는게 3.3V를 바로 연결하라는 건가요? 아니면 3.3V를 연결한 VCC포트를 연결해주라는 건가요??
그리고 Z축 센서를 사용하고 싶은데 코드 정보를 얻고 싶습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용해 주셔서 감사합니다.
AM-3AXIS V03센서는 자이로가 아니라 3축 가속도센서 입니다.
네 이해하신데로 XYZ를 제외하고는 연결하지 않으면 default값으로 설정됩니다.
이 모듈의 전원에 3.3V를 연결해야하고,
나머지 팬들에 High를 주는것은 3.3V를 가해주어도 되지만, 전원핀들 제외하고 AVR등에서 3.3V나 5V등으로 GPIO로 신호는 줘도됩니다.
소스는 자료실에서 검색해 예제를 사용하세요.
축은 모두 사용법이 같습니다.
감사합니다.
>
>
> 이 센서를 사용 할 때 VCC를 아두이노 3.3V 에 연결하고 X,Y,Z축 센서는 아두이노 아날로그 핀에 연결하고
> GND 는 GND에 꽂고 나머지 P/D, F/S, S/T 는 연결 안하거나 그라운드에 물려주면 되는거죠?
> S/T 는 셀프테스틑 모드 해서 테스르 할 때 쓰는건 알겠고 P/D 는 파워 다운과 F/S 풀스케일의 모드를 잘 모르겠습니다 풀스케일은 연결안하면 2g 모드고 vcc를 주면 6g 라서 민감도 가 더 커진다고 하는데, F/S 과 P/D에 VCC를 준다는게 3.3V를 바로 연결하라는 건가요? 아니면 3.3V를 연결한 VCC포트를 연결해주라는 건가요??
>
> 그리고 Z축 센서를 사용하고 싶은데 코드 정보를 얻고 싶습니다.
>
|
||||
| 9619 | 답변완료인터럽트가 왜 D0/D1에서는 동작 않고, D2/D3에서 동작할까요? | 이정주 | 2016-09-07 | 1,646 |
|
아래 소스에서요.
-------------------------------------------------------------------------------------------------
프로그램의 의도는
SW_START를 한 번 누르면 start_flag가 true로 되고.
SW_CH1_TEST를 한 번 누르면 SW_CH1_TEST_flag가 true로 되고.
SW_CH2_TEST를 한 번 누르면 SW_CH2_TEST_flag가 true로 되고.
3중의 어느 하나가 먼저 true로 되면 다른 sw를 눌러도 변화가 없어야 합니다.
true로 된 flag들은 SW_STOP나 TIMER_OUT 신호에 의해서 Interrupt가 걸려야만 false로 해제되도록 하면 되는 것입니다.
-------------------------------------------------------------------------------------------------
그런데 실제 동작은
SW_START(D2)로 SW_START_flag는 true로 되는데, SW_START를 놓으면 다시 저절로 false로 바뀝니다.
그리고 SW_START를 놓는 순간 intr_STOP_SW() ISR로 들어갔다 나오고요.
SW_CH1_TEST(D3)로 SW_CH1_TEST_flag도 true로 되는데, SW_CH1_TEST를 놓으면 다시 저절로 false로 바뀝니다.
그리고 SW_CH1_TEST를 놓는 순간 intr_TIMER_OUT() ISR로 들어갔다 나오고요.
SW_CH2_TEST(D4)는 SW_CH2_TEST_flag로 true로 변하고, SW_CH2_TEST를 놓아도 true 상태를 유지하여 정상 동작을 합니다.
그런데 STOP_SW(D0)나 TIMER_OUT(D1) 신호로도 인터럽트가 걸리지도 않고, false로 바뀌지도 않습니다.
-------------------------------------------------------------------------------------------------
어떻게 하면 프로그램의 의도처럼 동작하게 할 수 있을까요?
바쁘시겠지만 답변 좀 부탁 드리겠습니다.
감사합니다.
-------------------------------------------------------------------------------------------------
그리고 ISR은 D0와 D1에 걸어 놓았는데, D0와 D1에서는 인터럽트가 안 걸리고, D2, D3 Pin을 Low로 해야 ISR로 진입하여 "1st Interrupt"과 "2nd Interrupt"를 Print 합니다.
DM-USTYLE-CT V1.0 보드 2개를 실험했는 데, 모두 동일합니다.
바쁘시겠지만 원인 좀 알려 주시면 대단히 감사하겠습니다.
-------------------------------------------------------------------------------------------------
#define SW_START 2 // D2 (Pin 4, INPUT_PULLUP)
#define SW_CH1_TEST 3 // D3 (RL_CH1_SOL) (Pin 5, INPUT_PULLUP)
#define SW_CH2_TEST 4 // D4 (RL_CH2_SOL) (Pin 6, INPUT_PULLUP)
#define SW_STOP 0 // D0, Interrupt ID 0 (Pin 2, INPUT_PULLUP)
//5
#define TIMER_OUT 1 // D1, Interrupt ID 1 (Pin 3, INPUT_PULLUP)
#define TIMER_INA 10 // D10 (Pin 16, OUTPUT)
#define TIMER_RESET 11 // D11 (Pin 17, OUTPUT)
#define ON 1 // 상수
#define OFF 0
//12
boolean state = false; //
boolean start_flag = false; //
boolean ch1_flag = false; //
boolean ch2_flag = false; //
void setup(){ // Assign INPUT/OUTPUT Port
//19
pinMode(SW_START, INPUT_PULLUP); // SW_START SW_START, 누르면 Low 입력
pinMode(SW_CH1_TEST, INPUT_PULLUP); // SW_CH1_TEST (RL_CH1_SOL), SW_CH1_TEST (RL_CH1_SOL), 누르면 Low 입력
pinMode(SW_CH2_TEST, INPUT_PULLUP); // SW_CH2_TEST (RL_CH2_SOL), SW_CH2_TEST (RL_CH2_SOL), 누르면 Low 입력
pinMode(SW_STOP, INPUT_PULLUP); // STOP_SW, STOP_SW, 누르면 Low 입력
//24
pinMode(TIMER_OUT, INPUT_PULLUP); // TIMER_OUT (Timer(CT4S) Time Out Signal), Time OUT 시 Low 입력
pinMode(TIMER_INA, OUTPUT); // Timer_INA (CT4S)
pinMode(TIMER_RESET, OUTPUT); // (CT4S)
//28
attachInterrupt(0, intr_STOP_SW, FALLING); // STOP SW가 눌리면(High) 인터럽트 발생
attachInterrupt(1, intr_TIMER_OUT, FALLING); // Time Out 되면(High) 인터럽트 발생
Serial.begin(9600);
}
//35
void intr_STOP_SW() { // ISR(Interrupt Service Routine), 입력시
Serial.println("1st Interrupt");
start_flag = false;
ch1_flag = false;
ch2_flag = false;
}
//43
void intr_TIMER_OUT() { // ISR(Interrupt Service Routine), TIMER_OUT 입력시
Serial.println("2nd Interrupt");
start_flag = false;
ch1_flag = false;
ch2_flag = false;
}
//51
void loop(){ //
int sw_start_val = digitalRead(SW_START);
int sw_ch1_test_val = digitalRead(SW_CH1_TEST);
int sw_ch2_test_val = digitalRead(SW_CH2_TEST);
int sw_stop_val = digitalRead(SW_STOP);
int timer_out_val = digitalRead(TIMER_OUT);
if ((sw_start_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
Serial.println("1st Step");
start_flag = true;
} else if ((sw_ch1_test_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
Serial.println("2nd Step");
ch1_flag = true;
} else if ((sw_ch2_test_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
Serial.println("3rd Step");
ch2_flag = true;
}
//68
Serial.print("start_flag=");
Serial.println(start_flag);
Serial.print("ch1_flag=");
Serial.println(ch1_flag);
Serial.print("ch2_flag=");
Serial.println(ch2_flag);
Serial.println("-------------------------------------------");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
delay(500);
}
//85
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
어떤 하드웨어를 사용중이신지와 컴파일러, 사용 OS 등을 함께 써주셔야 답변이 가능합니다.
고객들의 개발환경은 매우 다양하므로, 부정확하면 그만큼 상상의 나래를 펴게 됩니다.
일단, 고객님은 아두이노 시리즈 중 하나를 쓰시나 봅니다.
그리고, 인터럽트를 attachInterrupt()를 통해 사용할 때에는
const byte interruptPin = 2;
attachInterrupt(digitalPinToInterrupt(interruptPin), intr_STOP_SW, FALLING);
위의 이런 식으로 사용하는 것이 안전합니다. 왜냐하면 인터럽트는 사용하는 아두이노에 따라 다양하게 번호가 바뀔 수 있기 때문입니다.
또한, 인터럽트가 발생하는 시점을 표시하신 FALLING 이라는 것은 High일때 발생하는 것이 아니고,.
High->Low가 되는 순간에 발생하는 겁니다.
이상의 내용을 참고로 하여 한번 생각해 보세요.
감사합니다.
>
>
> 아래 소스에서요.
>
> -------------------------------------------------------------------------------------------------
> 프로그램의 의도는
> SW_START를 한 번 누르면 start_flag가 true로 되고.
> SW_CH1_TEST를 한 번 누르면 SW_CH1_TEST_flag가 true로 되고.
> SW_CH2_TEST를 한 번 누르면 SW_CH2_TEST_flag가 true로 되고.
> 3중의 어느 하나가 먼저 true로 되면 다른 sw를 눌러도 변화가 없어야 합니다.
> true로 된 flag들은 SW_STOP나 TIMER_OUT 신호에 의해서 Interrupt가 걸려야만 false로 해제되도록 하면 되는 것입니다.
> -------------------------------------------------------------------------------------------------
> 그런데 실제 동작은
> SW_START(D2)로 SW_START_flag는 true로 되는데, SW_START를 놓으면 다시 저절로 false로 바뀝니다.
> 그리고 SW_START를 놓는 순간 intr_STOP_SW() ISR로 들어갔다 나오고요.
>
> SW_CH1_TEST(D3)로 SW_CH1_TEST_flag도 true로 되는데, SW_CH1_TEST를 놓으면 다시 저절로 false로 바뀝니다.
> 그리고 SW_CH1_TEST를 놓는 순간 intr_TIMER_OUT() ISR로 들어갔다 나오고요.
>
> SW_CH2_TEST(D4)는 SW_CH2_TEST_flag로 true로 변하고, SW_CH2_TEST를 놓아도 true 상태를 유지하여 정상 동작을 합니다.
> 그런데 STOP_SW(D0)나 TIMER_OUT(D1) 신호로도 인터럽트가 걸리지도 않고, false로 바뀌지도 않습니다.
> -------------------------------------------------------------------------------------------------
> 어떻게 하면 프로그램의 의도처럼 동작하게 할 수 있을까요?
> 바쁘시겠지만 답변 좀 부탁 드리겠습니다.
> 감사합니다.
> -------------------------------------------------------------------------------------------------
> 그리고 ISR은 D0와 D1에 걸어 놓았는데, D0와 D1에서는 인터럽트가 안 걸리고, D2, D3 Pin을 Low로 해야 ISR로 진입하여 "1st Interrupt"과 "2nd Interrupt"를 Print 합니다.
> DM-USTYLE-CT V1.0 보드 2개를 실험했는 데, 모두 동일합니다.
> 바쁘시겠지만 원인 좀 알려 주시면 대단히 감사하겠습니다.
>
> -------------------------------------------------------------------------------------------------
>
> #define SW_START 2 // D2 (Pin 4, INPUT_PULLUP)
> #define SW_CH1_TEST 3 // D3 (RL_CH1_SOL) (Pin 5, INPUT_PULLUP)
> #define SW_CH2_TEST 4 // D4 (RL_CH2_SOL) (Pin 6, INPUT_PULLUP)
> #define SW_STOP 0 // D0, Interrupt ID 0 (Pin 2, INPUT_PULLUP)
> //5
> #define TIMER_OUT 1 // D1, Interrupt ID 1 (Pin 3, INPUT_PULLUP)
> #define TIMER_INA 10 // D10 (Pin 16, OUTPUT)
> #define TIMER_RESET 11 // D11 (Pin 17, OUTPUT)
>
> #define ON 1 // 상수
> #define OFF 0
> //12
> boolean state = false; //
> boolean start_flag = false; //
> boolean ch1_flag = false; //
> boolean ch2_flag = false; //
>
> void setup(){ // Assign INPUT/OUTPUT Port
> //19
> pinMode(SW_START, INPUT_PULLUP); // SW_START SW_START, 누르면 Low 입력
> pinMode(SW_CH1_TEST, INPUT_PULLUP); // SW_CH1_TEST (RL_CH1_SOL), SW_CH1_TEST (RL_CH1_SOL), 누르면 Low 입력
> pinMode(SW_CH2_TEST, INPUT_PULLUP); // SW_CH2_TEST (RL_CH2_SOL), SW_CH2_TEST (RL_CH2_SOL), 누르면 Low 입력
> pinMode(SW_STOP, INPUT_PULLUP); // STOP_SW, STOP_SW, 누르면 Low 입력
> //24
> pinMode(TIMER_OUT, INPUT_PULLUP); // TIMER_OUT (Timer(CT4S) Time Out Signal), Time OUT 시 Low 입력
> pinMode(TIMER_INA, OUTPUT); // Timer_INA (CT4S)
> pinMode(TIMER_RESET, OUTPUT); // (CT4S)
> //28
> attachInterrupt(0, intr_STOP_SW, FALLING); // STOP SW가 눌리면(High) 인터럽트 발생
>
> attachInterrupt(1, intr_TIMER_OUT, FALLING); // Time Out 되면(High) 인터럽트 발생
>
> Serial.begin(9600);
> }
> //35
> void intr_STOP_SW() { // ISR(Interrupt Service Routine), 입력시
> Serial.println("1st Interrupt");
>
> start_flag = false;
> ch1_flag = false;
> ch2_flag = false;
> }
> //43
> void intr_TIMER_OUT() { // ISR(Interrupt Service Routine), TIMER_OUT 입력시
> Serial.println("2nd Interrupt");
>
> start_flag = false;
> ch1_flag = false;
> ch2_flag = false;
> }
> //51
> void loop(){ //
>
> int sw_start_val = digitalRead(SW_START);
> int sw_ch1_test_val = digitalRead(SW_CH1_TEST);
> int sw_ch2_test_val = digitalRead(SW_CH2_TEST);
> int sw_stop_val = digitalRead(SW_STOP);
> int timer_out_val = digitalRead(TIMER_OUT);
>
> if ((sw_start_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
> Serial.println("1st Step");
> start_flag = true;
> } else if ((sw_ch1_test_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
> Serial.println("2nd Step");
> ch1_flag = true;
> } else if ((sw_ch2_test_val==OFF) && (start_flag==false) && (ch1_flag==false) && (ch2_flag == false)) {
> Serial.println("3rd Step");
> ch2_flag = true;
> }
> //68
> Serial.print("start_flag=");
> Serial.println(start_flag);
>
> Serial.print("ch1_flag=");
> Serial.println(ch1_flag);
>
> Serial.print("ch2_flag=");
> Serial.println(ch2_flag);
>
> Serial.println("-------------------------------------------");
> Serial.println("");
> Serial.println("");
> Serial.println("");
> Serial.println("");
> delay(500);
> }
> //85
>
|
||||
