Étape 4: logiciel. Cette chose qui rend les choses faire des choses.
Oui, des outils. Ensuite, allez à la « carte » et sélectionnez « attiny2313 @ 8Mhz ». Oui, je sais que l’autre instrucable dit de le mettre plus tôt à 1MHz. Cet exemple utilise 8MHz parce qu’il fait courir 8 fois plus vite, absolument sans modification, logiciel ou autre. En vous assurant que votre arduino normal est configuré pour envoyer des programmes à l’attiny (il peut détruire l’arduino, si ce n’est pas), cliquez sur "Outils > Burn Bootloader". Certains lumières doivent clignoter, et puis il faut dire « fait feu bootloader ». Si elle ne retournait pas une erreur, alors il suffit de télécharger le code normalement. Quand les lumières blinky, déconnecter l’arduino, sortez l’attiny et sortir de votre maquette une fois de plus.
ATtiny 2313 conducteur pas à pas par Jduffy. Instructions complètes sur instrucatables.
const byte I011 = 1; //the épingles pour chaque fonction.
const byte I111 = 2; //names se terminant par 1 sont pour moteurs pas à pas 1
const byte dr11 = 3 ;
const byte I021 = 8 ;
const byte I121 = 9 ;
const byte dr21 = 10 ;
const byte I012 = 11 ; //same pour moteurs pas à pas 2
const byte I112 = 12 ;
const byte dr12 = 13 ;
const byte I022 = 14 ;
const byte I122 = 15 ;
const byte dr22 = 16 ; //for tous les 0 suivants, représente sur « on » broche
comme le 2619 registres faible comme étant active.
listes comme ça sont utilisés parce qu’ils prennent très peu de la
puces mémoire, ce qui, pour l’attiny2313, est en somme l’approvisionnement (seulement 2k!)
Il simplifie également le code ci-dessous.
stp10 Boolean [] = {1,0,1,0,1,0,1,0,1,0,1,0}; //output LSB courant limitant 1
stp11 Boolean [] = {1,1,0,0,0,1,1,1,0,0,0,1}; //output au MSB courant limitant 1
stpd1 Boolean [] = {1,1,1,1,1,1,0,0,0,0,0,0}; //output de direction 1
stp20 Boolean [] = {0,1,0,1,0,1,0,1,0,1,0,1}; //output LSB courant limitant 2
stp21 Boolean [] = {0,0,1,1,1,0,0,0,1,1,1,0}; //output au MSB courant limitant 2
stpd2 Boolean [] = {0,0,0,1,1,1,1,1,1,0,0,0}; //output de direction 2
stepp1 octet ; Partie //step pour moteurs pas à pas 1
pos1 long; / / position « réelle » des moteurs pas à pas 1
dpos1 long ; //desired position des moteurs pas à pas 1
octet in1 = 6; //direction broche d’entrée pour les moteurs pas à pas 1
stepp2 octet ; //same trucs pour moteurs pas à pas 2
pos2 long ;
long dpos2 ;
octet in2 = 7 ;
void setup() {}
DDRB = B11111111 ; //This est très important, car c’est le
DDDR = B1000011 ; //same comme « pinMode() ; mais prend très peu d’espace.
Si vous utilisez autre chose qu’un attiny 2313, vous devez remplacer tous ces
la norme « pinMode(); » commande.
DDRA = B011 ; //if vous utiliser les broches 6 ou 7 comme sorties, vous devez modifier ces lignes
//
Si vous ne savez pas ce que veux dire ces lignes, il y a une
explication sur http://arduino.cc/en/Reference/PortManipulation
attachInterrupt (0, Etape 1, RISING); //ALWAYS digital 4 ou 5 (0 = 4, 1 = 5), les interruptions ne peuvent pas être
attachInterrupt (1, Etape 2, RISING); //on d’autres épingles, sauf si vous utilisez pcinterrupts, qui offre peu de
} //to aucun avantage. Les 0 et 1 sont les mêmes pour tous les conseils de l’avr, bien que la broche numéro lui-même sera différent
void loop() {}
Si (pos1! = dpos1) {//if le stepper n’est pas où il devrait être...
Si (pos1 < dpos1) {//and il faut aller de l’avant...
stepfwd1 (); //go avec impatience !
} else {//otherwise
stepbck1 (); //go en arrière !
}
}
Si (pos2! = dpos2) {//do la même chose pour les moteurs pas à pas 2
Si (pos2 < dpos2) {}
stepfwd2() ;
} else {}
stepbck2() ;
}
}
delayMicroseconds(3) ; attendre un peu
}
void step1() {//if la broche « étape » pour moteurs pas à pas 1 a été portée haut
if(digitalRead(IN1)==Low) {//and la broche « direction » est faible
dpos1 ++; //tell la boucle à l’étape 1 avant
} else {//otherwire
dpos1--; //step dos 1
}
}
void step2() {//same pour moteurs pas à pas 2
{if(digitalRead(IN2)==Low)}
dpos2 ++ ;
} else {}
dpos2--;
}
}
void stepfwd1() {//if stepper 1 doit aller de l’avant
stepp1 ++; //advance la séquence de l’étape 1
POS1 ++; //increase la position perçue par 1
Si (stepp1 > 11) {//if il fini une pleine étape puis
stepp1 = 0; //reset il au début de la séquence d’étapes
}
hors (); //digitalWrite toutes les tiges qui en ont besoin.
}
void stepfwd2() {//same pour moteurs pas à pas 2
stepp2 ++ ;
POS2 ++ ;
Si (stepp2 > 11) {//if il fini une pleine étape puis
stepp2 = 0; //reset il au début de la séquence d’étapes
}
out() ;
}
void stepbck1() {//if il faut revenir en arrière
stepp1--; //move l’étape de séquence de dos un
POS1--; //move le perçu position dos un
Si (stepp1 > 12) {//if il fini une pleine étape puis
stepp1 = 11 ; //reset il au début de la séquence d’étapes
}
out() ;
}
void stepbck2() {//same pour moteurs pas à pas 2
stepp2--;
POS2--;
Si (stepp2 > 12) {//if il fini une pleine étape puis
stepp2 = 11 ; //reset il au début de la séquence d’étapes
}
out() ;
}
void out() {}
if(stepp1>11) {//these garder l’octet "stepp" de sortir les données
stepp1 = 0 ; dans les listes de l’étape.
}
if(stepp2>11) {}
stepp2 = 0 ;
}
digitalWrite (I011, stp10 [stepp1]); //writes les valeurs de chaque liste sur sa broche.
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]) ;
}