Autonom robotväckarklocka med trådlös basstation - KTH
Autonom robotväckarklocka med trådlös basstation - KTH
Autonom robotväckarklocka med trådlös basstation - KTH
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
C:\Documents and Settings\mazda\My Documents\Stegmotor16\Stegmotor.c<br />
#include "Stegmotor.h"<br />
int Allstep[3][24] = {{0x0F, 0x0F,0x2B, 0x2B,0x1D, 0x1D,0x31, 0x31,0x15, 0x15,0x23, 0x2<br />
3,0x06, 0x06,0x22, 0x22,0x14, 0x14,0x38, 0x38,0x1C, 0x1C,0x2A, 0x2A},<br />
{0x0F, 0x0F, 0x0F,0x2D, 0x2D,0x2D, 0x31, 0x31,0x31,0x25, 0x25,0x25,0x06, 0x06,0x06,<br />
0x24, 0x24,0x24,0x38, 0x38,0x38,0x2C, 0x2C, 0x2C},<br />
{0x0F,0x0F,0x0F, 0x0F,0x0F,0x0F, 0x31,0x31,0x31, 0x31,0x31,0x31,0x06, 0x06, 0x06,<br />
0x06, 0x06, 0x06,0x38, 0x38, 0x38,0x38, 0x38, 0x38}};//Sparar de tre steglägena i en st<br />
egmatris. 24 är den minsta gemensamma nämnaren.<br />
unsigned int step=0; //För Timer 1. Håller koll på var i stegvektorn man är.<br />
int motsatt=0; //Håller koll på riktningen som motorn snurrar åt. Används i Timer 1. st<br />
älls i inmatning.<br />
volatile int stepmode=0; //stegsätt, 0=12-steg. 1=8-steg, 2=4-steg. Interrupt 2.<br />
ISR(SIG_OUTPUT_COMPARE1A){<br />
if (motsatt==1){<br />
PORTB=Allstep[stepmode][step];<br />
}else{PORTB=Allstep[stepmode][23-step];<br />
}<br />
step++;<br />
if (step==24)<br />
step=0;<br />
}<br />
ISR(SIG_INTERRUPT1){ //växlar state<br />
state++;<br />
if (state==4){<br />
state=0;<br />
}<br />
PORTC|=0x0F; //Ändrar Lysdioder som indikerar menyval<br />
if (state == 0){<br />
PORTC&=~8;<br />
}else if(state==1){<br />
PORTC&=~1;<br />
}else if(state==2){<br />
PORTC&=~2;<br />
}else{<br />
PORTC&=~4;<br />
}<br />
}<br />
ISR(SIG_INTERRUPT0){ //växlar mellan 4,8-och 12-steg<br />
stepmode++;<br />
if(stepmode==3){<br />
stepmode=0;<br />
}<br />
}<br />
PORTC|=0xF0;<br />
if(stepmode==0){ //Ändrar Lysdioder som indikerar stegval<br />
PORTC&=~32;<br />
}else if(stepmode==1){<br />
PORTC&=~64;<br />
}else{<br />
PORTC&=~128;<br />
}<br />
int main(void){<br />
double vinkel=0;<br />
int j=0;<br />
state = 0; //Menyval<br />
DDRA=0x70; //Tangentbord och potentiometer<br />
DDRD=0x00; //Används av de externa interrupterna<br />
DDRC=0xFF; //Lysdioder<br />
DDRB=0xFF; //Utgång till H-brygga<br />
PORTA=0x0F; //Íntern Pullup<br />
PORTD=0xFF;<br />
Page: 1<br />
PORTC=~0x00;<br />
PORTC&=~8; //Tänder lysdioderna för att visa vad startvärdena är.<br />
PORTC&=~128;