29.08.2013 Views

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

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!