로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
1203 답변완료회원가입문제 이경수 2008-06-24 1,435
회원 가입을 하고 싶은데 가입하기를 클릭하면 페이지 오류가 나네요 확인 부탁드립니다.
관리자 답변 N.T.C · 2008-06-24
안녕하세요? 고객님, 저희 N.T.C를 방문하여 주셔서 감사합니다. Q&A에서 회원가입을 하시면 됩니다. 또한, 뉴테크놀로지 컴패니 네이버 까페에 가입하여 활동하셔도 됩니다. http://cafe.naver.com/newtc.cafe 감사합니다. >회원 가입을 하고 싶은데 가입하기를 클릭하면 페이지 오류가 나네요 확인 부탁드립니다.
1202 답변완료AD-JTAG ver1.1 동작이 안됨 정성훈 2008-06-23 1,393
안녕하세요 문제점이 발생하여 문제점에 대한 해결방안을 문의합니다. AVR JTAG 보드(모델:AD-JTAG ver1.1)을 구매하여 사용 중 문제점 발생 - 처음 10번 정도는 atmega16l에 sw 다운이 잘되었습니다. - 그러나 지금은 atmega 16l 과 연결되지 않습니다. 제가 SW 부분에 대해는 잘모르기 때문에 어떻게 조치해야 되는지 궁금합니다.
관리자 답변 N.T.C · 2008-06-23
안녕하세요? 고객님, 보드가 망가진 것 같은데요. 본사에서 A/S를 하셔야 할 것 같습니다. 제품 테스트는 무료이구요. 이상시 A/S는 본사의 A/S 규정을 따릅니다. 감사합니다. >안녕하세요 >문제점이 발생하여 문제점에 대한 해결방안을 문의합니다. >AVR JTAG 보드(모델:AD-JTAG ver1.1)을 구매하여 사용 중 문제점 발생 > - 처음 10번 정도는 atmega16l에 sw 다운이 잘되었습니다. > - 그러나 지금은 atmega 16l 과 연결되지 않습니다. > 제가 SW 부분에 대해는 잘모르기 때문에 어떻게 조치해야 되는지 궁금합니다. >
1201 답변완료am-ms2 스텝모터 제어 문의드립니다. 김성민 2008-06-23 1,451
안녕하세요. 한양대학교 미디어통신 다니고 있는 김성민이라고 합니다. am-ms2 스텝모터 제어 모듈 관련해서 질문드립니다. void main(void) { volatile unsigned char step=0; init_devices(); //insert your functional code here... printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); MOTOR_PORT_DDR = 0xff; MOTOR_ENABLE; MOTOR_STEP_M0; MOTOR_LEFT_CCW; MOTOR_RIGHT_CW; PORTG=0x01; /* 딜레이로 마이크로 스텝 드라이버 구동 */ while(1){ PORTG = ~PORTG; delay(100); } } 위에는 소스는 newtc에서 제공하고 있는 스텝모터 정방향 주행 예제 소스인데 정방향 주행 중에 좌회전 을 시켜보려하는데 일단은 MOTOR_LEFT_CW; MOTOR_RIGHT_CW; 이부분의 모터의 주행 방향을 바꿔서 움직이는 형태를 쓰려하는데 , 그럼 소스를 MOTOR_LEFT_CCW; MOTOR_RIGHT_CW; 돌렸다가 MOTOR_LEFT_CW; MOTOR_RIGHT_CW; 이런식으로 구동을 해야하는데 어떤 식으로 연결 시키면 좋을까요?참고할만한 책이라도 추천해주시면 감사하겠습니다. 아직 초보라서 질문드립니다.
관리자 답변 N.T.C · 2008-06-23
안녕하세요? 고객님, 저희 제품을 이용하여 주셔서 감사드립니다. 고객님이 하시는 대로 하면, 제자리에서 회전을 할 것 같네요. 움직이면서는 그렇게 하면 너무 빨리 돌게 되서, 무게가 없으면 흔들리게 되어 방향을 잃을 수도 있습니다. 한쪽 바퀴는 멈춘 상태에서 한쪽 바퀴만 돌리는 방법으로 일단 해서 회전을 시킨 후, 다시 직진하는 것이 좋겠습니다. 영풍문고나 교보문고 같은 곳에 가면 관련된 책들은 많이 팔던데요. 1년 전 쯤 본 책은 Embedded Linux 기반의 로봇 설계 & 제작 이라는 책이 있더군요. 영진닷컴에서 판매중이던데요. 우선은 강좌->로봇강좌 스테핑모터편을 참고하시기 바랍니다. 감사합니다. > >안녕하세요. 한양대학교 미디어통신 다니고 있는 김성민이라고 합니다. >am-ms2 스텝모터 제어 모듈 관련해서 질문드립니다. >void main(void) >{ > volatile unsigned char step=0; > > init_devices(); > //insert your functional code here... > printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); > > MOTOR_PORT_DDR = 0xff; > > MOTOR_ENABLE; > MOTOR_STEP_M0; > > MOTOR_LEFT_CCW; > MOTOR_RIGHT_CW; > > PORTG=0x01; > /* 딜레이로 마이크로 스텝 드라이버 구동 */ > while(1){ > PORTG = ~PORTG; > delay(100); > } > >} > >위에는 소스는 newtc에서 제공하고 있는 스텝모터 정방향 주행 예제 소스인데 > >정방향 주행 중에 좌회전 을 시켜보려하는데 일단은 > > MOTOR_LEFT_CW; > MOTOR_RIGHT_CW; > >이부분의 모터의 주행 방향을 바꿔서 움직이는 형태를 쓰려하는데 , >그럼 소스를 > > MOTOR_LEFT_CCW; > MOTOR_RIGHT_CW; 돌렸다가 > > MOTOR_LEFT_CW; > MOTOR_RIGHT_CW; > >이런식으로 구동을 해야하는데 어떤 식으로 연결 시키면 좋을까요?참고할만한 >책이라도 추천해주시면 감사하겠습니다. >아직 초보라서 질문드립니다. >
1200 답변완료[긴급] 가속도센서 질문입니다. 소금쟁이 2008-06-23 1,446
안녕하세요, 학생입니다. 제가 AM-3AXIS 가속도센서보드를 구입했습니다. 질문이 있어 전화를 드리고 통화를 하지못해 홈페이지에 글을 남깁니다. 질문은 아래와 같습니다. 1) 이 센서보드가 마이크로마우스같은 작은 이동로봇의 가속도를 측정하는데 사용될 수 있습니까 ? 2) 가속도 분해능이 1.5g인것같은데, 그럼 1.5g*9.8m/ss=14.7m/ss의 가속도가 센서 자체에서 얻을 수 있는 최저 가속도값이라는 뜻인가요?
관리자 답변 N.T.C · 2008-06-23
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사드리구요. 긴급하게 답변해 드립니다.^^ 1) 가능합니다. 미세한 움직임도 감지되므로, 가능합니다. 2) 데이터 시트 일부를 발췌하여 올렸는 데, 1.5g에서는 800mV/g 단위로 변화한다는 얘기입니다. 몇비트로 A/D 하냐에 따라서, 측정되는 가속도의 정밀도는 달라지겠지요. 수고하세용. >안녕하세요, 학생입니다. > >제가 AM-3AXIS 가속도센서보드를 구입했습니다. 질문이 있어 전화를 드리고 통화를 하지못해 홈페이지에 글을 남깁니다. >질문은 아래와 같습니다. > >1) 이 센서보드가 마이크로마우스같은 작은 이동로봇의 가속도를 측정하는데 사용될 수 있습니까 ? > >2) 가속도 분해능이 1.5g인것같은데, 그럼 1.5g*9.8m/ss=14.7m/ss의 가속도가 센서 자체에서 얻을 수 있는 최저 가속도값이라는 뜻인가요? > >
1199 답변완료베타버전 테스트 중이라면 usbisp사용자 2008-06-22 1,388
7월 중에 나온다는 말씀인데..그럼 개인이 펌웨어를 업글할 수 있는건지요.. 아님 NTC로 usbisp를 보내야 되는 겁니까.. 개인이 업글 할 수 있게 해주시면 좋겠는데.. 왔다갔다 하는 시간 낭비가 넘 심할 것 같네요... 수고 하십시요.
관리자 답변 N.T.C · 2008-06-22
안녕하세요? 고객님, 저희 N.T.C 제품을 이용해 주셔서 감사합니다. 고객님의 말씀에도 일리가 있습니다마는, 개인 업그레이드는 허용하지 않을 예정입니다. N.T.C로 보내야 업그레이드를 가능하도록 정책을 정했습니다. 직접 왔다 갔다 할 수도 있지만, 택배로도 가능하도록 할 예정입니다. 물론 택배비는 소비자가 부담해야 하겠지만, 업그레이드 자체는 무료로 행사할 예정입니다. 이 질문란은 여러사람이 이용하는 곳이므로, 공지한 바와 같이 다음에 질문할 때는, 본명을 사용 부탁드립니다. 감사합니다. >7월 중에 나온다는 말씀인데..그럼 >개인이 펌웨어를 업글할 수 있는건지요.. >아님 NTC로 usbisp를 보내야 되는 겁니까.. > >개인이 업글 할 수 있게 해주시면 좋겠는데.. >왔다갔다 하는 시간 낭비가 넘 심할 것 같네요... > >수고 하십시요.
1198 답변완료AVRStudio4.14 언제 지원 됩니까. usbisp 사용자 2008-06-21 1,286
usbisp-l을 구입해서 사용중에 있는데.. 최신 버전의 avrstudio를 아직까지 지원하지 않고 있네요.. 지원 된다고 이야기만 하고 ...빠른 시간에 지원 되게 해주세요.
관리자 답변 N.T.C · 2008-06-21
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사드립니다. 현재 베타버전 테스트 기간입니다만, 베타버전도 꽤 안정적입니다. 베타버전 업그레이드를 받으시면, 이상없이 최신 버전의 AVR Studio도 지원 가능합니다. 다음달 초 정도에 정식버전 릴리즈를 할 예정입니다. 감사합니다. >usbisp-l을 구입해서 사용중에 있는데.. >최신 버전의 avrstudio를 아직까지 지원하지 않고 있네요.. >지원 된다고 이야기만 하고 ...빠른 시간에 지원 되게 해주세요. >
1197 답변완료질문입니다. 알람 2008-06-20 1,435
* 구입한 제품 - AVR MEGA 128 개발보드 (소형) AB-M128-B - Text LCD 플러스 모듈 AM-TLCD-P - 스테핑 모터 구동 모듈 AM-CS2 * 질문사항 (아무것도 모르는 상태여서 도움주시면 감사하겠습니다.) 1. LCD와 스테핑 모터 모듈은 아무 포트에 끼워도 되는것입니까? 2. LCD 모듈을 홈페이지 제품 사진에 나와있는데로 연결을 하고서 컴파일까지 다 했는데 글씨가 나타나지를 않습니다. 왜 그런건가요? (ATMega128트레이닝 풀키트,KT-M128 에는 글씨가 나타남.) 3. 스테핑 모터도 자료실에 있는 소스로 컴파일까지는 되는데 구동이 되질 않습니다. 왜 그런건가요? 4. ATmega128로 알람시계를 만들려고 하는데 소스는 없는건가요? 없다면 죄송하지만 짜주실수는 없는건가요? 5. 저희가 제품을 보내면 완성시켜주실순 없는건가요? (시간이 촉박해서 하나하나 공부해가면서 할 시간이 부족해서요)
관리자 답변 N.T.C · 2008-06-21
안녕하세요? 알람님, 저희 N.T.C 제품을 이용하여 주셔서 감사드립니다. 그런데, 저희는 소스를 짜드리지는 않습니다. 예제나 메뉴얼, 일부 회로도 등은 자료실 등에서 제공하고 있지만, 직접 원하시는 코드대로 합쳐 드리거나, 짜드리거나 하지는 않고 있습니다. 그건, 직접 공부하셔서 고객님이 하셔야 할 일 같네요. 누군가의 후배일 수도 있고, 제 후배일 수도 있고, 한데 많지 않은 시간 중, 특히 중요한 졸업 논문 같은 일이라면, 더더욱 그렇겠지요. 잠시라도 집중하셔서, 열심히 하시면, 반짝 힘들긴 하겠지만, 젊은 나이에 흡수가 빨라서 금방 하실 수 있을 겁니다. 노력하시기 바랍니다. 스테핑 모터는 자료실의 소스로 반드시 구동이 됩니다. 안된다면, 가변저항으로 토크를 돌려 보시거나, 전원(12V ~ 24V)을 2핀 커넥터에 입력하셨는 지 확인해 보시거나, 모터가 저희 회사것이 아니라면, 선 배치가 제대로 되어 있는 지 등등을 확인해 보시거나, AVR 퓨즈비트를 확인해 보세요. 그리고, 반드시 본명으로 질문해 주세요. 본명이 아니면, 답변드리지 않을 수도 있고, 질문 자체가 삭제 될 수도 있습니다. 감사합니다. >* 구입한 제품 > - AVR MEGA 128 개발보드 > (소형) > AB-M128-B > > - Text LCD 플러스 모듈 > AM-TLCD-P > > - 스테핑 모터 구동 모듈 > AM-CS2 > >* 질문사항 (아무것도 모르는 상태여서 도움주시면 감사하겠습니다.) > > 1. LCD와 스테핑 모터 모듈은 아무 포트에 끼워도 되는것입니까? > > 2. LCD 모듈을 홈페이지 제품 사진에 나와있는데로 연결을 하고서 > 컴파일까지 다 했는데 글씨가 나타나지를 않습니다. 왜 그런건가요? > (ATMega128트레이닝 풀키트,KT-M128 에는 글씨가 나타남.) > > 3. 스테핑 모터도 자료실에 있는 소스로 컴파일까지는 되는데 구동이 되질 > 않습니다. 왜 그런건가요? > > 4. ATmega128로 알람시계를 만들려고 하는데 소스는 없는건가요? > 없다면 죄송하지만 짜주실수는 없는건가요? > > 5. 저희가 제품을 보내면 완성시켜주실순 없는건가요? > (시간이 촉박해서 하나하나 공부해가면서 할 시간이 부족해서요) > > >
1196 답변완료as 보내는곳을 어디로 해야되나요? 이성광 2008-06-20 1,398
제가 산 키트 ac전원입력부분에 전원은 들어오는데 레귤레이터로 전원이 안들어가네요.. 아는사람한테 물어서 연결해보니 그렇다고 하는데 as보낼려고하는데 주소좀 부탁드립니다... 또 택배비는 착불로 하나요? 어떤식으로 해야될지 알려주세요.
관리자 답변 N.T.C · 2008-06-21
안녕하세요? 고객님, 본사로 보내 주시구요. 주소는 맨 아래에 나와 있습니다. 전화번호, 주소, 성함을 함께 보내주시면 테스트 후에, 전화 드릴겁니다. 저희 회사 제품 이상이라면 당연히 저희가 택배비 모두 부담하구요. 아닐 경우, 고객님이 부담하셔야 합니다. 감사합니다. >제가 산 키트 ac전원입력부분에 전원은 들어오는데 레귤레이터로 전원이 안들어가네요.. 아는사람한테 물어서 연결해보니 그렇다고 하는데 > >as보낼려고하는데 주소좀 부탁드립니다... >또 택배비는 착불로 하나요? 어떤식으로 해야될지 알려주세요. > >
1195 답변완료자료실에 있는 소스에서요... 유원설 2008-06-19 1,495
DC모터 제어와 서보모터 제어소스를 합쳐 봤는데 컴파일이 안되네요. 에러가 있는거 같은데 못 찾겠네요...죄송하지만 도와주실수 있으신가요? //ICC-AVR application builder : 2007-07-04 오전 11:10:30 // Target : M128 // Crystal: 16.000Mhz #include <iom128v.h> #include <macros.h> #define SERVO_PORT1 PORTA #define SERVO_PORT2 PORTF #define MOTOR_PORT PORTB #define MOTOR_DDR DDRB #define LED_PORT PORTG #define PWM1_IN (MOTOR_PORT&0x01)//DC모터 #define PWM1_ON (MOTOR_PORT|=0x01) #define PWM1_OFF (MOTOR_PORT&=0xFE) #define DIR1_ON (MOTOR_PORT|=0x02) #define DIR1_OFF (MOTOR_PORT&=0xFD) #define ENABLE1_OFF (MOTOR_PORT|=0x04) #define ENABLE1_ON (MOTOR_PORT&=0xFB) #define BREAK1_ON (MOTOR_PORT|=0x08) #define BREAK1_OFF (MOTOR_PORT&=0xF7) #define PWM2_IN (MOTOR_PORT&0x10) #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) #define t20ms 130//서보모터 #define t20mstimer_expired 0 #define ON 1 #define OFF 0 #define MAX_SERVO 16 volatile int t100ustimer=0, servo[MAX_SERVO], servo_num; void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0xFF; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0xFF; PORTG = 0x00; DDRG = 0xFF; } //TIMER0 initialize - prescale:8 // WGM: Normal // desired value: 1uSec // actual value: 1.000uSec (0.0%) void timer0_init(void)//서보모터부분 { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0xFE; //set count OCR0 = 0x02; TCCR0 = 0x02; //start timer } #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0xFE; //reload counter value t100ustimer++; if(t100ustimer > t20ms){ t100ustimer = t20mstimer_expired; } for(servo_num=0;servo_num<8;servo_num++){ if(servo[servo_num] > t100ustimer){ SERVO_PORT1 = SERVO_PORT1|(0x01<<servo_num); }else{ SERVO_PORT1 = SERVO_PORT1&(~(0x01<<servo_num)); } } for(servo_num=0;servo_num<8;servo_num++){ if(servo[servo_num+8] > t100ustimer){ SERVO_PORT2 = SERVO_PORT2|(0x01<<servo_num); }else{ SERVO_PORT2 = SERVO_PORT2&(~(0x01<<servo_num)); } } } //TIMER2 initialize - prescale:8 // WGM: Normal // desired value: 10KHz // actual value: 10.000KHz (0.0%) void timer2_init(void)//DC모터부분 { TCCR2 = 0x00; //stop ASSR = 0x00; //set async mode TCNT2 = 0x38; //set count OCR0 = 0xC8; TCCR2 = 0x02; //start timer } volatile int motor_control = 0; #pragma interrupt_handler timer2_ovf_isr:17 void timer2_ovf_isr(void) { int motor_speed; unsigned char motor_dir, motor_pwm, timer_value; if(motor_control < 0){ motor_dir = 0; motor_speed = motor_control * -1; }else{ motor_dir = 1; motor_speed = motor_control; } if(motor_speed > 30) motor_speed = 50; if(motor_speed == 0){ // PWM = 0 motor_pwm=0; timer_value = 0xff-50; }else{ if(PWM1_IN){ timer_value = 0xff - 100 + motor_speed; // PWM = 0; motor_pwm=0; }else{ timer_value = 0xff-motor_speed; // PWM = 1; motor_pwm=1; } } TCNT2 = timer_value; //reload counter value if(motor_pwm == 1){ PWM1_ON; }else{ PWM1_OFF; } if(motor_dir == 1){ DIR1_ON; }else{ DIR1_OFF; } } //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(); timer2_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 delaytime){ int i,j; for(i=0;i<100;i++){ for(j=0;j<delaytime;j++){ } } } // void main(void) { int i; init_devices(); for(i=0;i<MAX_SERVO;i++){ servo[i]=0; } //insert your functional code here... while(1){ servo[13] = 5;//오른쪽 집게 움직임 servo[14] = 5;//왼쪽 집게 움직임 servo[1] = 5;//오른쪽 고관절 움직임 값 servo[2] = 5; servo[3] = 5; servo[4] = 5;//오른쪽다리 드는 값 servo[5] = 5; servo[6] = 5; servo[4] = 1;//오른쪽다리 내리는 동작 servo[5] = 1; servo[6] = 1; servo[13] = 1;//오른쪽 집게 움직임 servo[14] = 1;//왼쪽 집게 움직임 delay(20); servo[13] = 5;//오른쪽 집게 움직임 servo[14] = 5;//왼쪽 집게 움직임 servo[1] = 1;//오른쪽 고관절 초기 값(제로) servo[2] = 1; servo[3] = 1; servo[7] = 5;//왼쪽서보모터의 값 servo[8] = 5; servo[9] = 5; servo[10] = 5;//왼쪽다리 드는 값 servo[11] = 5; servo[12] = 5; servo[10] = 1;//왼쪽다리 내리는 동작 servo[11] = 1; servo[12] = 1; servo[13] = 1;//오른쪽 집게 움직임 servo[14] = 1;//왼쪽 집게 움직임 delay(20); } { delay(1000); delay(1000); MOTOR_DDR = 0xff; // 모터포트 초기화 ENABLE1_ON; while(1){ //printf(" %d 정방향 회전\\n\\r", count++); LED_PORT = 0x01; for(i=0; i<100; i++){ if(i<=100) motor_control = i; else motor_control = 200-i; delay(300); } //printf(" %d 역방향 회전\\n\\r", count++); LED_PORT = 0x02; for(i=0; i<200; i++){ if(i<=100) motor_control = i * -1; else motor_control = (200-i) * -1; delay(300); } } } }
관리자 답변 N.T.C · 2008-06-19
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. 죄송하지만, 소스코드 수정까지 도와드리진 않고 있습니다. 열심히 해서, 꼭 성공하시기 바랍니다. 감사합니다. >DC모터 제어와 서보모터 제어소스를 합쳐 봤는데 >컴파일이 안되네요. 에러가 있는거 같은데 >못 찾겠네요...죄송하지만 도와주실수 있으신가요? > >//ICC-AVR application builder : 2007-07-04 오전 11:10:30 >// Target : M128 >// Crystal: 16.000Mhz > >#include <iom128v.h> >#include <macros.h> > >#define SERVO_PORT1 PORTA >#define SERVO_PORT2 PORTF >#define MOTOR_PORT PORTB >#define MOTOR_DDR DDRB >#define LED_PORT PORTG > > >#define PWM1_IN (MOTOR_PORT&0x01)//DC모터 >#define PWM1_ON (MOTOR_PORT|=0x01) >#define PWM1_OFF (MOTOR_PORT&=0xFE) >#define DIR1_ON (MOTOR_PORT|=0x02) >#define DIR1_OFF (MOTOR_PORT&=0xFD) >#define ENABLE1_OFF (MOTOR_PORT|=0x04) >#define ENABLE1_ON (MOTOR_PORT&=0xFB) >#define BREAK1_ON (MOTOR_PORT|=0x08) >#define BREAK1_OFF (MOTOR_PORT&=0xF7) >#define PWM2_IN (MOTOR_PORT&0x10) >#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) > > >#define t20ms 130//서보모터 >#define t20mstimer_expired 0 >#define ON 1 >#define OFF 0 >#define MAX_SERVO 16 > >volatile int t100ustimer=0, servo[MAX_SERVO], servo_num; > >void port_init(void) >{ > PORTA = 0x00; > DDRA = 0xFF; > PORTB = 0x00; > DDRB = 0xFF; > PORTC = 0x00; //m103 output only > DDRC = 0x00; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0xFF; > PORTG = 0x00; > DDRG = 0xFF; >} > >//TIMER0 initialize - prescale:8 >// WGM: Normal >// desired value: 1uSec >// actual value: 1.000uSec (0.0%) >void timer0_init(void)//서보모터부분 >{ > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0xFE; //set count > OCR0 = 0x02; > TCCR0 = 0x02; //start timer >} > > >#pragma interrupt_handler timer0_ovf_isr:17 >void timer0_ovf_isr(void) >{ > TCNT0 = 0xFE; //reload counter value > t100ustimer++; > if(t100ustimer > t20ms){ > t100ustimer = t20mstimer_expired; > } > for(servo_num=0;servo_num<8;servo_num++){ > if(servo[servo_num] > t100ustimer){ > SERVO_PORT1 = SERVO_PORT1|(0x01<<servo_num); > }else{ > SERVO_PORT1 = SERVO_PORT1&(~(0x01<<servo_num)); > } > } > for(servo_num=0;servo_num<8;servo_num++){ > if(servo[servo_num+8] > t100ustimer){ > SERVO_PORT2 = SERVO_PORT2|(0x01<<servo_num); > }else{ > SERVO_PORT2 = SERVO_PORT2&(~(0x01<<servo_num)); > } > > > } >} > > >//TIMER2 initialize - prescale:8 >// WGM: Normal >// desired value: 10KHz >// actual value: 10.000KHz (0.0%) >void timer2_init(void)//DC모터부분 >{ > TCCR2 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT2 = 0x38; //set count > OCR0 = 0xC8; > TCCR2 = 0x02; //start timer >} > >volatile int motor_control = 0; > > >#pragma interrupt_handler timer2_ovf_isr:17 >void timer2_ovf_isr(void) >{ > int motor_speed; > unsigned char motor_dir, motor_pwm, timer_value; > > if(motor_control < 0){ > motor_dir = 0; > motor_speed = motor_control * -1; > }else{ > motor_dir = 1; > motor_speed = motor_control; > } > if(motor_speed > 30) motor_speed = 50; > > > if(motor_speed == 0){ > // PWM = 0 > motor_pwm=0; > timer_value = 0xff-50; > }else{ > if(PWM1_IN){ > timer_value = 0xff - 100 + motor_speed; > // PWM = 0; > motor_pwm=0; > }else{ > timer_value = 0xff-motor_speed; > // PWM = 1; > motor_pwm=1; > } > } > TCNT2 = timer_value; //reload counter value > > if(motor_pwm == 1){ > PWM1_ON; > }else{ > PWM1_OFF; > } > if(motor_dir == 1){ > DIR1_ON; > }else{ > DIR1_OFF; > } >} > > > > >//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(); > timer2_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 delaytime){ > int i,j; > for(i=0;i<100;i++){ > for(j=0;j<delaytime;j++){ > } > } >} > >// >void main(void) >{ > int i; > init_devices(); > > for(i=0;i<MAX_SERVO;i++){ > servo[i]=0; > } > //insert your functional code here... > > while(1){ > servo[13] = 5;//오른쪽 집게 움직임 > servo[14] = 5;//왼쪽 집게 움직임 > servo[1] = 5;//오른쪽 고관절 움직임 값 > servo[2] = 5; > servo[3] = 5; > servo[4] = 5;//오른쪽다리 드는 값 > servo[5] = 5; > servo[6] = 5; > servo[4] = 1;//오른쪽다리 내리는 동작 > servo[5] = 1; > servo[6] = 1; > servo[13] = 1;//오른쪽 집게 움직임 > servo[14] = 1;//왼쪽 집게 움직임 > delay(20); > servo[13] = 5;//오른쪽 집게 움직임 > servo[14] = 5;//왼쪽 집게 움직임 > servo[1] = 1;//오른쪽 고관절 초기 값(제로) > servo[2] = 1; > servo[3] = 1; > servo[7] = 5;//왼쪽서보모터의 값 > servo[8] = 5; > servo[9] = 5; > servo[10] = 5;//왼쪽다리 드는 값 > servo[11] = 5; > servo[12] = 5; > servo[10] = 1;//왼쪽다리 내리는 동작 > servo[11] = 1; > servo[12] = 1; > servo[13] = 1;//오른쪽 집게 움직임 > servo[14] = 1;//왼쪽 집게 움직임 > delay(20); > } >{ > delay(1000); > delay(1000); > > MOTOR_DDR = 0xff; // 모터포트 초기화 > ENABLE1_ON; > > while(1){ > //printf(" %d 정방향 회전\\n\\r", count++); > LED_PORT = 0x01; > for(i=0; i<100; i++){ > if(i<=100) > motor_control = i; > else > motor_control = 200-i; > delay(300); > } > //printf(" %d 역방향 회전\\n\\r", count++); > LED_PORT = 0x02; > for(i=0; i<200; i++){ > if(i<=100) > motor_control = i * -1; > else > motor_control = (200-i) * -1; > delay(300); > } >} > >} > >} >
1194 답변완료스테핑모터 구동하려고 하는데 잘안되네요.... 이건창 2008-06-19 1,503
atmaga128pro-c와 se-sm스테핑모터 모듈은 AM-CS2P를 쓰구요 모두 완제품이고 AVR을 처음 접해 봅니다. 스테핑모터를 구동시켜볼려고하고 있구요 CD안의 예제로 돌려보려고 하는데 돌아가지가 않네요.... 완전 초보라 자세한 답변 부탁드립니다. 예제는 밑에.... #include <iom128v.h> #include <macros.h> #define MOTOR_PORT PORTC #define MOTOR_PORT_DDR DDRC 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 = 0x33; PORTG = 0x00; DDRG = 0x03; } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x67; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x18; } //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 } /* Stepping Motor derive---------------------------*/ unsigned char LEFTmotorOneClock(unsigned char step, char dir) { step = step & 0x0f; if(dir){ switch(step){ case 0x09: step=0x01; break; case 0x01: step=0x03; break; case 0x03: step=0x02; break; case 0x02: step=0x06; break; case 0x06: step=0x04; break; case 0x04: step=0x0c; break; case 0x0c: step=0x08; break; case 0x08: step=0x09; break; default: step=0x0c; break; } }else{ switch(step){ case 0x09: step=0x08; break; case 0x01: step=0x09; break; case 0x03: step=0x01; break; case 0x02: step=0x03; break; case 0x06: step=0x02; break; case 0x04: step=0x06; break; case 0x0c: step=0x04; break; case 0x08: step=0x0c; break; default: step=0x0c; break; } } return step; } /* Stepping Motor derive---------------------------*/ unsigned char RIGHTmotorOneClock(unsigned char step, char dir) { step = step & 0xf0; if(dir){ switch(step){ case 0x90: step=0x10; break; case 0x10: step=0x30; break; case 0x30: step=0x20; break; case 0x20: step=0x60; break; case 0x60: step=0x40; break; case 0x40: step=0xc0; break; case 0xc0: step=0x80; break; case 0x80: step=0x90; break; default: step=0xc0; break; } }else{ switch(step){ case 0x90: step=0x80; break; case 0x10: step=0x90; break; case 0x30: step=0x10; break; case 0x20: step=0x30; break; case 0x60: step=0x20; break; case 0x40: step=0x60; break; case 0xc0: step=0x40; break; case 0x80: step=0xc0; break; default: step=0xc0; break; } } return step; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } } // void main(void) { volatile unsigned char stepleft=0, stepright=0; init_devices(); //insert your functional code here... printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); MOTOR_PORT_DDR = 0xff; while(1){ stepright = RIGHTmotorOneClock(stepright, 1); stepleft = LEFTmotorOneClock(stepleft, 0); delay(3); MOTOR_PORT = stepleft|stepright; } }
관리자 답변 N.T.C · 2008-06-19
안녕하세요? 저희 N.T.C 제품을 이용하여 주셔서 감사드립니다. 좀 더 자세히 질문하여 주셔야 답변이 가능하겠네요. 예를 들면, 컴파일이 안되는 지, 컴파일까지하고 다운로드가 안되는 것인지, 다운로드까지 완료하고 모터가 구동을 안 된다는 것인지, 전압은 얼마를 가했는 지 등등을 자세히 질문해 주세요. 또한, 질문하는 방법에 대한 공지가 있습니다. 한번 정독후에 자세한 질문을 부탁 드립니다. 자세히 질문하셔야 빠르게 답변이 가능합니다. 감사합니다. >atmaga128pro-c와 se-sm스테핑모터 모듈은 AM-CS2P를 쓰구요 >모두 완제품이고 AVR을 처음 접해 봅니다. >스테핑모터를 구동시켜볼려고하고 있구요 >CD안의 예제로 돌려보려고 하는데 돌아가지가 않네요.... >완전 초보라 자세한 답변 부탁드립니다. > >예제는 밑에.... > >#include <iom128v.h> >#include <macros.h> > >#define MOTOR_PORT PORTC >#define MOTOR_PORT_DDR DDRC > >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 = 0x33; > PORTG = 0x00; > DDRG = 0x03; >} > >//UART0 initialize >// desired baud rate: 9600 >// actual: baud rate:9615 (0.2%) >// char size: 8 bit >// parity: Disabled >void uart0_init(void) >{ > UCSR0B = 0x00; //disable while setting baud rate > UCSR0A = 0x00; > UCSR0C = 0x06; > UBRR0L = 0x67; //set baud rate lo > UBRR0H = 0x00; //set baud rate hi > UCSR0B = 0x18; >} > >//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 >} > >/* Stepping Motor derive---------------------------*/ >unsigned char LEFTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0x0f; > if(dir){ > switch(step){ > case 0x09: step=0x01; break; > case 0x01: step=0x03; break; > case 0x03: step=0x02; break; > case 0x02: step=0x06; break; > case 0x06: step=0x04; break; > case 0x04: step=0x0c; break; > case 0x0c: step=0x08; break; > case 0x08: step=0x09; break; > default: step=0x0c; break; > } > }else{ > switch(step){ > case 0x09: step=0x08; break; > case 0x01: step=0x09; break; > case 0x03: step=0x01; break; > case 0x02: step=0x03; break; > case 0x06: step=0x02; break; > case 0x04: step=0x06; break; > case 0x0c: step=0x04; break; > case 0x08: step=0x0c; break; > default: step=0x0c; break; > } > } > return step; > >} > >/* Stepping Motor derive---------------------------*/ >unsigned char RIGHTmotorOneClock(unsigned char step, char dir) >{ > step = step & 0xf0; > if(dir){ > switch(step){ > case 0x90: step=0x10; break; > case 0x10: step=0x30; break; > case 0x30: step=0x20; break; > case 0x20: step=0x60; break; > case 0x60: step=0x40; break; > case 0x40: step=0xc0; break; > case 0xc0: step=0x80; break; > case 0x80: step=0x90; break; > default: step=0xc0; break; > } > }else{ > switch(step){ > case 0x90: step=0x80; break; > case 0x10: step=0x90; break; > case 0x30: step=0x10; break; > case 0x20: step=0x30; break; > case 0x60: step=0x20; break; > case 0x40: step=0x60; break; > case 0xc0: step=0x40; break; > case 0x80: step=0xc0; break; > default: step=0xc0; break; > } > } > return step; >} > > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} > >// >void main(void) >{ > volatile unsigned char stepleft=0, stepright=0; > > init_devices(); > //insert your functional code here... > > printf(" \\n\\n\\rStepping Motor test program...\\n\\r"); > > MOTOR_PORT_DDR = 0xff; > while(1){ > stepright = RIGHTmotorOneClock(stepright, 1); > stepleft = LEFTmotorOneClock(stepleft, 0); > delay(3); > MOTOR_PORT = stepleft|stepright; > } >} > >
1193 답변완료전원입력이 안되는데...;; 이성광 2008-06-19 1,436
제가 오늘 제품받아서 좀전에 뜯어보고 한번 해보고싶어서 조립하여서 실행하였습니다.. 몇가지 질문좀 드리고싶습니다... 동그란거 이거 ac인가요 여튼 이걸끼우고하니 12볼트 입력이 전원부 램프에 불이안들어옵니다.... 거기 젠더부분빼고 반대편에 12볼트 전원 핀으로 넣는곳에 연결해보니 램프에 불이잘들어오고 isp프로그램도 굽히는것을 확인하였습니다... 이거 젠더로 연결하는부분안되는데 교환될지 궁금합니다.. 혹시 제가 모르고 딴거 머해야되는데 몰라서 그런거라면 가르쳐주세요..ㅠ.ㅠ;;; 노트북으로 이 실험 키트를 하고싶은데 프린트포트가 지원안됩니다.... 따라서 유에스비로 해야될꺼같은데 유에스비isp가 몇개 있던거같은데 차이점이있는지 궁금합니다.... 산다면 어떤것을 사야될지... avr프로 키트 완제품을구입하였습니다. 그리고 카페 가입감사합니다...^^
관리자 답변 N.T.C · 2008-06-19
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. 이상하네요. 제품 이상이라면 새제품으로 무상 교체됩니다. 방문해 주시거나, 택배로 보내주시면 되구요. 택배를 보냈을 때 테스트 후, 제품 이상이 아니면, 택배비는 청구될 수 있습니다. 또한, USBISP는 두 종류입니다. USBISP-L은 커넥터변환보드(2*3, 2*5, NTC용 6핀 간)가 포함되지 않은 거구요. USBISP는 모두 다 포함된 풀패키지입니다. 저희 회사 제품만 사용하실 경우에는 USBISP-L만 사셔도 되구요. 차후에 커넥터 변환보드를 추가로 구매 가능합니다. 물론, 같이 사는 게 얼마간 더 싸겠지요. 까페에서도 저희 싸이트와 동일한 형태로 운영이 될 예정입니다. 많은 활동 부탁드립니다. 감사합니다. >제가 오늘 제품받아서 좀전에 뜯어보고 한번 해보고싶어서 조립하여서 실행하였습니다.. 몇가지 질문좀 드리고싶습니다... > >동그란거 이거 ac인가요 여튼 이걸끼우고하니 12볼트 입력이 전원부 램프에 불이안들어옵니다.... 거기 젠더부분빼고 반대편에 12볼트 전원 핀으로 넣는곳에 연결해보니 램프에 불이잘들어오고 isp프로그램도 굽히는것을 확인하였습니다... > >이거 젠더로 연결하는부분안되는데 교환될지 궁금합니다.. > >혹시 제가 모르고 딴거 머해야되는데 몰라서 그런거라면 가르쳐주세요..ㅠ.ㅠ;;; > >노트북으로 이 실험 키트를 하고싶은데 프린트포트가 지원안됩니다.... 따라서 >유에스비로 해야될꺼같은데 유에스비isp가 몇개 있던거같은데 차이점이있는지 궁금합니다.... 산다면 어떤것을 사야될지... avr프로 키트 완제품을구입하였습니다. > > > >그리고 카페 가입감사합니다...^^
1192 답변완료ab-m128 pro 보드 판매시. 조수훈 2008-06-18 1,451
좀 황당하군요.. 보드를 구매할 때 jtage도 같이 샀습니다만.. 구매하는데는 아무런 말도 없고 Q&A 게시판에만 jtag퓨즈 설정이 안되어 있다고 나오면 isp 없는 사람은 다시 사라는 말인가요. 미리 얘기를 해줘야 이런 말썽이 없을거 아닙니까
관리자 답변 N.T.C · 2008-06-19
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사합니다. AVR을 처음 사용하시면, 그렇게 느낄 수도 있겠습니다만, 대부분의 고객님이 ISP를 사용하고 계시구요. 퓨즈에서 JTAG을 enable 하게 되면 포트 하나가 4핀은 입력으로 4핀은 출력으로 고정되어버리게 됩니다. 따라서, JTAG을 인에이블하게 되면, 일부 포트를 원하는 데로 설정해서 쓰지 못하는 문제가 발생하게 되어서, 어쩔 수 없이 JTAG을 disable 하여 판매하고 있습니다. 강좌->AVR 강좌 같은 곳에 보면, 퓨즈비트 설정에 대해서도 자세히 설명하고 있습니다. 구입을 아마도 대리점에서 하셨을 것 같은데요. 대리점에서는 아마도 jtag을 쓸 때는 퓨즈를 jtag 비트를 인에이블해야 한다는 정도는 잘 모르고 판매만 대행하고 있을 겁니다. 양해해 주시구요. ISP를 굳이 사지 않으셔도, 필요하시다면 뉴테크놀로지 컴패니 본사로 방문해 주시면, 저희가 직접 jtag을 enable 하는 것으로 퓨즈를 변경해 드릴 수도 있습니다. ISP를 굳이 구매하지 않으셔도 저희 회사를 찾아 오시면 되겠습니다. 하지만, AVR을 잘 사용하시려면, ISP하나 정도는 구매하든 만들든 가지고 계시는 게 좋겠습니다. ISP를 만들 수 있는 회로도는 저희 회사 자료실에 보면, AD-ISPPRO 메뉴얼에도 회로도를 공개하고 있으니, 참고 바랍니다. 또한, 다운로드나 모니터링, 그리고 각종 모듈을 사용할 수 있는 소스코드와 강좌 등이 본 싸이트와 네이버 까페 중에 뉴테크놀로지 컴패니 까페(http://cafe.naver.com/newtc.cafe)에 가입하셔도 자세한 정보와 소스 코드 및 Q&A 등의 정보를 얻으실 수 있습니다. 언제든 질문 있으시면, 질문해 주시면 성실히 답변해 드리겠습니다. 하지만, 공부를 전혀 안하시면 안되구요. 열심히 공부하시는 분들에게 답변할 때, 저희도 힘이 나서 더 좋은 답변을 하게 되오니, 열심히 하시기 바랍니다. 감사합니다. >좀 황당하군요.. > >보드를 구매할 때 jtage도 같이 샀습니다만.. > >구매하는데는 아무런 말도 없고 > >Q&A 게시판에만 jtag퓨즈 설정이 안되어 있다고 나오면 > >isp 없는 사람은 다시 사라는 말인가요. > >미리 얘기를 해줘야 이런 말썽이 없을거 아닙니까 > >
1191 답변완료홈페이지가입및 자료 다운로드가 안되네요...ㅠ.ㅠ 이성광 2008-06-18 1,457
안녕하세요 키트를 구입해서 이제 해볼려고 하는데 홈페이지에서 자료들이 다운로드가 안되네요.... 홈페이지 가입할려고했으나 가입버튼누르면 사이트가 안뜨고요.. 카페도 승인이 되어야되는데... 카페가입이라도 부탁드립니다..
관리자 답변 N.T.C · 2008-06-18
가입승인 해드렸습니다. 감사합니다.
1190 답변완료스태핑모터 모듈 구입했었습니다만 마로과 2008-06-17 1,429
구동하니까 양쪽에 토크가 틀린거 같습니다. 한쪽의 토크가 다른 한쪽의 토크를 못따라가는데요 직선으로 움직이면 왼쪽방향으로 틀어져버립니다. 모듈이 잘 못된건가요? 모듈은 AM-CS2 vol2 입니다.
관리자 답변 N.T.C · 2008-06-17
안녕하세요? 고객님, 저희 N.T.C 제품을 이용하여 주셔서 감사드립니다. 모듈에 보면 토크를 맞춰주는 가변저항이 있습니다. 가변 저항을 돌려서, 토크를 맞춰 주시면 됩니다. 그리고, 전원이 딸리는 것 같을 때도, 같은 증상이 나올 수 있습니다. 정격 24V에 토크에 따른 충분한 전류를 공급해 주시기 바랍니다. 감사합니다. >구동하니까 양쪽에 토크가 틀린거 같습니다. > >한쪽의 토크가 다른 한쪽의 토크를 못따라가는데요 > >직선으로 움직이면 왼쪽방향으로 틀어져버립니다. > >모듈이 잘 못된건가요? > > >모듈은 AM-CS2 vol2 입니다.
1189 답변완료7시그먼트 출력이상인지 질문 붉은처녀 2008-06-17 1,474
아래의 main() 함수와 같이 출력을 고정으로 하였습니다. void main(void) { int i=0; init_devices(); display_num[0] = 1; display_num[1] = 2; display_num[2] = 3; display_num[3] = 4; } 그러나 실제 디스플레이에 보면 8.1 2 3. 이 나타납니다. 원래의 카운트를 해도 첫자리는 8.으로 고정이고 마지막 자리도 3.으로 고정이면서 가운데 2자리만 증가를 합니다. 어떤 문제일까요? //ICC-AVR application builder : 2005-04-04 오전 1:53:50 // Target : M128 // Crystal: 16Mhz #include <iom128v.h> #include <macros.h> void delay(int n); const char segment_data[10] = {63, 6,91,79,102,109,125,39,127,103}; unsigned char display_num[4]={0,0,0,0}; // Seven segment 4자리 숫자 출력 버퍼 void port_init(void) { PORTA = 0x00; DDRA = 0xff; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x0f; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x03; } //TIMER0 initialize - prescale:64 // WGM: Normal // desired value: 1KHz // actual value: 1.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0x06; //set count OCR0 = 0xFA; TCCR0 = 0x04; //start timer } unsigned char digit_num=0; #pragma interrupt_handler timer0_ovf_isr:17 void timer0_ovf_isr(void) { TCNT0 = 0x06; //reload counter value digit_num++; digit_num = digit_num%4; PORTC = 0x0f; PORTA = segment_data[display_num[digit_num]]; PORTC = ~(0x01 << digit_num); } //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(); 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 main(void) { int i=0; init_devices(); display_num[0] = 1; display_num[1] = 2; display_num[2] = 3; display_num[3] = 4; } void delay(int n) { volatile int i,j; for(i=1;i<n;i++) { for(j=1;j<600;j++); } }
관리자 답변 N.T.C · 2008-06-17
안녕하세요? 고객님, 반드시 본인 성함을 사용해 주시기 바랍니다. 여기서는 익명을 사용하면 답변해 드리지 않고 있습니다. 저희 회사 예제 소스를 삭제하지 마시고, 그대로 사용해 보시는 것이 좋겠습니다. 세븐 세그먼트 로 자료실->기존 자료실에서 검색해 보시기 바랍니다. 우선, 밑에 있는 소스는 while(1){ display_num[0] = 1; display_num[1] = 2; display_num[2] = 3; display_num[3] = 4; } 이와 같이 되는 것이 좋겠지요? 감사합니다. >아래의 main() 함수와 같이 출력을 고정으로 하였습니다. >void main(void) >{ > int i=0; > init_devices(); > > display_num[0] = 1; > display_num[1] = 2; > display_num[2] = 3; > display_num[3] = 4; >} > >그러나 실제 디스플레이에 보면 8.1 2 3. 이 나타납니다. >원래의 카운트를 해도 첫자리는 8.으로 고정이고 마지막 자리도 3.으로 고정이면서 >가운데 2자리만 증가를 합니다. > >어떤 문제일까요? > > > > > > > > >//ICC-AVR application builder : 2005-04-04 오전 1:53:50 >// Target : M128 >// Crystal: 16Mhz > >#include <iom128v.h> >#include <macros.h> > >void delay(int n); > > >const char segment_data[10] = {63, 6,91,79,102,109,125,39,127,103}; > >unsigned char display_num[4]={0,0,0,0}; // Seven segment 4자리 숫자 출력 버퍼 > > >void port_init(void) >{ > PORTA = 0x00; > DDRA = 0xff; > PORTB = 0x00; > DDRB = 0x00; > PORTC = 0x00; //m103 output only > DDRC = 0x0f; > PORTD = 0x00; > DDRD = 0x00; > PORTE = 0x00; > DDRE = 0x00; > PORTF = 0x00; > DDRF = 0x00; > PORTG = 0x00; > DDRG = 0x03; >} > >//TIMER0 initialize - prescale:64 >// WGM: Normal >// desired value: 1KHz >// actual value: 1.000KHz (0.0%) >void timer0_init(void) >{ > TCCR0 = 0x00; //stop > ASSR = 0x00; //set async mode > TCNT0 = 0x06; //set count > OCR0 = 0xFA; > TCCR0 = 0x04; //start timer >} > >unsigned char digit_num=0; > >#pragma interrupt_handler timer0_ovf_isr:17 >void timer0_ovf_isr(void) >{ > TCNT0 = 0x06; //reload counter value > digit_num++; > digit_num = digit_num%4; > PORTC = 0x0f; > PORTA = segment_data[display_num[digit_num]]; > PORTC = ~(0x01 << digit_num); > >} > >//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(); > > 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 main(void) >{ > int i=0; > init_devices(); > > display_num[0] = 1; > display_num[1] = 2; > display_num[2] = 3; > display_num[3] = 4; > > >} > > >void delay(int n) >{ > volatile int i,j; > for(i=1;i<n;i++) > { > for(j=1;j<600;j++); > } >} >