Hi, ich habe hier momentan ein Programmier Problem, und ich hoffe ein Erfahrener Programmierer oder einer der sich mit Timern auskennt kann mir helfen:
Ich habe eine Karte auf der ein At-Mega 8 drauf ist, an ihm sind 2 Schrittmotoren angeschlossen und weiterhin 2 Poties (Ein alter Joystick).
Mein Plan war jetzt, dass wenn der Joystick neutral ist, sich kein Motor dreht.
Wenn die X Achse (ADC 1) einen Ausschlag nach links bekommt sich der Motor1 nach Links dreht und nach rechts, dann natürlich auch der Motor1 nach rechts.
Bei Vollausschlag links soll er sehr schnell laufen, bei kleinem Ausschlag entsprechend langsam. Die Übergänge möglichst mit seeeeeeeehr vielen Stufen.
Das gleiche gilt natürlich für die Y Achse und den anderen Motor.
Mein Problem ist jetzt aber, dass ich die Motoren Ansteuerung nicht parallel laufen lassen kann. Was bedeutet, dass die einzelnen Motoren nicht unabhängig voneinander ihre Geschwindigkeit verändern können.
(Ich hoffe jemand kennt das Problem, ich kann es nämlich sehr schlecht erklären…)
Jetzt hoffe ich das mir jemand mit sehr geschickter Programmierung helfen kann, oder mir jemand sagen kann ob und wie ich das Problem mit Timern umgehen kann.
Meine Idee wäre in den Timer 1 den Moter1 Code zu packen und in den Timer 2 den Code für den Motor 2, dann müsste ich in der Hauptsub „nur noch“ je nach Potiestellung das Timerintervall verändern.
Ist die Idee richtig und umsetzbar?
Eine „Lösung“ habe ich schon „fertig“, aber die hat nur 5 Unterschiedliche Geschwindigkeiten und das reicht bei weitem nicht… und sie belegt schon fast den gesamten Speicherplatz des Chips und ist von daher nicht erweiterbar.
Bin für jede Idee, ICQ-Nummer, etc. dankbar
Gruß
Hagen
*hier noch ein paar daten...:
Schaltplan (das rote könnt ihr ignorieren)
http://www.bildfaenger-film.de/extern/plan.jpg
Motor B / 1
Motor D / 2Code:Sub Motorb If Bdire = 1 Then Btime = Btime + 1 Elseif Bdire = 2 Then Btime = Btime - 1 End If If Btime = 9 Then Btime = 1 Elseif Btime = 0 Then Btime = 8 End If If Btime = 1 Then B = B + 1 Portb.0 = 1 Portb.1 = 0 Portb.2 = 0 Portb.3 = 1 Elseif Btime = 2 Then Portb.0 = 1 Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Elseif Btime = 3 Then Portb.0 = 1 Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Elseif Btime = 4 Then Portb.0 = 0 Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Elseif Btime = 5 Then Portb.0 = 0 Portb.1 = 1 Portb.2 = 1 Portb.3 = 0 Elseif Btime = 6 Then Portb.0 = 0 Portb.1 = 0 Portb.2 = 1 Portb.3 = 0 Elseif Btime = 7 Then Portb.0 = 0 Portb.1 = 0 Portb.2 = 1 Portb.3 = 1 Elseif Btime = 8 Then Portb.0 = 0 Portb.1 = 0 Portb.2 = 0 Portb.3 = 1 End If End Sub
Code:Sub Motord If Ddire = 1 Then Dtime = Dtime + 1 Elseif Ddire = 2 Then Dtime = Dtime - 1 End If If Dtime = 9 Then Dtime = 1 Elseif Dtime = 0 Then Dtime = 8 End If If Dtime = 1 Then Portd.0 = 1 Portd.1 = 0 Portd.2 = 0 Portd.3 = 1 Elseif Dtime = 2 Then Portd.0 = 1 Portd.1 = 0 Portd.2 = 0 Portd.3 = 0 Elseif Dtime = 3 Then Portd.0 = 1 Portd.1 = 1 Portd.2 = 0 Portd.3 = 0 Elseif Dtime = 4 Then Portd.0 = 0 Portd.1 = 1 Portd.2 = 0 Portd.3 = 0 Elseif Dtime = 5 Then Portd.0 = 0 Portd.1 = 1 Portd.2 = 1 Portd.3 = 0 Elseif Dtime = 6 Then Portd.0 = 0 Portd.1 = 0 Portd.2 = 1 Portd.3 = 0 Elseif Dtime = 7 Then Portd.0 = 0 Portd.1 = 0 Portd.2 = 1 Portd.3 = 1 Elseif Dtime = 8 Then Portd.0 = 0 Portd.1 = 0 Portd.2 = 0 Portd.3 = 1 End If End Sub







Zitieren

Lesezeichen