로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
1458 답변완료atmega128 ADC 변환 문제 김민회 2008-08-19 2,190
현재 펀션제너레이터를 사용하여 -2.5 ~ 2.5v (60hz)를 adc를 사용하여 측정된 결과치를 특정 변수에 저장하려고 합니다. 이를 차동 입력을 사용하여 a/d컨버터 기준전압의 선택에 MUX4~0 값을 01001을 사용하여 +단자에 adc1 -단자에 adc0을 사용하고 있습니다. 현재 입력되는 값이 0v를 기준으로 +값은 부드럽게 들어오는데 -값으로 들어오면 값이 이상한 값들이 들어오고 있습니다. 제가 궁금한 사항은 1. 차등 입력 사용시 -단자를 칩의 adc입력포트쪽 접지에 연결해야 하는지 아니면, 펀션제너레이터에서 나오는 출력의 (-)를 -단자로 정한 adc입력포트쪽에 연결해야 하는건가요? 2. codevision에서 ADCW값을 unsigned int값에 저장을 하는데 이값을 unsigned int가 아니라 int로 선언된 변수에 저장해도 상관없는지 궁금합니다. 차등입력시 -값을 출력해야 하기때문에 3. 차등입력 방식의 경우 2의 보수( 0x0200 ~ 0x01FF == -512 ~ 511)로 값이 표현되는데, adc를 작동시키고 ADCW값을 읽어들일때 이 값을 unsigned int가 아닌 int로 받아서 0x01FF를 넘는 숫자에 대해서 2의 보수화를 취해서 출력하는게 맞나요? 코드 참고 읽어 주셔서 감사하겠습니다. 코드 첨부 - codevision code #include <mega128.h> #include <stdio.h> #include <delay.h> #define ADC_START ADCSRA.6=1 #define ADC_CHECK ADCSRA.6=0 #define ADC_EOC ADCSRA.4 int adc_data; // ADC Value variable //ADC Free Runnging Mode void ADC_Init(int channel) { ADMUX = channel | 0x45; //차등입력방식 gain 10,(+):adc1 (-):adc0 ADCSRA = 0xa7; //ADCEN, ADC free runnging mode, xtal/128 시스템 클럭:16Mhz } void adconversion(void) { ADC_START; //ADC_START while(!(ADC_EOC)); //ADC_Convertion if(ADCW > 0x01FF) //2의 보수화 adc_data = (~ADCW+1) * (-1); else adc_data = ADCW; } void main(void) { int adc_value[400]; unsigned int cnt = 0; unsigned int i = 0; unsigned int k = 0; // Ports init DDRC = 0xff; // output Port DDRF = 0x00; // input Port // Timer(s)/Counter(s) TIMSK=0x40; // USART init UCSR0A=0x00; UCSR0B=0x18; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x67;//(xtal - 16MHz) delay_ms(50); //putsf(TITLE); //send_prompt(); //adc_data_Initialize(); ADC_Init(0); for(k = 0 ; k < 400 ; k++) adc_value[k] = 0; while(1) { for(cnt = 0; cnt < 400; cnt++) { adconversion(); adc_value[cnt] = adc_data; } delay_us(100); for( i = 0 ; i<400 ; i++) { printf("%02d ",adc_value[i]); delay_ms(100); } for(k = 0 ; k < 400 ; k++) adc_value[k] = 0; delay_us(100); } }
관리자 답변 N.T.C · 2008-08-20
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. 답변해 드릴께요. 1.-단에 연결해야 겠죠. 2. int로 받으셔도 무방합니다. 값 계산만 잘 하시면 되겠네요. ADC에서 ADMUX |= 0x4b; 로 잡으시면 Ch1을 +, Ch2를 -로 잡는 것이 맞구요. 그에 대한 변환 결과는 -512~+511 범위의 값을 가지는 데, 표현법이 10비트 2의 보수 표현법을 사용합니다. 따라서 0x200 ~ 0x3ff~ 0 ~ 0x1ff 가 됩니다. 고객님이 짜신 소스를 보면, 아주 잘 짜신 것 같습니다. 그렇게 이용하시는 것도 좋아 보입니다. if(ADCW > 0x01FF) //2의 보수화 adc_data = (~ADCW+1) * (-1); else adc_data = ADCW; 또한, 차동 입력으로 사용하실 경우, 초기가 몇개는 버리시는 것이 좋습니다. 결과값이 정확하지 않으니까요. 그리고, 입력이 없으면, 공기 중의 변하는 미세 전압 값을 증폭해서 나오게 되어서, 값이 계속 변하게 됩니다. 반드시 GND로 연결하시거나, VCC로 연결하시거나 하셔서, 값을 보시는 것이 좋겠습니다. 감사합니다. >현재 펀션제너레이터를 사용하여 -2.5 ~ 2.5v (60hz)를 adc를 사용하여 측정된 결과치를 특정 변수에 저장하려고 합니다. > > > >이를 차동 입력을 사용하여 a/d컨버터 기준전압의 선택에 MUX4~0 값을 01001을 사용하여 +단자에 adc1 -단자에 adc0을 > > > >사용하고 있습니다. > > > >현재 입력되는 값이 0v를 기준으로 +값은 부드럽게 들어오는데 -값으로 들어오면 값이 이상한 값들이 들어오고 있습니다. > > > >제가 궁금한 사항은 > > > >1. 차등 입력 사용시 -단자를 칩의 adc입력포트쪽 접지에 연결해야 하는지 아니면, 펀션제너레이터에서 나오는 출력의 (-)를 > > -단자로 정한 adc입력포트쪽에 연결해야 하는건가요? > > > >2. codevision에서 ADCW값을 unsigned int값에 저장을 하는데 이값을 unsigned int가 아니라 int로 선언된 변수에 > > 저장해도 상관없는지 궁금합니다. 차등입력시 -값을 출력해야 하기때문에 > > > >3. 차등입력 방식의 경우 2의 보수( 0x0200 ~ 0x01FF == -512 ~ 511)로 값이 표현되는데, adc를 작동시키고 ADCW값을 > > 읽어들일때 이 값을 unsigned int가 아닌 int로 받아서 0x01FF를 넘는 숫자에 대해서 2의 보수화를 취해서 출력하는게 > > 맞나요? 코드 참고 > > > >읽어 주셔서 감사하겠습니다. > > > >코드 첨부 - codevision code > > > >#include <mega128.h> >#include <stdio.h> >#include <delay.h> > >#define ADC_START ADCSRA.6=1 >#define ADC_CHECK ADCSRA.6=0 >#define ADC_EOC ADCSRA.4 > > > >int adc_data; // ADC Value variable > > > >//ADC Free Runnging Mode >void ADC_Init(int channel) >{ > ADMUX = channel | 0x45; //차등입력방식 gain 10,(+):adc1 (-):adc0 > ADCSRA = 0xa7; //ADCEN, ADC free runnging mode, xtal/128 시스템 클럭:16Mhz >} > >void adconversion(void) >{ > ADC_START; //ADC_START > while(!(ADC_EOC)); //ADC_Convertion > > if(ADCW > 0x01FF) //2의 보수화 > adc_data = (~ADCW+1) * (-1); > else > adc_data = ADCW; >} > >void main(void) >{ > int adc_value[400]; > unsigned int cnt = 0; > unsigned int i = 0; > unsigned int k = 0; > > // Ports init > DDRC = 0xff; // output Port > DDRF = 0x00; // input Port > > // Timer(s)/Counter(s) > TIMSK=0x40; > > // USART init > UCSR0A=0x00; > UCSR0B=0x18; > UCSR0C=0x06; > UBRR0H=0x00; > UBRR0L=0x67;//(xtal - 16MHz) > > delay_ms(50); > //putsf(TITLE); > //send_prompt(); > //adc_data_Initialize(); > ADC_Init(0); > > for(k = 0 ; k < 400 ; k++) > adc_value[k] = 0; > > while(1) > { > for(cnt = 0; cnt < 400; cnt++) > { > adconversion(); > adc_value[cnt] = adc_data; > } > delay_us(100); > for( i = 0 ; i<400 ; i++) > { > printf("%02d ",adc_value[i]); > delay_ms(100); > } > > for(k = 0 ; k < 400 ; k++) > adc_value[k] = 0; > delay_us(100); > } >} >
1457 답변완료2X5 박스케이블 주문 제작 가능한지 문의 드립니다. 최두리 2008-08-19 1,472
저희가 졸업 작품을 하고 있는데요. 길이가 2 미터 정도의 박스케이블을 주문하려고 합니다. 시중에는 잘 안나와 있어서 이렇게 글 올렸습니다. 주문 제작이 가능한지요? 수량은 2개정도 이고요.
관리자 답변 &#33258;&#21205;&#36 · 2008-11-09
<a href="http://www.decksanddice.com/">&#33258;&#21205;&#36554;&#20445;&#38522;</a>&#12398;<a href="http://www.decksanddice.com/">&#19968;&#25324;&#35211;&#31309;&#12418;&#12426;</a>&#12394;&#12425;&#12458;&#12473;&#12473;&#12513;<a href="http://www.decksanddice.com/">&#12521;&#12531;&#12461;&#12531;&#12464;</a>&#12391;&#24505;&#24213;<a href="http://www.decksanddice.com/">&#27604;&#36611;</a>&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<a href="http://www.decksanddice.com/">&#21475;&#12467;&#12511;</a>&#12395;&#12424;&#12427;&#24847;&#35211;&#12418;&#21442;&#32771;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<a href="http://www.esthetic-live.net/">&#12456;&#12473;&#12486;</a>&#12395;&#34892;&#12367;&#12394;&#12425;<a href="http://www.esthetic-live.net/">&#20840;&#22269;</a>&#12363;&#12425;&#26908;&#32034;&#12391;&#12365;&#12427;&#12509;&#12540;&#12479;&#12523;&#12469;&#12452;&#12488;&#12434;&#21033;&#29992;&#12375;&#12390;&#12415;&#12414;&#12375;&#12423;&#12358;&#12290;<a href="http://www.esthetic-live.net/">&#12450;&#12472;&#12450;&#12531;&#12456;&#12473;&#12486;</a>&#12364;&#29694;&#22312;&#22823;&#20154;&#27671;&#12290;<a href="http://www.esthetic-live.net/">&#30185;&#36523;</a>&#12289;<a href="http://www.esthetic-live.net/">&#12513;&#12531;&#12474;&#12456;&#12473;&#12486;</a>&#12394;&#12393;&#12395;&#33288;&#21619;&#12364;&#12354;&#12427;&#26041;&#12364;&#26368;&#36817;&#12391;&#12399;&#22810;&#12356;&#12424;&#12358;&#12391;&#12377;&#12290;&#26368;&#36817;&#12391;&#12399;<a href="http://www.eternity-wedding.net/">&#28023;&#22806;&#25369;&#24335;</a>&#12434;&#12377;&#12427;&#12459;&#12483;&#12503;&#12523;&#12364;&#22810;&#12367;&#12394;&#12387;&#12390;&#12365;&#12390;&#12362;&#12426;&#12414;&#12377;&#12290;<a href="http://www.eternity-wedding.net/">&#32080;&#23130;&#24335;</a>&#12399;&#28023;&#22806;&#12391;&#12290;<a href="http://www.eternity-wedding.net/">&#32080;&#23130;</a>&#12392;<a href="http://www.eternity-wedding.net/">&#28023;&#22806;&#26053;&#34892;</a>&#12434;&#19968;&#32210;&#12395;&#12391;&#12365;&#12427;&#12398;&#12391;<a href="http://www.eternity-wedding.net/">&#12454;&#12456;&#12487;&#12451;&#12531;&#12464;</a>&#26053;&#34892;&#12392;&#12375;&#12390;&#12418;&#20154;&#27671;&#12434;&#38598;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;<a href="http://www.fx-victor.net/">FX</a>&#65288;<a href="http://www.fx-victor.net/">&#22806;&#22269;&#28858;&#26367;&#35388;&#25312;&#37329;&#21462;&#24341;</a>&#65289;&#12399;&#12495;&#12452;&#12522;&#12473;&#12463;&#12495;&#12452;&#12522;&#12479;&#12540;&#12531;&#12394;&#28858;&#26367;<a href="http://www.fx-victor.net/">&#21462;&#24341;</a>&#12391;&#12377;&#12290;<a href="http://www.fx-victor.net/">&#21021;&#24515;&#32773;</a>&#12398;&#26041;&#12399;&#35079;&#25968;&#12398;&#35388;&#21048;&#20250;&#31038;&#12434;<a href="http://www.fx-victor.net/">&#27604;&#36611;</a>&#12375;&#12390;&#33258;&#20998;&#12398;&#21462;&#24341;&#12479;&#12452;&#12503;&#12395;&#21512;&#12431;&#12379;&#12390;&#21475;&#24231;&#38283;&#35373;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;&#35370;&#21839;&#32773;&#12398;&#25968;&#12434;&#35336;&#28204;&#12391;&#12365;&#12427;<a href="http://www.happy-counter.net/">&#12450;&#12463;&#12475;&#12473;&#12459;&#12454;&#12531;&#12479;&#12540;</a>&#12399;&#12289;<a href="http://www.happy-counter.net/">&#31777;&#21336;</a>&#12391;&#12377;&#12368;&#12395;&#12399;&#12376;&#12417;&#12425;&#12428;&#12427;<a href="http://www.happy-counter.net/">&#12450;&#12463;&#12475;&#12473;&#12459;&#12454;&#12531;&#12479;</a>&#12434;&#20351;&#12387;&#12390;&#12415;&#12390;&#12399;&#12356;&#12363;&#12364;&#12391;&#12377;&#12363;&#12290;<a href="http://www.happy-counter.net/">&#28961;&#26009;&#12459;&#12454;&#12531;&#12479;&#12540;</a>&#12394;&#12398;&#12391;&#12289;&#20313;&#35336;&#12394;&#25163;&#32154;&#12365;&#12399;&#24517;&#35201;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;<a href="http://www.happy-counter.net/">&#28961;&#26009;&#12459;&#12454;&#12531;&#12479;</a>&#12391;&#12377;&#12368;&#12395;&#12507;&#12540;&#12512;&#12506;&#12540;&#12472;&#12398;&#12450;&#12463;&#12475;&#12473;&#25968;&#12434;&#35336;&#28204;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;<a href="http://www.homey-home.net/">&#19981;&#21205;&#29987;</a>&#24773;&#22577;&#12364;&#28288;&#36617;&#12290;<a href="http://www.homey-home.net/">&#36035;&#36024;</a>&#24773;&#22577;&#12363;&#12425;<a href="http://www.homey-home.net/">&#20303;&#23429;</a>&#12420;<a href="http://www.homey-home.net/">&#12510;&#12531;&#12471;&#12519;&#12531;</a>&#12289;&#12373;&#12425;&#12395;<a href="http://www.homey-home.net/">&#19968;&#25144;&#24314;&#12390;</a>&#12398;&#29289;&#20214;&#12414;&#12391;&#24133;&#24195;&#12367;&#21462;&#12426;&#25201;&#12387;&#12390;&#12362;&#12426;&#12414;&#12377;&#12290;&#26368;&#36817;&#20154;&#27671;&#12434;&#38598;&#12417;&#12390;&#12356;&#12427;<a href="http://www.implant-lab.net/">&#12452;&#12531;&#12503;&#12521;&#12531;&#12488;</a>&#27835;&#30274;&#12290;&#20840;&#22269;&#12398;<a href="http://www.implant-lab.net/">&#27503;&#31185;</a><a href="http://www.implant-lab.net/">&#21307;&#38498;</a>&#12391;&#27835;&#30274;&#12364;&#21463;&#12369;&#12425;&#12428;&#12414;&#12377;&#12290;<a href="http://www.implant-lab.net/">&#26009;&#37329;</a>&#12418;&#12381;&#12428;&#12411;&#12393;&#39640;&#12367;&#12394;&#12367;&#12289;&#12377;&#12409;&#12390;&#21512;&#12431;&#12379;&#12390;&#12418;&#12381;&#12428;&#12411;&#12393;<a href="http://www.implant-lab.net/">&#36027;&#29992;</a>&#12418;&#12363;&#12363;&#12425;&#12394;&#12356;&#12398;&#12391;&#12458;&#12473;&#12473;&#12513;&#12391;&#12377;&#12290;<a href="http://www.kabu-load.net/">&#26666;</a>&#12434;&#22987;&#12417;&#12425;&#12428;&#12427;&#26041;&#12399;<a href="http://www.kabu-load.net/">&#26666;&#24335;</a>&#12434;&#12399;&#12376;&#12417;&#12427;&#21069;&#12395;<a href="http://www.kabu-load.net/">&#26666;&#24335;&#25237;&#36039;</a>&#12395;&#38306;&#12377;&#12427;&#30693;&#35672;&#12434;&#12375;&#12387;&#12363;&#12426;&#36523;&#12395;&#12388;&#12369;&#12390;&#12362;&#12365;&#12414;&#12375;&#12423;&#12358;&#12290;<a href="http://www.kabu-load.net/">&#21021;&#24515;&#32773;</a>&#12398;&#26041;&#12399;<a href="http://www.kabu-load.net/">&#21462;&#24341;</a>&#12434;&#12354;&#12379;&#12387;&#12390;&#22833;&#25943;&#12377;&#12427;&#12371;&#12392;&#12364;&#22810;&#12356;&#12424;&#12358;&#12391;&#12377;&#12290;<a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12523;</a>&#12395;&#33288;&#21619;&#12364;&#12354;&#12387;&#12390;&#12289;<a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12522;&#12473;&#12488;</a>&#12434;&#30446;&#25351;&#12375;&#12390;&#12356;&#12427;&#26041;&#12364;<a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12523;&#12450;&#12540;&#12488;</a>&#12434;&#21193;&#24375;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;<a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12523;&#12469;&#12525;&#12531;</a>&#12395;&#23601;&#32887;&#12377;&#12428;&#12400;&#12289;<a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12523;&#12487;&#12470;&#12452;&#12531;</a>&#12434;&#21193;&#24375;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;&#32654;&#23481;&#12395;&#33288;&#21619;&#12364;&#12354;&#12427;&#26041;&#12399;&#12493;&#12452;&#12523;&#12398;<a href="http://www.kualia-nails.com/school/index.html">&#12496;&#12452;&#12458;&#12472;&#12455;&#12523;&#12473;&#12463;&#12540;&#12523;</a>&#12395;&#36890;&#12356;&#12414;&#12379;&#12435;&#12363;&#12290;<a href="http://www.kualia-nails.com/school/index.html">&#12493;&#12452;&#12523;&#12473;&#12463;&#12540;&#12523;</a>&#12418;&#22823;&#20154;&#27671;&#38283;&#26657;&#20013;&#12290;&#12493;&#12452;&#12523;&#12398;<a href="http://www.kualia-nails.com/school/index.html">&#36039;&#26684;</a>&#12434;&#21462;&#24471;&#12377;&#12427;&#12394;&#12425;<a href="http://www.kualia-nails.com/school/index.html">&#26481;&#20140;</a>&#12289;<a href="http://www.kualia-nails.com/school/index.html">&#22823;&#38442;</a>&#12394;&#12393;&#12434;&#20013;&#24515;&#12395;&#24195;&#12364;&#12427;&#12493;&#12452;&#12523;&#12473;&#12463;&#12540;&#12523;&#12364;&#12458;&#12473;&#12473;&#12513;&#12290;
1456 답변완료초음파 센서 질문입니다. madin 2008-08-19 1,423
SRF05 초음파를 사용하고 있습니다. 여기 있는 소스를 이용하는데 거리가 출력되지 않습니다. PF4번에 트리거 PF6번에 에코를 접속했습니다. 소스가 문제인지 납땜이 문제인지 알 수가 없네요;; #include <iom128v.h> #include <macros.h> #include <stdio.h> #define SersorPort PORTF #define SersorPinInput PINF #define ON 1 #define OFF 0 unsigned int dist=0, // 거리 dist_buff=0, // 거리임시저장 buff_cnt=0, // 버퍼카운트 waveflag=0, // 신호플래그 clrcnt=0; // 클리어카운트 unsigned int count=0; // 트리거 신호 보냄 void Sensor_TRIGGER_ON(void) { SersorPort = SersorPort | 0x10; } // 트리거 신호 보내지 않음 void Sensor_TRIGGER_OFF(void) { SersorPort = SersorPort & 0xEF; } //에코 신호 char Sensor_ECHO(void) { return ((SersorPinInput & 0x40) >> 6); } //트리거 신호 char Sensor_TRIGGER(void) { return ( (SersorPinInput & 0x10) >> 4 ); } 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 = 0xBF; PORTG = 0x00; DDRG = 0x03; } //TIMER0 initialize - prescale:32 // WGM: Normal // desired value: 32uSec // actual value: 32.000uSec (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xF0; //set count OCR0 = 0x10; TCCR0 = 0x03; //start timer /* TCNT0 = 0xF0; //set count OCR0 = 0x10; TCCR0 = 0x03; //start timer */} #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0xf0; //reload counter value count++; //32usec마다 카운트 올림 if(count>1500) //카운트 1500마다 신호 한번씩 보내고 클리어 카운트 올림 { Sensor_TRIGGER_ON(); count=0; clrcnt++; } if(clrcnt>50) //클리어 카운트가 100이면 거리버퍼 클리어. 클리어카운트 초기화. { dist_buff=0; clrcnt=0; } if(waveflag==OFF) //전단계까지 신호 받은 기억 없는데 { if(Sensor_ECHO()==ON) //좀전에 받았으면 신호 받았다고 기억함. 버퍼 카운트에 지금까지 카운트 값을 넣어줌 { waveflag=ON; buff_cnt=count; } Sensor_TRIGGER_OFF(); //트리거 신호 끔 } else if(waveflag==ON) { //신호 받았으면 if(Sensor_ECHO()==OFF) { //에코신호 끝났으면 dist = ((count-buff_cnt)/2); //거리는 카운트 - 버퍼카운트 나누기 2 dist_buff = dist; //거리버퍼는 거리 waveflag = OFF; //플래그 내리고 count = 0; //카운트와 클리어카운트 초기화 clrcnt = 0; } } } //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 = 0xF8; } #pragma interrupt_handler uart0_rx_isr:19 void uart0_rx_isr(void) { //uart has received a character in UDR } #pragma interrupt_handler uart0_udre_isr:20 void uart0_udre_isr(void) { //character transferred to shift register so UDR is now empty } #pragma interrupt_handler uart0_tx_isr:21 void uart0_tx_isr(void) { //character has been transmitted } //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(); timer0_init(); uart0_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x01; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void delay(int msec) { int i,j; for(i=0; i<msec; i++) for(j=0; j<255; j++); } // void main(void) { init_devices(); //insert your functional code here... while(1) { printf("\\n\\r DISTANCE = %d count = %d ",dist,count); } }
관리자 답변 N.T.C · 2008-08-19
안녕하세요? 고객님, 초음파 센서 SRF-04로 후방 감지계를 만든 예제입니다. 소스 코드, 회로도, 문서 모두 올려드립니다. 참고하셔서, 더 좋은 작품 만드시길 바랍니다. - 문서 - http://www.newtc.co.kr/board/view.php?id=pds&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=작품&select_arrange=headnum&desc=asc&no=202 수고하세요. >SRF05 초음파를 사용하고 있습니다. > >여기 있는 소스를 이용하는데 거리가 출력되지 않습니다. > > >PF4번에 트리거 PF6번에 에코를 접속했습니다. > >소스가 문제인지 납땜이 문제인지 알 수가 없네요;; > > > > #include <iom128v.h> >#include <macros.h> >#include <stdio.h> > >#define SersorPort PORTF >#define SersorPinInput PINF > > >#define ON 1 >#define OFF 0 > >unsigned int dist=0, // 거리 > dist_buff=0, // 거리임시저장 > buff_cnt=0, // 버퍼카운트 > waveflag=0, // 신호플래그 > clrcnt=0; // 클리어카운트 >unsigned int count=0; > >// 트리거 신호 보냄 >void Sensor_TRIGGER_ON(void) >{ > SersorPort = SersorPort | 0x10; >} > >// 트리거 신호 보내지 않음 >void Sensor_TRIGGER_OFF(void) >{ > SersorPort = SersorPort & 0xEF; >} > >//에코 신호 >char Sensor_ECHO(void) >{ > return ((SersorPinInput & 0x40) >> 6); >} > >//트리거 신호 >char Sensor_TRIGGER(void) >{ > return ( (SersorPinInput & 0x10) >> 4 ); >} > > >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 = 0xBF; >PORTG = 0x00; >DDRG = 0x03; >} > >//TIMER0 initialize - prescale:32 >// WGM: Normal >// desired value: 32uSec >// actual value: 32.000uSec (0.0%) >void timer0_init(void) >{ >TCCR0 = 0x00; //stop >ASSR = 0x00; //set async mode >TCNT0 = 0xF0; //set count >OCR0 = 0x10; >TCCR0 = 0x03; //start timer > >/* >TCNT0 = 0xF0; //set count >OCR0 = 0x10; >TCCR0 = 0x03; //start timer >*/} > >#pragma interrupt_handler timer0_ovf_isr:17 >void timer0_ovf_isr(void) >{ >TCNT0 = 0xf0; //reload counter value >count++; //32usec마다 카운트 올림 > >if(count>1500) //카운트 1500마다 신호 한번씩 보내고 클리어 카운트 올림 >{ > Sensor_TRIGGER_ON(); > count=0; > clrcnt++; >} > >if(clrcnt>50) //클리어 카운트가 100이면 거리버퍼 클리어. 클리어카운트 초기화. >{ > dist_buff=0; > clrcnt=0; >} > >if(waveflag==OFF) //전단계까지 신호 받은 기억 없는데 >{ > if(Sensor_ECHO()==ON) //좀전에 받았으면 신호 받았다고 기억함. 버퍼 카운트에 지금까지 카운트 값을 넣어줌 > { > waveflag=ON; > buff_cnt=count; > } > Sensor_TRIGGER_OFF(); //트리거 신호 끔 >} else if(waveflag==ON) { //신호 받았으면 > if(Sensor_ECHO()==OFF) { //에코신호 끝났으면 > dist = ((count-buff_cnt)/2); //거리는 카운트 - 버퍼카운트 나누기 2 > dist_buff = dist; //거리버퍼는 거리 > waveflag = OFF; //플래그 내리고 > count = 0; //카운트와 클리어카운트 초기화 > clrcnt = 0; > } >} > >} > >//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 = 0xF8; >} > >#pragma interrupt_handler uart0_rx_isr:19 >void uart0_rx_isr(void) >{ >//uart has received a character in UDR >} > >#pragma interrupt_handler uart0_udre_isr:20 >void uart0_udre_isr(void) >{ >//character transferred to shift register so UDR is now empty >} > >#pragma interrupt_handler uart0_tx_isr:21 >void uart0_tx_isr(void) >{ >//character has been transmitted >} > >//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(); >timer0_init(); >uart0_init(); > >MCUCR = 0x00; >EICRA = 0x00; //extended ext ints >EICRB = 0x00; //extended ext ints >EIMSK = 0x00; >TIMSK = 0x01; //timer interrupt sources >ETIMSK = 0x00; //extended timer interrupt sources >SEI(); //re-enable interrupts >//all peripherals are now initialized >} > >void delay(int msec) >{ > int i,j; > for(i=0; i<msec; i++) > for(j=0; j<255; j++); >} > >// >void main(void) >{ >init_devices(); >//insert your functional code here... >while(1) >{ > > printf("\\n\\r DISTANCE = %d count = %d ",dist,count); > > >} >} > >
1455 답변완료장비이상 문의합니다 전용복 2008-08-19 1,445
avr 128키트 제품을 석영전자에서 구매하였습니다. 품목중 AVR ISP Pro AD-ISPPRO제품에 이상이 있습니다. 증상은 연결시 보드가 다운 됩니다. 같은 제품이 있어서 확인시 avr메인보드는 이상없는것을 확인했습니다.
관리자 답변 N.T.C · 2008-08-19
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. 죄송합니다. 케이블에 불량이 있는 것 같습니다. 저희 회사로 제품을 삼성택배나 우체국택배로 보내주시면, 새 제품으로 교환하여 택배로 보내드리겠습니다. FAQ의 A/S 절차를 참고하시면 편리하게 보내실 수 있습니다. 고객님의 경우 택배비를 전액 저희가 부담합니다. 수신자 부담으로 보내주세요. 감사합니다. >avr 128키트 제품을 석영전자에서 구매하였습니다. > >품목중 AVR ISP Pro AD-ISPPRO제품에 이상이 있습니다. > >증상은 연결시 보드가 다운 됩니다. > >같은 제품이 있어서 확인시 avr메인보드는 이상없는것을 확인했습니다. > > > > >
1454 답변완료AM-3AXIS 가속도 모듈을 구입하고 문제가 생겼습니다. 신종혁 2008-08-18 1,387
오늘 인터넷으로 주문한 AM-3AXIS 모듈이 도착하였습니다. 귀사에서 제공한 메뉴얼을 보고 VCC에3.3V를 인가하고 GND를 연결하였습니다. 그리고 7번핀(X축)에 나오는 전압을 측정하였더니 160mV 가 나오고, 센서를 흔들어보아도 전혀 반응을 하지 않습니다. 제가 사용한 방법이 틀린건가요? 답변을 달아주세요~
관리자 답변 신종혁 · 2008-08-18
처음에는 안되다가 모드를 01, 10으로 바꾸다 보니까 갑자기 되네요 -_-; 혹시 안되시는분들 Mode를 여러번 바꾸어보세요 갑자기 되요-_-
1453 답변완료스위치 문을 이용한 모터의 구동엔 관해서..질문있습니다.. 박준혁 2008-08-18 1,394
kd-128 pro보드를 사용하구 있구요.. 모터구동모듈은 am-ms2 펄스 구동모듈을 사용하고 있습니다. 모터의 구동을 위해 모터 클럭에 관한 함수를 while문 안에 넣어서 구동하면 모터를 구동할 수 있는데, switch-case문을 이용하여서 코딩을 하려하는데 생각같이 쉽지않아 질문드립니다.. while(1){ if(PIND != 0x00){ keyin = PIND; } switch(keyin){ case 1: MOTOR_LEFT_CLK; delay(2); MOTOR_LEFT_CLK; delay(2); break; case 2: MOTOR_LEFT_CLK; delay(3); MOTOR_LEFT_CLK; delay(3); break; default: ; } } 각 스위치의 입력에따라 모터의 속도가 달라지도록 하고 싶습니다.
관리자 답변 N.T.C · 2008-08-19
안녕하세요? 고객님 말로 설명드리기에는 참 어려움이 있네요. 참고되실 만한, 소스를 제작한 것이 있어서, 올려드리오니, 참고하시기 바랍니다. 타이머를 활용하여, MS2에 넣어주는 클럭을 넣는 타이밍을 조절하면 속도가 조절 됩니다. TS8을 이용하여 속도와 아울러 방향도 조절하도록 프로그래밍 되어 있습니다. 수고하세요. >kd-128 pro보드를 사용하구 있구요.. >모터구동모듈은 am-ms2 펄스 구동모듈을 사용하고 있습니다. > >모터의 구동을 위해 모터 클럭에 관한 함수를 while문 안에 넣어서 구동하면 모터를 구동할 수 있는데, > >switch-case문을 이용하여서 코딩을 하려하는데 생각같이 쉽지않아 질문드립니다.. > > >while(1){ > if(PIND != 0x00){ > keyin = PIND; > } > switch(keyin){ > case 1: MOTOR_LEFT_CLK; > delay(2); > MOTOR_LEFT_CLK; > delay(2); > break; > case 2: MOTOR_LEFT_CLK; > delay(3); > MOTOR_LEFT_CLK; > delay(3); > break; > default: ; > } > } > > >각 스위치의 입력에따라 모터의 속도가 달라지도록 하고 싶습니다.
1452 답변완료전에 질문드렸던사람인대요... 김대선 2008-08-18 1,385
3축가속도센서 소스 질문 드렸던 사람인대요.. 코드비전소스는 힘들고 ICCAVR7에 맞는 소스는 주실수 있다고 하셨는데 그거라도 제 메일로 보내주시면 안될까요^^:; 지금보니깐 제 ICCAVR이 7이네요.. 빠른시간안에 부탁드립니다 ㅠㅠ
관리자 답변 N.T.C · 2008-08-18
안녕하세요? 고객님, 요청하신 소스는 첨부하였습니다. ICCAVR V7 용 소스입니다. 자료실의 3축 가속도 센서용 자료에서 3축 가속도 센서 마우스 용 소스와 윈도우용 소스라고 된 3축 가속도 센서용 소스 두가지를 모두 만들어 드렸습니다. 윈도 프로그램은 자료실과 각각 같은 것을 쓰시면 됩니다. 감사합니다. >3축가속도센서 소스 질문 드렸던 사람인대요.. >코드비전소스는 힘들고 ICCAVR7에 맞는 소스는 주실수 있다고 하셨는데 >그거라도 제 메일로 보내주시면 안될까요^^:; >지금보니깐 제 ICCAVR이 7이네요.. > >빠른시간안에 부탁드립니다 ㅠㅠ
1451 답변완료에구 답변 감사합니다.^^ 이영균 2008-08-18 1,376
Device 3% full. Cannot find source file D:\\AM_MS2_example\\AM-MS2_ATMEGA128_timer이용\\ex_u_step_driver.c iccavr에서 새프로젝트를 만들고 c. 파일이나 s. 파일을 불러서 빌드 하면 들어 가는 걸로 아는데 계속 저렇게 되네요....ㅠㅠ 방문하면 직원분이 귀찮으실거같고.. 원격으로 혹시 컴파일해서 넣으는거 해주실수있나요?? ㅠ.ㅠ
관리자 답변 N.T.C · 2008-08-18
직접 방문해 주셔도 되구요. 방문하시면 친절히 답변해 드립니다. 방문이 어려우시면 연락처와 네이트온 ID 남겨 주세요. 감사합니다. >Device 3% full. >Cannot find source file D:\\AM_MS2_example\\AM-MS2_ATMEGA128_timer이용\\ex_u_step_driver.c > > >iccavr에서 새프로젝트를 만들고 c. 파일이나 s. 파일을 불러서 빌드 하면 들어 > >가는 걸로 아는데 계속 저렇게 되네요....ㅠㅠ > >방문하면 직원분이 귀찮으실거같고.. > > >원격으로 혹시 컴파일해서 넣으는거 해주실수있나요?? > >ㅠ.ㅠ
1450 답변완료스텝모터 모듈관련 질문입니다 ^^ 이민진 2008-08-18 1,426
297없는걸로 구입했는뎁.. 소형스텝모터 4개를 구동시켜려고합니다.. 2개식은 같이 움직이기 때문에 움직임은 2개만 있으면됩니답.. 스텝모터모듈 1개에 스텝모터를 2개식 연결해서 써도되는지요? 일반적인 라인트레이서에 들어가는 것보다 휠씬 작은 사이즈의 스텝모터를 사용 합니다.. 되긴 될듯한뎁.. 자세한 답변 바랄께요 ^^ (메일로 주셔도 괜찮습니답~)
관리자 답변 N.T.C · 2008-08-18
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. CS2P를 구매하신 것 같은데요. 전류량이 이상 없도록 선만 굵은 것을 써서, 연결해 주시면, 이상 없을 것 같습니다. 감사합니다. >297없는걸로 구입했는뎁.. > >소형스텝모터 4개를 구동시켜려고합니다.. > >2개식은 같이 움직이기 때문에 움직임은 2개만 있으면됩니답.. > >스텝모터모듈 1개에 스텝모터를 2개식 연결해서 써도되는지요? > >일반적인 라인트레이서에 들어가는 것보다 휠씬 작은 사이즈의 스텝모터를 사용 > >합니다.. > >되긴 될듯한뎁.. > >자세한 답변 바랄께요 ^^ (메일로 주셔도 괜찮습니답~)
1449 답변완료ICCV7과 AVRSTUDIO의 소스 호환성 (printf 디버깅 관련) MAX 2008-08-18 1,407
소스 호환성에 대해서 질문 드립니다. 예제 CD에 있는 ex_spaeker.hex를 다운로드 하니 serial port를 통한 디버깅이 정상적으로 잘 됩니다. SPEAK TEST SAMPLE을 AVR STUDIO에서 컴파일하여 다운로드 하였습니다. 키입력은 정상적으로 되는 것을 확인하였(LED출력)으나 serial 포트로는 잘 되지 않는 것 같습니다. ICCV7과 AVR STUDIO 소스또는 LIBRARY 의 차이점에 대해서좀 알고 싶고요. printf를 통한 통신포트 처리에 대해서 좀 자세하게 설명 가능할까요?
관리자 답변 N.T.C · 2008-08-18
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. ICCV7과 AVR Studio의 라이브러리 차이라 하면, 무엇부터 말씀드려야 할 지 좀 막막하네요. 하지만, 우선, 라이브러리 파일 이름에 차이가 있구요. 일부 레지스터의 경우 define 된 이름이 다를 수 있습니다. 대부분 같지만요. 또한, printf를 사용하는 경우, ICCAVR에서는 putchar 함수를 내부 함수로 사용합니다. 아래의 함수들은 시리얼포트 초기화하실 때, RX complete interrupt, TX complete interrupt, Data register Empty interrupt 등을 절대 사용하면 안됩니다. 아래 함수를 필요에 따라서 바꿔 사용하시면, printf 함수로 시리얼 포트 0번 1번 모두에 출력이 가능하고, scanf 함수로 시리얼 포트 0번 1번 모두에 입력이 가능해 지면서, 막강한 printf 함수와 scanf 함수를 사용하여 입력 출력하실 수 있습니다. 본 함수를 잘 바꾸시면, 텍스트 LCD나 그래픽 LCD에도 printf scanf 함수 사용이 가능해 집니다. 참고하세요. 이 함수를 추가 하신후, printf 함수로 출력하시면 UDR0로 출력이 가능합니다. int putchar(char c) { while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; return c; } 이 함수를 추가 하신후, printf 함수로 출력하시면 UDR1로 출력이 가능합니다. int putchar(char c) { while (((UCSR1A>>UDRE1)&0x01) == 0) ; // UDRE, data register empty UDR1 = c; return c; } 이 함수를 추가 하신후, scanf 함수로 입력받으시면 시리얼 0번포트에서 입력을 받을 수 있습니다. char getchar(void) { while ((UCSR0A & 0x80) == 0); return UDR0; } 이 함수를 추가 하신후, scanf 함수로 입력받으시면 시리얼 1번포트에서 입력을 받을 수 있습니다. char getchar(void) { while ((UCSR1A & 0x80) == 0); return UDR1; } 감사합니다. >소스 호환성에 대해서 질문 드립니다. > >예제 CD에 있는 ex_spaeker.hex를 다운로드 하니 >serial port를 통한 디버깅이 정상적으로 잘 됩니다. > >SPEAK TEST SAMPLE을 AVR STUDIO에서 컴파일하여 다운로드 하였습니다. >키입력은 정상적으로 되는 것을 확인하였(LED출력)으나 serial 포트로는 >잘 되지 않는 것 같습니다. > >ICCV7과 AVR STUDIO 소스또는 LIBRARY 의 차이점에 대해서좀 알고 싶고요. > >printf를 통한 통신포트 처리에 대해서 좀 자세하게 설명 가능할까요? > > >
1448 답변완료속도제어 및 정지 문의드립니다. 강승원 2008-08-18 1,391
일단 아래의 소스로 정.역방향의 모터제어가 가능했습니다. 제가 구현하려고 하는 기능은 정.역방향 구동과 속도제어입니다. 포트가 6개 있는데 포트로 입력장치를 연결하여 모터의 속도제어가 가능한지 알고 싶습니다. 예) 입력포트를 설정하고 어떤장치를 연결하여, 입력조건에 따라 규정된 모터의 속도로 변속할수 있을런지요. -. 아래의 예제에서는 (완전 이해를 못했습니다) 모터의 회전방향만 구현하였고, 제가 하려고 하는 완전한 동작은 1. 정,역회전 및 속도방향전환 사이에 일정시간 정지(브레이크 기능이라고 하나요?) 2. ATmega128 포트의 어떤 포트와 어떤종류의 입력기기를 연결하여 모터의 속도를 변화시키는것이 최종목표입니다. (모터의 속도가 다이얼처럼 가변저항을 이용해서 변하는것 처럼 구현하는 것이 좋겠으나 여의치 않다면 어떤 입력신호(스위치동작)으로 규정된 속도 예를 들어 20rpm, 100rpm, 200rpm등 입력신호에 따라 속도조절이 가능한지 도움을 받고 싶습니다. 구입한 기기는 모터구동부(3A용), ATmega128, usbisp 입니다. //ICC-AVR application builder : 2007-11-19 오후 5:41:05 // Target : M128 // Crystal: 16.000Mhz #include <iom128v.h> #include <macros.h> #include <stdio.h> #define MOTOR_PORT PORTC #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) 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; } 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 = 0x1F; } //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; } //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(); 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 delay(int delaytime){ int i,j; for(i=0;i<1000;i++){ for(j=0;j<delaytime;j++){ } } } // void main(void) { init_devices(); //insert your functional code here... ENABLE1_ON; PWM1_ON; BREAK1_OFF; printf("Motor Control V01W\\r\\n"); while(1){ DIR1_ON; delay(5000); PORTG = 0x01; printf("CW\\r\\n"); DIR1_OFF; delay(5000); PORTG = 0x02; printf("CCW\\r\\n"); } }
관리자 답변 N.T.C · 2008-08-18
안녕하세요? 고객님, 저희 N.T.C를 이용하여 주셔서 감사합니다. 질문에 답변해 드립니다. 타이머를 이용하시면 하실 수 있습니다. 우선, 속도 변화의 경우, 타이머를 이용하여 PWM 의 Duty를 변화시킬 수 있도록 하고, main에서 어떤 변수 값을 변화시키면 timer에서 그 변수 값을 참조하여 Duty를 변화하도록 하면 될겁니다. 그렇게 하면 속도 제어가 되겠지요. 그리고, 포트에 TS8 스위치 보드와 같은 입력 장치를 연결하여, 특정 버튼을 눌를 때마다, 속도가 빨라지거나 느려지거나 하게 하는 것도 가능합니다. Duty를 변하게 하는 것을 그 버튼을 눌렀을 때로 하면 되니까요. 일정 시간 정지하는 것은, 다른 타이머를 하나 더 만들어서, 방향 변화시에 PWM주기를 0으로 일정시간 넣어 주다가 그 시간 이후에 원상복귀 시키는 식으로 만들어 주시면 될 것 같습니다. 저도 예전에 다른 모듈을 그런 식으로 제어를 했었습니다. 감사합니다. >일단 아래의 소스로 정.역방향의 모터제어가 가능했습니다. >제가 구현하려고 하는 기능은 정.역방향 구동과 속도제어입니다. >포트가 6개 있는데 포트로 입력장치를 연결하여 모터의 속도제어가 >가능한지 알고 싶습니다. > >예) 입력포트를 설정하고 어떤장치를 연결하여, 입력조건에 따라 > 규정된 모터의 속도로 변속할수 있을런지요. > > -. 아래의 예제에서는 (완전 이해를 못했습니다) 모터의 회전방향만 > 구현하였고, 제가 하려고 하는 완전한 동작은 > > 1. 정,역회전 및 속도방향전환 사이에 일정시간 정지(브레이크 기능이라고 하나요?) > > 2. ATmega128 포트의 어떤 포트와 어떤종류의 입력기기를 연결하여 > 모터의 속도를 변화시키는것이 최종목표입니다. > (모터의 속도가 다이얼처럼 가변저항을 이용해서 변하는것 처럼 구현하는 > 것이 좋겠으나 여의치 않다면 어떤 입력신호(스위치동작)으로 규정된 속도 > 예를 들어 20rpm, 100rpm, 200rpm등 입력신호에 따라 속도조절이 가능한지 > 도움을 받고 싶습니다. > > 구입한 기기는 모터구동부(3A용), ATmega128, usbisp 입니다. > >//ICC-AVR application builder : 2007-11-19 오후 5:41:05 >// Target : M128 >// Crystal: 16.000Mhz > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > >#define MOTOR_PORT PORTC >#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) > >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; >} > > >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 = 0x1F; >} > >//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; >} > >//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(); > > 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 delay(int delaytime){ > int i,j; > for(i=0;i<1000;i++){ > for(j=0;j<delaytime;j++){ > } > } >} > >// >void main(void) >{ > init_devices(); > //insert your functional code here... > ENABLE1_ON; > PWM1_ON; > BREAK1_OFF; > printf("Motor Control V01W\\r\\n"); > > while(1){ > DIR1_ON; > delay(5000); > PORTG = 0x01; > printf("CW\\r\\n"); > DIR1_OFF; > delay(5000); > PORTG = 0x02; > printf("CCW\\r\\n"); > } >} > >
1447 답변완료지난번 답변 정말 감사드립니다. 다시 질문이 있어 글을 올립니다. 최시영 2008-08-18 1,415
안녕하세요... 지난번 답변 정말 감사 드립니다. 온도센서값을 읽어서 pc와 통신하는 부분은 printf scanf자료를 사용하여 잘 테스트해보았습니다. 자료를 잘 올려주셔서 정말 많은 도움이 되었습니다. 다시 질문이 있어서 이렇게 글을 올리게 되었는데요... 우선 현제 저희가 구현해야하는것은(먼저 저는 인하대학교 선박공학과 대학원 연구실에 최시영입니다.)스트레인 게이지를 이용하여 atmega128에서 값을 읽어들인 후 zigbee통신으로 pc에 보내는 것이 최종 과제입니다. 다름이 아니라 글을 검색하여 보니까 (2006년도 글이었습니다.)스트레인게이지에 관하여 아시는 업체가 있다고 하셔서 제가 연락을 할 수 있을까해서 입니다. 스트레인게이지를 구현하려니 앰프를 사거나 직접구현해야하는데.. 스트레인게이지의 mV를 atmega128에서 읽어들일수 있는값인 0-5V출력으로 변화시키는 것이 막막하기만합니다. (스트레인게이지의 출력은 일정하지도 않고 (미세한 떨림) 전압 (전류?)가 작아 증폭하기도 힘든거라고 알고있습니다.) 앰프가 학교에 있지만 가격도 고가이고 크기가 커서 저희가 구현해야하는 것과는 맞지않아서.. <<게시판을 열심히 검색해보니 유니펄스라는 일본회사 제품을 추천해주셨더라구요... 이회사의 홈페이지에 들어가 검색해보니 작은 증폭기도 몇몇이 있는거 같습니다. 혹 이회사의 제품을 구입하려면 직접 연락해야 하는지 한국에 유통하시는 업체가 있는지 혹시 알고 계시는지요..>>>>> 혹시 도움을 주실 수 있는 말씀이 있을까 해서 질문 드립니다. 그리고 ....(질문이 길어 죄송합니다...) 지그비 관련자료를 찾아보다가 zingbee100set이라는 것으로 예제가 짜여 있는것을보고 그것으로 구입하려고하는데요.... (로보티스에서 구입해야 하는지요... NTC에서 판매하시는 것 같지는 않아서요...ㅡㅡ;) printf()문으로 pc와 통신한것을........(하이퍼터미널) zigbee 모듈을 설정하고 연결하면 똑 같이 통신이 되는것인지 궁굼합니다. 그리고 다른 질문인데요......ㅡㅡ; scanf문을 써서 통신을 해보았는데 한번 되었다가 오늘 다시 해보니 계속되지를 않습니다. 다른 분도 저와같은 질문을 했던것을 보았는데요.... 아래부분에서 멈추어버립니다. 입력은 하이퍼터미널로 계속 주었는데 왜안되는지 모르겠습니다. 하이퍼터미널설정이 잘못된건지... 혹 알고계시는 에러라면 답변부탁드릴께요..... int getchar(void) ---------------------------이부분 { while ((UCSR0A & 0x80) == 0);--------와일문에서 입력을 주어도 빠져나오지않습니다. 소스문제인지 외부적인 문제인지....ㅡㅡ; //if ((UCSR0A & 0x80) == 0); return UDR0; } >> >>void main(void){ >> char in; >> init_devices(); >> while(1){ >> //if((PIND & 0x10)==0x10){ >> //printf("\\r\\nPressed PortD4"); >> //printf("\\r\\nPress Character A~Z"); >> scanf("%c", &in);----------------------------이부분 >> switch(in){ >> case 'A' : printf("\\r\\nPressed A"); >> break; >> case 'B' : printf("\\r\\nPressed B"); >> break; >> case 'C' : printf("\\r\\nPressed C"); >> break; >> case 'D' : printf("\\r\\nPressed D"); >> break; >> default : printf("111111111111111\\n"); >> break; >> } >>// } >> if((PIND & 0x20)==0x20){ >> //printf("\\r\\nPressed PortD5"); >> } >> } >>} >> 질문이 제품에 관한 질문이 아닌것이 많아 죄송합니다..... 질문이 길어 간단히 다시 말씀드리겠습니다. 1. zigbee100set의 제품으로 KD128pro 키트를 연결하면 바로 pc와 무선통신을 구현할수있는지 (printf scanf예제로 구현해본것) 2. 스트레인게이지에 관하여 판매하는 곳을 알아보고있는데 혹 스트레인게이지나 증폭기에관해 알고 계시는 업체가있는지... (게시판을 검색해보니 증폭기는 유니펄스라는 일본회사를 추천해주셨습니다.) 3.scanf()문의 오류에 관해 혹 도움을 주실수있는지요....int getchar(void) 에서 입력을 하이퍼터미널에서 보내어도 while ((UCSR0A & 0x80) == 0); 이 동작하지 않습니다. 입력을 받으면 UCSR0A의 끝bit(8자리)가 1로 입력되어 플래그를 들어 줘야하는데... 거기서 계속 멈추는 것 같습니다....ㅜㅜ
관리자 답변 &#12473;&#12527;&#12 · 2008-10-24
<a href="http://www.pink-swap.net/">&#12473;&#12527;&#12483;&#12500;&#12531;&#12464;</a><a href="http://www.love-is-bet.com/ntnt/access/">&#12475;&#12483;&#12463;&#12473;</a><a href="http://www.look-oppai.net/chbank/">&#31461;&#35998;</a><a href="http://www.great-relation.com/ntnt/gyakuen/">&#29087;&#22899;</a><a href="http://www.deai-houdai.com/">&#20154;&#22971;</a><a href="http://www.zutto-issyo.com/">&#12475;&#12501;&#12524;</a><a href="http://www.ireteiiyo.com/">&#12490;&#12531;&#12497;</a><a href="http://www.deai-nohanazono.net/">&#12456;&#12525;</a><a href="http://www.tumande.net/">&#12475;&#12483;&#12463;&#12473;</a><a href="http://www.kannkei-taisetu.com/">&#20986;&#20250;&#12356;</a><a href="http://www.milky11.com/">&#12475;&#12483;&#12463;&#12473;</a><a href="http://www.klikimi-te-linkut.com/dclub/">&#31461;&#35998;</a><a href="http://www.ee29.net/">&#39080;&#20439;</a><a href="http://www.erokawa.biz/">&#12450;&#12480;&#12523;&#12488;</a><a href="http://www.ee357.com/">&#12475;&#12483;&#12463;&#12473;</a><a href="http://www.koimonogatari.net/">&#24040;&#20083;</a><a href="http://www.hhh-clinic.com/">&#12456;&#12483;&#12481;</a><a href="http://www.honnki-deai.com/dmo/">&#31461;&#35998;</a><a href="http://www.poipoi-mail.biz/">&#31461;&#35998;</a><a href="http://www.gongon117.com/">&#12362;&#12387;&#12401;&#12356;</a><a href="http://www.hhh-go.net/">&#12475;&#12501;&#12524;</a>
1446 답변완료가속도센서질문입니다. 오대석 2008-08-17 1,468
현재 가속도의 값을 정수로 표현하였습니다. 통신으로요~ X축만 잡아놓았습니다. 질문이 있는데~ 1. 처음 값이 0 값이 뜰때가 있고 센서를 기울였을시에 값이 다르게 나오더군요 그러니까 기울이지 않았을 시에 0 값이 뜨는데 기울이게 되면 0이 아니라 값이 다르게 뜬다는 소리죠~ 4 4 4 4 4 4 4 4 4 4 이런식으로... 그렇다면 기울여도 0의 값이 뜨게 하는 방법이 있을까요? 중력가속도와 관련이 있다면 Z축과 관련이 있다는 소리인것같은데 어떤식으로 없애야 하는건지요. 회로상으로 Z축을 없애야하는건지... 코딩할 시에 없애야하는건지...방법이 없으면 아에 프레임을짤때 완전히 평행하게 짜야하는건지.. 2. 값이 0의 값이 나오게 되어 변하는 값이 나오게 되면 차후 변위를 구할 시에 X,Y만 넣어서 계산하기가 좋겠지만 저런식의 다른 정수의 값이 초기값으로 뜨게 되면 적분을 해서 변위를 구할 시에 실측값 보다 훨씬 많은 값이 나오지 않을까요? 아직 해보질 않아서 모르겠지만...ㅠ 3. 초기값이 일정하게 뜨다가도 한번씩 값이 튀는 경우가 발생하는데 이것은 어떤식으로 잡아야하는지 알고싶어요 아직도 초보라서 영 질문이 구리네요ㅠㅠ이해해주세요
관리자 답변 SEO · 2008-10-23
<a href="http://www.guerrilla-seo.net/">SEO</a><a href="http://www.lasik-king.net/">&#12524;&#12540;&#12471;&#12483;&#12463;</a><a href="http://www.shochuweb.net/">&#28988;&#37198;</a><a href="http://www.implant-lab.net/">&#12452;&#12531;&#12503;&#12521;&#12531;&#12488;</a><a href="http://www.spdcash.net/">&#12461;&#12515;&#12483;&#12471;&#12531;&#12464;</a><a href="http://www.strong-server.net/">&#12524;&#12531;&#12479;&#12523;&#12469;&#12540;&#12496;&#12540;</a><a href="http://www.beauty-4ever.net/">&#32654;&#23481;&#25972;&#24418;</a><a href="http://www.homey-home.net/">&#19981;&#21205;&#29987;</a><a href="http://www.kabu-load.net/">&#26666;&#24335;</a><a href="http://www.pension-support.net/">&#24180;&#37329;</a><a href="http://www.sweet-sapri.com/">&#12469;&#12503;&#12522;&#12513;&#12531;&#12488;</a><a href="http://www.business-freshness.net/">&#12499;&#12472;&#12493;&#12473;&#12510;&#12490;&#12540;</a><a href="http://www.charm-happy.net/">&#21344;&#12356;</a><a href="http://www.eternity-wedding.net/">&#32080;&#23130;</a><a href="http://www.fx-victor.net/">FX</a><a href="http://www.happy-counter.net/">&#12450;&#12463;&#12475;&#12473;&#12459;&#12454;&#12531;&#12479;&#12540;</a><a href="http://www.top-counter.net/">&#12450;&#12463;&#12475;&#12473;&#12459;&#12454;&#12531;&#12479;&#12540;</a><a href="http://www.counter-lab.net/">&#12450;&#12463;&#12475;&#12473;&#12459;&#12454;&#12531;&#12479;&#12540;</a><a href="http://www.website-trade.com/">&#12469;&#12452;&#12488;&#22770;&#36023;</a><a href="http://www.world-auctions.org/">&#12458;&#12540;&#12463;&#12471;&#12519;&#12531;</a><a href="http://www.kualia-nails.com/">&#12493;&#12452;&#12523;</a><a href="http://www.esthetic-live.net/">&#12456;&#12473;&#12486;</a><a href="http://www.old-bike.org/">&#12496;&#12452;&#12463;&#36023;&#21462;</a><a href="http://www.home-teacher.biz/">&#23478;&#24237;&#25945;&#24107;</a><a href="http://www.kualia-nails.com/school/index.html">&#12496;&#12452;&#12458;&#12472;&#12455;&#12523;&#12473;&#12463;&#12540;&#12523;</a><a href="http://www.kualia-nails.com/school/index.html">&#12493;&#12452;&#12523;&#12473;&#12463;&#12540;&#12523;</a><a href="http://www.decksanddice.com/">&#33258;&#21205;&#36554;&#20445;&#38522;</a><a href="http://www.cyborgowner.com/">&#29983;&#21629;&#20445;&#38522;</a>
1445 답변완료avrisp 에러 문제.봐주세요.. 동규 2008-08-16 1,421
ICCAVR에서.. Fuse bit 에서 0xFFD9EF 를 치고 w를 누르면 밑에처럼 나옵니다.. "C:\\Program Files\\Atmel\\AVR Tools\\STK500\\Stk500.exe" -dATMega128 -ccom2 -dATmega128 -fD9EF -FD9EF -EFF -GFF -fd9ef STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005. Connected to STK500 V2 on port com2 Device parameters loaded Could not enter programming mode Programming mode left Connection to STK500 V2 closed WARNING! One or more operations failed! Please examine the output log above! Done: there are error(s). Exit code: 1. Sat Aug 16 19:03:59 2008 Done 그리고 AVR STUDIO 에서 보면 밑과 같은 에러가 뜹니다... Setting mode and device parameters.. OK! Entering programming mode ..FAILED! Leaving programming mode..OK! 어떤 이유로 이런것인지 알고 싶습니다.
관리자 답변 N.T.C · 2008-08-18
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사드립니다. 직접 봐야 알 것 같습니다. 본사를 방문해 주시거나, 제품을 택배로 보내주시면 점검해 드리겠습니다. 감사합니다. > >ICCAVR에서.. >Fuse bit 에서 0xFFD9EF 를 치고 w를 누르면 밑에처럼 나옵니다.. > >"C:\\Program Files\\Atmel\\AVR Tools\\STK500\\Stk500.exe" -dATMega128 -ccom2 -dATmega128 -fD9EF -FD9EF -EFF -GFF -fd9ef >STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005. > >Connected to STK500 V2 on port com2 >Device parameters loaded >Could not enter programming mode >Programming mode left >Connection to STK500 V2 closed > >WARNING! One or more operations failed! Please examine the output log above! > >Done: there are error(s). Exit code: 1. Sat Aug 16 19:03:59 2008 >Done > > > >그리고 >AVR STUDIO 에서 보면 밑과 같은 에러가 뜹니다... >Setting mode and device parameters.. OK! >Entering programming mode ..FAILED! >Leaving programming mode..OK! > > >어떤 이유로 이런것인지 알고 싶습니다.
1444 답변완료인터럽트강의 다시올려주실수있나요 이현덕 2008-08-16 1,429
카페에 올려진 인터럽트 강의가 다운받았더니 손상되었다고 나오는데, 강의를 다시 올려주실 수 있나요? 홈페이지에서는 같은 자료가 없는 듯 하네요. 감사합니다.
관리자 답변 N.T.C · 2008-08-18
고객님, 안녕하세요? 올려드렸습니다. 그리고, 네이버 자료를 열어보니, 이상이 없다고 나오는 데요. 그 쪽에서도 다시 받아 보시면 좋겠습니다. 감사합니다. > 카페에 올려진 인터럽트 강의가 다운받았더니 손상되었다고 나오는데, >강의를 다시 올려주실 수 있나요? > 홈페이지에서는 같은 자료가 없는 듯 하네요. 감사합니다.