- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Ischarwaiting <- Zeichen Empfangen ATMEGA2560 geht nicht

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.08.2006
    Ort
    Kitzscher
    Alter
    45
    Beiträge
    237
    Anzeige

    E-Bike
    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

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29
    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

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.08.2006
    Ort
    Kitzscher
    Alter
    45
    Beiträge
    237
    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

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29
    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

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.08.2006
    Ort
    Kitzscher
    Alter
    45
    Beiträge
    237
    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

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29
    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

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.08.2006
    Ort
    Kitzscher
    Alter
    45
    Beiträge
    237
    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

  8. #18
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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 .

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen