Hallo Gemeinde
Auf einem Board verwende ich die folgenden Pins:
"Ortsbedienung direkt am AT1284p":
PC 2 - Taste 1
PC 3 - Taste 2
PC 4 - Taste 3
PC 5 - LED 1
PC 6 - LED 2
Anschluss "Motorshield"
PA 0 - Clock
PA 1 - CW/CCW (L/R)
PA 2 - EN
bisherige Funktion der Tasten und Pins
Taste 1 - EN einschalten - freigabe Schrittmotor mit L6208
LED 1 - Anzeige "Motor ein"
LED 2 - Anzeige Taktfrequenz durch Timer
Ich verwende einen Atmega 1284p mit 16 MHz, Timer mit 1ms und Toogle
PA0,
mit der Taste PC 1 gebe ich EN frei. PA 1 hat ständig H und gibt dadurch
die Drehrichtung an.
1
if(get_key_press(1<<KEY_2))// nur Taste press
2
{// LED an
3
PORTC&=~(1<<PC1);
4
}
5
if(get_key_press(1<<KEY_3))// nur Taste press
6
{// LED aus
7
PORTC|=(1<<PC1);
8
}
Verwende ich die Tasterentprellung von Peter, ist es kein Problem, den
Eingang ein und auszuschalten.
Wie mache ich das am besten, wenn ich 2 Taster verwende und damit eine
Umschaltung Links / Rechtslauf mache?
Bevor ich die Richtung umschalte muss EN ausgeschaltet werden.
Beide Taster kann man leicht "verriegeln" ohne Peter sein Code.
Das setzen der Richtung muss vor dem Einschalten des Motors erfolgen.
Hat jemand eine Idee dazu?
achim
Mit Verriegelung meine ich, die Benutzung von T1 oder T2. Je nachdem
welche taste ich drücke läuft der Motor links oder rechts rum. Während
der Motor die eine Richtung läuft ist die andere Taste gesperrt und es
muss erst mit der Taste 3 ausgeschaltet werden.
Umschaltung der Drehrichtung über aus, andere Drehrichtung gesperrt.
Setzte doch eine Variable (Motor=0, 1 oder 2 für aus, links oder rechts)
und frage damit den Zustand des Motors bei der Erkennung eines
Tastendrucks ab. Entweder realisierst du das Ausschalten bei der Umkehr
der Drehrichtung dann in Software oder verweigerst die Umschaltung wenn
der Motor nicht aus ist.
Gruß Max
Wenn Drehrichtung_IST <> Drehrichtung_Soll dann EN-OFF -->
Drehrichtung-IST = Drehrichtung_Soll --> EN-ON.
P.S.
Das Analysieren von Aufgaben und deren Umsetzung in logische
Einzelschritte ist das Fundament des Programmierens. Nur fertige
Routinen zu suchen und zu verwenden trägt nicht dazu bei, dass man bald
auch komplexere Aufgaben aufzudröseln und umzusetzen vermag.
ich such kein fertges Programm oder so. Eine kleine Leitung oder Hinweis
wirkt Wunder. Habe schon eine Idee nach den letzten Antworten und bin
gerade beim Umsetzen
Achim S. schrieb:> Mit Verriegelung meine ich, die Benutzung von T1 oder T2. Je nachdem> welche taste ich drücke läuft der Motor links oder rechts rum. Während> der Motor die eine Richtung läuft ist die andere Taste gesperrt und es> muss erst mit der Taste 3 ausgeschaltet werden.
Warum soll der Benutzer beim Umschalten der Drehrichtung extra eine
Taste 3 drücken? Und warum willst du zeitweilig Tasten blockieren?
Wenn der Benutzer von Links- auf Rechtslauf umschalten möchte, kann er
doch einfach die "Rechts"-Taste drücken. Was die Tastendrücke steuern,
ist für die Kommandoeingabe doch erstmal ziemlich egal. Erst der
Motorsteuerteil des Programms kann sich dann darum kümmern, dass der
Motor vernünftig angesteuert wird, d.h. vorübergehend ausreichend lange
auf "Stop" gehen und dann auf "Rechtslauf"
Ich glaube "Simpel (Gast)" bezog sich darauf, dass du die
Entprellroutine verwendest (was kein Problem ist) aber selbst hättest
auf eine mögliche Lösung kommen sollen.
Wie auch immer, wenn du noch Fragen hast, immer her damit ;-). Wie du
vermutlich weißt, freuen wir uns auch immer über erfolgreiche Lösungen
(= umgesetzter Code).
Gruß Max
Zu den Thread Regeln, dort steht:
"Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen
und diskutieren. Bitte hier keine Fragen posten!"
Das umschalten der Drehrichtung erfolgt durch den Pin PA1. Liegt der Pin
auf H dreht der Motor in die eine Richtung, liegt er auf L dreht der
Motor in die andere Richtung. Bei kleinen drehzahlen mag es gehen. Bei
höheren drehzahlen und einer angeschlossenen Last könnte es zu Problemen
kommen. Das "Motorsteuerteil" besteht aus dem IC L6208. So weit mir
bekannt ist, gibt es dort kein Anlauf oder Verzögerung. Bei einer
entsprechend grossen Last könnet sogar ein Stop des Motors überwacht
werden.
Eine Umschaltung der Drehrichtung kann direkt erfolgen (ohne über aus)
Start --> links/rechts --> stop - mit 3 Tasten
oder Umschaltung der Drehrichtung über aus
Start --> links --> stop --> rechts --> stop - auch mit 3 Tasten
achim
Max B. schrieb:> Ich glaube "Simpel (Gast)" bezog sich darauf, dass du die> Entprellroutine verwendest (was kein Problem ist) aber selbst hättest> auf eine mögliche Lösung kommen sollen.
Die Entprellung ist doch nicht das Problem, daher würde ich abraten,
sich da noch zusätzliche Baustellen aufzureißen.
Das Problem ist, sich erstmal einen Programmablaufplan zu erstellen.
Gerade als Anfänger sollte man vermeiden, direkt aus dem Gedächtnis zu
coden.
https://de.wikipedia.org/wiki/Programmablaufplan
if(get_key_press(1<<KEY_3))// mit Taste 3 alles ausschalten
22
{
23
PORTA&=~(1<<PA2);// EN ausschalten
24
PORTC|=(1<<PC5);// LED aus
25
richtung=0;
26
}
Damit kann entweder links oder rechts auswählen, Beide Taster sind gegen
doppeltes drücken verriegelt. Die 1 und 2 nutze ich für eine Anzeige der
Drehrichtung. Habe es so ziemlich gemacht wie max es vorgeschlagen hat.
Sicher gibt es bessere Lösungen, es geht aber.
achim
Warum beschäftigst du den Controller mit sinnlosen Tastenabfragen, die
du dann ignorierst?
Wenn die Tasten gesperrt sein sollen, dann frag sie einfach nicht ab:
1
if(!richtung)
2
{
3
if(get_key_press(1<<KEY_1))// mit Taste 1 einschalten
Peter D. schrieb:> Die Entprellung ist doch nicht das Problem, daher würde ich abraten,> sich da noch zusätzliche Baustellen aufzureißen.
Das wollte ich damit auch gar nicht sagen :-)
@ TE: Schön, dass es jetzt läuft!
Gruß Max
Thomas E. schrieb:> Warum beschäftigst du den Controller mit sinnlosen Tastenabfragen, die> du dann ignorierst?
Ganz einfach, weil sie ignoriert werden sollen.
Ansonsten würden sie gemerkt.
achim schrieb:> Sicher gibt es bessere Lösungen, es geht aber.
Du hast soeben die Statemaschine erfunden.
Man könnte es noch etwas aufhübschen mit aussagefähigen Konstanten:
Sorry Peter, dein Kommentar erschliesst sich mir nicht.
Peter D. schrieb:> Du hast soeben die Statemaschine erfunden.
Kenne die Beiträge zur Statemaschine, arbeite damit und habe hier schon
lange Diskussionen geführt.
Mit enum hast du recht. Da bleibt ein grosses Potential zur Verbesserung
achim
Peter D. schrieb:> Das Problem ist, sich erstmal einen Programmablaufplan zu erstellen.> Gerade als Anfänger sollte man vermeiden, direkt aus dem Gedächtnis zu> coden.
Oh ja! :-)