gttoxiclt2
01.03.2008, 18:25
Hallo,
habe jetzt meine Hardware fertig aufgebaut und nun geht es ans Programmieren auf Basis der rn Control und angehängter rn step 297.
Die Hardware sieht wie folgt aus:
Ein Schlitten fährt an Gewindespindeln nach vorn und hinten.
An jeder Endlage ist ein Näherungssensor angebaut, die den Schrittmotor abschalten sollen, damit er nicht über die Endlagen fährt.
Vorweg: Die Schaltung hier ist mein Einstieg in das Programmieren, was ich mir anlernen will mit Hilfe des Internets.
Ich wollte das Programm auf einer IF- THEN Basis aufbauen, da 5 x Näherungssensoren, 1 x Fotodiode und 2 x Eingänge von Relais aus einer USB Karte ausgewertet werden sollen.
Nun habe ich so angefangen:
Do
If Pind.2 = 1 Then 'Näherungssensor hinten
If Pind.4 = 1 Then 'Eingang von USB Karte
Stepper_enable = 1
Config Timer0 = Timer , Prescale = 64
Timervorgabe = 89
Enable Interrupts
End If
End If
If Pind.4 = 0 Then 'Eingang von USB Karte
If Pind.5 = 1 Then 'Näherungssensor vorne
Toggle Stepper_richtung
Stepper_enable = 1
Config Timer0 = Timer , Prescale = 64
Timervorgabe = 89
Enable Interrupts
End If
End If
Loop
Mein Ziel ist folgendes:
Wenn am D.4 (Eingang von USB Karte) ein High anliegt und der Schlitten hinten ist (D.2 = 1) dann soll der Schrittmotor solange fahren, bis der D.5 auf High geht, also der Schlitten vorn ist.
Wenn dann der Schlitten vorn ist und das Signal von der USB Karte fällt irgendwann mal ab, soll die Drehrichtung geändert werden, damit der Schlitten wieder hinter fährt bis D.2 wieder auf High geht.
Mit dem gezeigten Code bekomm ichs nicht hin, egal wie ichs probier. Es endet immer im lauten Krachen, wenn der Motor irgendwo gegen dreht...
Probleme:
Wie kann ich möglichst in der IF-THEN Anweisung vorgeben, dass der Motor nur von D.2 eingeschalten wird und solange läuft, bis D.5 auf High geht? Andersrum natürlich auch.
Kann ich das toggle nicht durch was besseres ersetzen- etwa toggle-vor und toggle-hinter? Gibts da noch Alternativen? So kann ich ja nicht quer durchs Programm springen später mal, wenn ich vorher schon genau wissen muss, wann ein toggle wohin erfolgen muss...
Da kann ich ja gleich ein Komplettprogramm schreiben, welches keine Eventualitäten zulässt.
Ich hoffe, ihr versteht halbwegs, wie ich das meine. Über ne einfache Hilfestellung würde ich mich sehr freuen
Danke schonmal
habe jetzt meine Hardware fertig aufgebaut und nun geht es ans Programmieren auf Basis der rn Control und angehängter rn step 297.
Die Hardware sieht wie folgt aus:
Ein Schlitten fährt an Gewindespindeln nach vorn und hinten.
An jeder Endlage ist ein Näherungssensor angebaut, die den Schrittmotor abschalten sollen, damit er nicht über die Endlagen fährt.
Vorweg: Die Schaltung hier ist mein Einstieg in das Programmieren, was ich mir anlernen will mit Hilfe des Internets.
Ich wollte das Programm auf einer IF- THEN Basis aufbauen, da 5 x Näherungssensoren, 1 x Fotodiode und 2 x Eingänge von Relais aus einer USB Karte ausgewertet werden sollen.
Nun habe ich so angefangen:
Do
If Pind.2 = 1 Then 'Näherungssensor hinten
If Pind.4 = 1 Then 'Eingang von USB Karte
Stepper_enable = 1
Config Timer0 = Timer , Prescale = 64
Timervorgabe = 89
Enable Interrupts
End If
End If
If Pind.4 = 0 Then 'Eingang von USB Karte
If Pind.5 = 1 Then 'Näherungssensor vorne
Toggle Stepper_richtung
Stepper_enable = 1
Config Timer0 = Timer , Prescale = 64
Timervorgabe = 89
Enable Interrupts
End If
End If
Loop
Mein Ziel ist folgendes:
Wenn am D.4 (Eingang von USB Karte) ein High anliegt und der Schlitten hinten ist (D.2 = 1) dann soll der Schrittmotor solange fahren, bis der D.5 auf High geht, also der Schlitten vorn ist.
Wenn dann der Schlitten vorn ist und das Signal von der USB Karte fällt irgendwann mal ab, soll die Drehrichtung geändert werden, damit der Schlitten wieder hinter fährt bis D.2 wieder auf High geht.
Mit dem gezeigten Code bekomm ichs nicht hin, egal wie ichs probier. Es endet immer im lauten Krachen, wenn der Motor irgendwo gegen dreht...
Probleme:
Wie kann ich möglichst in der IF-THEN Anweisung vorgeben, dass der Motor nur von D.2 eingeschalten wird und solange läuft, bis D.5 auf High geht? Andersrum natürlich auch.
Kann ich das toggle nicht durch was besseres ersetzen- etwa toggle-vor und toggle-hinter? Gibts da noch Alternativen? So kann ich ja nicht quer durchs Programm springen später mal, wenn ich vorher schon genau wissen muss, wann ein toggle wohin erfolgen muss...
Da kann ich ja gleich ein Komplettprogramm schreiben, welches keine Eventualitäten zulässt.
Ich hoffe, ihr versteht halbwegs, wie ich das meine. Über ne einfache Hilfestellung würde ich mich sehr freuen
Danke schonmal