//////////////////////////////////////////////////////////////////////////////// // 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. x kHz erreicht. // //#include "Define.h" #define SM_RICHTUNG_DDR DDRK #define SM_RICHTUNG_PORT PORTK #define SM_RICHTUNG_PIN PINK #define SM_RICHTUNG ( 1< fclk_io / N*(1+TOP) SM1_PORT &= ~SM1_TAKT; // Schrittimpuls vorbereiten // Geschwindigkeit verlangsamen und begrenzen if( !( SM_RICHTUNG_PORT & SM_RICHTUNG )) { rampeArrayZeiger ++; if( rampeArrayZeiger > SM_SPEED_MIN ) rampeArrayZeiger = SM_SPEED_MIN; } // Geschwindigkeit erhoehen und begrenzen else rampeArrayZeiger --; if( rampeArrayZeiger < SM_SPEED_MAX ) rampeArrayZeiger = SM_SPEED_MAX; 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 ); //*/ } SM1_PORT |= SM1_TAKT; // Schrittimpuls vollenden } } // Ende ISR( TIMER3_COMPA_vect ) //#include "Ini.h"; // Initialsierungsfunktionen //////////////////////////////////////////////////////////////////////////////// // FastPWM-Mode 15 OCR3A ist TOP. Normaler Ausgang // void timer3_init( void ) { TCCR3A = 0; // Weil Arduino TCCR3B = 0; // TCCR3C = 0; // OCR3A = SM_SPEED_MIN; // Niedrige Frequenz TCCR3A |= 0b11<< WGM30; // Fast PWM Mode 15 Low Bits TCCR3B |= 0b11<< WGM32; // Fast PWM Mode 15 High Bits // Sofortige Interrupt verhindern TCNT3 = 0; // Timer ruecksetzen TIFR3 = 1<< OCF3A; // Output Compare Interrupt Flag loeschen TIMSK3 |= 1<< OCIE3A; // Output Compare Interrupt freigeben TCCR3B |= 0b001<< CS30; // Vorteiler = 1 und Timer3 starten } //#include "Unterprogramme.h"; //