로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
5178 답변완료질문있습니다 김재영 2010-05-20 1,291
질문있습니다. ad-usbisp-l 여기에 있는 설명대로 avr studio 를 이용해서 다운로드를 했는데 다운로딩상에는 에러나 그런것이 아무것도 없고 다운로드가 잘되는데 cpu 칩에는 아무반응이 없습니다 cpu를 새걸로 바꾸어 보아도 똑같습니다 왜그럴까요? cpu는 89s51 을 사용합니다
관리자 답변 NEWTC · 2010-05-20
안녕하세요 ad-usbisp로는 AT89s51 AT89s52 다운로드가 가능합니다. 타겟보드가 어떤것가요 ? 직접 자작한것면 외부램관련 app핀을 설정을 하셔야 합니다. ISP 핀번호는 정확히 맞추어 사용하셔는지요 자료실에 기존 자료실에 보시면 89s52 관련 도면이라고 있습니다. 그 도면에 기본적인 구성회로가 비슷한지를 확인하시길 바랍니다. 수고하세요 >질문있습니다. ad-usbisp-l 여기에 있는 설명대로 avr studio 를 이용해서 다운로드를 했는데 >다운로딩상에는 에러나 그런것이 아무것도 없고 다운로드가 잘되는데 cpu 칩에는 아무반응이 없습니다 cpu를 새걸로 바꾸어 보아도 똑같습니다 왜그럴까요? >cpu는 89s51 을 사용합니다
5177 답변완료에러사진 올려드릴게요 김광록 2010-05-20 1,431
저게 밑에 체크이레이저랑 베리파이를 체크를 해놓으면 이런 에러가 나네요 그리고 소스를 올린후에 확인 할수 있는 방법이 잇나요?
관리자 답변 김광록 · 2010-05-20
저기 체크하는 곳에 체크를 하지 않고 프로그래올을 하면 에러는 발생하지 않네요
5176 답변완료질문있습니다 황선민 2010-05-20 1,455
밑에서 가속도 센서 예제 코드로 질문했었는데요 소스를 보면 ADCH 와 ADCL의 값을 각각 전송하는데요 데이터를 degree로 받으려면 ADCH와 ADCL의 값을 합한 후, 공식 적용, 다시 분할하면 출력 데이터가 degree로 나오나요? 이게 안되면 어떤 식으로 해야하나요?
관리자 답변 NEWTC · 2010-05-20
안녕하세요 어디다가 출력하다는 말인지 이해를 못하겠네요? 저희쪽에서 제공하는 예제프로그램과 윈도우 응용 프로그램를 애기하시는지요 ? 윈도우응용프로그램에서 기울기각도를 계산됩니다. mega128에 올라가는 코드는 ADC값만 받아서 uart 로 날리는 역활만 합니다. mega128에서 각도를 구하시려면 저번에 첨부해드린 문서에 구하는 공식이 있습니다. 각도를 구할려면 adc 2바이트를 int 형태로 합쳐서 계산해야 됩니다 UART로 데이터를 날리면 byte 단위로 쪼깨서 보내야합니다.;; 아래글은 동일한 글이라 지우도록 하겠습니다. 수고하세요 >밑에서 가속도 센서 예제 코드로 질문했었는데요 > >소스를 보면 ADCH 와 ADCL의 값을 각각 전송하는데요 > >데이터를 degree로 받으려면 ADCH와 ADCL의 값을 합한 후, > >공식 적용, 다시 분할하면 출력 데이터가 degree로 나오나요? > >이게 안되면 어떤 식으로 해야하나요?
5175 답변완료코드비전 사용중인데요 질문있습니다. 김광록 2010-05-20 1,473
에러사진 올려드렸고요 책에 보면 컴파일을 하고 빌드를 하면 롬파일이 생겨야 한다고 하는데 안생기는 이유를 잘 모르겠고요 그리고 sck frequency 랑 flash랑 eeprom start end 설정을 잘 못한거 같은데 어떻게 해야할까요 --
관리자 답변 NEWTC · 2010-05-20
안녕하세요 어떤에러 사진을 말하는 것지요 ? 예전에 올린 eeprom 라이트 에러 말하는것가요 ? 그것은 에러 아니라고 답변을 했습니다. eeprom 에는 코드를 올리지 않습니다. 일반 데이터 저장용으로 사용하는곳입니다. 프로그램코드는 프래쉬메모리에 올라갑니다. sck frequency는 최대속도로 맟추어 놓고 사용하면 됩니다. 다운로더 속도입니다. eeprom start end eeprom 영역은 픽스된 값입니다. 건들 필요가 없습니다. 수고하세요 >에러사진 올려드렸고요 > >책에 보면 컴파일을 하고 빌드를 하면 롬파일이 생겨야 한다고 하는데 >안생기는 이유를 잘 모르겠고요 > >그리고 sck frequency 랑 flash랑 eeprom start end 설정을 잘 못한거 같은데 > >어떻게 해야할까요 --
5174 답변완료AVR mega 128 개발보드 - 소형 김대봉 2010-05-20 1,469
AVR mega128 개발보드 소형을 살려고 하는데 제가 아직 초보이기에 문의 좀 할려고 합니다. 주변장치와 통신을 3가지를 쓸려고 하는데 ATmega128이 UART 통신 2개를 지원하는것으로 알고 있습니다. 그래서 나머지 1개를 어떻게 통신해야할지 고민중에 있습니다. 첫번쨰 질문은 혹시 제가 알기로는 ATmega128에서 USB 통신을 지원하지 않는것으로 알고 있는데 혹시 지원 가능한지 궁금합니다. 두번째 질문은 만약 USB통신이 지원하지 않는다면 UART 통신을 3개 지원 할 수 있는 지 궁금합니다 세번째 질문은 만약 UART 통신이 2개뿐이 지원하지 않는다며 UART통신 2개 와 그리고 SPI 통신 1개를 같이 사용할 수 있는지 궁금합니다.
관리자 답변 NEWTC · 2010-05-20
안녕하세요 -mega128은 usb를 지원하지않습니다. -mega128은 uart 2개입니다. mega1280 또는 2560 이 uart가 4개입니다. - mega128의 uart2개 spi 포트는 별개 포트 입니다. 즉 동시에 사용가능하다는 말입니다. atmel 사에서 제공하는 mega128 데이터 시트를 보시길 바랍니다. 수고하세요 > >AVR mega128 개발보드 소형을 살려고 하는데 제가 아직 초보이기에 문의 좀 할려고 합니다. > > >주변장치와 통신을 3가지를 쓸려고 하는데 ATmega128이 UART 통신 2개를 지원하는것으로 > >알고 있습니다. > >그래서 나머지 1개를 어떻게 통신해야할지 고민중에 있습니다. > >첫번쨰 질문은 혹시 제가 알기로는 ATmega128에서 USB 통신을 지원하지 않는것으로 알고 > >있는데 혹시 지원 가능한지 궁금합니다. > >두번째 질문은 만약 USB통신이 지원하지 않는다면 UART 통신을 3개 지원 할 수 있는 지 > >궁금합니다 > >세번째 질문은 만약 UART 통신이 2개뿐이 지원하지 않는다며 UART통신 2개 와 그리고 SPI 통신 > >1개를 같이 사용할 수 있는지 궁금합니다. > >
5173 답변완료TN_901비접촉식 온도센서와 ATmega128을 통해서 구동을 하려는데요 oysworld 2010-05-19 1,302
개발모듈의 어느 포트를 사용해야 하는지를 모르겠습니다. 그리구 코딩같은 경우 자료를 찾는게 쉬운게 아니더군요;; 혹시 방법이 있다면 좀 알려주실수 있는지요?
관리자 답변 NEWTC · 2010-05-20
안녕하세요 TN_901 통신 방법을 통신 클럭의 주파수에 관련 max ~min 값이 없더군요 한클럭 500us 만 존재 하더군요 TN_901 통신클럭이 좀 높으면 spi 통신으로 가능해 보이나 클럭 주파수 값의 범위가 존재 하지 않았어 ...; 일반 io로 데이터 클럭을 생성해서 데이터를 읽어야 합니다. 포트는 아무것나 사용해서 만들어야 하다는 말입니다. 수고하세요 >개발모듈의 어느 포트를 사용해야 하는지를 모르겠습니다. >그리구 코딩같은 경우 자료를 찾는게 쉬운게 아니더군요;; >혹시 방법이 있다면 좀 알려주실수 있는지요?
5172 답변완료알려주세요 ㅜㅜ 정혜현 2010-05-19 1,228
일부로 소스 주요부분은 엔터를 많이 쳐서 구별해놨습니다. 우선 맨 아래 왜 주석표시되어있어서 그 소스는 여기 예제소스입니다. 저걸 돌렸을씨 AM-DC2-2D모터 모듈로 돌렸을시에 같은 원하는데로 동시에 두개가 구현이되었습니다. 속도도 제가 원하는대로 나왔구요. 그런데 제가 코딩한소스에서 온도값에따라 모터를 구동하고자합니다. 메인함수에서 motor 함수를 호출하는것입니다. 근데 그 모터함수 보시면 제가 그 주석처리했던 부분을 if문에 그대로 넣었습니다. ㅜㅜ 그리고 그 PWM 속도부분도 똑같이 지정해주었는데 이상하게;; 속도가 빠르게 돕니다. 같은소스인데 속도가 엄청빠르게 돕니다. 그리고 같은소스같은데 motor함수에 놓고 하니까 두개가 동시에 안돌더라구요 ㅜㅜ 정말 죄송합니다 그런데 물어볼 곳이 없어서 이렇게 또 질문을 합니다. ㅜㅜ #include <iom128v.h> #include <macros.h> #include <stdio.h> #include <math.h> #define noACK 0 #define ACK 1 #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 #define MOTOR_PORT PORTD #define MOTOR_DDR DDRD #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 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_ON (MOTOR_PORT|=0x40) #define ENABLE2_OFF (MOTOR_PORT&=0xBF) typedef union { unsigned int i; float f; }value; value temp_val, humi_val; enum{TEMP,HUMI}; unsigned int us =0; const float C1= -4.0; //for 12 Bit const float C2= +0.0405; //for 12 Bit const float C3= -0.0000028; //for 12 Bit const float T1= +0.01; //for 14 Bit @ 5V const float T2= +0.00008; //for 14 Bit @ 5V void delay_us(unsigned int); int putchar(char c); int getchar(void); char GET_SDA(void); void SDA(char); void SCK(char); char s_write_byte(unsigned char); char s_read_byte(unsigned char); void s_transstart(void); void s_connectionreset(void); char s_measure(char *p_value, char *p_checksum, char mode); void calc_sth75(float *p_humidity ,float *p_temperature); void port_init(void)//포트 미리 지정 { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x03; PORTC = 0x00; DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x00; } 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 = 0x08; } void timer0_init(void)// { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xFC; //set count OCR0 = 0x04; TCCR0 = 0x01; //start timer } void adc_init(void) { ADCSRA = 0x00; //disable adc ADMUX = 0x00; //select adc input 0 ACSR = 0x80; //comparator off & 노이즈부분에서 향상시킴 ADCSRA = 0xC6; //11000110 //ADC활성화 및 ADC변환 시작 &단일모드 &64division } void timer1_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0x06; //set count OCR0 = 0xFA; TCCR0 = 0x04; //start timer } 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(); adc_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints // 00:low level, 01: 논리변화 ,10:falling, 11:rising EIMSK = 0x00; TIMSK = 0x01; //timer interrupt sources : timer0 ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void startConvertion(int ch) { ADCSRA = ADCSRA & 0x3f; //11000110*00111111=00000110 즉 우선 ADC OFF ADMUX = 0x40; //01000000 내부 Avcc를 Reference전압으로 이용 //ADC변환 data왼쪽 정렬하지않음 & ADC0 을 input 핀으로 사용함 ADCSRA = ADCSRA | 0xC0; //00000110+11000000=11000110 -> 다시 ADC켜고 시작 } unsigned int readConvertData(void) { unsigned int temp,cl,ch; while((ADCSRA & 0x10)==0); ADCSRA = ADCSRA | 0x10; cl = ADCL; //변환결과 저장 낮은 ADC7~ADC0 ch = ADCH; //변환 결과저장 ADC9~ADC8 temp = cl + ch*256; // 밑에 그림에서 보듯이 저런 식으로 저장 //출력은 10bit인데 8bit씩 나누어서 저장해야 하므로 ch에 256을 곱해줍니다. ADCSRA = ADCSRA | 0x10; return temp; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } char GET_SDA(void) //ACK 값 변경확인 부분 { DDRB &= 0xFE; if(PINB&0X01) return 1; else return 0; } void SDA(char data) //DATA 펄스 설정부분 { DDRB |=0X01; PORTB = (PINB&0XFE)|data; } void SCK(char data) //SCK 펄스 설정 부분 { PORTB =((PINB&0XFD)|(data<<1)); } void s_transstart() //TANSMISSON 펄스 주는 부분 { SDA(1); SCK(0); delay_us(1); SCK(1); delay_us(1); SDA(0); delay_us(1); SCK(0); delay_us(5); SCK(1); delay_us(1); SDA(1); delay_us(1); SCK(0); } char s_write_byte(unsigned char value) //명 { //value is MEASURE_TEMP = 0X03; or MEASURE_HUMI = 0X05; //그림과 같이 명령어를 출력 할수 있도록 설정 unsigned char i, error=0; for(i=0x80; i>0; i/=2) { //shift bit for masking if(i & value) SDA(1); //masking value with i, write to SENSI-BUS else SDA(0); SCK(1); //clk for SENSI-BUS delay_us(5); //pulswith approx. 5 us SCK(0); } SDA(1); //release DATA-line SCK(1); //clk #9 for ack error=GET_SDA(); //check ack (DATA will be pulled down by SHT11) SCK(0); return error; //error=1 in case of no acknowledge } char s_read_byte(unsigned char ack) // ack값 변경 후 data 받는 부분 { // 그림처럼 데이터를 입력 받는다. unsigned char i, val=0; SDA(1); //release DATA-line for(i=0x80; i>0; i/=2) { //shift bit for masking SCK(1); //clk for SENSI-BUS if(GET_SDA()) val=(val | i); //read bit SCK(0); } SDA(!ack); //in case of "ack==1" pull down DATA-Line SCK(1); //clk #9 for ack delay_us(5); //pulswith approx. 5 us SCK(0); SDA(1); //release DATA-line return val; } void s_connectionreset() //처음-->start { //그림처럼 처음 시작 시그널을 보낸다 char i; SDA(1); SCK(0); for(i=0; i<9; i++) { //9 SCK cycles SCK(1); SCK(0); } s_transstart(); } char s_measure(char *p_value, char *p_checksum, char mode) { unsigned error=0; unsigned int i; s_transstart(); //transmission start switch(mode) { //send command to sensor case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //MEASURE_TEMP = 0X03; case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //MEASURE_HUMI = 0X05; default : break; } delay_us(50000); delay_us(50000); while(GET_SDA()); //wait until sensor has finished the measurement if(GET_SDA()) error+=1; *(p_value+1) = s_read_byte(ACK); //read the first byte (MSB) *(p_value) = s_read_byte(ACK); //read the second byte (LSB) *p_checksum = s_read_byte(noACK); //read checksum return error; } void fan(unsigned int average) { if(average>=29) { DDRC=0x01; PORTC=0x01; } else { DDRC=0x00; PORTC=0x00; } } int motor_flag=3; int motor(unsigned average) { int i,d; MOTOR_DDR = 0xff; if(average>=27 && (motor_flag==0 || motor_flag==3) ) { ENABLE1_ON; ENABLE2_ON; DIR1_ON; DIR2_ON; for(i=0; i<5; i++){ PWM1_ON; PWM2_ON; // PWM1 신호 1 delay(2); PWM1_OFF; PWM2_OFF; // PWM1 신호 0 delay(10000); } ENABLE1_OFF; ENABLE2_OFF; MOTOR_DDR = 0x00; motor_flag = 1; } else if(average<27 && (motor_flag==1 || motor_flag==3)) { ENABLE1_ON; ENABLE2_ON; DIR1_OFF; DIR2_OFF; for(i=0; i<5; i++){ PWM1_ON; // PWM1 신호 1 PWM2_ON; // PWM1 신호 1 delay(10000); PWM1_OFF; PWM2_OFF; // PWM1 신호 0 delay(2); } ENABLE1_OFF; ENABLE2_OFF; MOTOR_DDR = 0x00; motor_flag =0; } else {} return 0; } void main(void) { char error=0,checksum; unsigned int i,te,hu,average; unsigned int temp; DDRB=0x03; init_devices(); PORTF = 0x00; s_connectionreset(); // 시작 시그널을 보낸다. while (1) { error += s_measure((char*) &temp_val.i,&checksum,TEMP); //measure temperature(온도) 측정 error += s_measure((char*) &humi_val.i,&checksum,HUMI); //measure humidity(습도) 측정 startConvertion(0); temp = readConvertData(); temp = (temp*5*10)/1024; if(error != 0) { s_connectionreset(),printf("error =%d \\n\\r",error); //오류가 있을시 오류문구 출력 } else { //측정에 오류가 없을 경우 측정값을 계산하여 출력 humi_val.f=(float)humi_val.i; //converts integer to float temp_val.f=(float)temp_val.i; //converts integer to float calc_sth75(&humi_val.f, &temp_val.f); //calculate humidity, temperature te=(int)temp_val.f; hu=(int)humi_val.f; average=(te+temp)/2; printf("%d C,%d%%\\n\\r",average,hu); fan(average); } motor(average); delay_us(1000); } } void calc_sth75(float *p_humidity ,float *p_temperature) { float rh; //rh: Humidity [Ticks] 12 Bit float t; //t: Temperature [Ticks] 14 Bit float rh_lin; //rh_lin: Humidity linear float rh_true; //rh_true: Temperature compensated humidity float t_C; //t_C : Temperature [.C] rh= *p_humidity; //rh: Humidity [Ticks] 12 Bit t = *p_temperature; //t: Temperature [Ticks] 14 Bit t_C= t*0.01 - 40-1.2; //calc. Temperature from ticks to [.C] rh_lin= C3*rh*rh + C2*rh + C1 ; //calc. Humidity from ticks to [%RH] rh_true= (t_C-25)*(T1+T2*rh)+rh_lin; //calc. Temperature compensated humidity [%RH] if(rh_true > 100) rh_true=100; //cut if the value is outside of if(rh_true < 0.1) rh_true=0.1; //the physical possible range *p_temperature= t_C; //return temperature [.C] *p_humidity= rh_true; //return humidity[%RH] } void delay_us(unsigned int t) //딜레이함수 { us =0; while(us<t); } #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0xFC; //reload counter value us++; } int putchar(char c) //통신을 위한 설정 { while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; return c; } int getchar(void) //통신을 위한 설정 { while ((UCSR0A & 0x80) == 0); return UDR0; } /* //ICC-AVR application builder : 2005-05-06 오후 10:36:45 // Target : M128 // Crystal: 16Mhz #include <iom128v.h> #include <macros.h> 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 = 0x03; } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9600 (0.0%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; // UBRR0L = 0x2F; //set baud rate lo 7.3728 MHz // UBRR0L = 0x47; //set baud rate lo 11.0592 Mhz UBRR0L = 0x67; //set baud rate lo 16Mhz UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x08; } //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(); // UART 0 초기화 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 } #define MOTOR_PORT PORTD #define MOTOR_DDR DDRD #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 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_ON (MOTOR_PORT|=0x40) #define ENABLE2_OFF (MOTOR_PORT&=0xBF) void main (void) { int i; init_devices(); MOTOR_DDR = 0xff; // 모터포트 초기화 ENABLE1_ON; while(1){ DIR1_ON; // Ch1 정방향 DIR2_ON; // Ch2 정방향 for(i=0; i<5; i++){ // 100 번 PWM 발생 PWM1_ON; // PWM1 신호 1 PWM2_ON; // PWM2 신호 1 delay(200); PWM1_OFF; // PWM1 신호 0 PWM2_OFF; // PWM2 신호 0 delay(10000); } DIR1_OFF; // Ch1 역방향 DIR2_OFF; // Ch2 역방향 for(i=0; i<5; i++){ // 100 번 PWM 발생 PWM1_ON; // PWM1 신호 1 PWM2_ON; // PWM2 신호 1 delay(100000); PWM1_OFF; // PWM1 신호 0 PWM2_OFF; // PWM2 신호 0 delay(200); } } } // 시간 지연 함수 void delay(int n) { volatile int i,j; for(i=0;i<n;i++) { for(j=0;j<100;j++); } } */
관리자 답변 NEWTC · 2010-05-20
안녕하세요 짜신 코드를 확인해 드릴수는 없습니다. 짜신코드를 돌려보고 테스트를 해야하기 때문입니다. 거기에 소모되는 시간을 무시할수가 없습니다. 그래서 본사에서는 짜신코드에 대해 써포트를 하지않습니다. motor()함수가 main함수에 넣고 나머지는 주석 처리 한후 모터가 원하는 동작을 하는지 하나씩 주석처리된 코드를 풀면서 확인해 보시길 바랍니다. 수고하세요 >일부로 소스 주요부분은 엔터를 많이 쳐서 구별해놨습니다. >우선 맨 아래 왜 주석표시되어있어서 그 소스는 여기 예제소스입니다. >저걸 돌렸을씨 AM-DC2-2D모터 모듈로 돌렸을시에 같은 원하는데로 동시에 두개가 구현이되었습니다. > >속도도 제가 원하는대로 나왔구요. > >그런데 제가 코딩한소스에서 온도값에따라 모터를 구동하고자합니다. >메인함수에서 motor 함수를 호출하는것입니다. >근데 그 모터함수 보시면 제가 그 주석처리했던 부분을 if문에 그대로 넣었습니다. ㅜㅜ >그리고 그 PWM 속도부분도 똑같이 지정해주었는데 >이상하게;; 속도가 빠르게 돕니다. >같은소스인데 속도가 엄청빠르게 돕니다. >그리고 같은소스같은데 motor함수에 놓고 하니까 두개가 동시에 안돌더라구요 ㅜㅜ >정말 죄송합니다 그런데 물어볼 곳이 없어서 이렇게 또 질문을 합니다. ㅜㅜ > > > > > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> >#include <math.h> > >#define noACK 0 >#define ACK 1 >#define STATUS_REG_W 0x06 //000 0011 0 >#define STATUS_REG_R 0x07 //000 0011 1 >#define MEASURE_TEMP 0x03 //000 0001 1 >#define MEASURE_HUMI 0x05 //000 0010 1 >#define RESET 0x1e //000 1111 0 > >#define MOTOR_PORT PORTD >#define MOTOR_DDR DDRD >#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 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_ON (MOTOR_PORT|=0x40) >#define ENABLE2_OFF (MOTOR_PORT&=0xBF) > > >typedef union >{ > unsigned int i; > float f; >}value; > >value temp_val, humi_val; > >enum{TEMP,HUMI}; >unsigned int us =0; > >const float C1= -4.0; //for 12 Bit >const float C2= +0.0405; //for 12 Bit >const float C3= -0.0000028; //for 12 Bit >const float T1= +0.01; //for 14 Bit @ 5V >const float T2= +0.00008; //for 14 Bit @ 5V > >void delay_us(unsigned int); >int putchar(char c); >int getchar(void); >char GET_SDA(void); >void SDA(char); >void SCK(char); >char s_write_byte(unsigned char); >char s_read_byte(unsigned char); >void s_transstart(void); >void s_connectionreset(void); >char s_measure(char *p_value, char *p_checksum, char mode); >void calc_sth75(float *p_humidity ,float *p_temperature); > >void port_init(void)//포트 미리 지정 >{ > PORTA = 0x00; > DDRA = 0x00; > PORTB = 0x00; > DDRB = 0x03; > PORTC = 0x00; > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x00; >} > >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 = 0x08; >} > >void timer0_init(void)// >{ > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0xFC; //set count > OCR0 = 0x04; > TCCR0 = 0x01; //start timer >} > >void adc_init(void) >{ > ADCSRA = 0x00; //disable adc > ADMUX = 0x00; //select adc input 0 > ACSR = 0x80; //comparator off & 노이즈부분에서 향상시킴 > ADCSRA = 0xC6; //11000110 >//ADC활성화 및 ADC변환 시작 &단일모드 &64division >} > >void timer1_init(void) >{ > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0x06; //set count > OCR0 = 0xFA; > TCCR0 = 0x04; //start timer >} > >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(); > adc_init(); > > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints // 00:low level, 01: 논리변화 ,10:falling, 11:rising > EIMSK = 0x00; > TIMSK = 0x01; //timer interrupt sources : timer0 > ETIMSK = 0x00; //extended timer interrupt sources > SEI(); //re-enable interrupts > //all peripherals are now initialized >} >void startConvertion(int ch) >{ > ADCSRA = ADCSRA & 0x3f; >//11000110*00111111=00000110 즉 우선 ADC OFF > ADMUX = 0x40; >//01000000 내부 Avcc를 Reference전압으로 이용 >//ADC변환 data왼쪽 정렬하지않음 & ADC0 을 input 핀으로 사용함 > ADCSRA = ADCSRA | 0xC0; >//00000110+11000000=11000110 -> 다시 ADC켜고 시작 >} > >unsigned int readConvertData(void) >{ > unsigned int temp,cl,ch; > while((ADCSRA & 0x10)==0); > ADCSRA = ADCSRA | 0x10; > cl = ADCL; //변환결과 저장 낮은 ADC7~ADC0 > ch = ADCH; //변환 결과저장 ADC9~ADC8 > temp = cl + ch*256; // 밑에 그림에서 보듯이 저런 식으로 저장 >//출력은 10bit인데 8bit씩 나누어서 저장해야 하므로 ch에 256을 곱해줍니다. > ADCSRA = ADCSRA | 0x10; > return temp; >} > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} > > >char GET_SDA(void) //ACK 값 변경확인 부분 >{ > DDRB &= 0xFE; > if(PINB&0X01) return 1; > else return 0; >} > >void SDA(char data) //DATA 펄스 설정부분 >{ > DDRB |=0X01; > PORTB = (PINB&0XFE)|data; >} > >void SCK(char data) //SCK 펄스 설정 부분 >{ > PORTB =((PINB&0XFD)|(data<<1)); >} > >void s_transstart() //TANSMISSON 펄스 주는 부분 >{ > SDA(1); > SCK(0); > delay_us(1); > SCK(1); > delay_us(1); > SDA(0); > delay_us(1); > SCK(0); > delay_us(5); > SCK(1); > delay_us(1); > SDA(1); > delay_us(1); > SCK(0); >} > >char s_write_byte(unsigned char value) //명 >{ >//value is MEASURE_TEMP = 0X03; or MEASURE_HUMI = 0X05; >//그림과 같이 명령어를 출력 할수 있도록 설정 > >unsigned char i, error=0; > > for(i=0x80; i>0; i/=2) { //shift bit for masking > if(i & value) SDA(1); //masking value with i, write to SENSI-BUS > else SDA(0); > SCK(1); //clk for SENSI-BUS > delay_us(5); //pulswith approx. 5 us > SCK(0); > } > SDA(1); //release DATA-line > SCK(1); //clk #9 for ack > error=GET_SDA(); //check ack (DATA will be pulled down by SHT11) > SCK(0); > return error; //error=1 in case of no acknowledge >} > > >char s_read_byte(unsigned char ack) // ack값 변경 후 data 받는 부분 >{ // 그림처럼 데이터를 입력 받는다. > unsigned char i, val=0; > SDA(1); //release DATA-line > for(i=0x80; i>0; i/=2) { //shift bit for masking > SCK(1); //clk for SENSI-BUS > if(GET_SDA()) val=(val | i); //read bit > SCK(0); > } > SDA(!ack); //in case of "ack==1" pull down DATA-Line > SCK(1); //clk #9 for ack > delay_us(5); //pulswith approx. 5 us > SCK(0); > SDA(1); //release DATA-line > return val; >} > >void s_connectionreset() //처음-->start >{ //그림처럼 처음 시작 시그널을 보낸다 > char i; > SDA(1); SCK(0); > for(i=0; i<9; i++) { //9 SCK cycles > SCK(1); > SCK(0); > } > s_transstart(); >} > >char s_measure(char *p_value, char *p_checksum, char mode) >{ > unsigned error=0; > unsigned int i; > > s_transstart(); //transmission start > > switch(mode) { //send command to sensor > case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //MEASURE_TEMP = 0X03; > > case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //MEASURE_HUMI = 0X05; > > default : break; > } > > delay_us(50000); > delay_us(50000); > > while(GET_SDA()); //wait until sensor has finished the measurement > > if(GET_SDA()) error+=1; > *(p_value+1) = s_read_byte(ACK); //read the first byte (MSB) > *(p_value) = s_read_byte(ACK); //read the second byte (LSB) > *p_checksum = s_read_byte(noACK); //read checksum > return error; >} > >void fan(unsigned int average) >{ >if(average>=29) >{ >DDRC=0x01; >PORTC=0x01; >} >else >{ >DDRC=0x00; >PORTC=0x00; >} >} > > > > > > >int motor_flag=3; > >int motor(unsigned average) >{ >int i,d; >MOTOR_DDR = 0xff; > if(average>=27 && (motor_flag==0 || motor_flag==3) ) > { > ENABLE1_ON; > ENABLE2_ON; > DIR1_ON; > DIR2_ON; > for(i=0; i<5; i++){ > PWM1_ON; > PWM2_ON; // PWM1 신호 1 > delay(2); > PWM1_OFF; > PWM2_OFF; // PWM1 신호 0 > delay(10000); > } > ENABLE1_OFF; > ENABLE2_OFF; > MOTOR_DDR = 0x00; > motor_flag = 1; > } > > else if(average<27 && (motor_flag==1 || motor_flag==3)) > { > ENABLE1_ON; > ENABLE2_ON; > DIR1_OFF; > DIR2_OFF; > for(i=0; i<5; i++){ > PWM1_ON; // PWM1 신호 1 > PWM2_ON; // PWM1 신호 1 > delay(10000); > PWM1_OFF; > PWM2_OFF; // PWM1 신호 0 > delay(2); > } > ENABLE1_OFF; > ENABLE2_OFF; > MOTOR_DDR = 0x00; > motor_flag =0; > } > else > {} > return 0; >} > > > > > > > > > >void main(void) >{ > char error=0,checksum; > unsigned int i,te,hu,average; > unsigned int temp; > DDRB=0x03; > init_devices(); > PORTF = 0x00; > s_connectionreset(); // 시작 시그널을 보낸다. > while (1) > { > error += s_measure((char*) &temp_val.i,&checksum,TEMP); //measure temperature(온도) 측정 > error += s_measure((char*) &humi_val.i,&checksum,HUMI); //measure humidity(습도) 측정 > startConvertion(0); > temp = readConvertData(); > temp = (temp*5*10)/1024; > if(error != 0) > { > s_connectionreset(),printf("error =%d \\n\\r",error); //오류가 있을시 오류문구 출력 > } > else { //측정에 오류가 없을 경우 측정값을 계산하여 출력 > humi_val.f=(float)humi_val.i; //converts integer to float > temp_val.f=(float)temp_val.i; //converts integer to float > calc_sth75(&humi_val.f, &temp_val.f); //calculate humidity, temperature > te=(int)temp_val.f; > hu=(int)humi_val.f; > average=(te+temp)/2; > printf("%d C,%d%%\\n\\r",average,hu); > fan(average); > } > > > > > >motor(average); > > > > > delay_us(1000); > } >} > >void calc_sth75(float *p_humidity ,float *p_temperature) >{ > float rh; //rh: Humidity [Ticks] 12 Bit > float t; //t: Temperature [Ticks] 14 Bit > float rh_lin; //rh_lin: Humidity linear > float rh_true; //rh_true: Temperature compensated humidity > float t_C; //t_C : Temperature [.C] > > rh= *p_humidity; //rh: Humidity [Ticks] 12 Bit > t = *p_temperature; //t: Temperature [Ticks] 14 Bit > t_C= t*0.01 - 40-1.2; //calc. Temperature from ticks to [.C] > rh_lin= C3*rh*rh + C2*rh + C1 ; //calc. Humidity from ticks to [%RH] > rh_true= (t_C-25)*(T1+T2*rh)+rh_lin; //calc. Temperature compensated humidity [%RH] > if(rh_true > 100) rh_true=100; //cut if the value is outside of > if(rh_true < 0.1) rh_true=0.1; //the physical possible range > *p_temperature= t_C; //return temperature [.C] > *p_humidity= rh_true; //return humidity[%RH] >} > > > >void delay_us(unsigned int t) //딜레이함수 >{ > us =0; > while(us<t); >} > >#pragma interrupt_handler timer0_ovf_isr:17 >void timer0_ovf_isr(void) >{ > TCNT0 = 0xFC; //reload counter value > us++; >} > >int putchar(char c) //통신을 위한 설정 >{ > while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty > UDR0 = c; > return c; >} > >int getchar(void) //통신을 위한 설정 >{ > while ((UCSR0A & 0x80) == 0); > return UDR0; >} > > > > > > > > > > > > > > >/* > >//ICC-AVR application builder : 2005-05-06 오후 10:36:45 >// Target : M128 >// Crystal: 16Mhz > >#include <iom128v.h> >#include <macros.h> > >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 = 0x03; >} > >//UART0 initialize >// desired baud rate: 9600 >// actual: baud rate:9600 (0.0%) >// char size: 8 bit >// parity: Disabled >void uart0_init(void) >{ > UCSR0B = 0x00; //disable while setting baud rate > UCSR0A = 0x00; > UCSR0C = 0x06; >// UBRR0L = 0x2F; //set baud rate lo 7.3728 MHz >// UBRR0L = 0x47; //set baud rate lo 11.0592 Mhz > UBRR0L = 0x67; //set baud rate lo 16Mhz > > UBRR0H = 0x00; //set baud rate hi > UCSR0B = 0x08; >} > >//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(); // UART 0 초기화 > > 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 >} > >#define MOTOR_PORT PORTD >#define MOTOR_DDR DDRD >#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 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_ON (MOTOR_PORT|=0x40) >#define ENABLE2_OFF (MOTOR_PORT&=0xBF) > > >void main (void) >{ > int i; > init_devices(); > > MOTOR_DDR = 0xff; // 모터포트 초기화 > ENABLE1_ON; > > while(1){ > DIR1_ON; // Ch1 정방향 > DIR2_ON; // Ch2 정방향 > > for(i=0; i<5; i++){ // 100 번 PWM 발생 > PWM1_ON; // PWM1 신호 1 > PWM2_ON; // PWM2 신호 1 > delay(200); > PWM1_OFF; // PWM1 신호 0 > PWM2_OFF; // PWM2 신호 0 > delay(10000); > > > } > > DIR1_OFF; // Ch1 역방향 > DIR2_OFF; // Ch2 역방향 > > for(i=0; i<5; i++){ // 100 번 PWM 발생 > PWM1_ON; // PWM1 신호 1 > PWM2_ON; // PWM2 신호 1 > delay(100000); > PWM1_OFF; // PWM1 신호 0 > PWM2_OFF; // PWM2 신호 0 > delay(200); > > } > } > >} > >// 시간 지연 함수 >void delay(int n) >{ > volatile int i,j; > for(i=0;i<n;i++) > { > for(j=0;j<100;j++); > } >} > >*/ >
5171 답변완료KR-SL16 오성석 2010-05-19 1,329
키트에서 쓰지 않는 포트를 이용해서 IR리모콘 제어나 할수 있습니까?
관리자 답변 NEWTC · 2010-05-19
안녕하세요 사용않는 포트로 연결해서 사용이 가능합니다. 수고하세요 >키트에서 쓰지 않는 포트를 이용해서 >IR리모콘 제어나 할수 있습니까?
5170 답변완료예제소스질문 황선민 2010-05-19 1,410
가속도 센서 예제 소스에서 degree를 구하기 위해 while((ADCSRA & 0x10) != 0x10); X[LOW] = ADCL; X[HIGH] = ADCH; X[HIGH] = X[HIGH]<<8; X[3] = X[LOW] + X[HIGH]; X[3] = X[3] * ((3300/676)/2); buf[2] = (X[3] & 0x3f00)>>8; buf[3] = (X[3] & 0x00ff); 코드를 이렇게 수정했습니다 atmega128을 쓰고 있습니다 제대로 한건가요? 아니면 어떻게 해야하나요? 그리고 X[HIGH] = buf[2] = ADCH & 0x3f; 여기서 & 0x3f 는 왜 한건지 모르겠습니다
관리자 답변 NEWTC · 2010-05-19
>가속도 센서 예제 소스에서 degree를 구하기 위해 안녕하세요 >X[HIGH] = buf[2] = ADCH & 0x3f; & 앤드 비트 연산자 입니다. 보통 필요한 비트만 골라낼때 사용합니다. 가속도 틸트 (기울기) 구하는 방법은 업로드된 문서를 참조 하시길 바랍니다. 수고하세요 > >while((ADCSRA & 0x10) != 0x10); >X[LOW] = ADCL; >X[HIGH] = ADCH; >X[HIGH] = X[HIGH]<<8; >X[3] = X[LOW] + X[HIGH]; >X[3] = X[3] * ((3300/676)/2); >buf[2] = (X[3] & 0x3f00)>>8; >buf[3] = (X[3] & 0x00ff); > >코드를 이렇게 수정했습니다 atmega128을 쓰고 있습니다 >제대로 한건가요? 아니면 어떻게 해야하나요? > >그리고 > >X[HIGH] = buf[2] = ADCH & 0x3f; > >여기서 & 0x3f 는 왜 한건지 모르겠습니다
5169 답변완료AB-M128-B 전원관련 문의 입니다. 문승모 2010-05-19 1,398
제가 이 제품을 LED제어로 사용하려고하는데요 LED를 대략 16~32개를 사용하려고 합니다. DC 12V 어댑터를 사려는데 허용 전류가 어느정도인 것을 사용해야 할까요? 또 이렇게 LED를 사용하더라도 AVR에 무리는 가지않을지 궁금합니다~!
관리자 답변 NEWTC · 2010-05-19
안녕하세요 보통 일반LED 에서 소모하는 전류는 10~20mA 정도입니다. 최대소모량으로 계산하면 10개당 200mA 입니다. 12볼트에 1A사용하시면 될것 같네요 수고하세요 >제가 이 제품을 LED제어로 사용하려고하는데요 > >LED를 대략 16~32개를 사용하려고 합니다. > >DC 12V 어댑터를 사려는데 허용 전류가 어느정도인 것을 사용해야 할까요? > >또 이렇게 LED를 사용하더라도 AVR에 무리는 가지않을지 > >궁금합니다~!
5168 답변완료밑에 모터 퍼짐 현상을 질문한 학생입니다. 김호연 2010-05-19 1,256
카페에 답글 달아주신것도 읽고 여기 Q&A에 올려주신것도 읽었습니다.. 카페에다가는 다시 질문을 남겼는데 시간이 부족해서 이곳에다가도 다시 남깁니다. 답변주신 전류공급이 부족한다고 하셨는데, 저희는 뉴티씨에서 모터 구입시 24V 100W SMPS를 같이 구매해서 그것을 사용하고 있습니다. 연결은 SMPS->5V레귤레이터 -> MCU SMPS->5V레귤레이터 -> 모터 전원 SMPS->CS2 이렇게 연결 된 상태입니다. 말씀하신 전류 부족을 생각해 보았는데 전류가 부족하여 모터가 멈추는 상태라면 모터에 발열이 심하지 않나요? 발열은 거의 없다시피 합니다(400RPM에서 계속 멈춰서 그런지는 모르겠지만...) (아 그리고 MS2와 CS2 두 모터드라이버를 다 가지고 있어서 착각했는데 MS2가 아닌 CS2를 사용중입니다..) 모터 드라이버는 3A까지 공급이 가능하다고 나와있는데 가속테이블 제작 전에 전류를 좀 더 공급하려고 모터드라이버에 있는 전류 공급 가변저항을 MAX가까이 올렸더니 타는 냄새가 나서 급히 가운데로 놓은 후 변경하지를 않았는데요, CS2에서 가변저항을 얼마정도로 하는게 모터에 충분한 전류를 줄 수 있을까요?? 또한 전류공급 전선 VCC와 GND는 학교 실습실에서 사용하는 브레드보드용 굵은 단선을 사용합니다. 게다가 단선으로 전원 공급 후 단선 위에 납으로 굵게 해놨구요... 변수가 너무많아 찾기가 힘드네요 ㅠ -24V 100W SMPS를 사용하는데도 전류가 부족할 수 있나요? -그렇다면 모터 드라이버에서 충분한 전력을 주지 못하는것인지?(가변저항은 가운데 있습니다.) -아니면 모터의 고장이라던가 -그것도 아니라면 가속테이블이 너무 급한 경사로 올라가서 그러는것인가... 마음이 급하여 뉴티씨 카페에 덧글과 이곳에도 글을 남겨봅니다. 답변기다리겠습니다. 감사합니다 (__)
관리자 답변 NEWTC · 2010-05-20
안녕하세요 24V 100W , 9KG 스텝모터를 구동시키는 것은 별 무리 없습니다. 제가 ms2p 로 테스트 해본 결과 클럭 주파수 5000hz 넘어가면 탈조가 일어났습니다. 그래프상 5kHz 이면 1500rpm 입니다. 제가 한 가속테이블은 대략 1초 20kHz간격으로 주파수를 올렸습니다. 모터가 이상하다고 느끼시면 본사로 방문하시거나 택배를 보내시어 테스트를 받아 보시길 바랍니다. 수고하세요 >카페에 답글 달아주신것도 읽고 여기 Q&A에 올려주신것도 읽었습니다.. > >카페에다가는 다시 질문을 남겼는데 시간이 부족해서 이곳에다가도 다시 남깁니다. > >답변주신 전류공급이 부족한다고 하셨는데, > >저희는 뉴티씨에서 모터 구입시 24V 100W SMPS를 같이 구매해서 그것을 > >사용하고 있습니다. > >연결은 > >SMPS->5V레귤레이터 -> MCU >SMPS->5V레귤레이터 -> 모터 전원 >SMPS->CS2 > >이렇게 연결 된 상태입니다. > >말씀하신 전류 부족을 생각해 보았는데 > >전류가 부족하여 모터가 멈추는 상태라면 모터에 발열이 심하지 않나요? > >발열은 거의 없다시피 합니다(400RPM에서 계속 멈춰서 그런지는 모르겠지만...) > >(아 그리고 MS2와 CS2 두 모터드라이버를 다 가지고 있어서 착각했는데 >MS2가 아닌 CS2를 사용중입니다..) > >모터 드라이버는 3A까지 공급이 가능하다고 나와있는데 > >가속테이블 제작 전에 전류를 좀 더 공급하려고 모터드라이버에 있는 > >전류 공급 가변저항을 MAX가까이 올렸더니 타는 냄새가 나서 급히 > >가운데로 놓은 후 변경하지를 않았는데요, > >CS2에서 가변저항을 얼마정도로 하는게 모터에 충분한 전류를 줄 수 있을까요?? > > >또한 전류공급 전선 VCC와 GND는 학교 실습실에서 사용하는 브레드보드용 > >굵은 단선을 사용합니다. > >게다가 단선으로 전원 공급 후 단선 위에 납으로 굵게 해놨구요... > >변수가 너무많아 찾기가 힘드네요 ㅠ > >-24V 100W SMPS를 사용하는데도 전류가 부족할 수 있나요? > >-그렇다면 모터 드라이버에서 충분한 전력을 주지 못하는것인지?(가변저항은 가운데 있습니다.) > >-아니면 모터의 고장이라던가 > >-그것도 아니라면 가속테이블이 너무 급한 경사로 올라가서 그러는것인가... > >마음이 급하여 뉴티씨 카페에 덧글과 이곳에도 글을 남겨봅니다. > >답변기다리겠습니다. > >감사합니다 (__)
5167 답변완료스테핑라인트레이서 박인용 2010-05-19 1,298
스테핑 라인트레이서 완제품을 구매했습니다. 이 제품에서 남은 포트를 이용해 RF모듈을 장착할수 있는지 궁금합니다. 아니면 RF모듈을 통해서 라인트레이서의 역할을 RC카처럼 무선조종이 가능할수 있는 방법이 있는지 알려주십시오!
관리자 답변 NEWTC · 2010-05-19
안녕하세요 rf 모듈은 uart 통신으로 연결이 가능합니다. 일반포트가 아니 uart포트를 사용해야합니다. mega128일경우는 uart 2개가 있습니다. mega16 은 uart 1개입니다. uart 하나당 2개 포트 rx ,td 가 존재합니다. 구현하실려는 것은 가능하고 코드는 짜드릴지는 않습니다. 수고하세요 >스테핑 라인트레이서 완제품을 구매했습니다. >이 제품에서 남은 포트를 이용해 >RF모듈을 장착할수 있는지 궁금합니다. >아니면 RF모듈을 통해서 라인트레이서의 역할을 >RC카처럼 무선조종이 가능할수 있는 방법이 있는지 알려주십시오!
5166 답변완료감사합니다!! 한가지 더 질문이있어요^^; 김영훈 2010-05-19 1,324
RF모듈 테스트해봤는데 정말 잘되더군요^^ 감사합니다. 제가 한가지 더 추가를 해보려하는데... 생각처럼 잘안되서...조언한번 더 구하려고 이렇게 질문 드립니다^^;; 오늘 알려주신 코드비전 RF테스트 소스에서 포트A번을 제어하고싶은데.. 포트A에 스위치를 달고 스위치가 on 되면 "RF TEST" 라는 문구를 RF모듈로 전송하는건 어떻게해야하나요? 예제랑 찾아서 조합하면서 해보고있는데 잘 안되더라구요.. 부탁드립니다^^
관리자 답변 NEWTC · 2010-05-19
안녕하세요 예제코드 제공과 하드웨어 대해 문의만을 받습니다. 코드 작성은 해드릴지 않습니다. 포트A 0번째 핀에 스위치 일경우 if (PINA&0x01 ) // 액티브 하이 printf ( "rf test"); if ( ~(PINA&0x01) ) // 액티브 로우 printf ( "rf test"); 수고하세요 >RF모듈 테스트해봤는데 정말 잘되더군요^^ 감사합니다. >제가 한가지 더 추가를 해보려하는데... >생각처럼 잘안되서...조언한번 더 구하려고 이렇게 질문 드립니다^^;; >오늘 알려주신 코드비전 RF테스트 소스에서 >포트A번을 제어하고싶은데.. >포트A에 스위치를 달고 스위치가 on 되면 "RF TEST" 라는 문구를 RF모듈로 전송하는건 어떻게해야하나요? >예제랑 찾아서 조합하면서 해보고있는데 잘 안되더라구요.. >부탁드립니다^^
5165 답변완료AM-2561PRO Module 에서.. 정진승 2010-05-19 1,358
AM-2561PRO Module에서요 . 전원 5V를 모듈 위에 전원 커넥터에 연결하면 따로 핀에 있는 VCC에 5V를 따로 안 주어도 되나요? GND도요.
관리자 답변 NEWTC · 2010-05-19
안녕하세요 2핀컨넥터에 VCC에 5볼트를 공급하면 VCC 라고 적혀있는 곳은 전부 연결되어있습니다.; 그러므로 VCC 라는 한곳에만 전압을 인가하면 다른 VCC 핀에 5볼트가 인가됩니다. 수고하세요 >AM-2561PRO Module에서요 . 전원 5V를 모듈 위에 전원 커넥터에 연결하면 따로 핀에 있는 VCC에 5V를 따로 안 주어도 되나요? GND도요.
5164 답변완료RC서보제어 김광수 2010-05-19 1,418
AM-128PRO와 AB-M128-A를 사용하고 있는 사용자입니다. 이두가지를 이용하여 RC서보모터를 5개를 각각 조절하고 싶습니다. 여기에 사용할 수 있는 예제가 있는지 있으면 어디서 파일을 받을 수 있는지 알고 싶습니다.
관리자 답변 NEWTC · 2010-05-19
안녕하세요 기본적인 예제코드 자료실 > 기존자료실에 다 있습니다. 아래는 서보와 관련된 예제코드입니다. http://www.newtc.co.kr/board/zboard.php?id=pds&select_arrange=headnum&desc=asc&page_num=15&selected=&exec=&sn=off&ss=on&sc=off&category=&keyword=%BC%AD%BA%B8 수고하세요 >AM-128PRO와 AB-M128-A를 사용하고 있는 사용자입니다. > >이두가지를 이용하여 RC서보모터를 5개를 각각 조절하고 싶습니다. > >여기에 사용할 수 있는 예제가 있는지 > >있으면 어디서 파일을 받을 수 있는지 알고 싶습니다.