
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> Hallo Andreas! > > > Und jetzt mal wieder das ABER. Der OM wird mit 8MHz getaktet. Würde bedeuten, dass er ca. 125 ns pro Takt braucht. Da jeder Schritt im Programm mindestens einen Takt bedeutet, und es vier Schritte innerhalb der for next Schleife sind, wären das theoretisch 500 ns. Angenommen die Motordrehzahl wäre 1.200 U/min, wären das 50 ms für eine Umdrehung. Ergo rund 100000 Messungen pro Umdrehung. > > Jo, das wäre ja richtig super, wenn das so funktionieren würde. Die rund 100000 Messungen pro Umdrehung sind aber reine Utopie. Zu den genauen Zeiten müsste Dietmar dann aber etwas sagen können, ich habe keine Ahnung wie schnell der Tocken-Code abgearbeitet wird... > > > Wie groß kann ein for next Schleife realisiert werden? Gibt es da Grenzwerte? > > Die For Schleife ist auch Byte orientiert, geht also auch nur bis 255, dann ist Schluss. Wenn Du hier größere Werte brauchst, dann musst Du mehrere For Schleifen ineinander verschachteln (wird aber mit Sicherheit nicht notwendig sein). > > LG Jens Hallo Jens, hab grad ´ne schöpferische Pause eingelegt. ;-) 100000 Messungen ist doch nur Theorie. Auch wenn nur 10000 Messungen wären, würde eine ziemlich hohe Genauigkeit entstehen. Im Test verläuft es aber noch nicht so gut wie ich dachte. Ich habe daher noch ein zweite Prototypenplatine gebaut, die mittels Bargraphen die Absolutwerte der beiden Zylinder anzeigt. Jetzt weiß ich, dass das Programm einen Fehler hat. Die zwei verschachtelten Schleifen habe ich also erst mal aufgehoben und lasse derzeit nur eine Schleife durchlaufen. Damit geht die Anzeige erst mal schneller, wenn auch rucklig in der Anzeige, weil der Maximalwert nicht immer erreicht wird. Ich bin mir nicht sicher, aber ich denke, dass der Fehler in der Subtraktion liegen könnte. #start for h = 0 to 255 ' Festlegung der Messdurchläufe zur Maxiamlwertermittlung ' for i = 0 to 255 ' Festlegung der Messdurchläufe zur Maxiamlwertermittlung if Zyl1 > z1 then z1 = Zyl1 ' Maximalwert Zylinder 1 ermitteln und in Variable ablegen if Zyl2 > z2 then z2 = Zyl2 ' Maximalwert Zylinder 2 ermitteln und in Variable ablegen ' next ' nächste Messung (Sprung zu for 2 ) ' i=0 ' Rücksetzen Zähler 1 next ' nächste Messung (Sprung zu for 1) if (z1) - (z2) <= 9 then tmp=125 ' Vergleich Zylinder 1 mit 2 und bei annähernder Gleichheit setzen der Variable des PWM auf Mittenspannung if (z2) - (z1) <= 9 then tmp=125 ' Vergleich Zylinder 1 mit 2 und bei annähernder Gleichheit setzen der Variable des PWM auf Mittenspannung if (z1) - (z2) > 9 then gosub positiv ' Vergleich Zylinder 1 mit 2 und bei Zylinder1 größer Zylinder2 Sprung in Unterprogramm positiv if (z2) - (z1) > 9 then gosub negativ ' Vergleich Zylinder 1 mit 2 und bei Zylinder2 größer Zylinder1 Sprung in Unterprogramm negativ pwm1 tmp ' zuweisen der Variable zum Pulsweitenmodulator h = 0 ' Rücksetzen Zähler 2 z1 = 0 ' Rücksetzen Variable Unterdruckwert Zylinder1 z2 = 0 ' Rücksetzen Variable Unterdruckwert Zylinder2 Pause 20 goto start ' Rücksprung zum Anfang Ich habe jetzt testhalber die Variablen z in Klammern gesetzt. Ich bin mir nicht sicher, ob das Minus nicht als negatives Vorzeichen interpretiert wird. Der Fehler äußert sich dahingehend, dass bei Erreichen eines Wertes für eine Subroutine der z-Wert offenbar "wegläuft". Anzeige geht nach Maximum und erlischt dann. In den Unterprogrammen wird lediglich noch ein Vergleich von z mit vordefinierten Werten vorgenommen und dann ein dazu passender Wert an die Variable tmp übergeben. Dann erfolgt der Rücksprung. Also nichts dramatisches. Da laut Programm nach Abschluss der Schleife alle Variablen auf Null gesetzt werden (rücksetzen) sollte das weglaufen eigentlich nicht passieren. Ich muss das noch mal direkt messen bei Betrieb. Derzeit habe ich nur wenig Zeit. Wird also erst im August weiter gehen. Fällt Dir noch was ein ? LG Andreas |
| Antwort schreiben |