schreiben Sie mir! -> mailto:peter [period] bickel [snail] orange [period] fr?subject=Gartenbahn © Peter Bickel 2009...2018 Revision 2018 PMWiki V 2.2.105 |
PWM-Softwaredieses Programm können Sie unverändert mit <Copy-and-Paste> in die ARDUINO-IDE übertragen //----------- 8< ---------------------------- 8< -------------- /* SteuerSketch für INFINEON-Experimentier-Platine mit BTN8982TA * erzeugt das PWM-Signal für die Platine * Bedienung: zwei Schalter für Vorwärts/Rückwärts ON-OFF-ON und für Schneller/Langsamer (ON)-OFF-(ON) * die HALT-Funktion fährt den Motor schnell herunter * steuert Timer2 für PWM-Ausgabe auf Pins 3 und 11 * nach einem Beispielsketch des RobotPower-Teams http://robotpower.com * Version V 150718 vom 18/07/2015 (C) Peter Bickel http://Puydorat.fr * dieses Programm ist freie Software Versions-Informationen V 150710 Funktionierende Version wie im Artikel beschrieben V 150718 dito ergänzt durch eine HALT-LED (zwischen Pin7 und +5V) */ byte mode = 1; // Timer-Einstellung (siehe unten) char h_delay = 5; // HALT: { Zähl- char s_delay = 30; // SCHNELLER: { Geschwindig- char l_delay = 30; // LANGSAM: { keitdigkeit int countMin = 40; // minimale Geschwindigkeit int countMax = 255; // maximale Geschwindigkeit // Vorwärts/Rückwärts-Teil char VR_VPin = 5; // Pin 5 = vorwärts { Schalter- char VR_RPin = 6; // Pin 6 = rückwärts { Anschlüsse char VR_V, VR_R; // Schneller/Langsamer-Teil int count; // Zähler für PWM-Vergältnis char SL_SPin = 2; // Pin 2 = schneller { Schalter- char SL_LPin = 4; // Pin 4 = langsamer { Anschlüsse char LEDpin = 7; // Pin 7 = HALT-LED char SL_S, SL_L; void decrementCount (); // Fkt: zählt count auf countMin hinunter // PWM-Teil char PWMPin1 = 3; // { Pins von char PWMPin2 = 11; // { Timer2 // ---------------------------------- void setup() { // Grenzwerte: Delay-Min = 5 if (h_delay < 5) h_delay = 5; if (s_delay < 5) h_delay = 5; if (l_delay < 5) h_delay = 5; // Schneller/Langsamer-Teil pinMode (SL_SPin,INPUT_PULLUP); // InputPins: Pullup-Widerstände pinMode (SL_LPin,INPUT_PULLUP); // einschalten pinMode (LEDpin,OUTPUT); // HALT-LED definieren digitalWrite (LEDpin, LOW); // Vorwärts/Rückwärts-Teil pinMode (VR_VPin,INPUT_PULLUP); // InputPins: Pullup-Widerstände einschalten pinMode (VR_RPin,INPUT_PULLUP); // PWM-Teil pinMode(PWMPin1, OUTPUT); // OutputPins für Timer2 pinMode(PWMPin2, OUTPUT); TCCR2B = TCCR2B & 0b11111000 | mode; // PWM-Frequenz einstellen } // ---------------------------------- void loop() { // Schneller/Langsamer-Teil SL_S = digitalRead (SL_SPin); // Schneller-Pin lesen SL_L = digitalRead (SL_LPin); // Langsamer-Pin lesen analogWrite(PWMPin2, 0); // Gegenpin Null setzen if (SL_S==LOW && count<countMax) { // aufwärts zählen = schneller if (count == 0) { count = countMin; } count++; analogWrite (PWMPin1, count); // PWM-duty setzen delay (s_delay); // warten } else if (SL_L==LOW && count > countMin) { // abwärtszählen = langsamer count--; if (count == countMin) { count = 0; } analogWrite (PWMPin1, count); // PWM-duty setzen delay (l_delay); // warten } // Vor/Rück-Teil VR_V = digitalRead (VR_VPin); // vorwärts-Pin lesen VR_R = digitalRead (VR_RPin); // rückwärts-Pin lesen if (VR_V == HIGH && VR_R == HIGH) { // Schalter in Mittelstellung: aus decrementCount (); // zurückzählen auf countMin } else if (VR_V == LOW) { // vorwärts PWMPin1 = 11; PWMPin2 = 3; } else if (VR_R == LOW) { // rückwärts PWMPin1 = 3; PWMPin2 = 11; } // HALT-LED if (count > 0) digitalWrite (LEDpin, HIGH); else digitalWrite (LEDpin, LOW); } // ----------------------------- // Zähler zurückfahren auf countMin void decrementCount () { while (count>countMin) { // Zähler nach countMin zurückzählen count--; analogWrite (PWMPin1, count); delay (h_delay); // warten } count = 0; // analogWrite (PWMPin1, 0); // PWM ausschalten digitalWrite(LEDpin, HIGH); } /* Kommentar zur Timer-Programmierung Basisfrequenz = 31'250Hz (abhängig vom Prozessortakt!) mode divisor Frequenz ----------------------------- 1 1 31250 2 8 3906.25 3 32 976.5625 4 64 488.28125 5 128 244.140625 6 256 122.0703125 7 1024 30.517578125 ------------------------------ */ //----------- 8< ---------------------------- 8< -------------- |