Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 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 |
|
안녕하세요?
다음 제품에 대한 견적서 요청드립니다.
h-s.hyun@samsung.com으로 보내주시면 됩니다.
모델명 : AD-USBISP (http://www.newtc.co.kr/dpshop/shop/item.php?it_id=1314600027)
수량 : 2개
만약 배송비가 있을 경우 상품 가격에 포함시켜 주시고
비고란에 배송비포함으로 적어주시면 감사하겠습니다.
감사합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
금일 업무가 종료되어, 월요일에 요청하신 내용 보내드리도록 하겠습니다.
감사합니다.
>
>
> 안녕하세요?
>
> 다음 제품에 대한 견적서 요청드립니다.
> h-s.hyun@samsung.com으로 보내주시면 됩니다.
>
> 모델명 : 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번 일시정지
> 이렇게 할려고하는대 안되내요 ㅠㅠㅠ
>
> 초보라 그런지 잘모르겠습니다 소스좀 봐주세요 ㅠㅠㅠㅠ
>
|
||||
| 8183 | 답변완료윈도우7 64비트 USB Serial NEWTC 설치가 안되요 | 박경현 | 2013-06-14 | 1,311 |
|
윈도우7 64비트 사용자구요
보드를 컴터에 연결하고 장치관리자에 가면 ! 표시가 되어 있습니다,
게시판에서 무슨 PID를 바꾸고 설치하면 된다고 하는데
CP210x set ids 프로그램을 실행하면 목록에 아무것도 안떠요 보드를 컴터에 분명히 연결했는데....
드라이버가 제대로 안깔려서 어떻게 하면 되는지요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
USBISP V03 버전 사용자이신가 봅니다.
V03.5로 변경하려 하시는 거죠?
일단, 기존 사용하시던 PC에서 즉, 드라이버가 잡혀 있는 PC에서 PID 변경해야 합니다.
64비트에서는 V03은 드라이버가 잡혀 있지 않기 떄문에, 그 프로그램을 실행해도 보이지 않습니다.
변경 후에, 64비트에 꼽고, V03.5 드라이버 까시면 됩니다.
그 전 PC를 이미 포맷해서 없거나 하다면, XP나 32비트 WIN7 있는 곳을 찾아서 V03 드라이버 까신 후 PID 변경하고 64비트 PC에서 V03.5 드라이버 깔게 하시거나, 아니면
본사로 보내거나 방문하셔서 V03.5로 변경한 후 사용하세요.
본사 방문시 변경은 무료입니다.
직접 하다가 칩이 망가질 경우, 칩을 떼네야 해서 유료가 될 수 있습니다. 참고 바랍니다.
감사합니다.
>
>
> 윈도우7 64비트 사용자구요
> 보드를 컴터에 연결하고 장치관리자에 가면 ! 표시가 되어 있습니다,
>
> 게시판에서 무슨 PID를 바꾸고 설치하면 된다고 하는데
> CP210x set ids 프로그램을 실행하면 목록에 아무것도 안떠요 보드를 컴터에 분명히 연결했는데....
>
>
> 드라이버가 제대로 안깔려서 어떻게 하면 되는지요?
>
|
||||
| 8182 | 답변완료ab-m128b 에러 | 최민식 | 2013-06-13 | 1,423 |
|
isp
http://shophanback.co.kr/product/detail.html?product_no=37&cate_no=12&display_group=#prdService
위에 isp가 있어서 그걸로 할려고했는대
개속 사진속 오류가 뜨내요
분명 연결확인했고
다 켜진거 확인했고
그다음 여기 사이트에있는 avr128 소스 다 돌려봐도
개속 그 오류만뜨고....
초보자라인지라 뭐가 잘못된건지.....
프로그램은 avr studio4 사용중이에요.
다음주안으로 작품내야하는대 계속 오류가 나서 프래임까지 만들고 하나도 못건드리는중이내요
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
해당 ISP에 대해서는 저희 쪽 제품이 아니라서 잘 알 수가 없습니다.
해당 모듈이 말씀하신 ISP를 사용하여 연결시 어떤 동작을 할지 잘 알 수 없으므로,
분리하시고, USBISP를 사용하시기를 권장합니다.
해당 메시지는 연결이 제대로 안되거나, 전원 연결이 되지 않았을 때 나오는 메시지입니다만,
전원은 들어왔다고 했으니 연결이 잘 되지 않았을 때 나올 수 있는 겁니다.
감사합니다.
>
>
> isp
> http://shophanback.co.kr/product/detail.html?product_no=37&cate_no=12&display_group=#prdService
> 위에 isp가 있어서 그걸로 할려고했는대
> 개속 사진속 오류가 뜨내요
> 분명 연결확인했고
> 다 켜진거 확인했고
> 그다음 여기 사이트에있는 avr128 소스 다 돌려봐도
> 개속 그 오류만뜨고....
> 초보자라인지라 뭐가 잘못된건지.....
>
> 프로그램은 avr studio4 사용중이에요.
>
> 다음주안으로 작품내야하는대 계속 오류가 나서 프래임까지 만들고 하나도 못건드리는중이내요
>
|
||||
| 8181 | 답변완료A/S | 김준환 | 2013-06-13 | 1,413 |
|
뉴티씨 USB SERIAL 보드를 사용중에 USB 단자부분이 아예 보드에서 떨어졌는데요
혹시 A/S 가능한가요?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
해당 부분은 본딩한 후, PCB를 까서 선으로 땜하여 연결하여야 하는 데,
연결한다고 해도 임피던스 문제로, 좀 동작이 원활치 않거나, 잘 안될 수 있어서,
AS가 어렵습니다.
USB 해당 부분은 PCB가 떨어지면 AS가 어려운 부분 이해 바랍니다.
해당 제품 반납하시거나 직접 들고 방문하시면 새로 25,000원에 구매하실 수 있도록 도움 드리도록 하겠습니다.
감사합니다.
>
>
> 뉴티씨 USB SERIAL 보드를 사용중에 USB 단자부분이 아예 보드에서 떨어졌는데요
>
> 혹시 A/S 가능한가요?
>
|
||||
| 8180 | 답변완료USB-ISP V03 windows8 설치 | 서종덕 | 2013-06-13 | 1,455 |
|
안녕하십니까?
AD USB ISP V03을 사용하고 있었는데
windows XP에서도 사용하고, windows7에서도 사용했었습니다.
금번에 컴퓨터를 교체했는데, windows8입니다.
드라이버가 설치가 안됩니다.
화면에
"The specified INF files could not be copied and installed. Please check
your installation and try again."이라고 나옵니다.
관리자 답변
안녕하세요 고객님
MS에 등록된 드라이버만 사용이 가능해서 그렇습니다.
usbisp v03.5 나 v03.6으로 업그레이드하면됩니다.
본사를 방문하시거나 택배로 업그레이드하세요.
직접 방문하실경우 무상으로 업그레이드 가능합니다.
감사합니다.
>
>
> 안녕하십니까?
>
> AD USB ISP V03을 사용하고 있었는데
> windows XP에서도 사용하고, windows7에서도 사용했었습니다.
>
> 금번에 컴퓨터를 교체했는데, windows8입니다.
> 드라이버가 설치가 안됩니다.
>
> 화면에
>
> "The specified INF files could not be copied and installed. Please check
> your installation and try again."이라고 나옵니다.
>
|
||||
| 8179 | 답변완료ATMEL STUDIO 6.1에서 ATMEGA8A굽기? | 임성일 | 2013-06-13 | 1,400 |
|
안녕하세요?
정상연결후 Device Information을 클릭후 Read하면 아래가 나옵니다..
Unable to enter programming mode.
Please verify device selection, interface settings, target power and connections to the target device.
Unable to enter programming mode.
이유가??
관리자 답변
안녕하세요 고객님
타겟보드와의 연결이 잘못되었네요.
타겟보드 전원 연결을 확인하시거나 핀연결을 확인해보세요.
감사합니다.
>
>
> 안녕하세요?
> 정상연결후 Device Information을 클릭후 Read하면 아래가 나옵니다..
>
> Unable to enter programming mode.
>
> Please verify device selection, interface settings, target power and connections to the target device.
> Unable to enter programming mode.
> 이유가??
>
|
||||
