ISR( TIMER3_COMPA_vect ) { //------------------------------------------------------------------------------- // // FastPWM-MODE 15 Normaler Ausgang // SM-Sinusrampe abfahren, Schrittmotorschritte runterzaehlen und // Schrittimpuls erzeugen. // //------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////// // Hin und her fahren und am Startpunkt wird eine kurze Pause einlegt // if( stepCount != 0 ) { OCR3A = rampeArrayZeiger; // Per FPWM-Kurve -> fclk_io / N*(1+TOP) SM1_PORT &= ~SM1_TAKT; // Schrittimpuls vorbereiten // Geschwindigkeit verlangsamen und begrenzen if( !( SM_RICHTUNG_PORT & SM_RICHTUNG )) { rampeArrayZeiger ++; /* Serial.print ( "!( SM_RICHTUNG_PORT & SM_RICHTUNG " ); //Serial.print ( "\t" ); */ if( rampeArrayZeiger > SM_SPEED_MIN ) rampeArrayZeiger = SM_SPEED_MIN; } // Geschwindigkeit erhoehen und begrenzen else rampeArrayZeiger --; if( rampeArrayZeiger < SM_SPEED_MAX ) rampeArrayZeiger = SM_SPEED_MAX; /* Serial.print ( "stepCount = " ); Serial.print ( stepCount ); Serial.print ( "\t" ); Serial.print ( "rampeArrayZeiger = " ); Serial.print ( rampeArrayZeiger ); Serial.print ( "\t" ); Serial.print ( "OCR3A = " ); Serial.println( OCR3A ); */ stepCount --; // Schrittmotor Schrittanzahl runterzaehlen // Nur jedes 2te mal ist dieses Bit gesetzt bzw. geloescht if( stepCount == 0 ) { SM_RICHTUNG_PORT ^= SM_RICHTUNG; // Schrittmotordrehrichtung aendern ///* Serial.println( ); Serial.print ( "stepCount = " ); Serial.println( stepCount ); //Serial.println( ); //*/ } SM1_PORT |= SM1_TAKT; // Schrittimpuls vollenden } } // Ende ISR( TIMER3_COMPA_vect )