ADC로 적외선 센서값을 받아서 스텝모터를 구동하는 소스를 짜는중인데요
제 생각으로는 지금 소스라면 분명히 선을따라서 이동을해야하는데
제대로된 구동을 하지 않네요 ㅠㅠ... 실제로 작동을 시키면 바퀴가 덜컥덜컥거리면서
뭔가 불안해요 바닥에 내려놓으면 천천히 굴러가긴하는데 그냥 스텝모터 구동처럼
깨끗한 모양새는 아니더라구요 아래 소스 첨부하구요 뭐가 잘못됫는지 혹은 좀 수정할 곳이 있는지
조언좀해주세요 ㅠㅠ.. 처음만드는건데 여기서 막혀갖구
#include <mega128.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
unsigned char Rstep[4]={0x05,0x06,0x0a,0x09};
unsigned char Lstep[4]={0x90,0xa0,0x60,0x50};
unsigned int sensor_input[6];
unsigned int i=0,j,k;
unsigned char num[6];
interrupt [ADC_INT] void adc_isr(void)
{
sensor_input[i]=ADCW;
i++;
switch(i)
{
case 0: ADMUX = 0x00; break;
case 1: ADMUX = 0x01; break;
case 2: ADMUX = 0x02; break;
case 3: ADMUX = 0x03; break;
case 4: ADMUX = 0x04; break;
case 5: ADMUX = 0x05; break;
default: i=0; break;
delay_ms(50);
}
}
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
if(sensor_input[0]||sensor_input[1]>400)
{
TCNT2=1;
if(j>3){
j=0;}
else{
PORTA=Lstep[j];
j++;
}
}
else{
TCNT2=237;
if(j>3){
j=0;}
else{
PORTA=Lstep[j];
j++;
}
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(sensor_input[4]||sensor_input[5]>400)
{
TCNT0=0;
if(k>3){
k=0;}
else{
PORTA=Rstep[k];
k++;
}
}
else{
TCNT0=235;
if(k>3){
k=0;}
else{
PORTA=Rstep[k];
k++;
}
}
}
void main(void)
{
DDRF=0x00;
PORTF=0x00;
DDRD=0xff;
PORTD=0xff;
DDRA=0xff;
PORTA=0xff;
TIMSK=0x41;
TCCR0=0x07;
TCNT0=0xff;
TCCR2=0x05;
TCNT2=0xff;
ADMUX=0x00;
ADCSRA=0b11101111;
lcd_init(16);
#asm("sei")
while (1)
{
lcd_clear();
lcd_gotoxy(0,0);
sprintf(num,"%3d",sensor_input[0]);
lcd_puts(num);
lcd_gotoxy(4,0);
sprintf(num,"%3d",sensor_input[1]);
lcd_puts(num);
lcd_gotoxy(8,0);
sprintf(num,"%3d",sensor_input[2]);
lcd_puts(num);
lcd_gotoxy(0,1);
sprintf(num,"%3d",sensor_input[3]);
lcd_puts(num);
lcd_gotoxy(4,1);
sprintf(num,"%3d",sensor_input[4]);
lcd_puts(num);
lcd_gotoxy(8,1);
sprintf(num,"%3d",sensor_input[5]);
lcd_puts(num);
delay_ms(500);
};
}