Will mein C-Programm durch einen Tastendruck anhalten und wieder fortsetzen. Also wenn der µC eingeschaltet wird, soll er erst auf einen Tastendruck warten und dann mit der Programmabarbeitung starten. Wenn die Taste erneut gedrückt wird, soll er wieder anhalten (Überprüfung zu Beginn der Haupt-Programmschleife). Bin grad irgendwie zu blöd und krieg's einfach nicht gebacken. Einschalten geht, aber ausschalten nicht. Der alte Tastenzustand muß noch gespeichert werden und so... Kann jemand helfen?
Zeig mal etwas Code. Gruß Oliver
Gast
#2694133
Hi Nun, ein Programm anhalten wirst du nicht können. Vielleicht schlafen legen und wieder aufwecken. Macht aber keinen Sinn. Warum nicht ein Bit setzen und wenn nicht gesetzt, dann Sprung zum Ende der Programmschleife In Prinzip sähe das so aus: Taster -Kommende oder gehende Flanke bilden Mit Flanke ein Bit triggern Ist Bit gesetzt, dann in Bearbeitungszweig Fertig Gruß oldmax
Gast
#2694155
In der Hauptschleife:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Und was verbirgt sich hinter 'tastegedrueckt()'?
Z.B.: Beitrag "Re: AVR Sleep Mode / Knight Rider" Peter
Gast
#2694196
Ja, hätt ich vielleicht dazusagen sollen - das muss man dann halt implemetieren, zumindest ist der Name selbsterklärend :)
(Gast) schrieb: > Ja, hätt ich vielleicht dazusagen sollen - das muss man dann halt > implemetieren, zumindest ist der Name selbsterklärend :) Ach, das hab ich gar nicht mitgekriegt. Das war eine Antwort FÜR den Fragesteller! Ich hatte das als Antwort des Fragestellers auf seine Ausgangsfrage gesehen.
Leute, vielen Dank für Eure Tips! Das mit der Flankenauswertung gab mir dann den richtigen Anstoß. Habe mal etwas rumgeschrieben, aber noch nicht getestet:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Kann das so gehen? Die Hauptschleife (direkt unter while(1)) wird aller 10 ms neu gestartet, das habe ich jetzt nicht mit reingeschrieben. Der Taster (Pin TASTER) ist schon hardwaremäßig entprellt mit RC und Schmitt-Trigger, daher braucht das nicht mit programmiert zu werden. "taste" und "ein" sind zwei Hilfsvariablen - kann man das evl. so optimieren, daß man sich eine spart?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Gast
#2695067
Wieso nicht einfach einen Schalter an den externen Quarz?! ->kein Takt-> kein laufen
@kbuchegg: Danke, werde ich testen. :) @Troll: Ganz so brutal geht's leider nicht. Das Teil hat (später mal) 11 kW unter Kontrolle und den Not-Aus-Knopf gibt es schon. ;)
Gast
#2695178
Das ist immer das Beste: Keine Ahnung von nix, davon aber viel...und dann mit solchen Zahlen um sich werfen :-)
Gast
#2695479
Hi @Dieter So ganz verstehe ich deinen Beitrag nicht.... Da ich von C nich viel Ahnung habe, hier mal eine Flankenauswertung in Assembler ( ohne entprellen)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Statt der Variablen "Switch_Bits" kann auch R16 gepusht und gepopt werden. Wichtig ist, daas du das Flankenbit nach bearbeitung zurücksetzt. Z.B. Eltako-Schaltung:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Vielleicht kannst du das in C umsetzen.... Gruß oldmax
Taster an interrupteingang und im Interrupt ne Endlosschleife die das Hauptprogramm blockiert und bei erneutem drücken wieder loslässt...
Gast
#2695606
Hi Von "eingefrorenen" Programmen halte ich nicht viel. Schließlich kostet es nicht mehr, wenn der Controller durch seine Programmschleife "saust" und vielleicht noch ein wenig Kontrollaufgaben übernimmt. z.B. könnte eine blinkende LED Bereitschaft signalisieren... Gruß oldmax
Die Idee mit dem Interrupt kam mir heute früh auch. Wäre wohl am einfachsten. Interrupt auf steigende Flanke und dann Bit in der ISR toggeln, was dann zu Beginn der Hauptschleife abgefragt wird, z.B.
1 | |
oldmax schrieb: > Hi > Von "eingefrorenen" Programmen halte ich nicht viel. Ich schliess mich da oldmax an. Auch ich halt davon nicht viel. Zumal, wie wir alle wissen, Programme nie so bleiben, wie sie in der ersten Version waren. D.h. die Chance für zukünftige Erweiterungen ist gegeben und es ist nicht besonders schlau, sich diese Chance ohne Not zu verbauen. Und sei es nur, das der µC per Fernwartung zu jedem Zeitpunkt darüber Auskunft geben können muss, warum der Ausgang abgeschaltet ist. Eine Funktionalität per Taster ein/ausschaltbar zu machen ist eine Sache. Aber ihn in einem Interrupt solange festzuhalten ist eine andere Sache. Zumal es das alles auch nicht einfacher macht. Das 'Problem' an der Sache ist die saubere Erkennung der Taster-flanken. Der Rest ist pipifax. Und Tasterauswertung ist nichts, was einen externen Interrupt erforderlich macht. Zumal die Alternative bei bereits hardware-entprellten Tastern trivial ist.
Das halten per Taster wäre halt die minimal-lösung..... Und wenn sein Programm wies jetzt aussieht eher trivial gehalten ist, dann ist es Schwachsinn eine aufwendige Technik anzuwenden um es anzuhalten. Ausserdem ist die int Methode failsave, d.h. selbst ein fehlerhaftes proggi wird sicher unterbrochen Ausser es cleart den interrupt-enable) ...
Max D. schrieb: > Das halten per Taster wäre halt die minimal-lösung..... > Und wenn sein Programm wies jetzt aussieht eher trivial gehalten ist, > dann ist es Schwachsinn eine aufwendige Technik anzuwenden Na komm. Übertreib nicht, von wegen aufwändig.
Gast
#2696618
Hi Also, ich halte es für ziemlich aufwändig, wenn ich einen Controller nehme und damit 11kW schalte...., wo der Controller scheinbar nur die Aufgabe hat, auf Tastendruck die Leistung ein- bzw.abzuschalten. Ich mein, wenn ich schon auf einen Taster drücken muss, warum schalte ich nicht gleich den Hauptschalter? Oder nehm eine simple Selbsthalte-Schaltung oder einfach einen Eltako ? Einen Controller einzubauen, um ihn "schlafen" zu legen, ist dagegen sicherlich aufwändig... Aber es ist nicht unsere Aufgabe, der Welt ihre fixen Ideen auszureden. Gruß oldmax
Gast
#2696848
Hallo! Falls Du keinen dynamischen RAM im System hast (Refresch!), kannst Du auch den WAIT Eingang (Pin 24) einfach auf GND ziehen.
Also zum eigentlichen Projekt hatte ich ja konkret noch nichts gesagt (ist ja auch nicht Thema), von daher gehen Eure Mutmaßungen etwas in die falsche Richtung. 11 kW sollen nicht einfach bloß geschaltet werden, sondern hier geht es u.a. um feldorientierte Regelung von Asynchronmaschinen (Raumzeigermodulation). Das Anhalten und Fortsetzen der Steuerung soll später auch über Funk möglich sein und der eigentliche FU wird mittels Schütz geschaltet (DSP schaltet Transistor -> Relais -> Schütz).
Gast
#2697384
Hi Nun, das der µC nicht mit einem Ausgang 11kW schalten soll, hatte ich auch nicht erwartet. Trotzdem wird sich hier jeder fragen, wieso du einen Controller "anhalten" willst. Ob der nun im Kreis rotiert oder nicht, spielt doch erst mal gar keine Rolle. Wenn's um die Sicherheit beim Betreiben der Maschine geht, müssen eh andere Maßnahmen ergriffen werden, mal ganz simpel angefangen von Strom- und Drehzahlüberwachung. Damit kann man auch den Controller beschäftigen und auch mit der Schalterei per Funk, aber dafür muss er laufen. So wie du die Frage gestellt hast, muss jeder einen falschen Ansatz sehen. Lass deinen Controller ruhig seine Runden drehen und wenn ein Ereignis vorliegt, die Stichworte sind ja alle schon gefallen, führst du einen Job aus, quittierst ihn und drehst dann weiter deine Runden. Der Controller ist nicht "abgeschaltet", sondern prüft, ob er irgend was machen darf..... da isser nämlich ganz scharf drauf. Gruß oldmax
Ganz meine Meinung. Wobei die kritischen Sachen wie z.B. Motorstrom und ZK-Spannung freilich hardwareüberwacht sind. Je größer das Programm wird, umso wahrscheinlicher sind Fehlfunktionen/Überläufe/Abstürze. Derart kritische Sachen per Software zu überwachen, wäre nicht zu verantworten.
F. P. schrieb: > Also zum eigentlichen Projekt hatte ich ja konkret noch nichts gesagt > (ist ja auch nicht Thema), von daher gehen Eure Mutmaßungen etwas in die > falsche Richtung. Vielleicht solltest Du Dir mal die Netiquette durchlesen. Besonders ab dem Abschnitt 'Klare Beschreibung des Problems' Gruß Jobst
Ist doch völlig egal, WAS für ein Programm angehalten werden soll. Ob das den Mittelwert zweier Zahlen ausrechnen soll, oder Pi oder weiß der Kuckuck was... Wenn Du der Meinung bist, ich hätte das Problem nicht genau beschrieben, tut's mir leid. Wenn ich großartig drumherum geredet hätte, bekäme ich vielleicht noch eins auf den Deckel wegen OT. Wie man's macht, macht man's verkehrt. Aber nichtsdestotrotz danke für Eure Hilfe!
Gast
#2699848
F. P. schrieb: > Wie man's macht, macht man's verkehrt. Passiert hier halt gerne im Forum. Aber dahinter steckt meistens, dass das eigentliche Problem gar nicht das wesentliche ist. Gerade Anfänger denken oft, "Ich muss nur X schaffen, dann ist die Aufgabe gelöst", und verstehen gar nicht, dass es gar nicht um X geht, da mit ein bisschen nachdenken dieses Problem sich gar nicht stellen würde. Daher lieber immer direkt alles auf den Tisch - dann findet man die beste Lösung. Nur nicht frustrieren lassen, oder vom herben Ton hier entmutigen lassen.
Kein Problem, da kenne ich ganz andere Foren... ;)
Gast
#2699866
F. P. schrieb: > Kein Problem, da kenne ich ganz andere Foren... ;) Welche denn?
Gast
#2699891
Wenn du die Hauptschleife anhälst, dann musst du dein Controller wieder zurücksetzen damit er wieder was tut. Die Aufgabe der Hauptschleife eines Programms ist das Verhindern des Stillstandes eines Controllers.
F. P. schrieb: > Wenn Du der Meinung bist, ich hätte das Problem nicht > genau beschrieben, tut's mir leid. Nein, da bist Du schon selbst drauf gekommen. (Siehe mein Zitat von Dir) Aber Dir scheint es nicht leid zu tun. Und es sieht so aus, als würdest Du dies nicht ändern wollen. Gruß Jobst
Gast
#2700198
Hi Och, manchmal ist es richtig interessant, da kommt nix zum Thema, aber den Abschnitt "Netiquette" scheint perfekt auswendig gelernt.... Ole Also, ich hab das erste Schreiben nochmal gelesen und da geht so ziemlich eindeutig klar hervor, der Autor hat einen Knoten in seinen Gedanken. Da braucht es kein drumherum reden.. ein Programm anzuhalten ist purer Nonsens. Die Aufgabe spielt doch da überhaupt keine Rolle. Und kommt mir bitte nicht mit dem Sleep-Mode. Das war hier nie die Frage. Na ja, das im Verlauf der Diskussion Informationen nachgeschoben werden, macht doch die Ausgangsbasis nicht hinfällig. Ob nun ein 11KW Antrieb geschaltet oder eine LED blinkt, ein Programm anzuhalten ist in beiden Fällen Blödsinn. Aber das ist mittlerweile ausgiebig diskutiert worden. Was bringt es jetzt noch, auf einer Netiquette zu bestehen.... Nur um mal etwas gesagt zu haben ? Sorry Jobst, ich weiß, du kannst auch anders. Gruß oldmax
Gast
#2700212
hardware-stop per quarz und paralell angeschlossenem taster der die lastkapazitäten trennt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.