PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motoransteuerung mit Bedingung



Coleone
28.06.2008, 18:18
Hi, also eins vorab, bin noch ziemlicher neueinsteiger in der Programmierung. Habe gestern meine RN-Control das ich seit ca. 3 monaten hab wieder rausgekramt um damit mein erstes ernsthafteres projekt zu realisieren. Und zwar komme ich mit den Bedingunegn (If/Else) und den Loops noch net zurecht.

Also ham momentan nur ein Fahrgestell mit Kettenantrieb. Die beiden Getriebemotoren steuere ich mit dem Standard-Code aus dem Beispielsprogramm. Das funktioniert soweit auch.

Jetzt sollen die Motoren aber stehen bleiben, sobald ein Hindernis im Weg ist (momentan soll er es erstmal über nen einfachen Taster "Ertasten" Und da ist das Problem, weil das Programm halt im Loop ist. Ich mach hier schon den halben Tag rum und da ich leider nicht weiß wonach ich in der Suche suchen soll, kann ich diese leider nicht benutzen

danke im Vorraus

Dirk
29.06.2008, 08:03
Hallo Coleone,

wie sieht deine Hardware (speziell Anschluß der Taster) und deine Software denn bis jetzt aus? Und was klappt nicht?


Gruß Dirk

Coleone
29.06.2008, 11:38
Also mein Taster giebt einfach +5V auf einen Pin und dann sollen die Motoren sofort anhalten. Ich habe Als Code für die Motoren das aus dem Beispielsprogramm, aber da ist ja ein Loop drin, mit dessen Hilfe die Motoren beschleunigt und abgebremst werden.

Hier mal der Code vom Motor

Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
Config Pinb.2 = Input 'Ein Pin wird als Eingang definiert
Portb.2 = 1 'Interner Pullup Widerstand ein



'Linker Motor ein
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor ein
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


I = 0
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I + 5
Loop Until I > 1023
Wait 1
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I - 5
Loop Until I < 1
Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 'rechter Motor aus

End Sub

Oben hab ich zunächst mal die Ports für die Taster zugewiesen und dann kommt der Teil für die Motoren. Hab da schon ne weile mit der If/Then/Else sache rumprobiert, aber ich bekomms net hin^^
Hoffe du verstehst was ich meine

Sauerbruch
29.06.2008, 12:02
...das ist die Anwendungsmöglichkeit schlechthin für einen INTERRUPT =P~ !

Dirk
29.06.2008, 16:22
Ja, ein Interrupt wäre elegant.

Alternativ könntest du innerhalb der Loops mit
"If Pinb.2 = 1 then ..." den Taster abfragen und wenn er Highpegel hat die Motoren abschalten (Pwm1a = 0 Pwm1b = 0).

Gruß Dirk

Coleone
29.06.2008, 17:44
Ahh Ok werd ich morgen gleich mal Probieren. Hab jetzt grad mal alles ohne das Beschleunigen, also nur mit Ein und Aus gemacht und das dann mit If/Then/Else und jetzt funktionierts auch so wie es soll, halt nur das die Motoren sofort vollgas geben^^

danke schonmal. Aber hat jemand nen Link oder so, wo das mit den Interrupts erklärt wird, evtl mit beispielen oder so? Weil mit der Beschreibung aus dem Wiki komm ich net so wirklich klar

Sauerbruch
30.06.2008, 20:53
Aber hat jemand nen Link oder so

Als "oder so" kann ich das Buch von Roland Walter "AVR Mikrocontroller-Lehrbuch" sehr empfehlen. Viele andere dicke Schwarten nennen sich auch "Lehrbücher", aber dieses Werk ist m.E. mit Abstand das beste für Leute, die noch gar keinen Plan von der Materie haben.
Unter www.rowalt.de gibt´s auch ein kleines Tutorial vom Autor - aber das Buch ist wirklich sein Geld wert.