Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 8198 | 답변완료isp board 문의 드립니다. | 티씨뉴 | 2013-06-24 | 1,321 |
|
제가 사용하는 것이 혼텍에서 나온 hdm-1200이라는 제품입니다. 여기에 라이팅을 하기위해
isp보드가 필요한데 뉴티씨제품중에 어떤것을 사용하면 되는지 좀 알려주세요.
hdm-1200의 카탈로그를 첨부합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
AD-USBISP V03.5나 AD-USBISP+ V4.0 제품을 구매하면 됩니다.
Lite 제품이나 Special 제품은 AD-ISP-CVB 보드가 빠져 있어서,
이것을 빼면 고객님의 보드와 직접 연결되지 않으므로,
반드시 그것이 있는 AD-USBISP V03.5나 AD-USBISP+ V4.0 를 제품소개에서 구매바랍니다.
감사합니다.
>
>
> 제가 사용하는 것이 혼텍에서 나온 hdm-1200이라는 제품입니다. 여기에 라이팅을 하기위해
> isp보드가 필요한데 뉴티씨제품중에 어떤것을 사용하면 되는지 좀 알려주세요.
>
> hdm-1200의 카탈로그를 첨부합니다.
>
|
||||
| 8197 | 답변완료AB-M128-B 관련해서 질문있습니다. | 안요섭 | 2013-06-24 | 1,478 |
|
AB-M128-B를 개발보드로 해서 RS232통신을 하려고 하는데요.
이 보드에서 RS232통신을 하려고 하니깐, 여기서 파는 캐이블은 3핀이더라구요.
그래서 그냥 AM-128PL의 4개의 핀 중에서 tx ,rx ,ground 3개만 연결을 해서 RS232통신을 하려고 하는데
그렇게 하면 통신이 가능한 것인지 알고 싶습니다.
(아예 불가능한 것인지, 아니면 가능은 한 것인지 알고 싶습니다.)
그리고 가속도 센서랑, 자이로 센서를 구매하려고 하는데요.
둘 다 플러스 모듈로 해서,
자이로 센서: AM-GYRO-P V02
가속도 센서: AM-3AXIS-P V03
을 구매하려고 하는데요.
위쪽에서 RS232를 여쭤본게, RS232를 사용해서 따로 모터드라이브를 제어하려고 해서요.
그래서 가속도랑, 자이로가 각각 혹시 RS232를 사용한 모터제어와
충돌이 일어나지 않는가 해서 질문드립니다.
좋은 하루 되세요~~
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
본사의 3핀 UART 케이블 및 3핀 커넥터는 RS-232C 레벨(+-12V)의 통신이구요.
본사의 4핀 UART 케이블 및 4핀 커넥터는 TTL 레벨(5V)의 UART 통신입니다.
따라서, 반드시 레벨을 따져서 연결해야 하구요.
PC뒤쪽의 DB-9핀 커넥터는 RS-232C 레벨의 커넥터라서, 반드시 3핀 커넥터와 연결해야 하구요.
만일 4핀 커넥터와 연결하게 되거나 해서 서로레벨이 맞지 않으면 통신이 되지 않습니다.
그리고, 가속도나 자이로 센서는 모두 F 포트에 꽂는 것이고, UART는 0번과 1번 모두 다른 포트를 사용하므로, 충돌되지는 않습니다. 하지만, 가속도 플러스 모듈과 자이로 플러스 모듈이 모두 F 포트에 꽂혀야 하므로, 한군데에 꽂을 수는 없습니다.
따라서, 키트를 두개 사서, 각각 하나는 가속도 플러스 모듈과 다른 하나는 자이로 플러스 모듈과 물려서, 결과를 PC에서 UART0로 통신하고, 다시 다른 키트로 UART1을 이용해 보내고, 다른 키트에서는 UART0로 받고 하는 형식으로 통신하면,
즉, PC-----KIT1의 UART0 KIT1의 UART1------KIT2의 UART0 이런식으로 쓰면 어떨까 합니다.
이렇게 쓸 때의 각 키트에서 사용될 수 있는 기본 소스는 필요시 올려드릴 수 있습니다.
목적에 따라 변경해서 쓰면 되겠습니다. 필요시 요청하세요.
아니면, 하나의 키트로 하고 하나의 가속도 플러스 모듈을 사고, 나머지는 자이로센서모듈만 사서,
하나의 산 플러스 모듈에다가 땜을 해서, 센서모듈에 전원을 넣어주고, 1번, 3번 이렇게 빈 곳에 자이로센서의 각 두 축을 넣어준 후, 0, 2, 4는 가속도 값, 1, 3은 자이로 값으로 채널을 쓰면 되지 않을까도 싶습니다.
감사합니다.
참고 바랍니다.
>
>
> AB-M128-B를 개발보드로 해서 RS232통신을 하려고 하는데요.
> 이 보드에서 RS232통신을 하려고 하니깐, 여기서 파는 캐이블은 3핀이더라구요.
>
> 그래서 그냥 AM-128PL의 4개의 핀 중에서 tx ,rx ,ground 3개만 연결을 해서 RS232통신을 하려고 하는데
> 그렇게 하면 통신이 가능한 것인지 알고 싶습니다.
>
> (아예 불가능한 것인지, 아니면 가능은 한 것인지 알고 싶습니다.)
>
>
>
> 그리고 가속도 센서랑, 자이로 센서를 구매하려고 하는데요.
> 둘 다 플러스 모듈로 해서,
>
> 자이로 센서: AM-GYRO-P V02
> 가속도 센서: AM-3AXIS-P V03
>
> 을 구매하려고 하는데요.
>
> 위쪽에서 RS232를 여쭤본게, RS232를 사용해서 따로 모터드라이브를 제어하려고 해서요.
>
> 그래서 가속도랑, 자이로가 각각 혹시 RS232를 사용한 모터제어와
> 충돌이 일어나지 않는가 해서 질문드립니다.
>
> 좋은 하루 되세요~~
>
|
||||
| 8196 | 답변완료128키트와 스탭모터구동에대해서 질문드립니다. | 은영민 | 2013-06-24 | 1,448 |
|
저희가 스텝모터 4개를 하나의 키트로 구동하려합니다.
현재 아트메가128B 키트에 12V 5A를 공급하고
모터 드라이버로 128키트의 12V출력단으로 모터드라이버에
전원을 공급해서 모터(SE-SM243) 2개는 구동하고있습니다.
128키트에 보니까 12V 출력단이 하나더 있는것 같던데
그 출력단을 통해서 또 다른 모터드라이버로 전원을 공급하고
위의 스탭모터를 2개더 구동하려고 하는데 가능합니까?
키트에 무리가 가지는 않을지 궁금합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
키트에 전혀 무리가 가지는 않습니다.
왜냐하면, 12V는 단순 선연결로 아답타 입력된 전원이 12V 커넥터 출력쪽으로 나가는 것입니다.
따라서, 노이즈 제거 효과는 있겠지만, 무리는 가지 않습니다.
다만, 고객님이 스테핑 모터 가해지는 토크를 얼마를 쓰느냐에 따라서, 각 모터에 사용되는 전류량이
달라지게 되는 데, 이 모든 모터의 전류량을 합했을 때, 혹시라도 전류가 부족할까봐 걱정은 됩니다.
스테핑 모터가 무부하시라도 보통 1개에 250mA 이상은 먹기 때문에, 일반적으로 좀만 써도 500mA 정도 먹는다고 봐야 합니다. 최대로 쓰는 경우 거의 3A까지 먹을 수도 있으나, 이 경우 방열판을 모터 구동부에 크게 달아줘야 합니다.
커넥터 선들을 또한, 충분한 전류.가 흐를 수 있는 굵기와 연선으로 가능한 사용해야 하겠습니다.
참고하세요
>
>
> 저희가 스텝모터 4개를 하나의 키트로 구동하려합니다.
>
> 현재 아트메가128B 키트에 12V 5A를 공급하고
> 모터 드라이버로 128키트의 12V출력단으로 모터드라이버에
> 전원을 공급해서 모터(SE-SM243) 2개는 구동하고있습니다.
>
> 128키트에 보니까 12V 출력단이 하나더 있는것 같던데
> 그 출력단을 통해서 또 다른 모터드라이버로 전원을 공급하고
> 위의 스탭모터를 2개더 구동하려고 하는데 가능합니까?
>
> 키트에 무리가 가지는 않을지 궁금합니다.
>
|
||||
| 8195 | 답변완료KT-M128 트레이닝킷트와 avr studio 4 | 서태양 | 2013-06-22 | 1,453 |
|
킷트 사면 주는 예제 파일로 usb-isp로 연결하는데 connect failed 가 나옵니다. 전에는 잘 됐는데 어느 날 해보니 또 안 되더군요.. 왜 그렇죠?
관리자 답변
안녕하세요 고객님
usbisp 드라이버가 잘 설치되었는지 제어판 하드웨어 장치관리자에서 포트 확인해보세요.
그리고 com포트를 가능하면 com1-4번 사이로 잡는것이좋구요.
PC가 com1 을 쓰고있다면 com2-4번으로 해야겠습니다.
원래는 com1-7까지 avr studio가 지원합니다만
Pc에 따라서는 4 번까지만 지원되는 경우가 있습니다.
또한 그래도 안되면 드라이버잡힌 화면과 에러난 화면등을 캡쳐하여 올려주세요.
참고바랍니다.
>
>
> 킷트 사면 주는 예제 파일로 usb-isp로 연결하는데 connect failed 가 나옵니다. 전에는 잘 됐는데 어느 날 해보니 또 안 되더군요.. 왜 그렇죠?
>
|
||||
| 8194 | 답변완료ATmega128 구매 관련 질문 | 손원범 | 2013-06-21 | 1,299 |
|
안녕하세요.
대학교에서 3~6월까지 ATmega128을 이용하여 AVR 수업을 들었던 학생입니다.
다름이 아니라 수업을 듣고 난 이후에 AVR을 계속 다루고 싶어 직접 구매하고 싶은데,
수업시간에 교수님께서 나눠주셨던 AVR과 현재 팔고 계시는 AVR이 약간 다르기에
혹시 수업시간에 사용한 AVR로 구매를 할 수 있는지 해서 질문하게 되었습니다.
수업시간에는 첨부된 사진처럼 "AB-M128Pro-A V03"에 메인보드가 "AM-128Pro"인데
사진처럼 구매를 할 수 있는지 궁금합니다.^^
감사합니다. :)
관리자 답변
안녕하세요 고객님
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
제품소개--> 개발보드--> AB-M128PRO-A 보드가 정확히 고객님이 원하는 제품입니다.
또한 KD-128PRO-USB를 사면 usbisp v03.6 및
시리얼케이블, 10 핀케이블들, 12V 1A 아답타, 촤신 예제가 든 CD, 자지대 등이 함께 들어있습니다.
참고 바랍니다.
>
>
> 안녕하세요.
> 대학교에서 3~6월까지 ATmega128을 이용하여 AVR 수업을 들었던 학생입니다.
> 다름이 아니라 수업을 듣고 난 이후에 AVR을 계속 다루고 싶어 직접 구매하고 싶은데,
> 수업시간에 교수님께서 나눠주셨던 AVR과 현재 팔고 계시는 AVR이 약간 다르기에
> 혹시 수업시간에 사용한 AVR로 구매를 할 수 있는지 해서 질문하게 되었습니다.
> 수업시간에는 첨부된 사진처럼 "AB-M128Pro-A V03"에 메인보드가 "AM-128Pro"인데
> 사진처럼 구매를 할 수 있는지 궁금합니다.^^
> 감사합니다. :)
>
|
||||
| 8193 | 답변완료iccavr 에러 질문드립니다. | 강신재 | 2013-06-20 | 1,473 |
|
//ICC-AVR application builder : 2013-06-19 오후 5:32:52
// Target : M128
// Crystal: 11.059Mhz
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
#include <math.h>
/*
#define EX_SS_DATA (*(volatile unsigned char *)0x8002)
#define EX_SS_SEL (*(volatile unsigned char *)0x8003)
#define EX_DM_SEL (*(volatile unsigned char *)0x8004)
#define EX_DM_DATA (*(volatile unsigned char *)0x8006)
#define EX_LED (*(volatile unsigned char *)0x8008)
#define EX_STEPPING (*(volatile unsigned char *)0x8009)
#define EX_STEP_PORT PORTB
#define EX_STEP_DDR DDRB
*/
volatile unsigned int num0,num1,num2,num3;
volatile int numb1,numb2;
volatile unsigned char flag0, flag1, flag2, flag3, flag4;
void location(int t1,int t2);
//-----------------------
int putc(char c){
//put char to usart0... dont add lf after cr
while((UCSR0A & 0x20)==0){}; //0x20 is UDRE0. ==0 means data register full
UDR0=c; //send char
return c;
}
//----------------------
int putchar(char c){
//called by printf... adds lf after cr
if(c=='\n'){
putc('\r');
}
putc(c);
return c;
}
//--------------------
void crlf(void){
//send cr lf
putchar('\n');
}
/*
void ktm128_init(void) //키트 기본 설정 함수
{
EX_SS_DATA = 0x00;
EX_SS_SEL = 0x00;
EX_DM_SEL = 0x00;
EX_DM_DATA = 0x00;
EX_LED = 0x00;
EX_STEPPING = 0x00;
}
*/
void delay(int dd)
{
int i;
for(i=0; i<100*dd; i++);
}
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 = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
void timer1_init(void)//use timer 1 as fisrt counter
{
TCCR1B = 0x00; //stop timer
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
TIFR = 0X00;
TCCR1A = 0x00;
}
//UART0 initialize
// desired baud rate: 9600
// actual: invalid baud rate
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x63 /*INVALID SETTING*/; //set baud rate lo
UBRR0H = 0x00 /*INVALID SETTING*/; //set baud rate hi
UCSR0B = 0x08;
}
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ACSR = 0x80;
ADCSRA = 0x87;
}
//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();
uart0_init();
adc_init();
ktm128_init();
timer1_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
}
void operating(char order)
{
switch(flag0)
{
case 0 :
TCCR1B = 0x04;
flag0++;
switch(order)
{
case 0x40 : num0 = TCNT1; flag1 = 1;break;
case 0x41 : num1 = TCNT1; flag2 = 1;break;
case 0x42 : num2 = TCNT1; flag3 = 1;break;
case 0x43 : num3 = TCNT1; flag4 = 1;break;
default : break;
}
break;
case 1:
switch(order)
{
case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
default : break;
}
case 2: flag0++;
switch(order)
{
case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
default : break;
}
case 3: flag0++;
TCCR1B=0x00;
switch(order)
{
case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
default : break;
}
numb1 = (int)(num1 - num0);
numb2 = (int)(num2 - num3);
location(numb1, numb2);
delay(15000);
flag0 = 0;
flag1 = 0;
flag2 = 0;
flag3 = 0;
flag4 = 0;
num0 = 0;
num1 = 0;
num2 = 0;
num3 = 0;
numb1 = 0;
numb2 = 0;
TCNT1 = 0;
break;
default: break;
}
}
void main(void)
{
volatile unsigned int ch0,ah0,al0;//,order;
init_devices();
flag0 = 0;
flag1 = 0;
flag2 = 0;
flag3 = 0;
flag4 = 0;
num0 = 0;
num1 = 0;
num2 = 0;
num3 = 0;
numb1 = 0;
numb2 = 0;
while(1)
{
ADCSRA &= 0x7f;
if(ADMUX == 0x40)
ADMUX = 0x41;
else if(ADMUX == 0x41)
ADMUX = 0x42;
else if(ADMUX == 0x42)
ADMUX = 0x43;
else
ADMUX = 0x40;
ADCSRA |= 0xC0;
al0 = ADCL;
ah0 = ADCH;
ch0 = al0+ah0*256;
//order = ADMUX;
//printf("\r");
if(ch0>=50)
{
operating(ADMUX);
}
//printf("ch0 = %u\n",ch0);
//printf("\n");
//ch0=0;
}
}
void location(int t1, int t2)
{
//A maximum time differnce of the point between A and B = 0.0009sec;
//A minimum time differnce of the point between A and B = 0.0000sec;
//The time difference variables of the point between A and B
//The range of position X or Y is -0.9<=X or Y<=0.9
float x,y;
//The Variables for calculate X or Y position
float temp_t1=0;
float temp_t2=0;
//===================A NOTE of Case======================
//The seperated case 1,2,3,4
//A case1 : The 1st Quadrant(Between A and D) => X,Y>0
//A case2 : The 2nd Quadrant(Between A and C) => X<0, Y>0
//A case3 : The 3th Quadrant(Between B and C) => X,Y <0
//A case4 : The 4th Quadrant(Between B and D) => X>0, Y<0
//=======================================================
//Determination of a Case of position X and Y
temp_t1=pow(1000*t1/1000,2);//1000 : coefficient
temp_t2=pow(1000*t2/1000,2);//1000 : coefficient
x=sqrt((temp_t2/((0.9*0.9)-temp_t2))*(((-((0.9*0.9)-temp_t1)*(temp_t1))-temp_t1*temp_t2)/(((temp_t1*temp_t2)/((0.9*0.9)-temp_t2))-(0.9*0.9)+temp_t1))+temp_t2);
y=sqrt(((-((0.9*0.9)-temp_t1)*(temp_t1))-temp_t1*temp_t2)/(((temp_t1*temp_t2)/((0.9*0.9)-temp_t2))-(0.9*0.9)+temp_t1));
if(t1<0)
{
//A case1 : The 1st Quadrant(Between A and D)
if(t2<0)
printf("x=%f, y=%f\n", x,y);
//A case2 : The 2nd Quadrant(Between A and C)
else if(t2>0)
printf("x=%f, y=%f\n", -x,y);
//Error Flag
else
printf("Not Found!\n");
}
else if(t1>0)
{
//A case3 : The 3th Quadrant(Between B and C)
if(t2>0)
printf("x=%f, y=%f\n", -x,-y);
//A case4 : The 4th Quadrant(Between B and D)
else if(t2<0)
printf("x=%f, y=%f\n", x,-y);
//Error Flag
else
printf("Not Found!\n");
}
else
printf("X=0, Y=0 or Not Found!\n");
}
------------------------------------------------
소스 코드는 여기까지이고
이런 에러메시지가 뜨는데 메모리 공간이 부족해서 여러가지 변수들을 축소시키고 해봐도 역부족이네요..
해결방법이 없을까요?
관리자 답변
안녕하세요 고객님
데모버전으로 컴파일할수 있는 용량을 넘어서서 그런거네요
정품 구매하여 사용하면됩니다.
정품은 NC( 비상업용 ) 버전과 standard 및 professional 버전이 있습니다.
회사에서 제품 개발시는 standard 및 professional 버전을 사용해야합니다.
학습시에는 저렴한 NC버전을 이용시 standard버전처럼 64kB까지 헥사 컴파일 가능합니다.
또는 printf 함수나 scanf함수를 쓰지 않고 라이브러리를 쓰지 않는것도 헥사 사이즈 줄이는 좋은 방법이죠. 하지만 그렇게해도 본 소스는 4 kB는 넘을 것같네요.
감사합니다.
감사합니다.
감사합니다.
>
>
> //ICC-AVR application builder : 2013-06-19 오후 5:32:52
> // Target : M128
> // Crystal: 11.059Mhz
>
> #include <iom128v.h>
> #include <macros.h>
> #include <stdio.h>
> #include <math.h>
> /*
> #define EX_SS_DATA (*(volatile unsigned char *)0x8002)
> #define EX_SS_SEL (*(volatile unsigned char *)0x8003)
> #define EX_DM_SEL (*(volatile unsigned char *)0x8004)
> #define EX_DM_DATA (*(volatile unsigned char *)0x8006)
> #define EX_LED (*(volatile unsigned char *)0x8008)
> #define EX_STEPPING (*(volatile unsigned char *)0x8009)
> #define EX_STEP_PORT PORTB
> #define EX_STEP_DDR DDRB
> */
> volatile unsigned int num0,num1,num2,num3;
> volatile int numb1,numb2;
> volatile unsigned char flag0, flag1, flag2, flag3, flag4;
> void location(int t1,int t2);
> //-----------------------
> int putc(char c){
> //put char to usart0... dont add lf after cr
>
> while((UCSR0A & 0x20)==0){}; //0x20 is UDRE0. ==0 means data register full
> UDR0=c; //send char
> return c;
> }
>
> //----------------------
> int putchar(char c){
> //called by printf... adds lf after cr
>
> if(c=='\n'){
> putc('\r');
> }
> putc(c);
> return c;
> }
>
> //--------------------
> void crlf(void){
> //send cr lf
>
> putchar('\n');
> }
> /*
> void ktm128_init(void) //키트 기본 설정 함수
> {
> EX_SS_DATA = 0x00;
> EX_SS_SEL = 0x00;
> EX_DM_SEL = 0x00;
> EX_DM_DATA = 0x00;
> EX_LED = 0x00;
> EX_STEPPING = 0x00;
> }
> */
> void delay(int dd)
> {
> int i;
> for(i=0; i<100*dd; i++);
> }
> 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 = 0x00;
> PORTG = 0x00;
> DDRG = 0x00;
> }
> void timer1_init(void)//use timer 1 as fisrt counter
> {
> TCCR1B = 0x00; //stop timer
> TCNT1H = 0x00;
> TCNT1L = 0x00;
> OCR1AH = 0x00;
> OCR1AL = 0x00;
> OCR1BH = 0x00;
> OCR1BL = 0x00;
> ICR1H = 0x00;
> ICR1L = 0x00;
> TIFR = 0X00;
> TCCR1A = 0x00;
>
> }
>
>
> //UART0 initialize
> // desired baud rate: 9600
> // actual: invalid baud rate
> // char size: 8 bit
> // parity: Disabled
> void uart0_init(void)
> {
> UCSR0B = 0x00; //disable while setting baud rate
> UCSR0A = 0x00;
> UCSR0C = 0x06;
> UBRR0L = 0x63 /*INVALID SETTING*/; //set baud rate lo
> UBRR0H = 0x00 /*INVALID SETTING*/; //set baud rate hi
> UCSR0B = 0x08;
> }
> void adc_init(void)
> {
> ADCSRA = 0x00; //disable adc
> ADMUX = 0x00; //select adc input 0
> ACSR = 0x80;
> ADCSRA = 0x87;
> }
>
> //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();
> uart0_init();
> adc_init();
> ktm128_init();
> timer1_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
> }
> void operating(char order)
> {
>
> switch(flag0)
> {
> case 0 :
> TCCR1B = 0x04;
> flag0++;
> switch(order)
> {
> case 0x40 : num0 = TCNT1; flag1 = 1;break;
> case 0x41 : num1 = TCNT1; flag2 = 1;break;
> case 0x42 : num2 = TCNT1; flag3 = 1;break;
> case 0x43 : num3 = TCNT1; flag4 = 1;break;
> default : break;
> }
> break;
> case 1:
> switch(order)
> {
> case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
> default : break;
> }
> case 2: flag0++;
> switch(order)
> {
> case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
> default : break;
> }
> case 3: flag0++;
> TCCR1B=0x00;
> switch(order)
> {
> case 0x40 : if(flag1!=1) {num0 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x41 : if(flag2!=1) {num1 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x42 : if(flag3!=1) {num2 = TCNT1; flag1 = 1;flag0++;}break;
> case 0x43 : if(flag4!=1) {num3 = TCNT1; flag1 = 1;flag0++;}break;
> default : break;
> }
> numb1 = (int)(num1 - num0);
> numb2 = (int)(num2 - num3);
> location(numb1, numb2);
> delay(15000);
> flag0 = 0;
> flag1 = 0;
> flag2 = 0;
> flag3 = 0;
> flag4 = 0;
> num0 = 0;
> num1 = 0;
> num2 = 0;
> num3 = 0;
> numb1 = 0;
> numb2 = 0;
> TCNT1 = 0;
> break;
>
> default: break;
> }
>
> }
> void main(void)
> {
> volatile unsigned int ch0,ah0,al0;//,order;
> init_devices();
> flag0 = 0;
> flag1 = 0;
> flag2 = 0;
> flag3 = 0;
> flag4 = 0;
> num0 = 0;
> num1 = 0;
> num2 = 0;
> num3 = 0;
> numb1 = 0;
> numb2 = 0;
> while(1)
> {
> ADCSRA &= 0x7f;
>
> if(ADMUX == 0x40)
> ADMUX = 0x41;
> else if(ADMUX == 0x41)
> ADMUX = 0x42;
> else if(ADMUX == 0x42)
> ADMUX = 0x43;
> else
> ADMUX = 0x40;
>
> ADCSRA |= 0xC0;
> al0 = ADCL;
> ah0 = ADCH;
> ch0 = al0+ah0*256;
> //order = ADMUX;
> //printf("\r");
> if(ch0>=50)
> {
> operating(ADMUX);
> }
> //printf("ch0 = %u\n",ch0);
> //printf("\n");
> //ch0=0;
> }
> }
>
> void location(int t1, int t2)
> {
> //A maximum time differnce of the point between A and B = 0.0009sec;
> //A minimum time differnce of the point between A and B = 0.0000sec;
> //The time difference variables of the point between A and B
> //The range of position X or Y is -0.9<=X or Y<=0.9
> float x,y;
> //The Variables for calculate X or Y position
> float temp_t1=0;
> float temp_t2=0;
>
> //===================A NOTE of Case======================
> //The seperated case 1,2,3,4
> //A case1 : The 1st Quadrant(Between A and D) => X,Y>0
> //A case2 : The 2nd Quadrant(Between A and C) => X<0, Y>0
> //A case3 : The 3th Quadrant(Between B and C) => X,Y <0
> //A case4 : The 4th Quadrant(Between B and D) => X>0, Y<0
> //=======================================================
> //Determination of a Case of position X and Y
>
> temp_t1=pow(1000*t1/1000,2);//1000 : coefficient
> temp_t2=pow(1000*t2/1000,2);//1000 : coefficient
>
> x=sqrt((temp_t2/((0.9*0.9)-temp_t2))*(((-((0.9*0.9)-temp_t1)*(temp_t1))-temp_t1*temp_t2)/(((temp_t1*temp_t2)/((0.9*0.9)-temp_t2))-(0.9*0.9)+temp_t1))+temp_t2);
> y=sqrt(((-((0.9*0.9)-temp_t1)*(temp_t1))-temp_t1*temp_t2)/(((temp_t1*temp_t2)/((0.9*0.9)-temp_t2))-(0.9*0.9)+temp_t1));
>
> if(t1<0)
> {
> //A case1 : The 1st Quadrant(Between A and D)
> if(t2<0)
> printf("x=%f, y=%f\n", x,y);
> //A case2 : The 2nd Quadrant(Between A and C)
> else if(t2>0)
> printf("x=%f, y=%f\n", -x,y);
> //Error Flag
> else
> printf("Not Found!\n");
> }
> else if(t1>0)
> {
> //A case3 : The 3th Quadrant(Between B and C)
> if(t2>0)
> printf("x=%f, y=%f\n", -x,-y);
> //A case4 : The 4th Quadrant(Between B and D)
> else if(t2<0)
> printf("x=%f, y=%f\n", x,-y);
> //Error Flag
> else
> printf("Not Found!\n");
> }
> else
> printf("X=0, Y=0 or Not Found!\n");
> }
> ------------------------------------------------
> 소스 코드는 여기까지이고
> 이런 에러메시지가 뜨는데 메모리 공간이 부족해서 여러가지 변수들을 축소시키고 해봐도 역부족이네요..
> 해결방법이 없을까요?
>
|
||||
| 8192 | 답변완료이어서 질문드릴께요 | 심동준 | 2013-06-18 | 1,422 |
|
DSP에서 출력되는 데이터 정보를 FPGA에서 받아서 사용하고있습니다.
DSP supply 정격 voltage 3.45V 입니다
DSP I/O포트 High-level voltage의 최소값은 2.4V이고, Low-level voltage는 최대값이 0.4V입니다.
DSP에서 출력되는 정보는 순수하게 I/O 포트로 사용되기 때문에 핀 번호는 필요없다고 생각됩니다.(질문 이전에 DSP데이터 시트 분석을 하였음)
DSP에서 출력된 데이터를 FPGA모듈 핀(163, 164, 165, 166, 167, 168, 167, 173)을 사용하여 입력받고있습니다.
FPGA에서 출력되는 신호는 핀(122, 123, 124, 125, 126, 128)을 사용하여 회로 스위칭소자 동작 신호로 사용하고 있습니다.
FPGA키트 사용에서 모듈사용으로 변경하였을때 소스변경을 하지 않은 이유는 DSP의 전압 레벨과 FPGA의 전압 레벨이 동일하여 바꾸지 않아도 괜찮다고 생각하여서 바꾸지 않았습니다 만약 DSP출력되는 전압 레벨이 FPGA에서 인식을 하지 못한다면 왜 그런지 알고 싶고 추가로 구성되어야하는 부분을 알려주시면 감사하겠습니다. 그리고 FPGA핀맵 자체에선 모두다 3.3v 레벨입니다.
이상 답변해주신 내용에 대한 추가적인 내용입니다.
==============================================================================================
안녕하세요 고곡님
저희 뉴티씨 제품을 이용하여주셔서 감사합니다.
우선 DSP 출력을 FPGA에 입력한다는건가요 아니면 FPGA출력을 DSP에 입력한다는건가요?
사용하는 DSP의 electrical chracteristic 에는 사용하고자하는 핀들이 입력시 high와 low의 각각의 허용전압범위와 출력시의 범위를 알려주세요.
잘 모르겠다면 관련 데이터시트를 첨부해주시고 어떤핀에 어떻게 쓰려는 것인지 얘기해주세요.
그리고 모듈만 쓸때 소스는 변경 안하신것 같은데 각 핀의 레벨종류는 핀맵에서 바꾸신건가요? 5V에
서 3.3V레벨로 바꾼건지 알려주시고
또한 사용하는 FPGA의 핀들도 알려주세요.
이 질문들의 답변을 토대로 답변드릴께요.
나름 정확한 어드바이스를 위한 것이니 답변바랍니다.
감사합니다.
관리자 답변
안녕하세요? 고객님,
검토해 보니, 전압 레벨 등은 모두 호환되므로, 문제가 없을 것 같습니다.
프로그램도 마찬가지구요.
그런데, 혹시 J10으로 3.3V 전원으로 넣어준 것의 전류는 충분한가요?
FPGA는 생각보다 많은 전류를 소모합니다. 프로그램에 따라 1.4A정도까지 소모할 때가 있어서,
충분한 전류를 넣어줘야 합니다. 전원으로 쓰이는 전선의 두께도 중요합니다.
확인 바랍니다.
감사합니다.
>
>
> DSP에서 출력되는 데이터 정보를 FPGA에서 받아서 사용하고있습니다.
>
> DSP supply 정격 voltage 3.45V 입니다
> DSP I/O포트 High-level voltage의 최소값은 2.4V이고, Low-level voltage는 최대값이 0.4V입니다.
> DSP에서 출력되는 정보는 순수하게 I/O 포트로 사용되기 때문에 핀 번호는 필요없다고 생각됩니다.(질문 이전에 DSP데이터 시트 분석을 하였음)
>
> DSP에서 출력된 데이터를 FPGA모듈 핀(163, 164, 165, 166, 167, 168, 167, 173)을 사용하여 입력받고있습니다.
>
> FPGA에서 출력되는 신호는 핀(122, 123, 124, 125, 126, 128)을 사용하여 회로 스위칭소자 동작 신호로 사용하고 있습니다.
>
>
> FPGA키트 사용에서 모듈사용으로 변경하였을때 소스변경을 하지 않은 이유는 DSP의 전압 레벨과 FPGA의 전압 레벨이 동일하여 바꾸지 않아도 괜찮다고 생각하여서 바꾸지 않았습니다 만약 DSP출력되는 전압 레벨이 FPGA에서 인식을 하지 못한다면 왜 그런지 알고 싶고 추가로 구성되어야하는 부분을 알려주시면 감사하겠습니다. 그리고 FPGA핀맵 자체에선 모두다 3.3v 레벨입니다.
>
> 이상 답변해주신 내용에 대한 추가적인 내용입니다.
>
>
> ==============================================================================================
>
> 안녕하세요 고곡님
> 저희 뉴티씨 제품을 이용하여주셔서 감사합니다.
>
> 우선 DSP 출력을 FPGA에 입력한다는건가요 아니면 FPGA출력을 DSP에 입력한다는건가요?
>
> 사용하는 DSP의 electrical chracteristic 에는 사용하고자하는 핀들이 입력시 high와 low의 각각의 허용전압범위와 출력시의 범위를 알려주세요.
>
> 잘 모르겠다면 관련 데이터시트를 첨부해주시고 어떤핀에 어떻게 쓰려는 것인지 얘기해주세요.
>
> 그리고 모듈만 쓸때 소스는 변경 안하신것 같은데 각 핀의 레벨종류는 핀맵에서 바꾸신건가요? 5V에
> 서 3.3V레벨로 바꾼건지 알려주시고
> 또한 사용하는 FPGA의 핀들도 알려주세요.
>
> 이 질문들의 답변을 토대로 답변드릴께요.
> 나름 정확한 어드바이스를 위한 것이니 답변바랍니다.
>
> 감사합니다.
>
|
||||
| 8191 | 답변완료FPGA 관련 질문드립니다. | 심동준 | 2013-06-18 | 1,388 |
|
FPGA 개발 키트(50Mhz)를 구입하여 사용 중 입니다.
개발키트에 장착된 FPGA모듈을 따로 분리하여 사용하려고 분리후 포트 연결 후
똑같은 코딩소스로 동작시켰는데 제대로 된 동작이 되지않아 질문 드립니다.(분리전 정상작동)
첫째, FPGA 개발 키트에 사용되고있는 5V i/o포트로 데이터 입력 받은 부분을 FPGA 모듈을 분리하여 3.3V i/o포트로 변경 후 데이터를 입력 받을시에 문제점이 있는지 알고싶습니다. (데이터 받을때 받는 데이터의 전압 레벨은 DSP i/o포트 레벨(3.3V)입니다.)
두번째, FPGA 모듈만 사용시 다른 추가 회로도 구성이 필요한 것인지 있다면 어디에 어떻게 구성하여야 하는지 알고싶습니다.
관리자 답변
안녕하세요 고곡님
저희 뉴티씨 제품을 이용하여주셔서 감사합니다.
우선 DSP 출력을 FPGA에 입력한다는건가요 아니면 FPGA출력을 DSP에 입력한다는건가요?
사용하는 DSP의 electrical chracteristic 에는 사용하고자하는 핀들이 입력시 high와 low의 각각의 허용전압범위와 출력시의 범위를 알려주세요.
잘 모르겠다면 관련 데이터시트를 첨부해주시고 어떤핀에 어떻게 쓰려는 것인지 얘기해주세요.
그리고 모듈만 쓸때 소스는 변경 안하신것 같은데 각 핀의 레벨종류는 핀맵에서 바꾸신건가요? 5V에서 3.3V레벨로 바꾼건지 알려주시고
또한 사용하는 FPGA의 핀들도 알려주세요.
이 질문들의 답변을 토대로 답변드릴께요.
나름 정확한 어드바이스를 위한 것이니 답변바랍니다.
감사합니다.
>
>
> FPGA 개발 키트(50Mhz)를 구입하여 사용 중 입니다.
> 개발키트에 장착된 FPGA모듈을 따로 분리하여 사용하려고 분리후 포트 연결 후
> 똑같은 코딩소스로 동작시켰는데 제대로 된 동작이 되지않아 질문 드립니다.(분리전 정상작동)
>
> 첫째, FPGA 개발 키트에 사용되고있는 5V i/o포트로 데이터 입력 받은 부분을 FPGA 모듈을 분리하여 3.3V i/o포트로 변경 후 데이터를 입력 받을시에 문제점이 있는지 알고싶습니다. (데이터 받을때 받는 데이터의 전압 레벨은 DSP i/o포트 레벨(3.3V)입니다.)
>
> 두번째, FPGA 모듈만 사용시 다른 추가 회로도 구성이 필요한 것인지 있다면 어디에 어떻게 구성하여야 하는지 알고싶습니다.
>
|
||||
| 8190 | 답변완료am_cd2L_ 모터드라이버의 속도조절 관련 문의.하나더요 | 성지환 | 2013-06-18 | 1,391 |
|
그렇다면 am cd2L을 이용하여 속도를 낮추거나 바꿀 수 있는 방법은 없나요
관리자 답변
소스를 수정해서 터이머로 pwm 해주면 되긴합니다만
현재 해당 예제는 제공하지 않고 있습니다.
필요하시면 dc2-2예제 참고하여 생성하시길 권해드립니다.
감사합니다.
>
>
> 그렇다면 am cd2L을 이용하여 속도를 낮추거나 바꿀 수 있는 방법은 없나요
>
|
||||
| 8189 | 답변완료DC모터 구동 예제소스 질문이여 | 김민호 | 2013-06-17 | 1,452 |
|
저희가 AB-M128-B 보드와 AM-DC2-2D 모터 모듈, SE-DM 모터 두개를 이용해 정역회전 구동을 할려고 하는데여 그 부품에서 제공해 주신 예제 소스는 있는데 ICCAVR V7에서 실행 시킬때 설정 하는 옵션을 잘몰라서여 avr스투디오 처럼 설정 하는 옵션좀 알려주실수 있나여?
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
// DC MOTOR Control
#define MOTOR_PORT PORTC
#define PWM_PORT 0x00
#define PWM1_ON (MOTOR_PORT|=0x01)
#define PWM1_OFF (MOTOR_PORT&=0xFE)
#define DIR1_ON (MOTOR_PORT|=0x02)
#define DIR1_OFF (MOTOR_PORT&=0xFD)
#define ENABLE1_OFF (MOTOR_PORT|=0x04)
#define ENABLE1_ON (MOTOR_PORT&=0xFB)
#define BREAK1_ON (MOTOR_PORT|=0x08)
#define BREAK1_OFF (MOTOR_PORT&=0xF7)
#define PWM2_ON (MOTOR_PORT|=0x10)
#define PWM2_OFF (MOTOR_PORT&=0xEF)
#define DIR2_ON (MOTOR_PORT|=0x20)
#define DIR2_OFF (MOTOR_PORT&=0xDF)
#define ENABLE2_OFF (MOTOR_PORT|=0x40)
#define ENABLE2_ON (MOTOR_PORT&=0xBF)
#define BREAK2_ON (MOTOR_PORT|=0x80)
#define BREAK2_OFF (MOTOR_PORT&=0x7F)
#define LEFT 1
#define RIGHT 2
#define STOP 3
// SPEED Control
#define MIN_SPEED 1
#define MAX_SPEED 1700
#define SPEED_UP 1
// SWITCH Control
#define SW_PORT PINA
#define SW_PORT_DDR DDRA
#define PRESSED 1
#define OPEN 0
volatile unsigned char num=PWM_PORT;
volatile unsigned char motor_state=LEFT, motor2_state=LEFT;
volatile unsigned char T20ms=0, T2_20ms=0;
volatile unsigned int DCMOTOR[8], sw_state[8]={0,0,0,0,0,0,0,0};
volatile unsigned int Tcount=0,T2_count=0;
volatile unsigned int motor_speed,motor2_speed;
// 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 port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
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 = 0x18;
}
//TIMER0 initialize - prescale:128
// WGM: Normal
// desired value: 1mSec
// actual value: 1.000mSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x06; //set count
OCR0 = 0xFA;
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
TCNT0 = 0x06; //reload counter value
T20ms++;
if(T20ms >= 20)
{
T20ms = 0;
Tcount = 0;
}
T2_20ms++;
if(T2_20ms >= 20)
{
T2_20ms = 0;
T2_count = 0;
}
}
//TIMER2 initialize - prescale:8
// WGM: Normal
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
TCNT2 = 0xEC; //setup
OCR2 = 0x14;
TCCR2 = 0x02; //start
}
#pragma interrupt_handler timer2_ovf_isr:11
void timer2_ovf_isr(void)
{
TCNT2 = 0xEC; //reload counter value
Tcount++;
T2_count++;
if(DCMOTOR[0]>Tcount)
MOTOR_PORT |= (0x01<<num);
else
MOTOR_PORT &= (~(0x01<<num));
if(DCMOTOR[4]>Tcount)
MOTOR_PORT |= (0x01<<4);
else
MOTOR_PORT &= (~(0x01<<4));
}
//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();
uart0_init();
timer0_init();
timer2_init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x41; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(int cnt)
{
unsigned int i, j;
for(i=0;i<cnt;i++){
for(j=0;j<1000;j++)
{
}
}
}
void motor_init(void){
ENABLE1_ON;
PWM1_ON;
BREAK1_OFF;
DIR1_ON;
printf("Motor Control V01W\r\n");
ENABLE2_ON;
PWM2_ON;
BREAK2_OFF;
DIR2_ON;
}
//
void main(void)
{
unsigned char i, j;
init_devices();
//insert your functional code here...
motor_init();
SW_PORT_DDR = 0x00;
DCMOTOR[0] = motor_speed = 800;
DCMOTOR[4] = motor2_speed = 100;
while(1){
switch(SW_PORT&0xFf){
case 0x01 : motor_speed+=SPEED_UP;
break;
case 0x02 : motor_speed-=SPEED_UP;
break;
case 0x04 : sw_state[2] = PRESSED;
break;
case 0x08 : sw_state[3] = PRESSED;
break;
case 0x10 : motor2_speed+=SPEED_UP;
break;
case 0x20 : motor2_speed-=SPEED_UP;
break;
case 0x40 : sw_state[4] = PRESSED;
break;
case 0x80 : sw_state[5] = PRESSED;
break;
case 0x00 : if(sw_state[2] == PRESSED){
if(motor_state == STOP){
motor_state = LEFT;
}else{
motor_state = STOP;
}
sw_state[2] = OPEN;
}
if(sw_state[3] == PRESSED){
if(motor_state == STOP){
motor_state = RIGHT;
}else{
motor_state = STOP;
}
sw_state[3] = OPEN;
}
if(sw_state[4] == PRESSED){
if(motor2_state == STOP){
motor2_state = LEFT;
}else{
motor2_state = STOP;
}
sw_state[4] = OPEN;
}
if(sw_state[5] == PRESSED){
if(motor2_state == STOP){
motor2_state = RIGHT;
}else{
motor2_state = STOP;
}
sw_state[5] = OPEN;
}
break;
default : break;
}
if(motor_speed >= MAX_SPEED){
motor_speed = MAX_SPEED;
}
if(motor_speed <= MIN_SPEED){
motor_speed = MIN_SPEED;
}
switch(motor_state){
case LEFT : BREAK1_OFF;
DIR1_ON;
break;
case RIGHT : BREAK1_OFF;
DIR1_OFF;
break;
case STOP : BREAK1_ON;
break;
default : break;
}
switch(motor2_state){
case LEFT : BREAK2_OFF;
DIR2_ON;
break;
case RIGHT : BREAK2_OFF;
DIR2_OFF;
break;
case STOP : BREAK2_ON;
break;
default : break;
}
DCMOTOR[0] = motor_speed;
DCMOTOR[4] = motor2_speed;
delay(4);
//printf("SW:%d Speed:%d State:%d\r\n",SW_PORT&0x0f, motor_speed, motor_state);
}
}
관리자 답변
Project--> Options에서 target 을 atmega128(please see notes)
선택하고 ok하면되요.
다운로더인 usbisp 관련한 설정법은 해당 버전 메뉴얼중 user manual즉 사용자 메뉴얼보면되요.
감사합니다.
>
>
> 저희가 AB-M128-B 보드와 AM-DC2-2D 모터 모듈, SE-DM 모터 두개를 이용해 정역회전 구동을 할려고 하는데여 그 부품에서 제공해 주신 예제 소스는 있는데 ICCAVR V7에서 실행 시킬때 설정 하는 옵션을 잘몰라서여 avr스투디오 처럼 설정 하는 옵션좀 알려주실수 있나여?
> #include <iom128v.h>
> #include <macros.h>
> #include <stdio.h>
>
> // DC MOTOR Control
> #define MOTOR_PORT PORTC
> #define PWM_PORT 0x00
> #define PWM1_ON (MOTOR_PORT|=0x01)
> #define PWM1_OFF (MOTOR_PORT&=0xFE)
> #define DIR1_ON (MOTOR_PORT|=0x02)
> #define DIR1_OFF (MOTOR_PORT&=0xFD)
> #define ENABLE1_OFF (MOTOR_PORT|=0x04)
> #define ENABLE1_ON (MOTOR_PORT&=0xFB)
> #define BREAK1_ON (MOTOR_PORT|=0x08)
> #define BREAK1_OFF (MOTOR_PORT&=0xF7)
>
> #define PWM2_ON (MOTOR_PORT|=0x10)
> #define PWM2_OFF (MOTOR_PORT&=0xEF)
> #define DIR2_ON (MOTOR_PORT|=0x20)
> #define DIR2_OFF (MOTOR_PORT&=0xDF)
> #define ENABLE2_OFF (MOTOR_PORT|=0x40)
> #define ENABLE2_ON (MOTOR_PORT&=0xBF)
> #define BREAK2_ON (MOTOR_PORT|=0x80)
> #define BREAK2_OFF (MOTOR_PORT&=0x7F)
>
> #define LEFT 1
> #define RIGHT 2
> #define STOP 3
>
> // SPEED Control
> #define MIN_SPEED 1
> #define MAX_SPEED 1700
> #define SPEED_UP 1
>
> // SWITCH Control
> #define SW_PORT PINA
> #define SW_PORT_DDR DDRA
> #define PRESSED 1
> #define OPEN 0
>
> volatile unsigned char num=PWM_PORT;
> volatile unsigned char motor_state=LEFT, motor2_state=LEFT;
> volatile unsigned char T20ms=0, T2_20ms=0;
> volatile unsigned int DCMOTOR[8], sw_state[8]={0,0,0,0,0,0,0,0};
> volatile unsigned int Tcount=0,T2_count=0;
> volatile unsigned int motor_speed,motor2_speed;
> // 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 port_init(void)
> {
> PORTA = 0x00;
> DDRA = 0x00;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00; //m103 output only
> DDRC = 0xFF;
> PORTD = 0x00;
> DDRD = 0x00;
> 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 = 0x18;
> }
>
> //TIMER0 initialize - prescale:128
> // WGM: Normal
> // desired value: 1mSec
> // actual value: 1.000mSec (0.0%)
> void timer0_init(void)
> {
> TCCR0 = 0x00; //stop
> ASSR = 0x00; //set async mode
> TCNT0 = 0x06; //set count
> OCR0 = 0xFA;
> TCCR0 = 0x04; //start timer
> }
>
> #pragma interrupt_handler timer0_ovf_isr:17
> void timer0_ovf_isr(void)
> {
> TCNT0 = 0x06; //reload counter value
> T20ms++;
> if(T20ms >= 20)
> {
> T20ms = 0;
> Tcount = 0;
> }
>
> T2_20ms++;
> if(T2_20ms >= 20)
> {
> T2_20ms = 0;
> T2_count = 0;
> }
> }
>
> //TIMER2 initialize - prescale:8
> // WGM: Normal
> // desired value: 100uSec
> // actual value: 100.000uSec (0.0%)
> void timer2_init(void)
> {
> TCCR2 = 0x00; //stop
> TCNT2 = 0xEC; //setup
> OCR2 = 0x14;
> TCCR2 = 0x02; //start
> }
> #pragma interrupt_handler timer2_ovf_isr:11
> void timer2_ovf_isr(void)
> {
> TCNT2 = 0xEC; //reload counter value
> Tcount++;
> T2_count++;
>
> if(DCMOTOR[0]>Tcount)
> MOTOR_PORT |= (0x01<<num);
> else
> MOTOR_PORT &= (~(0x01<<num));
>
> if(DCMOTOR[4]>Tcount)
> MOTOR_PORT |= (0x01<<4);
> else
> MOTOR_PORT &= (~(0x01<<4));
> }
>
> //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();
> uart0_init();
> timer0_init();
> timer2_init();
>
> MCUCR = 0x00;
> EICRA = 0x00; //extended ext ints
> EICRB = 0x00; //extended ext ints
> EIMSK = 0x00;
> TIMSK = 0x41; //timer interrupt sources
> ETIMSK = 0x00; //extended timer interrupt sources
> SEI(); //re-enable interrupts
> //all peripherals are now initialized
> }
>
> void delay(int cnt)
> {
> unsigned int i, j;
> for(i=0;i<cnt;i++){
> for(j=0;j<1000;j++)
> {
> }
> }
> }
>
> void motor_init(void){
> ENABLE1_ON;
> PWM1_ON;
> BREAK1_OFF;
> DIR1_ON;
> printf("Motor Control V01W\r\n");
>
> ENABLE2_ON;
> PWM2_ON;
> BREAK2_OFF;
> DIR2_ON;
> }
>
> //
> void main(void)
> {
> unsigned char i, j;
> init_devices();
> //insert your functional code here...
> motor_init();
> SW_PORT_DDR = 0x00;
> DCMOTOR[0] = motor_speed = 800;
> DCMOTOR[4] = motor2_speed = 100;
>
> while(1){
>
> switch(SW_PORT&0xFf){
> case 0x01 : motor_speed+=SPEED_UP;
> break;
> case 0x02 : motor_speed-=SPEED_UP;
> break;
> case 0x04 : sw_state[2] = PRESSED;
> break;
> case 0x08 : sw_state[3] = PRESSED;
> break;
>
> case 0x10 : motor2_speed+=SPEED_UP;
> break;
> case 0x20 : motor2_speed-=SPEED_UP;
> break;
> case 0x40 : sw_state[4] = PRESSED;
> break;
> case 0x80 : sw_state[5] = PRESSED;
> break;
>
> case 0x00 : if(sw_state[2] == PRESSED){
> if(motor_state == STOP){
> motor_state = LEFT;
> }else{
> motor_state = STOP;
> }
> sw_state[2] = OPEN;
> }
> if(sw_state[3] == PRESSED){
> if(motor_state == STOP){
> motor_state = RIGHT;
> }else{
> motor_state = STOP;
> }
> sw_state[3] = OPEN;
> }
>
> if(sw_state[4] == PRESSED){
> if(motor2_state == STOP){
> motor2_state = LEFT;
> }else{
> motor2_state = STOP;
> }
> sw_state[4] = OPEN;
> }
> if(sw_state[5] == PRESSED){
> if(motor2_state == STOP){
> motor2_state = RIGHT;
> }else{
> motor2_state = STOP;
> }
> sw_state[5] = OPEN;
> }
> break;
>
> default : break;
> }
>
> if(motor_speed >= MAX_SPEED){
> motor_speed = MAX_SPEED;
> }
> if(motor_speed <= MIN_SPEED){
> motor_speed = MIN_SPEED;
> }
>
> switch(motor_state){
> case LEFT : BREAK1_OFF;
> DIR1_ON;
> break;
> case RIGHT : BREAK1_OFF;
> DIR1_OFF;
> break;
> case STOP : BREAK1_ON;
> break;
> default : break;
> }
> switch(motor2_state){
> case LEFT : BREAK2_OFF;
> DIR2_ON;
> break;
> case RIGHT : BREAK2_OFF;
> DIR2_OFF;
> break;
> case STOP : BREAK2_ON;
> break;
> default : break;
> }
>
> DCMOTOR[0] = motor_speed;
> DCMOTOR[4] = motor2_speed;
> delay(4);
>
> //printf("SW:%d Speed:%d State:%d\r\n",SW_PORT&0x0f, motor_speed, motor_state);
> }
> }
>
|
||||
| 8188 | 답변완료usb-isp로 3.3v atmega128 모듈과 uart통신이 가능한가요? | 허희성 | 2013-06-16 | 1,444 |
|
현재 usb-isp 3.5v를 사용하고 있습니다.
지금까지 5v로 동작하는 뉴티씨 atmega128 모듈을 쓰다가
3.3v짜리가 필요해서 사용하게 됐는데요(jk전자 atmega128L)
usb-isp에 있는 단자를 통해서 연결해봤는데 잘 안되네요.
일반 시리얼 케이블로 뉴티씨 atmega128 모듈에서는 통신에 성공했으니 소스코드 문제는 아니구요
usb-isp의 vcc, gnd는 3.3v전원과 gnd에 연결하고
rx는 mcu모듈의 tx에, tx는 mcu모듈의 rx에 연결했습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
확인해 보니, TTL 5V 레벨 및 CMOS 3.3V도 호환됩니다.
뭔가 다른 원인일 것 같습니다.
감사합니다.
>
>
> 현재 usb-isp 3.5v를 사용하고 있습니다.
>
> 지금까지 5v로 동작하는 뉴티씨 atmega128 모듈을 쓰다가
>
> 3.3v짜리가 필요해서 사용하게 됐는데요(jk전자 atmega128L)
>
> usb-isp에 있는 단자를 통해서 연결해봤는데 잘 안되네요.
>
> 일반 시리얼 케이블로 뉴티씨 atmega128 모듈에서는 통신에 성공했으니 소스코드 문제는 아니구요
>
> usb-isp의 vcc, gnd는 3.3v전원과 gnd에 연결하고
>
> rx는 mcu모듈의 tx에, tx는 mcu모듈의 rx에 연결했습니다.
>
|
||||
| 8187 | 답변완료질문하나 더 올리겠습니다. | 김준년 | 2013-06-15 | 1,393 |
|
안녕하세요? 고객님,
해당 센서의 내용을 확인하셔서,
센서 출력이 디지털 TTL Level인지(5V) 확인하시고,
디지털 TTL Level 인 경우, 일반 포트에 물려서 입력으로 쓸 수 있겠습니다.
만약, UART로 나오는 경우는 TTL Level UART의 경우는 AVR의 UART 4핀 포트에 직접 물릴 수 있고,
RS-232C Level(+-12V level)인 경우는 AM-128PRO 모듈을 사용하셔서 3핀 커넥터에 연결하는 것이 좋겠습니다.
해당 센서 출력이 아날로그인 경우 0~5 V 사이 출력이라면,
F 포트의 ADC에 물려서 값을 읽어 보시는 게 좋겠습니다.
감사합니다.
>
저번에 제가 올렸던 질문에 대해 위와 같이 답변해주셨는데.
만약에 센서의 제어출력이 200mA
이하라 나오면 어떻게 연결해야 하나요?
관리자 답변
안녕하세요 고객님
전류형태로 출력된다면
회로를 이용하여 전압으로 바꾼후 사용하면되겠습니다.
수고하세요.
>
>
> 안녕하세요? 고객님,
> 해당 센서의 내용을 확인하셔서,
>
> 센서 출력이 디지털 TTL Level인지(5V) 확인하시고,
> 디지털 TTL Level 인 경우, 일반 포트에 물려서 입력으로 쓸 수 있겠습니다.
>
> 만약, UART로 나오는 경우는 TTL Level UART의 경우는 AVR의 UART 4핀 포트에 직접 물릴 수 있고,
> RS-232C Level(+-12V level)인 경우는 AM-128PRO 모듈을 사용하셔서 3핀 커넥터에 연결하는 것이 좋겠습니다.
>
> 해당 센서 출력이 아날로그인 경우 0~5 V 사이 출력이라면,
> F 포트의 ADC에 물려서 값을 읽어 보시는 게 좋겠습니다.
> 감사합니다.
>
> >
>
> 저번에 제가 올렸던 질문에 대해 위와 같이 답변해주셨는데.
>
> 만약에 센서의 제어출력이 200mA
> 이하라 나오면 어떻게 연결해야 하나요?
>
|
||||
| 8186 | 답변완료am_cd2L_ 모터드라이버의 속도조절 관련 문의. | 성지환 | 2013-06-15 | 1,417 |
|
pwm 코드를 이용하여
이 모터 드라이버로도 속도 조절이 가능한가요?
관리자 답변
안녕하세요 고객님
해당 드라이버는 매우 적은 전류가 필요한 DC 모터류에 사용되도록
개발되었습니다.
본사에서 해당 드라이버 용으로는 pwm지원 가능하도록 소스를 제공하지 않고 있습니다. DC2-2D나 DC1-3C를 이용하시가 바랍니다.
감사합니다.
>
>
> pwm 코드를 이용하여
>
> 이 모터 드라이버로도 속도 조절이 가능한가요?
>
|
||||
| 8185 | 답변완료견적서 요청 | 현혜선 | 2013-06-14 | 1,410 |
|
안녕하세요?
다음 제품에 대한 견적서 요청드립니다.
[email protected]으로 보내주시면 됩니다.
모델명 : AD-USBISP (http://www.newtc.co.kr/dpshop/shop/item.php?it_id=1314600027)
수량 : 2개
만약 배송비가 있을 경우 상품 가격에 포함시켜 주시고
비고란에 배송비포함으로 적어주시면 감사하겠습니다.
감사합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
금일 업무가 종료되어, 월요일에 요청하신 내용 보내드리도록 하겠습니다.
감사합니다.
>
>
> 안녕하세요?
>
> 다음 제품에 대한 견적서 요청드립니다.
> [email protected]으로 보내주시면 됩니다.
>
> 모델명 : AD-USBISP (http://www.newtc.co.kr/dpshop/shop/item.php?it_id=1314600027)
> 수량 : 2개
>
> 만약 배송비가 있을 경우 상품 가격에 포함시켜 주시고
> 비고란에 배송비포함으로 적어주시면 감사하겠습니다.
>
> 감사합니다.
>
|
||||
| 8184 | 답변완료avr128 DC모터 제어 소스좀 봐주세요 ㅠㅠ | 최민식 | 2013-06-14 | 1,930 |
|
AB-M128-B
ISP오류는 해결됬는대
소스로 DC모터 제어할려니 안되내요 ㅠㅠ
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define F_CPU 16000000UL // 16 MHz
#include <util/delay.h>
//
#define DCM_IN1 PORTB.0 //L298N In1 인풋 신호
#define DCM_IN2 PORTB.1 //L298N IN2 인풋 신호
void DC_M_CW(){}; //DC모터 CW(정회전)구동함수
void DC_M_CCW(){}; //DC모터 CCW(역회전)구동함수
void DC_M_STOP(){}; //DC모터 STOP함수
int main(void) //main함수
{
unsigned char SW; //스위치 입력값 저장
PORTG = 0x00;
DDRG = 0x3f;
PORTB=0x00;
DDRB=0xff; //Port B 모터 정역제어신호 출력
while (1)
{
SW = PING & 0xc0; //스위치 값 읽음
_delay_ms(5);
switch(SW)
{
case 0x02: //SW0이 눌리면
DC_M_CW(); //모터 정회전 구동
_delay_ms(10000);
DC_M_STOP(); //모터 정지
_delay_ms(1000);
DC_M_CCW(); //모터 역회전 구동
_delay_ms(10000);
break;
case 0x01: //SW1이 눌리면
DC_M_STOP(); //모터 정지
break;
default: //스위치가 눌리지 않으면
DC_M_STOP(); //모터 정지
break;
}
}
}
버튼을 눌러도 작동을안하고 ㅠㅠ
1번 스위치 누를시 10초간 정회전후 정지, 그리고 다시 역회전 10초동안하고 정지
2번 일시정지
이렇게 할려고하는대 안되내요 ㅠㅠㅠ
초보라 그런지 잘모르겠습니다 소스좀 봐주세요 ㅠㅠㅠㅠ
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
기본적인 예제는 본사에서 제공하지만,
소스 수정까지 본사에서 도와드리기는 어렵습니다.
양해 바랍니다.
하지만, 밑에 짠 소스를 보면,
평소에 default로 멈춰 있는 데,
스위치 1을 누르면 정지한다.....이건 의미가 없구요.
스위치 2를 누르면 10초간 한방향으로 돌다가 10초간 반대 방향으로 돌다가 정지한다....
이미 정지해 있는 데,2를 누르면 돌기 시작할 수는 있지만,
그게 너무 길어서, 모터가 도는 동안 스위치 1을 누르거나 한다고 해도 그 swtich 문이 끝나지도 않은 상태라서, 새로이 switch 문에 도달하지 못한 순간이므로, 동작하지 않습니다.
알고리즘을 잘 정리해 보세요.
감사합니다.
>
>
> AB-M128-B
> ISP오류는 해결됬는대
> 소스로 DC모터 제어할려니 안되내요 ㅠㅠ
> #include <avr/io.h>
> #include <avr/interrupt.h>
> #include <stdio.h>
> #define F_CPU 16000000UL // 16 MHz
> #include <util/delay.h>
> //
> #define DCM_IN1 PORTB.0 //L298N In1 인풋 신호
> #define DCM_IN2 PORTB.1 //L298N IN2 인풋 신호
> void DC_M_CW(){}; //DC모터 CW(정회전)구동함수
> void DC_M_CCW(){}; //DC모터 CCW(역회전)구동함수
> void DC_M_STOP(){}; //DC모터 STOP함수
> int main(void) //main함수
> {
> unsigned char SW; //스위치 입력값 저장
> PORTG = 0x00;
> DDRG = 0x3f;
> PORTB=0x00;
> DDRB=0xff; //Port B 모터 정역제어신호 출력
>
> while (1)
> {
> SW = PING & 0xc0; //스위치 값 읽음
> _delay_ms(5);
> switch(SW)
> {
> case 0x02: //SW0이 눌리면
> DC_M_CW(); //모터 정회전 구동
> _delay_ms(10000);
> DC_M_STOP(); //모터 정지
> _delay_ms(1000);
> DC_M_CCW(); //모터 역회전 구동
> _delay_ms(10000);
> break;
>
> case 0x01: //SW1이 눌리면
> DC_M_STOP(); //모터 정지
> break;
>
> default: //스위치가 눌리지 않으면
> DC_M_STOP(); //모터 정지
> break;
> }
> }
> }
>
>
>
>
> 버튼을 눌러도 작동을안하고 ㅠㅠ
>
> 1번 스위치 누를시 10초간 정회전후 정지, 그리고 다시 역회전 10초동안하고 정지
> 2번 일시정지
> 이렇게 할려고하는대 안되내요 ㅠㅠㅠ
>
> 초보라 그런지 잘모르겠습니다 소스좀 봐주세요 ㅠㅠㅠㅠ
>
|
||||
