-
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo Jürgen,
das mit Toggle habe ich schon probiert und es ging nicht weil vermutlich :
-angenommen der Variable A aus dem Beispiel gebe ich nun kurz einen Impuls von 0 oder 1 dann springt doch nur der Ausgang solange wie der Impuls anliegt auf den negierten Zustand.
Das wäre sozusagen ein negierter gepulster Ausgang oder nicht ?
Oder sollte er bei Toggle den Ausgang halten ?
If A = 1 Then Toggle Portb.0
Was ich dazusagen muß ist das ich alles in einer Endlosschleife habe do loop und das Programm auch nicht unterbrechen kann nur damit mehere Ausgänge parallel permanent angezogen bleiben. Das ist voll die Zwickmühle
Gruß
Steffen
-
Neuer Benutzer
Öfters hier
Hallo Steffen,
mit dem Toggle ist das so, dass wenn ein Impuls einen Ausgang toggelt, wird der Ausgang auf dauer negiert. d.h.
War der Ausgang auf H dann geht er auf L und umgekehrt und das so lange bis der nächste Impuls kommt.
Das solltest du mal mit einem ganz kurzen Programm durchspielen und dann in dein richtiges Prog "einbauen".
Jürgen
-
Erfahrener Benutzer
Roboter-Spezialist
du hast recht es liegt irgendwie am Ablauf meiner do loop schleife ich habe darin nur einmal die Anweisung waitms 40 und nur solange die 40ms laufen liegt auch der Impuls an den ich aus dem Excel schicke.
Wenn ich die Warteanweisung ganz rausnehme kommt gar kein Schaltimpuls mehr am Ausgang an. Vermutlich ist das ganze nur über Interrupts zu lösen aber das habe ich bisher schon über 2 Tage versucht zum laufen zu bekommen naja ich bin kurz davor das Handtuch zu schmeißen.
Gruß
Steffen
-
Neuer Benutzer
Öfters hier
Hallo Steffen,
habe mir das ganze noch einmal durch den Kopf gehen lassen und ein Bild von deinem Problem genacht.
- Du drückst einen Taster auf deiner Tastatur und sendest ein Zeichen
( z.B. 1 ) zum Atmega2560.
-Dein Atmega soll dann welchen Ausgang schalten ?
- Der zu schaltende Ausgang soll dauerhaft Ein sein.
- Beim nächsten Druck auf die Tastatur ( z.B. nochmal 1) soll dein Ausgang
wieder auf Aus gehen.
Es kann sein, dass deine Tastatur beim Druck auf die Taste 1 nicht nur einmal die 1 sendet sondern solange die 1 sendet bis der Finger von der
Taste genommen wird. Das hätte die Folge das deine LED flimmert. Man könnte auch den Eindruck haben, dass sie dauerhaft EIN ist.
Abhilfe könntest du da schaffen, wenn du die
Taste 1 für LED1 EIN nimmst und die
Taste 2 für LED1 AUS
Taste 3 für LED2 EIN
Taste 4 für LED2 AUS
u.s.w
Jürgen
-
Erfahrener Benutzer
Roboter-Spezialist
da mein Programmcode sehr lang geworden ist will ich diesen hier lieber nicht posten aber ich erkläre mal was ich mache.
Über waitkey warte ich auf das das zu empfangende Zeichen.
Es empfängt eine 1 und soll dann einen Ausgang 1 auf high schalten.
Wenn es eine 2 empfängt dann soll der Ausgang 1 auf low schalten.
(Im Prinzip mache ich es schon so wie du vorgeschlagen hast)
Diese Befehle stecken nun in der do loop schleife.
Was mir aufgefallen ist :
wenn ich aus meiner do loop schleife waitms 40 entferne dann wird der Ausgang überhaupt nicht mehr geschalten bleibt die Wartezeit aber darin dann sehe ich den Ausgang nur für 40ms auf high.
Ich habe zum testen dann mal eine simple schleife nachgebaut die das Problem verdeutlicht :
do
toggle port x.x
waitms 40
loop
Hier blinkt der Ausgang/LED permanent im 40ms Takt. Wenn ich den waitms befehl rausnehme wird der Port permanent auf High gehalten.
Ich halte das ganze für ziemlich unlogisch oder ergibt das für dich ein Sinn ?
Gruß
Steffen
-
Neuer Benutzer
Öfters hier
Hey,
na klar gibt das einen Sinn !!!
Das ist genau das was du programmiert hast !
do
toggle port x.x
waitms 40
loop
Wenn du den uP in die "do" Schleife schickst toggelt er den angegebenen Port, wartet 40 Millisekunden, geht auf "Loop" und springt dann wieder auf "do" und beginnt das Spiel von neuem. Da der uP 40 Millisekunden wartet nimmt das Auge noch ein Blinken wahr. Wenn du den uP nicht warten läßt sondern er mit seiner vollen Geschwindigkeit die "do"-Schleife immer wieder durchfährt und dabei den Ausgang von Ein auf Aus und umgekehrt wechselt ist er so schnell das das Auge einen "Ein-Zustand" wie schon beschrieben wahrnimmt. Ich glaube dein Denkfehler liegt darin das du meinst, das der uP nur einmal durch die "do"-Schleife fährt und den Ausgang nur Einmal wechselt. Das ist nicht der Fall. Wie vor beschrieben.
Jürgen
-
Erfahrener Benutzer
Roboter-Spezialist
Ich glaube langsam verstehe ich was du meinst. Über den do loop Befehl habe ich bisher nicht viel nachgedacht.
Es müßte demnach so sein: Ab dem loop Befehl vergisst der Controller den Ursprungszustand und nimmt erst mit dem Beginn des neuen Programmes seinen Zustand wieder annimmt. Deswegen ist eine do loop Schleife total ungeeignet für das was ich vorhabe.
Das dumme ist ich habe schon ein riesen Programm das in der do loop Schleife läuft und ich möchte auch das es regelmäßig die Analogen Ports abfragt und mir den Meßwert per RS232 sendet. Wenn ich den do loop Befehl weglasse kommt gar nichts mehr auf der RS232 Schnittstelle an
Ich denke mal wenn mir etwas hilft dann irgendwie eine andere Hierarchie des Programmablaufes nur mehr als do loop und subroutinen kenne ich nicht und an den Interrupts will ich mich nicht groß vergreifen aber was bleibt dann übrig ?
Gruß
Steffen
-
Administrator
Robotik Visionär
Also irgendwie verstehst du da grundlegend was falsch. Wait macht nichts anderes als Warten, mit Ports oder Portzustand hat der garnichts zu tun. Und wenn du den Port auf einen Zustand einstellst, dann schaltet de rauch niemals von allein zurück.
Vielleicht verstehst du den "toggle port x.x" Befehl nicht, siehe mal Hilfe in bascom. Er kehrt nur den Zustand des Portes um. Wenn der Port auf 1 (High) geschaltet ist ind dur rufst toggle auf, so wird er auf 0 (Low) geschaltet. Wenn de rPort abe rzuvor 0 ist, dann wird er durhc Toggle auf High geschaltet. Die Schleife führt also dazu das er ständig ein und ausgeschaltet wird. Heideltrudel hat es ja schon weitergehend erklärt.
Irgendwo ist in deinem Programm für dein Vorhaben ein Fehler. Du solltest mal ein kleines kurzes Rumpfprogramm schreiben bei dem man genau sieht was du machen willst und das komplett posten. Da kann dir dann sicher besser geholfen werden weil man so als im dunkeln rumtappt .
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen