PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Start-Stop-Taster "Überbrücken"?



Morpheus1997
26.04.2013, 20:11
Hallo :)
Ich hab mich nun mal wieder mit dem Rp6 beschäftigt, und da habe ich mich besonders gefragt, ob es möglich ist, dass das im RP6 geladene Programm direkt gestartet wird, nachdem man den An-Aus-Schalter betätigt hat, ohne vorher den Start-Stop-Taster zu betätigen.
Die erste Möglichkeit, die für mich direkt in Frage kam, war, einfach den Taster zu überbrücken.. doch schon der erste Test hat gezeigt, dass dies so nicht funktionieren wird, da, wenn man den Rp6 ausgeschaltet hat, dann den Taster gedrückt hält und gleichzeitig den Schalter, der Rp6 nicht das Programm startet, sondern ledeglich alle roten Leds an sind, wie es im Normalfall auch ist, nur eben nur eine Sekunde.
Gibt es dennoch eine Möglichkeit, Programme ohne den Taster zu starten?

Btw:
Da der Sinn dieser Frage / dieses Problems sicherlich so gut wie niemandem klar sein wird, muss ich noch zusätzlich erwähnen, dass ich meinen Rp6 zu einem "Putzteufel" modifiziere, der dann zu bestimmten Zeiten automatisch angeschaltet werden soll, und das "Putzprogramm" selbstständig ausführen soll! ( Realisieren wollte ich dies mit einem Servo, der den An-Aus Schalter betätigt) Auch wenn in der Bedienungsanleitung ausdrücklich steht, man solle den Rp6 nicht "alleine lassen" während ein Programm gestartet ist, soll dies nicht das Anliegen dieses Themas werden, da ich mir schon diverse Schutzfunktionen für unwahrscheinliche, dennoch mögliche Worst-Case-Szenarien ausgedacht habe ;)

Mit freundlichen Grüßen,
Morpheus

radbruch
26.04.2013, 21:16
Hallo

Dass der RP6 nach dem Einschalten nicht startet scheint ja gelegentlich echt ein Problem zu sein. Über eine Lösung habe ich bisher noch nichts gelesen. Quick&Dirty würde ich zwischen ST1 und ST2 einen kleinen Kondensator schalten:

https://www.roboternetz.de/community/attachment.php?attachmentid=25244&d=1367007142

Im Betrieb (und nach dem Einschalten) wird die Start/Stop-Leitung über R5 (100K) auf GND gezogen. Wenn der Starttaster gedrückt wird, dann wird der Pegel an Start/Stop high, weil MReset über R3 (10K) und den internen Reset-PullUp nach 5V gezogen wird. Ein parallel zum Start/Stop-Taster angeschlossener Kondensator würde beim Einschalten den Taster kurzschliesen und dann über R5 geladen werden. Wenn die Ladespannung am MReset als Highpegel erkannt wird (ca. 3V?), startet der Bootloader das Programm. Theoretisch, denn getestet habe ich das noch nicht.

Über die Ladekurve, den Highlevel und die gewünschte Startverzögerung könnte man die erforderliche Größe des Kondensators errechen. Ich würde mal mit 4,7µ (+ an MReset) testen. Aber zuvor unbedingt die Freigabe von SlyD abwarten.

Beim Flashen wird vom RST der MReset auf GND gezogen, der automatische Start würde das Flashen deshalb vermutlich nicht beeinflußen. Aber das muss man testen und gegebenenfalls den Kondensator beim Flashen wieder entfernen.

Gruß

mic

Morpheus1997
26.04.2013, 21:34
Ah super! Werde ich morgen direkt (natürlich nach der Freigabe von SlyD ) testen!
Gruß, Morpheus

radbruch
26.04.2013, 21:38
Ich bin nicht sicher, ob das so funktioniert. Für einen schnellen Test könntest du den Start-Taster beim Einschalten gedrückt halten und erst nach dem Einschalten loslassen. Das Programm sollte dann starten. Möglicherweise mag es der Bootlader nicht, wenn Start/Stop schon beim Einschalten auf High-Pegel ist.

Plan B wäre den RP6 nicht auszuschalten, sondern in einen stromsparenden Sleep-Modus zu versetzen und per Interrupt wieder aufzuwecken.

Morpheus1997
26.04.2013, 21:48
ups, ich hatte mich wohl nicht klar genug ausgedrückt. "Plan A" entspricht etwa dem, was ich mit der Beschreibung meines fehlgeschlagenen Lösungsansatzes meinte ;)
Bei Plan B gäbs Probleme.. da sich mein roboter nach dem "Reinigungsgang" wieder in Richtung der Ladestation bewegen sollte. ich bin mir zwar nicht sicher, aber bei einem sleep-Modus ist das Programm ja wahrscheinlich immer noch gestartet, also würde hier das Problem sein, dass der Roboter zum laden ja aus sein soll :/

fabqu
26.04.2013, 22:53
Das müsste doch auch Softwareseitig gehen, oder?
z.B., indem man ohne Bootloader flasht. Also direkt das Programm aufspielt und den Bootloader löscht, dadurch sollte das Programm sofort ausgeführt werden!?

radbruch
27.04.2013, 06:41
Also direkt das Programm aufspielt und den Bootloader löschtDas würde ich vermeiden!

Beim letzten Anlauf für die Ladestation sind wir ja leider auch nicht sehr weit gekommen (und ebenfalls am neustart des RP6 gescheitert):

https://www.roboternetz.de/community/threads/40752-Ladestation-f%C3%BCr-RP6?p=499798&viewfull=1#post499798

Gruß

mic

SlyD
27.04.2013, 11:43
Hallo,

Du kannst den Hauptschalter komplett überbrücken - dafür gibts den EXT Anschluss hinten.
Gerade erst hier eine Frage dazu gewesen:
http://www.arexx.com/forum/viewtopic.php?f=19&t=2161
http://www.rn-wissen.de/index.php/RP6#EXT_Anschlu.C3.9F

Dann brauchst Du keine solche Servo Konstruktion sondern kannst MOSFETs oder Relais verwenden um den Akkulader und Versorgung automatisch nach dem Andocken um/zuzuschalten.
Wenn der Roboter eh an einer Ladestation hängt hat er ja Netzversorgung also kann der Controller auch einfach weiter versorgt werden.


> Autostart

ja leider hat der Bootloader keine Autostart Funktion - das können nur die RP6-M256 und M128 Module - die dann auch automatisch den Controller auf dem Mainboard über I2C starten. Damit wäre es also kein Problem.

Möglichkeiten das Programm ohne die Erweiterungsmodule zu starten:
- Taster drücken bzw. passend high puls auf den Eingang geben s.u.
- I2C Bus SDA kurz auf low ziehen
- "s" per UART senden
- es gar nicht erst stoppen sondern weiterlaufen lassen und den Standby nutzen ;-)


Das mit dem Kondensator wird so nicht funktionieren.
Der Bootloader prüft nicht den Pegel, sondern ob nach der Startverzögerung der Taster losgelassen ist und dann gedrückt und wieder losgelassen wird (ist notwendig weil ja im Programm normalerweise direkt danach auf den "Reset" Modus umgeschaltet wird).


Man könnte ganz klassisch eine kleine 555 Timer Schaltung (oder TTL Logik ICs) nutzen um einen einzelnen Low-Puls auf SDA zu erzeugen (Monoflop) - aber zum passenden Zeitpunkt also nach kurzer Startverzögerung.



Also sowas:
_______ _________________________....
|____|


bzw. sowas am Start/Stop Signal:
____
_______| |_________________________....




An SDA muss es Open-drain / open-collector sein, nur einmal kurz aktiv low schalten nicht aktiv high! Pullup ist schon am Bus.

Am Start Taster Eingang wäre es umgekehrt high aktiv.
Hier ist ggf. sicherheitshalber noch ein kleiner Serienwiderstand erforderlich weil der GPIO aktiv low wird sobald der Start vollzogen ist...

MfG,
SlyD

Morpheus1997
27.04.2013, 15:29
@SlyD würde es dann so funktionieren,was die "Tastersteuerung" anbelangt ( siehe Anhang) ? Ist ja einfach die Monoflop-Schaltung, mit SDA als Eingang und dem Taster als Ausgang, wobei der Eingang ja im Normalfall high ist, und zu bestimmten Momenten auf low, während der Ausgang auf low steht, nur zu bestimmten Momenten auf high. Wie steuert man dies denn so eigentlich an, also besser gesagt, wie legt man diese " bestimmten Momente " fest? Setzt man dann einfach, wenn man das Programm starten will, SDA auf low direkt in meinem Programm, und dadurch bekommt dann der Taster einen kurzen High-Impuls, wodurch das Programm gestartet wird? Das wäre ja paradox, da das Programm ja dann schon laufen müsste, um es zu starten?!:-k

25247
http://www.elektronik-kompendium.de/sites/slt/0310121.htm

SlyD
27.04.2013, 15:50
SDA tut von sich aus gar nix - das bringt am EINGANG der Monoflop Schaltung daher auch nichts ;)

Die beiden Möglichkeiten die ich da beschrieben habe sind Alternativen - Du musst nur entweder SDA ODER den Start/Stop Eingang nutzen, nicht beide.
Der Taster wird auch nicht benutzt und hat nix damit zu tun, es geht um die Signalleitung / GPIO Start/Stop (bzw. SDA).

Du musst für das was ich oben geschrieben habe keine einzige Zeile Programmcode schreiben das ist ne reine Hardwarelösung.
Die Zeiten werden über Kondensatoren und Widerstände eingestellt, kann man berechnen oder durch trial+error ermitteln wenn man einige in etwa passende Werte in der Bastelkiste liegen hat.

Wichtig ist noch die Startverzögerung - der Puls darf nicht sofort nach dem Einschalten kommen sondern sollte z.B. grob 1 Sekunde nach dem Anschalten erzeugt werden.

MfG,
SlyD