//////////////////////////////////////////////////////////////////////////////// // Ein Schrittmotor wird fortlaufend beschleunigt und abgebremst. // Es wird eine Anzahl von Schritten vorgefahren und sofort zurueck. // Danach bleibt der SM fuer ca. 1,5 Sekunde stehen und das Spiel wiederholt sich. // Im FastPWM-Mode 15 wird eine maximale Frequenz von ca. kHz erreicht. // #include "Define.h" #include "Variablen.h" //////////////////////////////////////////////////////////////////////////////// // Vorwaertsdeklarationen // void sm_rampen( void ); // Schrittmotor Anfahr,- und Bremsrampe void timer3_init( void ); //////////////////////////////////////////////////////////////////////////////// // SETUP // void setup() { Serial.begin( 9600 ); DDRK |= 1<< PK0 | 1<< PK1; // Freigabe und Richtung PORTK &= ~SM_DREHEN_STOP; // Freigabe des SM-Treibers SM_RICHTUNG_DDR = 0x00; // Weil Arduino SM_RICHTUNG_PORT = 0x00; // Weil Arduino SM_RICHTUNG_DDR |= SM_RICHTUNG; // Schrittmotor Richtung Ausgang SM_RICHTUNG_DDR |= SM_DREHEN_STOP; // Schrittmotor Drehen stoppen als Ausgang SM_RICHTUNG_PORT |= SM_RICHTUNG; // Startrichtung vorgeben SM1_DDR |= SM1_TAKT; // PE3 bzw. OC3A als normaler Ausgang SM1_PORT &= ~SM1_TAKT; // Zunaechst Low-Pegel flagRegister |= EINS; // Startbedingung SM_Schritte zaehlen // sm_rampen(); // Schrittmotor Sinusrampe berechnen timer3_init(); // FastPWM-Mode 15 stepCount = SM_SCHRITTANZAHL; sei( ); // Globale Freigabe von Interrupts } // Ende void setup() void loop() { //---------------------------------------------------------------------------- // // void loop() // //---------------------------------------------------------------------------- int32_t tmp; cli(); tmp = stepCount; // Ein verfaelschen durch ISR verhindern sei(); if( tmp == 0 ) { TIMSK3 &= ~1<