Ich habe auch so einen Schrittmotor mit Braun/Schwarz , Orange/Gelb und einem L293D aber keinen ATtiny2313 sondern ein Atmega88 20PU.
Hab allerdings in C programmiert und mit zwei Schaltern weis nicht obs Dir hilft aber der Code sieht so aus :
Code:
#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>
#define Time 25
#define STATSLED0_ON (PORTC |= 1<<PC0)
#define STATSLED0_OFF (PORTC &= ~(1<<PC0))
#define STATSLED1_ON (PORTC |= 1<<PC1)
#define STATSLED1_OFF (PORTC &= ~(1<<PC1))
#define STATSLED2_ON (PORTC |= 1<<PC2)
#define STATSLED2_OFF (PORTC &= ~(1<<PC2))
#define SWITCH_1 (PINB & 1<<PB0)
#define SWITCH_2 (PINB & 1<<PB1)
// L
void StepA1(){
// Step 1
PORTD |= 1<<PD0;
PORTD &= ~(1<<PD2);
}
void StepA2(){
// Step 2
PORTD |= 1<<PD2;
PORTD &= ~(1<<PD0);
}
void StopA(){
//stop
PORTD &= ~(1<<PD0);
PORTD &= ~(1<<PD2);
}
//R
void StepB1(){
// Step 1
PORTD |= 1<<PD4;
PORTD &= ~(1<<PD6);
}
void StepB2(){
// Step 2
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD4);
}
void StopB(){
//stop
PORTD &= ~(1<<PD4);
PORTD &= ~(1<<PD6);
}
int main(){
DDRC = 1<<PC0 | 1<<PC1 | 1<<PC2; // LED's
DDRD = 1<<PD0 | 1<<PD2 | 1<<PD4 | 1<<PD6; // Step1 + Step2;
DDRB &= ~(1<<PB0 | 1<<PB1); // SWITCH_1 / SWITCH_2
while(1){
if(! SWITCH_1 && ! SWITCH_2){
STATSLED0_ON;
STATSLED1_OFF;
STATSLED2_OFF;
StopA();
StopB();
}
else if(! SWITCH_1 && SWITCH_2){
StepA1();
_delay_ms(Time);
StepA2();
_delay_ms(Time);
STATSLED0_OFF;
STATSLED1_ON;
STATSLED2_OFF;
}
else if(SWITCH_1 && ! SWITCH_2){
StepB1();
_delay_ms(Time);
StepB2();
_delay_ms(Time);
STATSLED0_OFF;
STATSLED1_OFF;
STATSLED2_ON;
}
}
}
Lesezeichen