Stap 4: Software. Dat ding dat maakt spullen doen stuff.
Ja, hulpmiddelen. Ga dan naar "bestuur" en selecteer "attiny2313 @ 8Mhz". Ja, ik weet dat de andere instrucable te stellen tot 1MHz eerder zei. Deze maakt gebruik van 8MHz omdat daardoor 8 keer sneller lopen, met absoluut geen wijziging, software of anderszins. Ervoor dan je normale arduino is geconfigureerd voor het verzenden van programma's aan de attiny (het kan de arduino wrak als het niet is), klikt u op "tools > Burn Bootloader". Aantal lampjes moeten knipperen en dan het "gedaan brandende bootloader" moet zeggen. Als het foutbericht niet terug, klik gewoon uploaden de code normaal. Wanneer de BLINKIE lichten stoppen, koppel de arduino, de attiny uitlichten en breken uw breadboard nogmaals.
ATtiny 2313 stepper chauffeur door Jduffy. Volledige instructies op instrucatables.
Const byte I011 = 1; //the pinnen voor elke functie.
Const byte I111 = 2; //names eindigt in 1 zijn voor stepper 1
Const byte dr11 = 3;
Const byte I021 = 8;
Const byte I121 = 9;
Const byte dr21 = 10;
Const byte I012 = 11; //same voor stepper 2
Const byte I112 = 12;
Const byte dr12 = 13;
Const byte I022 = 14;
Const byte I122 = 15;
Const byte dr22 = 16; //for aller de 0 die dan volgt, vertegenwoordigt op "on" pin
Als de 2619 lage registers als actief.
lijsten als deze worden gebruikt omdat ze heel weinig van nemen de
chips van geheugen, dat voor de attiny2313, is in het kort aanbod (slechts 2k!)
Het vereenvoudigt ook sterk de onderstaande code.
Booleaanse stp10 [] = {1,0,1,0,1,0,1,0,1,0,1,0}; //output aan LSB huidige beperken 1
Booleaanse stp11 [] = {1,1,0,0,0,1,1,1,0,0,0,1}; //output aan MSB huidige beperken 1
Booleaanse stpd1 [] = {1,1,1,1,1,1,0,0,0,0,0,0}; //output richting 1
Booleaanse stp20 [] = {0,1,0,1,0,1,0,1,0,1,0,1}; //output aan LSB huidige beperken 2
Booleaanse stp21 [] = {0,0,1,1,1,0,0,0,1,1,1,0}; //output aan MSB huidige beperken 2
Booleaanse stpd2 [] = {0,0,0,1,1,1,1,1,1,0,0,0}; //output richting 2
byte-stepp1; //step deel voor stepper 1
lange pos1; / / "werkelijke" positie van stepper 1
lange dpos1; //desired positie van stepper 1
byte in1 = 6; de invoer pin //direction voor stepper 1
byte-stepp2; //same spullen voor stepper 2
lange pos2;
lange dpos2;
byte in2 = 7;
VOID Setup {}
DDRB = B11111111; //This is erg belangrijk, aangezien dit de
DDRD = B1000011; //same als "pinMode(), maar zeer weinig ruimte in beslag neemt.
Als u iets anders dan een attiny 2313 gebruikt, moet dan u al deze te wijzigen
de standaard "pinMode();" commando.
DDRA = B011; //if u pennen 6 of 7 uitgangen, moet u deze regels wijzigen
//
Als u niet wat deze lijnen betekenen weet, er is een
uitleg bij http://arduino.cc/en/Reference/PortManipulation
attachInterrupt (0, stap 1, stijgt); //ALWAYS op digitale 4 of 5 (0 = 4, 1 = 5), mogen niet de interrupts
attachInterrupt (1), step2, stijgen; alle andere pinnen, tenzij u gebruik maken van pcinterrupts, die weinig biedt //on
} //to geen voordeel. De 0 en 1 zijn dezelfde voor alle avr boards, hoewel de pin nummer zelf zullen afwijken
void loop {}
Als (pos1! = dpos1) {//if de stepper is niet waar het moet...
Als (pos1 < dpos1) {//and nodig om vooruit te gaan...
stepfwd1 (); //go vooruit!
} else {//otherwise
stepbck1 (); //go achteruit!
}
}
Als (pos2! = dpos2) {//do het zelfde ding voor stepper 2
Als (pos2 < dpos2) {}
stepfwd2();
} else {}
stepbck2();
}
}
delayMicroseconds(3); een beetje wachten
}
VOID step1() {//if de "stap" pin voor stepper 1 kwam hoog
if(digitalRead(IN1)==low) {//and de "richting" pin is laag
dpos1 ++; //tell de lus aan stap vooruit 1
} else {//otherwire
dpos1--; //step achter 1
}
}
VOID step2() {//same voor stepper 2
if(digitalRead(in2)==low) {}
dpos2 ++;
} else {}
dpos2--;
}
}
ongeldig stepfwd1() {//if stepper 1 behoeften om vooruit te gaan
stepp1 ++; //advance de stap-reeks 1
Pos1 ++; //increase de positie van de waargenomen door 1
Als (stepp1 > 11) {//if het klaar een volledige stap vervolgens
stepp1 = 0; //reset het aan het begin van de opeenvolging van de stap
}
(van buiten); //digitalWrite alle de pinnen die het nodig hebben.
}
VOID stepfwd2() {//same voor stepper 2
stepp2 ++;
pos2 ++;
Als (stepp2 > 11) {//if het klaar een volledige stap vervolgens
stepp2 = 0; //reset het aan het begin van de opeenvolging van de stap
}
out();
}
VOID stepbck1() {//if nodig om terug te gaan
stepp1--; //move de stap terug een volgnummer
Pos1--; //move de waargenomen terug een positie
Als (stepp1 > 12) {//if het klaar een volledige stap vervolgens
stepp1 = 11; //reset het aan het begin van de opeenvolging van de stap
}
out();
}
VOID stepbck2() {//same voor stepper 2
stepp2--;
pos2--;
Als (stepp2 > 12) {//if het klaar een volledige stap vervolgens
stepp2 = 11; //reset het aan het begin van de opeenvolging van de stap
}
out();
}
ongeldig out() {}
if(stepp1>11) {//these houden de "stepp" byte uit te gaan van de gegevens
stepp1 = 0; in de lijsten van de stap.
}
if(stepp2>11) {}
stepp2 = 0;
}
digitalWrite (I011, stp10 [stepp1]); //writes de waarden van elke lijst tot en met de pin.
digitalWrite(I111,stp11[stepp1]);
digitalWrite(dr11,stpd1[stepp1]);
digitalWrite(I021,stp20[stepp1]);
digitalWrite(I121,stp21[stepp1]);
digitalWrite(dr21,stpd2[stepp1]);
digitalWrite(I012,stp10[stepp2]);
digitalWrite(I112,stp11[stepp2]);
digitalWrite(dr12,stpd1[stepp2]);
digitalWrite(I022,stp20[stepp2]);
digitalWrite(I122,stp21[stepp2]);
digitalWrite(dr22,stpd2[stepp2]);
}