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; } } }







Zitieren
Lesezeichen