Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 10368 | 답변완료UART 통신 테스트 | 김상용 | 2021-02-24 | 1,958 |
|
안녕하세요.
ex_Motor_VR_Speed_control_WINAVR_AVRSTUDIO4
뉴티씨 자료실에 있는 펌웨어 컴파일하여 PC 터미널로 테스트 해보았읍니다.
터미널에서 " printf("\r\n\a 현재 모터속도(50~255)\r\n");
프린트 되어야 하는데 데이터가 깨져서 나옵니다. 데이터 속도는 9600으로 맞추었읍니다.
왜 그럴까요?
//UART 통신제어실습
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#define MOTOR_PORT PORTB
#define MOTOR_PORT_DDR DDRB
#define SW_PORT PING
#define SW_PORT_DDR DDRG
#define CW 0
#define CCW 1
#define MAX 255
#define MIN 50
#define PWM2_ON (MOTOR_PORT|=0x10)
#define PWM2_OFF (MOTOR_PORT&=0xEF)
#define DIR2_CW (MOTOR_PORT|=0x20)
#define DIR2_CCW (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)
volatile unsigned char temp=60, input;
// ADC initialize
// Conversion time: 75uS
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ADCSRA = 0xC6;
}
// 입력으로 들어오는 채널의 ADC를 스타트 시킨다.
void startConvertion(unsigned char ch)
{
ADCSRA = ADCSRA & 0x3f;
ADMUX = 0x60 | (ch & 0x0f);
ADCSRA = ADCSRA | 0xc0;
}
// startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다.
unsigned char readConvertData(void)
{
volatile unsigned char temp;
while((ADCSRA & 0x10)==0);
ADCSRA = ADCSRA | 0x10;
temp = ADCL;
temp = ADCH;
ADCSRA = ADCSRA | 0x10;
return temp;
}
void init_UART(void)
{
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0X06;
UBRR0H=0x00;
UBRR0L=0x67;
}
int SerialPutChar(char ch, FILE *fp)
{
while(((UCSR0A>>UDRE0)&0x01)==0);
UDR0 = ch;
return 0;
}
int SerialGetChar(FILE *fp)
{
while((UCSR0A & 0x80)==0);
return UDR0;
}
void Initialize_Timer(void)
{
TCCR0=0x00;
TCCR0=(0<<CS02)|(0<<CS01)|(1<<CS00)|(1<<WGM00)|(1<<WGM01)|(1<<COM01);
}
void Initialize_Motor(void)
{
MOTOR_PORT_DDR=0xff;
MOTOR_PORT=0x00;
}
void motor_init(void){
ENABLE2_ON;
PWM2_ON;
BREAK2_OFF;
DIR2_CW;
}
void Direction_Control(void){
input = (SW_PORT&0x0c)>>2;
if(input == 0x01){
DIR2_CW;
}
if(input == 0x02){
DIR2_CCW;
}
}
void Status_to_UART(void){
startConvertion(1); // VARIABLE RESISTOR Converting
temp = readConvertData();
printf("\r\n\a 현재 모터속도(50~255)\r\n");
if(temp >= MAX) printf("Now MAX speed ");
if(temp <= MIN) {
printf(" Now MIN speed ");
temp = MIN;
}
printf(" Motor Speed : %d\n\r",temp);
_delay_ms(100);
}
int main(void)
{
SREG = 0x00;
UCSR0C = 0x06; // 8 bit, 비동기 통신, parity none, stop bit 0
UBRR0L = 0x67; // 16000000/(9600*16) -1; //set baud rate lo 9,600bps
UBRR0H = 0; // set baud rate hi
UCSR0B = 0x18; // RX enable, TX enable
SREG = 0x80; // Global interrupt enable
init_UART(); // UART 0 초기화
Initialize_Timer();
Initialize_Motor();
adc_init();
motor_init();
SW_PORT_DDR = 0x00;
fdevopen(SerialPutChar,SerialGetChar);
printf("\r\n\a모터속도 Encoder테스트 \r\n");
while(1){
Status_to_UART();
OCR0=temp; // Speed Control
Direction_Control();
}
while(0){
//scanf("%s", str);
//SerialPutChar(ch);
//SerialGetChar( );
//printf("Input:%s",str);
}
return 0;
}
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
해당 코드 확인 및 컴파일 결과, 정상 출력 되는 것을 확인하였습니다.
고객님이 사용하시는 터미널 프로그램의 문제인 것 같습니다.
다시 한번 설정을 확인하여 주시고, 혹시 한글출력이 안되는 프로그램인지 확인하여 주십시오.
저희가 사용한 터미널 프로그램은 hercules 3.2.8입니다.
감사합니다.
>
>
> 안녕하세요.
>
> ex_Motor_VR_Speed_control_WINAVR_AVRSTUDIO4
>
> 뉴티씨 자료실에 있는 펌웨어 컴파일하여 PC 터미널로 테스트 해보았읍니다.
> 터미널에서 " printf("\r\n\a 현재 모터속도(50~255)\r\n");
> 프린트 되어야 하는데 데이터가 깨져서 나옵니다. 데이터 속도는 9600으로 맞추었읍니다.
> 왜 그럴까요?
>
> //UART 통신제어실습
>
> #include <avr/io.h>
> #include <util/delay.h>
> #include <stdio.h>
>
> #define MOTOR_PORT PORTB
> #define MOTOR_PORT_DDR DDRB
>
> #define SW_PORT PING
> #define SW_PORT_DDR DDRG
>
>
> #define CW 0
> #define CCW 1
>
> #define MAX 255
> #define MIN 50
>
> #define PWM2_ON (MOTOR_PORT|=0x10)
> #define PWM2_OFF (MOTOR_PORT&=0xEF)
> #define DIR2_CW (MOTOR_PORT|=0x20)
> #define DIR2_CCW (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)
>
> volatile unsigned char temp=60, input;
>
>
> // ADC initialize
> // Conversion time: 75uS
> void adc_init(void)
> {
> ADCSRA = 0x00; //disable adc
> ADMUX = 0x00; //select adc input 0
> ADCSRA = 0xC6;
> }
>
> // 입력으로 들어오는 채널의 ADC를 스타트 시킨다.
> void startConvertion(unsigned char ch)
> {
> ADCSRA = ADCSRA & 0x3f;
> ADMUX = 0x60 | (ch & 0x0f);
> ADCSRA = ADCSRA | 0xc0;
> }
>
> // startConvertion() 후에 수행되며 컨터팅 된 값을 리턴한다.
> unsigned char readConvertData(void)
> {
> volatile unsigned char temp;
> while((ADCSRA & 0x10)==0);
> ADCSRA = ADCSRA | 0x10;
> temp = ADCL;
> temp = ADCH;
> ADCSRA = ADCSRA | 0x10;
> return temp;
> }
>
> void init_UART(void)
> {
> UCSR0A=0x00;
> UCSR0B=0x18;
> UCSR0C=0X06;
> UBRR0H=0x00;
> UBRR0L=0x67;
> }
>
> int SerialPutChar(char ch, FILE *fp)
> {
> while(((UCSR0A>>UDRE0)&0x01)==0);
> UDR0 = ch;
> return 0;
> }
>
> int SerialGetChar(FILE *fp)
> {
> while((UCSR0A & 0x80)==0);
> return UDR0;
> }
>
> void Initialize_Timer(void)
> {
> TCCR0=0x00;
> TCCR0=(0<<CS02)|(0<<CS01)|(1<<CS00)|(1<<WGM00)|(1<<WGM01)|(1<<COM01);
> }
>
> void Initialize_Motor(void)
> {
> MOTOR_PORT_DDR=0xff;
> MOTOR_PORT=0x00;
> }
>
> void motor_init(void){
> ENABLE2_ON;
> PWM2_ON;
> BREAK2_OFF;
> DIR2_CW;
> }
>
>
> void Direction_Control(void){
> input = (SW_PORT&0x0c)>>2;
> if(input == 0x01){
> DIR2_CW;
> }
> if(input == 0x02){
> DIR2_CCW;
> }
> }
>
> void Status_to_UART(void){
> startConvertion(1); // VARIABLE RESISTOR Converting
> temp = readConvertData();
>
> printf("\r\n\a 현재 모터속도(50~255)\r\n");
> if(temp >= MAX) printf("Now MAX speed ");
> if(temp <= MIN) {
> printf(" Now MIN speed ");
> temp = MIN;
> }
>
> printf(" Motor Speed : %d\n\r",temp);
> _delay_ms(100);
> }
>
>
>
> int main(void)
> {
> SREG = 0x00;
> UCSR0C = 0x06; // 8 bit, 비동기 통신, parity none, stop bit 0
> UBRR0L = 0x67; // 16000000/(9600*16) -1; //set baud rate lo 9,600bps
> UBRR0H = 0; // set baud rate hi
> UCSR0B = 0x18; // RX enable, TX enable
> SREG = 0x80; // Global interrupt enable
>
>
> init_UART(); // UART 0 초기화
> Initialize_Timer();
> Initialize_Motor();
> adc_init();
> motor_init();
> SW_PORT_DDR = 0x00;
> fdevopen(SerialPutChar,SerialGetChar);
> printf("\r\n\a모터속도 Encoder테스트 \r\n");
>
> while(1){
> Status_to_UART();
> OCR0=temp; // Speed Control
> Direction_Control();
> }
>
> while(0){
> //scanf("%s", str);
> //SerialPutChar(ch);
> //SerialGetChar( );
> //printf("Input:%s",str);
> }
> return 0;
> }
>
|
||||
| 10367 | 답변완료ATmaga16 프로그램 다운로딩 | 김재관 | 2021-02-22 | 1,918 |
|
AD-USBISP V7.0 을 구입하여 codevision으로 ATmaga 16 Target 보드에 기존의 프로그램한 것을
다운로딩하는데 AD-USBISP V7.0의 LED는 정상적으로 동작하는거 같은데 다운로드하여 Target 보드를
동작시키면 아무런 반응이 나오지 않아서 문의 드립니다.
(참고로 HEX 파일을 다운로드 하고 있습니다.)
사용설명서에는 ATmaga128 밖에 나와 있지 않아서..
어떻게 해야 될지 방법을 좀 가르쳐 주시면 감사하겠습니다.
수고하십시요.
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
codevision의 경우, 사용설명서와 같이 셋팅하고,
Chip Programmer 에서 Chip을 ATmega16으로 설정해 주시면 됩니다.
그래도 동작이 안되신 다면, 회로 구성과 퓨즈비트 설정을 확인해 주시길 바랍니다.
감사합니다.
>
>
> AD-USBISP V7.0 을 구입하여 codevision으로 ATmaga 16 Target 보드에 기존의 프로그램한 것을
> 다운로딩하는데 AD-USBISP V7.0의 LED는 정상적으로 동작하는거 같은데 다운로드하여 Target 보드를
> 동작시키면 아무런 반응이 나오지 않아서 문의 드립니다.
> (참고로 HEX 파일을 다운로드 하고 있습니다.)
> 사용설명서에는 ATmaga128 밖에 나와 있지 않아서..
> 어떻게 해야 될지 방법을 좀 가르쳐 주시면 감사하겠습니다.
> 수고하십시요.
>
|
||||
| 10366 | 답변완료ADC 입력을 통해 DC 모터 속도제어 문의 | 김상용 | 2021-02-16 | 2,140 |
|
안녕하세요.
가변저항을 ADC0~3에 연결하고 타이머를 설정하여(방법?) PROT로 PWM을 출력하려고 합니다.
열심히 데이터 시트 보고 셋팅하는데 정말 잘안되는데 도움 부탁드립니다.
1. 구현 기능
- 가변저항 4개를 ADC0,1,2,3 에 연결한다.
- 각 ADC를 이용 PWM을 발생 시킨다.
2. 아래 소스 동작
- 타이머 설정 : TCCR1A = 0xA2; // FAST PWM-96
TCCR1B = 0x1A; // 8분주=0.5usec
- 출력 포트 : ADMUX = 0xC0; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR1A = val_adc0;//PB6
- 정상적으로 PWM 가변 출력됨
3. 질문
- 여러개 GPIO로 ADC 입력받아 PWM으로 출력하고자 하는데 안됨(사실 잘모름)
- 타이머 설정 : TCCR3A = 0xA2; // FAST PWM-96
TCCR3B = 0x1A; // 8분주=0.5usec
- 출력 포트 : ADMUX = 0xC1; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR3A = val_adc0;//PE3
- PE3에 ADC 입력에 따른 PWM 출력이 나와야 하는데 안나옴
- ADMUX 0xC0, 0xC1, 0xC2, 0xC3 설정후 각각의 ADC 값에 따라 PWM을 출력시키려고 하는데
어떻게 해야 할지 데이터시트를 참조 해도 잘 모르겠어요.
아래 소스는 제가 직접 만든것인데 오직 ADC0 밖에 안되는데 가변저항을 ADC0~3(PF0~3) 연결하여
PWM을 PB, PE 포트로 출력하고 싶은데 정말 열심히 해도 개념이 없어 모르겠네요..
질문
타이머 하나당 비교 레지터를 각각 사용해야 하나요?
TCCR1A 설정 후 ICR1 설정
TCCR3A 설정 후 ICR3 설정
해야 하는지 도와주세요. 일주일째 해매고 있어요...
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int val_adc0 = 0,val_adc1= 0,val_adc2 = 0,val_adc3= 0;
int i;
unsigned int HH=0, LL=0;
int i;
int ad_val=0;
int i;
void PWM_output(void){
OCR1B = 0;
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xff;
PORTB = 0x00;
DDRB = 0xff;
PORTC = 0x00; //m103 output only
DDRC = 0xff;
PORTD = 0x00;
DDRD = 0xff;
PORTE = 0x00;
DDRE = 0xff;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x0f;
DDRG = 0x03;
}
int main(){
port_init();
/* Timer/Counter ControlRegister ? TCCR0
7 6 5 4 3 2 1 0
FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
0 1 1 1 1 1 1 1
TCCR0 = 0x6F; // 1024 Prescale, Fast PWM 모드 셋팅, COM핀은 10으로 셋팅
OCR0 = 200;
WGM00 WGM01 Timer/CounterMode of Operation Update of OCR0 at
0 0 Normal
0 1 PWM, Phase Correct
1 0 CTC
1 1 Fast PWM
COM01 COM00 Description
0 0 Normal port operation, OC0 disconnected.
0 1 Reserved
1 0 Clear OC0 on compare match, set OC0 at BOTTOM,(non-inverting mode)
1 1 Set OC0 on comp
CS02 CS01 CS00 Description
0 0 0 No clock source (Timer/Counter stopped)
001 clkT0S/(No prescaling)
010 clkT0S/8 (From prescaler)
011 clkT0S/32 (From prescaler)
100 clkT0S/64 (From prescaler)
101 clkT0S/128 (From prescaler)
1 1 0 clkT0S/256 (From prescaler)
1 1 1 clkT0S/1024 (From prescaler)
Timer/Counter1 Control Register A - TCCR1A 1010 0010
7 6 5 4 3 2 1 0
COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10
1 0 1 0 0 0 1 0
Timer/Counter1 Control Register B - TCCR1B 0001 1010
7 6 5 4 3 2 1 0
ICNC1 ICES1 ? WGM13 WGM12 CS12 CS11 CS10
Timer/Counter3 Control Register A - TCCR3A
7 6 5 4 3 2 1 0
COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30
Timer/Counter3 Control Register B - TCCR3B
7 6 5 4 3 2 1 0
ICNC3 ICES3 ? WGM33 WGM32 CS32 CS31 CS30
Timer/Counter Control Register ? TCCR2
7 6 5 4 3 2 1 0
FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20
*/
TCCR1A = 0xA2; // FAST PWM-96
TCCR1B = 0x1A; // 8분주=0.5usec
TCCR3A = 0xA2; // FAST PWM-96
TCCR3B = 0x1A; // 8분주=0.5usec
ADCSRA=0xE7; // 프리런닝 ADC0
ICR1 = 1000; // 1/1.6 * 8 * 40000 =20ms
OCR1B = 0; // 1ms
/*
ADMUX ACD OUTPUT SELECTION
=================================================
MUX4:0 ADC INPUT PORT PIN
1100 0000 ADC0 PF0 #61
1100 0001 ADC1 PF1 #60
1100 0010 ADC2 PF2 #59
=================================================
ADC CONTROL STATUS REG ADCSRA
=================================================================================================================
7 6 5 4 3 2 1 0
ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPSO
ADC Enable--ADC START--ADC FREE RUN-- Interrupt Flag--Interrupt Enable--ADC Prescaler select-----
1 enable 1 start 1 running 1 1 enable 000: 2, 001:2, 010:4, 011:8
100:16, 101:32, 110:64, 111:128
=================================================================================================================
ADC DATA Reg. ADLAR=0 = 0:
===========================================================================
9 8
ADC9 ADC8
7 6 5 4 3 2 1 0 ADCH
ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADCL
===========================================================================
ADMUX = 0xC0; // ADC INPUT PF0 설정
ADCSRA |= 0xfe;
LL = ADCL & 0xFF;
HH = ADCH & 0x03;
va0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR0 = va0; // 포텐셜메터로 부터 아날로그 입력이 타이머 TCCR0 와 비교하여 PB4 포트로 PWM이 출력된다.
OCRO TCCRO COMPAR REG
===========================================================
8BIT COMPARE REG. ADC OUT PORT PIN
OCR0 OC0 PB4 #14
OCR1 OC2 PB7 #17
===========================================================
ADMUX = 0xC1; //ADC INPUT PF0 설정
ADCSRA |= 0xfe;
LL = ADCL & 0xFF;
HH = ADCH & 0x03;
va1 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR2 = va1; // 포텐셜메터로 부터 아날로그 입력이 타이머 TCCR2 와 비교하여 PB7 포트로 PWM이 출력된다.
*/
// OC0 PB4
// OC1A PB5
// OC1B PB6
// OC2/OC1C PB7
// OC3A PE3
// OC3B PE4
// OC3C PE5
// OCR1A = PB6, OCR1B = PB7,
while(1){
/*ADCSRA = 0xfe; // 16분주, 폴링, // ADC 인에이블 , ADSC = 1
while ((ADCSRA & 0x10) == 0); // ADIF=1(변환완료)일 때까지 기다림
ad_val = (int)ADCL+((int)ADCH << 8);
OCR1A = ad_val;
//OCR1B = ad_val;
*/
ADMUX = 0xC0; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR0 = val_adc0;//PB4
//OCR2 = val_adc0;//PB4
ADMUX = 0xC1; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR2 = val_adc1;//PB7
ADMUX = 0xC2; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR1A = val_adc2;//PB6
ADMUX = 0xC3; //ADC0
ADCSRA |= 0xfe;
LL = ADCL & 0xff;
HH = ADCH & 0x03;
val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
OCR3A = val_adc3;//PE3
}
}
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
코드는 잘 짜신 것 같습니다.
다만 오타때문에 나머지 동작이 안되는 것 같습니다.
ADC를 읽어오는 것과 사용하는 변수명이 달라서, 사용이 안되고있습니다.
캡쳐 올려드렸으니 해당 변수 맞게 수정하시고 또 문제가 있다면 연락 부탁드리겠습니다.
감사합니다.
>
>
> 안녕하세요.
> 가변저항을 ADC0~3에 연결하고 타이머를 설정하여(방법?) PROT로 PWM을 출력하려고 합니다.
> 열심히 데이터 시트 보고 셋팅하는데 정말 잘안되는데 도움 부탁드립니다.
>
> 1. 구현 기능
> - 가변저항 4개를 ADC0,1,2,3 에 연결한다.
> - 각 ADC를 이용 PWM을 발생 시킨다.
> 2. 아래 소스 동작
> - 타이머 설정 : TCCR1A = 0xA2; // FAST PWM-96
> TCCR1B = 0x1A; // 8분주=0.5usec
> - 출력 포트 : ADMUX = 0xC0; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
> OCR1A = val_adc0;//PB6
> - 정상적으로 PWM 가변 출력됨
> 3. 질문
> - 여러개 GPIO로 ADC 입력받아 PWM으로 출력하고자 하는데 안됨(사실 잘모름)
>
> - 타이머 설정 : TCCR3A = 0xA2; // FAST PWM-96
> TCCR3B = 0x1A; // 8분주=0.5usec
> - 출력 포트 : ADMUX = 0xC1; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
> OCR3A = val_adc0;//PE3
> - PE3에 ADC 입력에 따른 PWM 출력이 나와야 하는데 안나옴
> - ADMUX 0xC0, 0xC1, 0xC2, 0xC3 설정후 각각의 ADC 값에 따라 PWM을 출력시키려고 하는데
> 어떻게 해야 할지 데이터시트를 참조 해도 잘 모르겠어요.
> 아래 소스는 제가 직접 만든것인데 오직 ADC0 밖에 안되는데 가변저항을 ADC0~3(PF0~3) 연결하여
> PWM을 PB, PE 포트로 출력하고 싶은데 정말 열심히 해도 개념이 없어 모르겠네요..
>
> 질문
> 타이머 하나당 비교 레지터를 각각 사용해야 하나요?
> TCCR1A 설정 후 ICR1 설정
> TCCR3A 설정 후 ICR3 설정
> 해야 하는지 도와주세요. 일주일째 해매고 있어요...
>
>
>
> #include <avr/io.h>
> #include <util/delay.h>
> #include <stdio.h>
> #include <avr/interrupt.h>
>
>
>
> #include <avr/io.h>
>
> #include <util/delay.h>
>
> #include <avr/interrupt.h>
>
> int val_adc0 = 0,val_adc1= 0,val_adc2 = 0,val_adc3= 0;
> int i;
> unsigned int HH=0, LL=0;
> int i;
>
>
>
>
> int ad_val=0;
>
> int i;
>
> void PWM_output(void){
>
> OCR1B = 0;
>
> }
>
> void port_init(void)
> {
> PORTA = 0x00;
> DDRA = 0xff;
> PORTB = 0x00;
> DDRB = 0xff;
> PORTC = 0x00; //m103 output only
> DDRC = 0xff;
> PORTD = 0x00;
> DDRD = 0xff;
> PORTE = 0x00;
> DDRE = 0xff;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x0f;
> DDRG = 0x03;
> }
>
>
>
> int main(){
>
> port_init();
>
> /* Timer/Counter ControlRegister ? TCCR0
>
> 7 6 5 4 3 2 1 0
>
> FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
> 0 1 1 1 1 1 1 1
>
>
> TCCR0 = 0x6F; // 1024 Prescale, Fast PWM 모드 셋팅, COM핀은 10으로 셋팅
>
> OCR0 = 200;
>
>
> WGM00 WGM01 Timer/CounterMode of Operation Update of OCR0 at
> 0 0 Normal
> 0 1 PWM, Phase Correct
> 1 0 CTC
> 1 1 Fast PWM
>
> COM01 COM00 Description
> 0 0 Normal port operation, OC0 disconnected.
> 0 1 Reserved
> 1 0 Clear OC0 on compare match, set OC0 at BOTTOM,(non-inverting mode)
> 1 1 Set OC0 on comp
>
>
> CS02 CS01 CS00 Description
> 0 0 0 No clock source (Timer/Counter stopped)
> 001 clkT0S/(No prescaling)
> 010 clkT0S/8 (From prescaler)
> 011 clkT0S/32 (From prescaler)
> 100 clkT0S/64 (From prescaler)
> 101 clkT0S/128 (From prescaler)
> 1 1 0 clkT0S/256 (From prescaler)
> 1 1 1 clkT0S/1024 (From prescaler)
>
>
>
> Timer/Counter1 Control Register A - TCCR1A 1010 0010
>
> 7 6 5 4 3 2 1 0
> COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10
> 1 0 1 0 0 0 1 0
> Timer/Counter1 Control Register B - TCCR1B 0001 1010
>
> 7 6 5 4 3 2 1 0
> ICNC1 ICES1 ? WGM13 WGM12 CS12 CS11 CS10
>
>
> Timer/Counter3 Control Register A - TCCR3A
> 7 6 5 4 3 2 1 0
> COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30
>
>
> Timer/Counter3 Control Register B - TCCR3B
> 7 6 5 4 3 2 1 0
> ICNC3 ICES3 ? WGM33 WGM32 CS32 CS31 CS30
>
> Timer/Counter Control Register ? TCCR2
> 7 6 5 4 3 2 1 0
> FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20
>
>
>
>
> */
>
> TCCR1A = 0xA2; // FAST PWM-96
> TCCR1B = 0x1A; // 8분주=0.5usec
>
> TCCR3A = 0xA2; // FAST PWM-96
> TCCR3B = 0x1A; // 8분주=0.5usec
>
>
> ADCSRA=0xE7; // 프리런닝 ADC0
> ICR1 = 1000; // 1/1.6 * 8 * 40000 =20ms
> OCR1B = 0; // 1ms
>
>
>
>
>
> /*
>
> ADMUX ACD OUTPUT SELECTION
> =================================================
> MUX4:0 ADC INPUT PORT PIN
>
> 1100 0000 ADC0 PF0 #61
> 1100 0001 ADC1 PF1 #60
> 1100 0010 ADC2 PF2 #59
> =================================================
>
>
>
>
> ADC CONTROL STATUS REG ADCSRA
> =================================================================================================================
> 7 6 5 4 3 2 1 0
> ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPSO
>
> ADC Enable--ADC START--ADC FREE RUN-- Interrupt Flag--Interrupt Enable--ADC Prescaler select-----
>
> 1 enable 1 start 1 running 1 1 enable 000: 2, 001:2, 010:4, 011:8
> 100:16, 101:32, 110:64, 111:128
> =================================================================================================================
>
> ADC DATA Reg. ADLAR=0 = 0:
> ===========================================================================
> 9 8
> ADC9 ADC8
> 7 6 5 4 3 2 1 0 ADCH
> ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADC7 ADCL
> ===========================================================================
>
>
> ADMUX = 0xC0; // ADC INPUT PF0 설정
> ADCSRA |= 0xfe;
> LL = ADCL & 0xFF;
> HH = ADCH & 0x03;
> va0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
> OCR0 = va0; // 포텐셜메터로 부터 아날로그 입력이 타이머 TCCR0 와 비교하여 PB4 포트로 PWM이 출력된다.
>
>
> OCRO TCCRO COMPAR REG
> ===========================================================
> 8BIT COMPARE REG. ADC OUT PORT PIN
>
> OCR0 OC0 PB4 #14
> OCR1 OC2 PB7 #17
> ===========================================================
>
>
>
>
> ADMUX = 0xC1; //ADC INPUT PF0 설정
> ADCSRA |= 0xfe;
> LL = ADCL & 0xFF;
> HH = ADCH & 0x03;
> va1 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
> OCR2 = va1; // 포텐셜메터로 부터 아날로그 입력이 타이머 TCCR2 와 비교하여 PB7 포트로 PWM이 출력된다.
>
>
>
> */
> // OC0 PB4
> // OC1A PB5
> // OC1B PB6
> // OC2/OC1C PB7
> // OC3A PE3
> // OC3B PE4
> // OC3C PE5
>
> // OCR1A = PB6, OCR1B = PB7,
>
>
> while(1){
>
> /*ADCSRA = 0xfe; // 16분주, 폴링, // ADC 인에이블 , ADSC = 1
>
> while ((ADCSRA & 0x10) == 0); // ADIF=1(변환완료)일 때까지 기다림
>
> ad_val = (int)ADCL+((int)ADCH << 8);
>
> OCR1A = ad_val;
>
> //OCR1B = ad_val;
> */
>
> ADMUX = 0xC0; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
>
> OCR0 = val_adc0;//PB4
> //OCR2 = val_adc0;//PB4
>
> ADMUX = 0xC1; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
>
> OCR2 = val_adc1;//PB7
>
>
> ADMUX = 0xC2; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
>
> OCR1A = val_adc2;//PB6
>
>
> ADMUX = 0xC3; //ADC0
> ADCSRA |= 0xfe;
> LL = ADCL & 0xff;
> HH = ADCH & 0x03;
> val_adc0 = (int)LL + ((int)HH << 8); // A/D변환값 읽기
>
> OCR3A = val_adc3;//PE3
>
>
>
>
>
> }
>
> }
>
|
||||
| 10365 | 답변완료제품 문의 | 김동호 | 2021-02-01 | 1,920 |
|
제이에스테크 회사의 김동호 라고 합니다.
아래와 같이 제품 문의 드립니다.
-진동센서 모듈 (가속도센서)
-용도
하천의 바닥(지면)아래 진동센서를 매립하고 하천의 수위에 따라
진동의 변화가 있는지를 관측하기 위한 저주파용 진동센서
-입력(전원)은 3.3V~12V, 출력은 Analog DC전압이든, UART와 같이 Digital형태이든
상관없습니다.
-이에 적절한 귀사의 제품(모듈) 선정을 요청드립니다.
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
본사의 3축 가속도 센서 모듈 AM-3AXIS V03 제품을 추천드립니다.
AM-3AXIS V03제품은 LIS344ALH 3축 아날로그 가속도센서 칩과 주변회로를 구성하여 3.3V 전원만 인가하면 추가적인 회로 없이 동작시킬 수 있도록 하는 제품입니다.
3.3VDC전원을 사용하고, X-out / Y-out / Z-out 3개의 핀에 전압 값이 출력되어 해당 값을 ADC하여 사용합니다.
동작시 700uA의 전류를 소모하고 Sleep모드(Power Down)사용 시 약 3uA전류 소모량을 보여줍니다.
Full scale핀에 제공하는 논리신호에 따라 가속도센서의 Full-Scale범위를 지정할 수 있습니다.
±2g : 660 [mV/g]
±6g : 220 [mV/g]
감사합니다.
>
>
> 제이에스테크 회사의 김동호 라고 합니다.
>
> 아래와 같이 제품 문의 드립니다.
> -진동센서 모듈 (가속도센서)
> -용도
> 하천의 바닥(지면)아래 진동센서를 매립하고 하천의 수위에 따라
> 진동의 변화가 있는지를 관측하기 위한 저주파용 진동센서
> -입력(전원)은 3.3V~12V, 출력은 Analog DC전압이든, UART와 같이 Digital형태이든
> 상관없습니다.
> -이에 적절한 귀사의 제품(모듈) 선정을 요청드립니다.
>
|
||||
| 10364 | 답변완료uart 연결 재질문드립니다!! | 박재정 | 2021-01-27 | 1,960 |
|
안녕하세요!
먼저 늦은시간에도 답변주심에 감사드립니다.
답글다는 법을 못찾아서 새로 올렸습니다. 번잡하게해드려 죄송합니다.
ttl level맞춰주는거라면 max232와 같은 칩을 말씀하시는건가요?
먼저 보드 자체에는 그런 칩이 없는것 같습니다.
systembase의 rs232 to usb 사용해서 보드의 txd, rxd를 3pin rs232케이블에 엇갈려 연결해주고 systembase 제품에 rs232포트를 연결해주었습니다.
그러고 나서 연결을 시도해보았는데 잘 되지않아서 뉴티씨 사이트의 atmega128 uart예제를 그대로 돌려보았는데도 잘 동작을 하지 않는것 같습니다.
첨부파일에 연결 사진 첨부해봅니다 ㅠㅠ
보드의 txd,rxd,gnd를 3pin에 연결해주고 systembase 232 to usb 를 통해 컴퓨터로 연결된 모습입니다
관리자 답변
안녕하세요 고객님,
저희 뉴티씨제품을 이용해주셔서 감사합니다.
Q. ttl level맞춰주는거라면 max232와 같은 칩을 말씀하시는건가요?
A. 네 맞습니다. 전압레벨이 다를경우 High / Low 인식 전압범위가 다르기 때문에 인식이 안될수있습니다.
예로, 저희 AM-128PRO 모듈같은 경우 max232칩을 탑재하여 RS-232통신도 지원되도록 하는 모듈이 있습니다.
그리고 RS232통신 시 RXD / TXD / GND 핀만 연결되기 때문에 전원은 따로 투입해주셔야 동작합니다.
추가적인 사항에 대해서는 정말 죄송하지만 해당 AVR모듈 및 rs232 to usb 통신모듈 제조사에 문의해보시기 바랍니다.
좋은하루되시기바랍니다.
감사합니다.
>
>
> 안녕하세요!
> 먼저 늦은시간에도 답변주심에 감사드립니다.
> 답글다는 법을 못찾아서 새로 올렸습니다. 번잡하게해드려 죄송합니다.
>
> ttl level맞춰주는거라면 max232와 같은 칩을 말씀하시는건가요?
> 먼저 보드 자체에는 그런 칩이 없는것 같습니다.
> systembase의 rs232 to usb 사용해서 보드의 txd, rxd를 3pin rs232케이블에 엇갈려 연결해주고 systembase 제품에 rs232포트를 연결해주었습니다.
> 그러고 나서 연결을 시도해보았는데 잘 되지않아서 뉴티씨 사이트의 atmega128 uart예제를 그대로 돌려보았는데도 잘 동작을 하지 않는것 같습니다.
>
> 첨부파일에 연결 사진 첨부해봅니다 ㅠㅠ
> 보드의 txd,rxd,gnd를 3pin에 연결해주고 systembase 232 to usb 를 통해 컴퓨터로 연결된 모습입니다
>
|
||||
| 10363 | 답변완료안녕하세요 uart 연결에대해서 질문드립니다!! | 박재정 | 2021-01-26 | 1,952 |
|
혼자 해결해보려했지만 도저히 안될것 같아서 질문올립니다 ㅠㅠ
ATMEGA128보드
USBISP6.0
을 사용하고 있습니다.
usart1을 사용해서 128 회로도를 보면 pd2,3이 각각 rxd1, txd1이라서 이 핀들을, rs-232 to usb 모듈에 rx,tx에 각각 맞물리고 gnd를 연결해 주었습니다.
그러나 터미널에 아무것도 출력되지 않았고 소스코드에서 문제를 찾지 못하겠어서 연결을 잘못 이해하고 잘못 연결한 것 같아 질문 올립니다 ㅠㅠ
*혹시 usbisp 장비로도 uart를 연결할 수 있을까요?
첨부파일에는 사용한 보드 회로도를 올립니다..
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
우선 RS-232는 12V전압을 사용하는 통신을 말하기 때문에,
가지고 계신 RS-232 to USB모듈이 5V TTL레벨을 지원하는지 확인부탁드립니다.
PD2(RXD1)을 rs-232 to usb모듈의 TXD에 연결하시고,
PD3(TXD1)을 rs-232 to usb모듈의 RXD에 연결해보시기바랍니다.
rs232 to usb상품에 어떻게 설명되어 있는지 따라서 조금 다를 수 있지만,
RXD(수신부)와 TXD(송신부)를 연결해주어야 통신이 가능합니다.
또한 보드레이트 설정 문제일 수도 있으니, 다른 보드레이트로 터미널을 Open해보신 뒤 깨진데이터라도
출력되는지 확인해 보시기바랍니다.
그리고, AD-USBISP V6.0제품에는 ISP 인터페이스만 출력되어 있고,
UART핀은 따로 제공해드리고 있지 않습니다.
이점 양해 부탁드립니다.
좋은하루 되시기 바랍니다.
감사합니다.
>
>
> 혼자 해결해보려했지만 도저히 안될것 같아서 질문올립니다 ㅠㅠ
>
> ATMEGA128보드
> USBISP6.0
> 을 사용하고 있습니다.
>
> usart1을 사용해서 128 회로도를 보면 pd2,3이 각각 rxd1, txd1이라서 이 핀들을, rs-232 to usb 모듈에 rx,tx에 각각 맞물리고 gnd를 연결해 주었습니다.
>
> 그러나 터미널에 아무것도 출력되지 않았고 소스코드에서 문제를 찾지 못하겠어서 연결을 잘못 이해하고 잘못 연결한 것 같아 질문 올립니다 ㅠㅠ
> *혹시 usbisp 장비로도 uart를 연결할 수 있을까요?
>
> 첨부파일에는 사용한 보드 회로도를 올립니다..
>
|
||||
| 10362 | 답변완료SE-SM9K 스텝모터 사양 문의 | 박신무 | 2021-01-26 | 2,066 |
|
안녕하세요
SE-SM9K 스텝모터 사양 중 토크 관련해서 문의하고자 합니다
1. 외부 판매 사이트에 공개된 PDF(파일첨부 참고) 등에는 홀딩토크가 9kg.cm로 나타나있습니다
1.1 SE-SM9K 스텝모터와 AM-CS2P 드라이버를 같이 사용할 때
가변저항을 최대로 조절하고, 링크#1처럼 저항을 0.5옴으로 변경하면 나오는 성능인가요?
1.2 이때 필요한 외부 전원장치는 전압 12V에 전류를 최소 몇A 이상의 출력을 가져야 하나요?
2. SE-SM9K 홀딩 토크 외에도 디턴트 토크(edetent torque)나 모터 회전시에 발생하는 토크리플(torque ripple) 사양이 어떻게 되나요?
위 질문 답변 부탁드립니다
감사합니다.
추가)
모터 드라이버에는 12V 전압이 인가되어야 하는데, 막상 스탭모터 스펙에는 2.3V라 되있습니다.
그렇다면 모터 드라이버가 인가받은 12v를 2.3v로 강하시켜 모터에 공급하는 것인가요?
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
1.1 모터는 보통 성능 표에 표시된 것보다 많은 전류를 Drive할 수 있어야 최대 성능이 나옵니다.
AM-CS2P의 경우 저항을 0.5옴으로 교체하고 방열판을 달아도 최대 전류는 3A이니,
표시된 최대성능에는 못 미칠 수 있습니다.
1.2 AM-CS2P가 저항교체 및 충분히 큰 방열판 추가시 최대 3A까지 견딜 수 있으므로,
외부전원 장치에서 3A이상을 공급해 주어도 의미가 없습니다.
이경우, 모터드라이버가 탈수도 있습니다.
권장하는 전원은 100W 24V, 즉 24V 4.1A이상을 권장합니다.
4.1A인 이유는, 전원장치는 성능의 60~70%만 사용하는것이 이상적이기 떄문입니다.
2. 모터의 회전RPM이나 전류공급 상황, 모터에 가해진 부하 등에 따라, 많이 다를 수 있음으로,
실험하면서 해보셔야 할 것 같습니다.
추가질문) 12V를 내부에서 24V로 만들어 공급합니다. 이 링크에 더욱 자세히 설명되어 있습니다.
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m53&wr_id=24
좋은하루 되시기 바랍니다.
감사합니다.
>
>
> 안녕하세요
>
> SE-SM9K 스텝모터 사양 중 토크 관련해서 문의하고자 합니다
>
>
> 1. 외부 판매 사이트에 공개된 PDF(파일첨부 참고) 등에는 홀딩토크가 9kg.cm로 나타나있습니다
>
> 1.1 SE-SM9K 스텝모터와 AM-CS2P 드라이버를 같이 사용할 때
> 가변저항을 최대로 조절하고, 링크#1처럼 저항을 0.5옴으로 변경하면 나오는 성능인가요?
>
> 1.2 이때 필요한 외부 전원장치는 전압 12V에 전류를 최소 몇A 이상의 출력을 가져야 하나요?
>
> 2. SE-SM9K 홀딩 토크 외에도 디턴트 토크(edetent torque)나 모터 회전시에 발생하는 토크리플(torque ripple) 사양이 어떻게 되나요?
>
>
> 위 질문 답변 부탁드립니다
>
> 감사합니다.
>
> 추가)
> 모터 드라이버에는 12V 전압이 인가되어야 하는데, 막상 스탭모터 스펙에는 2.3V라 되있습니다.
>
> 그렇다면 모터 드라이버가 인가받은 12v를 2.3v로 강하시켜 모터에 공급하는 것인가요?
>
|
||||
| 10361 | 답변완료AVR용 USBISP 재라이팅 에러 | 조석래 | 2021-01-11 | 2,080 |
|
에러가 생겨 애를 먹고 있습니다.
최초 1회 라이팅은 이상 없이 되고 재라이팅만 하면
STK500 error leaving...mode 가 자꾸 나타납니다.
예전에 되는것도 다시 재라이팅을 하면 계속 같은 현상이 반복 됩니다.
결선이상 없고 pc변경해서 해 보았고..
usbisp 다른 제품으로도 해 보았는데...
도대체...
급 답변 좀 부탁드립니다.
수고하세요
관리자 답변
안녕하세요 고객님, 저희 뉴티씨 제품을 이용해주셔서 감사합니다.
A/S 진행하시는 것으로 전달 받았습니다.
제품받은 뒤, 문제 확인되면 연락 드리겠습니다.
감사합니다.
>
>
> 에러가 생겨 애를 먹고 있습니다.
>
> 최초 1회 라이팅은 이상 없이 되고 재라이팅만 하면
>
> STK500 error leaving...mode 가 자꾸 나타납니다.
>
> 예전에 되는것도 다시 재라이팅을 하면 계속 같은 현상이 반복 됩니다.
>
> 결선이상 없고 pc변경해서 해 보았고..
>
> usbisp 다른 제품으로도 해 보았는데...
>
> 도대체...
>
> 급 답변 좀 부탁드립니다.
>
> 수고하세요
>
|
||||
| 10360 | 답변완료AD_JTAG 호환이 알고 싶습니다.(이클립스 ) | 손용호 | 2020-12-21 | 2,189 |
|
얼마전에 (AD_JTAG 호환이 알고 싶습니다.)라는 제목으로 글을 올린 AD_JTAG 구매자 입니다.
ISP는 세팅하여 테스트 해본 결과 잘되지만
링크를 올려주신 부분대로 설정 해보았으나 잘 되지않아 다시 글을 올립니다.
링크에 설명 되어 있는 부분이 시간이 많이 지난 자료라 그런지 호환이나 설정창을 잘 찾지못한거 같습니다.
혹시 바쁘시더라도 NEWTC 개발자 분들이 테스트 설정 및 테스트를 진행 하시어 새 버전으로 올려주시면 감사
할거 같습니다. 부탁드립니다. ㅠㅠ
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
저희 엔지니어가 직접 avr-eclipse환경을 구축해보았는데,
현재 avr-eclipse 플러그인이 2011년 이후로 안나오고 있어서 최신버전 이클립스와 호환이 안되고 있다고합니다.
프로젝트를 생성할 때, 타겟마이크로컨트롤러는 ATmega16, 동작클럭은 1MHz로 고정되는 버그가 있어서
만약 환경을 구축하신다면 이클립스 버전을 다운그레이드하시고 진행하셔야 할 것 같습니다.
저희 엔지니어는 Java JDK 1.8기준 Eclipse 2020-12버전 및 Eclipse Photon버전에서 똑같은 현상을 확인했다고합니다.
고객님께서는 이보다 더 낮은 환경에서 진행하시면 되시겠습니다.
더 이상 검증이 어려운 점 양해 부탁드리며, AVR Studio 4.19에서 사용하시는 것을 추천드립니다.
추가로 Eclipse IDE for C/C++ Developers 구버전 다운로드 링크를 남겨드립니다.
https://www.eclipse.org/downloads/packages/release
감사합니다.
>
>
> 얼마전에 (AD_JTAG 호환이 알고 싶습니다.)라는 제목으로 글을 올린 AD_JTAG 구매자 입니다.
> ISP는 세팅하여 테스트 해본 결과 잘되지만
>
> 링크를 올려주신 부분대로 설정 해보았으나 잘 되지않아 다시 글을 올립니다.
> 링크에 설명 되어 있는 부분이 시간이 많이 지난 자료라 그런지 호환이나 설정창을 잘 찾지못한거 같습니다.
> 혹시 바쁘시더라도 NEWTC 개발자 분들이 테스트 설정 및 테스트를 진행 하시어 새 버전으로 올려주시면 감사
> 할거 같습니다. 부탁드립니다. ㅠㅠ
>
|
||||
| 10359 | 답변완료AD-USBISP V7.0 라이팅에러 | 웰라인시스템(박철학) | 2020-12-15 | 2,178 |
|
AD-USBISP V3.6을 사용하다가 AD-USBISP V7.0 새 제품을 구입했는데, 라이팅 도중 에러가 발생합니다.
사용환경
(1) WINDOW10 (드라이버 별도 설치 기본 인식사용)
(2) AVR STUDIO 4.19
(3) 타켓 마이컴 ATtiny24A
증상
(1) 드라이버 수동 설치할 경우 이미 설치되어 있다고 뜸.
(2) AVR STUDIO에서 문제없이 인식.
(3) 프로그램 라이팅 도중, 에러발생.
(4) 동일한 환경(케이블 포함)에서 ISP를 기존 쓰던 AD-USBISP V3.6으로 교체해서 사용해도 똑같은 문제 발생.
이상입니다.
빠른 회신 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
우선, 저희 회사 내부에 TINY24A는 가진 재고가 없어서,
TINY26A가 있어서 그것으로 보드를 만들어서 테스트 하면서, 해드리려고 합니다.
완료되면, 별도로 연락을 드리겠습니다.
혹시몰라서 말씀드리는 것인데, 고객정보에 핸드폰 정보를 정확히 업데이트 부탁드립니다.
감사합니다.
>
>
> AD-USBISP V3.6을 사용하다가 AD-USBISP V7.0 새 제품을 구입했는데, 라이팅 도중 에러가 발생합니다.
>
> 사용환경
> (1) WINDOW10 (드라이버 별도 설치 기본 인식사용)
> (2) AVR STUDIO 4.19
> (3) 타켓 마이컴 ATtiny24A
>
> 증상
> (1) 드라이버 수동 설치할 경우 이미 설치되어 있다고 뜸.
> (2) AVR STUDIO에서 문제없이 인식.
> (3) 프로그램 라이팅 도중, 에러발생.
> (4) 동일한 환경(케이블 포함)에서 ISP를 기존 쓰던 AD-USBISP V3.6으로 교체해서 사용해도 똑같은 문제 발생.
>
> 이상입니다.
> 빠른 회신 부탁드립니다.
>
|
||||
| 10358 | 답변완료AD_JTAG 호환이 알고 싶습니다. | 손용호 | 2020-12-12 | 1,984 |
|
AD-JTAG V02를 구입후에 AVR studo4 에서 구동에 성공하였습니다.
이제는 이클립스 환경에서 써볼려고 하는데 사용가능한지 여쭤보고 싶어 글을남깁니다.
사용가능하다면 방법도 알고 싶습니다. (OS는 windows 10 이며 이클립스 환경가능여부)
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
본사 질문답변게시판에 사례가 있어서, 링크를 올려드립니다.
http://newtc.co.kr/dpshop/bbs/board.php?bo_table=m52&wr_id=128592
일단 해보시고 안되시면 다시 답변올려주세요.
현재는 주말이라서 빨리 해보실 수 있도록 링크를 남겨드립니다.
감사합니다.
>
>
> AD-JTAG V02를 구입후에 AVR studo4 에서 구동에 성공하였습니다.
>
> 이제는 이클립스 환경에서 써볼려고 하는데 사용가능한지 여쭤보고 싶어 글을남깁니다.
>
> 사용가능하다면 방법도 알고 싶습니다. (OS는 windows 10 이며 이클립스 환경가능여부)
>
|
||||
| 10357 | 답변완료AM-128PRO와 AM-128RAM 차이점이 어떻게 되나요? | 오동현 | 2020-11-25 | 2,185 |
|
AM-128PRO에다가 RAM이 더 추가되었다고 이해하면 되는건가요?
제품 설명을 보면 RAM이 더 추가된 것 말고는 차이가 없어보여 확인차 질문 남깁니다.
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
네 맞습니다. 128PRO에 32KByte 크기의 SRAM이 추가된 것입니다.
(ISSI IS62C256AL)
감사합니다.
>
>
> AM-128PRO에다가 RAM이 더 추가되었다고 이해하면 되는건가요?
> 제품 설명을 보면 RAM이 더 추가된 것 말고는 차이가 없어보여 확인차 질문 남깁니다.
>
|
||||
| 10356 | 답변완료BLDC 모터 드라이버 제품을 취급하시는지요? | 박명장 | 2020-12-08 | 2,004 |
|
제품검색에서 안나와서요.
관리자 답변
안녕하세요 고객님,
저희 뉴티씨 제품을 이용해주셔서 감사합니다.
현재 판매중인 제품은 DC모터, 스테핑모터, 서보모터로,
BLDC모터 및 모터드라이버등의 제품군은 판매하고 있지 않습니다.
감사합니다.
>
>
> 제품검색에서 안나와서요.
>
|
||||
| 10355 | 답변완료USB to Serial V02 변환 보드 관련 질문드립니다. | 이미진 | 2020-11-13 | 2,431 |
|
현재 뉴티씨 사의 FPGA 개발 기트(FB-CY4E-DEV)를 이용하고 있습니다.
UART를 이용해 PC로 FPGA 보드의 데이터를 받으려 하는데 USB to Serial V02만 구매해 보드와 연결하면 구현이 가능한지 질문 드립니다.
관리자 답변
안녕하세요 고객님, 저희 뉴티씨 제품을 이용해주셔서 감사합니다.
사진에 표기된 FB-CY4E-DEV의 상단 오른쪽의 UART로 표기된 4핀 몰렉스커넥터에
AD-USB2SERIAL V02와 연결하시면 UART통신이 가능하십니다.
감사합니다.
>
>
> 현재 뉴티씨 사의 FPGA 개발 기트(FB-CY4E-DEV)를 이용하고 있습니다.
> UART를 이용해 PC로 FPGA 보드의 데이터를 받으려 하는데 USB to Serial V02만 구매해 보드와 연결하면 구현이 가능한지 질문 드립니다.
>
|
||||
| 10354 | 답변완료스테핑모터 구동 관련 문의드립니다. | 조현상 | 2020-11-06 | 3,014 |
|
안녕하세요. 스테핑 모터를 구동하는데에 문제점이 많아서 염치없이 질문 드립니다.
avr mega 128 개발보드(AB-M128Pro-A), 스테핑 모터 클럭 구동모듈(AM-MS2(3A용)), 스테핑 모터(1.7kg,SE-SM243)을 이용합니다.
랩뷰로 타이밍에 맞춰서 360도의 이동각, 스텝각, 속도 등을 설정해 누적해가면서 일정 횟수 구동하고 싶습니다.
질문1) 스테핑 모터 단일로 구동 시, [SE-SM243(4.1V 1.95A)과 SE-SM9K(2.3V,0.75A) 두 개의 모터]와 [12V 0.5A, 12V 3A 의 어댑터 두 개]를 가지고 조합해보았는데 유일하게 SE-SM243과 12V 0.5A어댑터의 경우에만 모터에서 진동과 함께 삐-삐-삐-하며 일정한 주기로 LED가 깜빡입니다. (나머지 조합에서는 LED는 켜져있고 모터에서 삐- 소리만 납니다. 토크 조정 시에도 약간의 소리만 바뀔뿐 진동조차 생기지 않습니다.)
12V 1A 또는 24V 1A이상의 어댑터를 구입해서 실험해본다면 결과가 달라질 수 있을지 궁금합니다.
질문2) 어떤 문제 때문에 삐- 소리만 나는 경우와 주기적인 진동과 함께 LED가 깜빡이는 차이점이 생기는지 궁금합니다.
질문 3) 코딩은 문외한이라 이전에 선배가 구현했던걸 그대로 쓰려고 하는데, 랩뷰를 통해 구동이 되지 않고, 보드의 전원을 켜기만 하면 자동으로 모터가 삑삑 소리를 내며 진동만 울립니다.(나머지 조합에서는 모터에서 삐- 소리만 납니다.) 왜 바로 모터가 동작하는 것인지 궁금합니다.
아래 코드에서 두 가지의 Warning이 발생하는데, count_buff가 위에서 선언됐지만 사용안됐고 tx_char도 마찬가지입니다. 제가 어떤 코드를 추가해 랩뷰를 통해 스테핑모터를 구동할 수 있을까요.
-------------------------------------------------------
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
unsigned int count = 0;
unsigned int count_buff = 0;
unsigned long int rotate = 0;
unsigned char m_state;
union data {
unsigned char r_data_char[2];
unsigned int r_data_int;
};
union data32 {
unsigned char r_data_char[4];
unsigned long int r_data_int;
};
union data32 a;
union data b;
//--------------------------------------------------------------------------------------------------------------------------
unsigned char Rx_data(void)
{
while(!(UCSR0A & 0x80));
return UDR0;
}
void tx_char(unsigned char write_char_temp)
{
while(!(UCSR0A & 0x20));
UDR0 = write_char_temp;
}
//--------------------------------------------------------------------------------------------------------------------------
void main(void)
{
unsigned char d_t;
DDRD = 0xff;
DDRB = 0x07;
TCNT0 = 0x00;
TCCR0 = 0x01;
TIMSK = 0x01;
ASSR = 00;
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L = 25; // 16MHz ,baud 9600 : 103, baud 38400 : 25, baud 76800 : 12, baud 250000 : 3
SREG = 0x80;
PORTD.0 = 0b1;
PORTD.1 = 0b0;
PORTD.2 = 0b1;
PORTD.3 = 0b0;
PORTD.4 = 0b0;
PORTD.5 = 0b0;
PORTD.7 = 0b1;
b.r_data_int = 0;
rotate = 1;
printf("\r\n Hello!");
while(1)
{
UDR0 = 0; //버퍼 비우기
//모터 멈춤 결정
m_state = Rx_data();
if(m_state == 0) //모터 멈춤 버튼이 눌리면
{
rotate = 0; //회전수를 없엔다.
}
else if(m_state ==1) // 2번모드이면 이동한만큼 돌아간다.
{
PORTD.1 = PORTD.1 ^ 1; //회전 방향 변경
rotate = a.r_data_int - rotate; //총 회전양에서 현재 회전양을 뺀다.
b.r_data_int = 10; //회전속도는 임의로 조정(되도록 빠르게)
}
else //모터 멈춤이 아니라면
{
//회전양 받기 32비트짜리
a.r_data_char[3] = Rx_data();
a.r_data_char[2] = Rx_data();
a.r_data_char[1] = Rx_data();
a.r_data_char[0] = Rx_data();
//회전 속도 받기 16비트짜리
b.r_data_char[1] = Rx_data();
b.r_data_char[0] = Rx_d ata();
//회전 방향 받기
d_t = Rx_data();
if(rotate == 0) //회전양만큼 다 이동했을때만 실행
{
rotate = a.r_data_int; //회전양 대입
if(m_state == 3)
{
if(d_t == 1){PORTD.1 = 1;}
else{PORTD.1 = 0;}
}
else if(m_state == 4)//방향대입?
{
if(d_t == 1){PORTD.3 = 1;}
else{PORTD.3 = 0;}
}
}
}
}
}
interrupt [TIM0_OVF] void timer0(void)
{
if(count >= b.r_data_int) //회전속도를 결정
{
if(rotate != 0) //이동해야할 거리가 0이 아니면
{
if(m_state == 3)
{PORTD.0 = PORTD.0 ^ 1; } // 펄스 생성
else if(m_state == 4)
{PORTD.2 = PORTD.2 ^ 1; } // 펄스 생성
rotate--; // 이동거리 줄이기 삭감
}
count = 0; //카운터 초기화
}
else
{ count++; }
TCNT0 = 220;
}
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
여기서 가장 큰 문제는 모터가 삑삑 거리는 것이네요.^^
가지고 계시는 스테핑모터는 기본적으로 무부하로 동작시켜도 400mA 정도 사용합니다.
따라서, 500mA 어뎁터로는 전류가 부족할 수 있습니다. 보통, 자신이 쓰는 전류의 2배 정도는 되는 것으로 사용하는 것이 좋습니다.
사용하시는 모터를 돌리시려면, 24V 3A정도 즉, 75Watt 정도의 SMPS를 사용하시는 것이 BEST입니다.
모터 하나 당 저의 추천은 24V 100W입니다.
하지만, 부하가 적거나 하는 경우는 일반 아답타만으로도 가능합니다. 무부하시, 학생으로서 돌리는 정도라면, 돌리기만 하면 되는 거라면 12V 1A 정도도 무난하게 잘 돌아갑니다.
모터가 돌려고해도 전류가 부족하면 돌지 않습니다. 돌지는 않는데, 전기적으로는 돌리기 때문에, 모터에서 삐 하는 소리가 나게 됩니다. 밥을 먹지 않으면 배고 고프고, 배가 고프면 일을시켜도 잘 하기 싫어지는 것과 비슷합니다. 모터도 사용할 전류와 전압을 적절히 공급해주지 않으면, 제대로 된 일을 하지 못하게 됩니다.
아래 링크도 읽어보세요. 참조가 될겁니다.
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m53&wr_id=24
다만, 저희가 코드를 짜드리거나, 고객님의 코드를 분석해서 알려드리는 것은 범위를 벗어난 일이라, 죄송하지만, 직접 하셔야 합니다.
감사합니다.
>
>
> 안녕하세요. 스테핑 모터를 구동하는데에 문제점이 많아서 염치없이 질문 드립니다.
>
> avr mega 128 개발보드(AB-M128Pro-A), 스테핑 모터 클럭 구동모듈(AM-MS2(3A용)), 스테핑 모터(1.7kg,SE-SM243)을 이용합니다.
> 랩뷰로 타이밍에 맞춰서 360도의 이동각, 스텝각, 속도 등을 설정해 누적해가면서 일정 횟수 구동하고 싶습니다.
>
>
> 질문1) 스테핑 모터 단일로 구동 시, [SE-SM243(4.1V 1.95A)과 SE-SM9K(2.3V,0.75A) 두 개의 모터]와 [12V 0.5A, 12V 3A 의 어댑터 두 개]를 가지고 조합해보았는데 유일하게 SE-SM243과 12V 0.5A어댑터의 경우에만 모터에서 진동과 함께 삐-삐-삐-하며 일정한 주기로 LED가 깜빡입니다. (나머지 조합에서는 LED는 켜져있고 모터에서 삐- 소리만 납니다. 토크 조정 시에도 약간의 소리만 바뀔뿐 진동조차 생기지 않습니다.)
> 12V 1A 또는 24V 1A이상의 어댑터를 구입해서 실험해본다면 결과가 달라질 수 있을지 궁금합니다.
>
>
> 질문2) 어떤 문제 때문에 삐- 소리만 나는 경우와 주기적인 진동과 함께 LED가 깜빡이는 차이점이 생기는지 궁금합니다.
>
>
> 질문 3) 코딩은 문외한이라 이전에 선배가 구현했던걸 그대로 쓰려고 하는데, 랩뷰를 통해 구동이 되지 않고, 보드의 전원을 켜기만 하면 자동으로 모터가 삑삑 소리를 내며 진동만 울립니다.(나머지 조합에서는 모터에서 삐- 소리만 납니다.) 왜 바로 모터가 동작하는 것인지 궁금합니다.
>
> 아래 코드에서 두 가지의 Warning이 발생하는데, count_buff가 위에서 선언됐지만 사용안됐고 tx_char도 마찬가지입니다. 제가 어떤 코드를 추가해 랩뷰를 통해 스테핑모터를 구동할 수 있을까요.
> -------------------------------------------------------
>
> #include <mega128.h>
> #include <stdio.h>
> #include <delay.h>
>
>
> unsigned int count = 0;
> unsigned int count_buff = 0;
> unsigned long int rotate = 0;
> unsigned char m_state;
>
> union data {
> unsigned char r_data_char[2];
> unsigned int r_data_int;
> };
>
> union data32 {
> unsigned char r_data_char[4];
> unsigned long int r_data_int;
> };
>
> union data32 a;
> union data b;
>
> //--------------------------------------------------------------------------------------------------------------------------
> unsigned char Rx_data(void)
> {
> while(!(UCSR0A & 0x80));
> return UDR0;
> }
>
> void tx_char(unsigned char write_char_temp)
> {
> while(!(UCSR0A & 0x20));
> UDR0 = write_char_temp;
> }
>
> //--------------------------------------------------------------------------------------------------------------------------
>
> void main(void)
> {
> unsigned char d_t;
> DDRD = 0xff;
> DDRB = 0x07;
>
> TCNT0 = 0x00;
> TCCR0 = 0x01;
> TIMSK = 0x01;
>
> ASSR = 00;
>
> UCSR0A=0x00;
> UCSR0B=0x18;
> UCSR0C=0x06;
> UBRR0H=0x00;
> UBRR0L = 25; // 16MHz ,baud 9600 : 103, baud 38400 : 25, baud 76800 : 12, baud 250000 : 3
>
> SREG = 0x80;
>
> PORTD.0 = 0b1;
> PORTD.1 = 0b0;
> PORTD.2 = 0b1;
> PORTD.3 = 0b0;
> PORTD.4 = 0b0;
> PORTD.5 = 0b0;
> PORTD.7 = 0b1;
>
> b.r_data_int = 0;
> rotate = 1;
> printf("\r\n Hello!");
>
> while(1)
> {
> UDR0 = 0; //버퍼 비우기
>
> //모터 멈춤 결정
> m_state = Rx_data();
>
> if(m_state == 0) //모터 멈춤 버튼이 눌리면
> {
> rotate = 0; //회전수를 없엔다.
> }
> else if(m_state ==1) // 2번모드이면 이동한만큼 돌아간다.
> {
> PORTD.1 = PORTD.1 ^ 1; //회전 방향 변경
> rotate = a.r_data_int - rotate; //총 회전양에서 현재 회전양을 뺀다.
> b.r_data_int = 10; //회전속도는 임의로 조정(되도록 빠르게)
> }
> else //모터 멈춤이 아니라면
> {
> //회전양 받기 32비트짜리
> a.r_data_char[3] = Rx_data();
> a.r_data_char[2] = Rx_data();
> a.r_data_char[1] = Rx_data();
> a.r_data_char[0] = Rx_data();
>
> //회전 속도 받기 16비트짜리
> b.r_data_char[1] = Rx_data();
> b.r_data_char[0] = Rx_d ata();
>
> //회전 방향 받기
> d_t = Rx_data();
>
> if(rotate == 0) //회전양만큼 다 이동했을때만 실행
> {
> rotate = a.r_data_int; //회전양 대입
>
> if(m_state == 3)
> {
> if(d_t == 1){PORTD.1 = 1;}
> else{PORTD.1 = 0;}
> }
> else if(m_state == 4)//방향대입?
> {
> if(d_t == 1){PORTD.3 = 1;}
> else{PORTD.3 = 0;}
> }
> }
>
> }
> }
> }
>
>
> interrupt [TIM0_OVF] void timer0(void)
> {
> if(count >= b.r_data_int) //회전속도를 결정
> {
> if(rotate != 0) //이동해야할 거리가 0이 아니면
> {
> if(m_state == 3)
> {PORTD.0 = PORTD.0 ^ 1; } // 펄스 생성
> else if(m_state == 4)
> {PORTD.2 = PORTD.2 ^ 1; } // 펄스 생성
> rotate--; // 이동거리 줄이기 삭감
> }
> count = 0; //카운터 초기화
> }
> else
> { count++; }
>
> TCNT0 = 220;
> }
>
|
||||
