$4.5 bättre stepper drivrutin (4 / 5 steg)
Steg 4: programvara. Det där som gör grejer gör saker.
Ja, verktyg. Gå sedan till "styrelsen" och välj "attiny2313 @ 8Mhz". Ja, jag vet den andra instrucable sade till sätta den till 1MHz tidigare. Detta använder 8MHz eftersom det gör det körs 8 gånger snabbare, med absolut ingen ändring, programvara eller på annat sätt. Göra säker än din normala arduino är konfigurerad för att skicka program till attiny (det kan fördärva arduino om det inte är), klicka på "Verktyg > Bränn Bootloader". Några lampor bör blinka och då bör det stå "gjort brinnande bootloader". Om det inte returnerade ett fel, sedan bara ladda upp koden normalt. När de blinkande lamporna slutar, koppla arduino, dra ut attiny och bryta ut din skärbräda gång.
ATtiny 2313 stepper föraren av Jduffy. Fullständiga instruktioner om instrucatables.
CONST byte I011 = 1; //the stift för varje funktion.
CONST byte I111 = 2; //names slutar i 1 är för stepper 1
CONST byte dr11 = 3;
CONST byte I021 = 8;
CONST byte I121 = 9;
CONST byte dr21 = 10;
CONST byte I012 = 11. //same för stepper 2
CONST byte I112 = 12.
CONST byte dr12 = 13.
CONST byte I022 = 14.
CONST byte I122 = 15.
CONST byte dr22 = 16. //for alla av följande, 0 representerar på "på" pin
som 2619 låga register som aktiv.
så här används eftersom de tar mycket lite av den
chips-minne, som för attiny2313, är en bristvara (bara 2k!)
Det förenklar också koden nedan.
booleska stp10 [] = {1,0,1,0,1,0,1,0,1,0,1,0}; //output till LSB nuvarande begränsa 1
booleska stp11 [] = {1,1,0,0,0,1,1,1,0,0,0,1}; //output till MSB nuvarande begränsa 1
booleska stpd1 [] = {1,1,1,1,1,1,0,0,0,0,0,0}; //output till riktning 1
booleska stp20 [] = {0,1,0,1,0,1,0,1,0,1,0,1}; //output till LSB nuvarande begränsa 2
booleska stp21 [] = {0,0,1,1,1,0,0,0,1,1,1,0}; //output till MSB nuvarande begränsa 2
booleska stpd2 [] = {0,0,0,1,1,1,1,1,1,0,0,0}; //output till riktning 2
byte stepp1; //step del för stepper 1
långa pos1; / / "faktiska" läge för stepper 1
lång dpos1; //desired ställning stepper 1
byte in1 = 6; //direction ingångsstift för stepper 1
byte stepp2; //same grejer för stepper 2
långa pos2;
lång dpos2;
byte in2 = 7.
void setup() {
DDRB = B11111111; //This är mycket viktigt, eftersom detta är den
DDRD = B1000011; //same som "pinMode(); men tar mycket liten plats.
Om du använder något annat än en attiny 2313, måste du ändra alla dessa till
standard "pinMode();" kommandot.
DDRA = B011; //if du använder stift 6 eller 7 som utgångar, måste du ändra dessa rader
//
Om du inte vet vad dessa rader menar, finns det en
förklaring på http://arduino.cc/en/Reference/PortManipulation
attachInterrupt (0, steg 1, RISING); //ALWAYS digital 4 eller 5 (0 = 4, 1 = 5), avbrotten inte vara
attachInterrupt (1, steg 2, RISING), //on något annat stift, såvida du inte använder pcinterrupts, som erbjuder lite
} //to ingen fördel. 0 och 1 är samma för alla avr brädor, men pin nummer själv kommer att vara annorlunda
void loop() {
om (pos1! = dpos1) {//if nummerlistan är inte där det ska vara...
om (pos1 < dpos1) {//and måste gå framåt...
stepfwd1 (); //go fram!
} annat {//otherwise
stepbck1 (); //go bakåt!
}
}
om (pos2! = dpos2) {//do samma sak för stepper 2
om (pos2 < dpos2) {
stepfwd2();
} annat {
stepbck2();
}
}
delayMicroseconds(3); vänta lite
}
void step1() {//if "steg" PIN-koden för stepper 1 koms med hög
IF(digitalRead(In1)==Low) {//and "riktning" PIN-koden är låg
dpos1 ++; //tell slingan till steg framåt 1
} annat {//otherwire
dpos1--, //step baksidan 1
}
}
void step2() {//same för stepper 2
IF(digitalRead(IN2)==Low) {
dpos2 ++;
} annat {
dpos2--;
}
}
void stepfwd1() {//if stepper 1 behov att gå vidare
stepp1 ++; //advance sekvensen steg 1
Pos1 ++; //increase uppfattas positionen av 1
om (stepp1 > 11) {//if det avslutat en fullständig steg sedan
stepp1 = 0; //reset det till början av sekvensen steg
}
(ut); //digitalWrite alla stift där det behövs.
}
void stepfwd2() {//same för stepper 2
stepp2 ++;
POS2 ++;
om (stepp2 > 11) {//if det avslutat en fullständig steg sedan
stepp2 = 0; //reset det till början av sekvensen steg
}
Out();
}
void stepbck1() {//if det måste att gå tillbaka
stepp1--, //move steget sekvens tillbaka en
Pos1--; //move uppfattas placera tillbaka en
om (stepp1 > 12) {//if det avslutat en fullständig steg sedan
stepp1 = 11. //reset det till början av sekvensen steg
}
Out();
}
void stepbck2() {//same för stepper 2
stepp2--;
POS2--;
om (stepp2 > 12) {//if det avslutat en fullständig steg sedan
stepp2 = 11. //reset det till början av sekvensen steg
}
Out();
}
void out() {
IF(stepp1>11) {//these hålla "stepp" byte från att gå ur data
stepp1 = 0; i listorna steg.
}
IF(stepp2>11) {
stepp2 = 0;
}
digitalWrite (I011, stp10 [stepp1]), //writes värden för varje lista till sitt stift.
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]);
}