- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 15

Thema: Mehrere Servos parallel steuern ATMega8

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Hallo,also erst einmal fehlt bei der zweiten for-next Schleife das next. Und dann sieht es so aus als wenn in eine Richtung fahren soll so lange du den Taster drückst. Das Problem der festfahrens in deiner ISR könntest Du abstellen indem Du eine Abfrage einbaust die schaut was passieren soll wenn der Zähler auf >3 steht. Schau doch mal über z.B. ein Terminal nach was genau fü reinen Wert der Zähler im Fehlerfall hat. Viele Grüße Jörg

  2. #2
    Hallo und danke schon mal für die Antworten.

    Nein, die ISR fährt sich nicht "fest", denn ich kann trotzdem noch beide Servos verstellen bzw. der Controller reagiert auf Tastendruck. Nur scheinen sich die "PWM-Signale" zu überlagern, dass das Servo so stark um den gesetzten Zielpunkt so stark zittert.
    Das Festfahren geschieht immer nur, wenn ich 2 Servos mit dem Befehl "Servo" ansteuere und den Controller durch verschiedene Tastendruck-Verhalten unterschiedlich stark belaste. Dann kippt er irgendwann. Bin mir aber auch nicht sicher, ob es vielleicht an der Spannungsversorgung des Boards liegen kann. Beide Servos versorge ich nämlich durch das Eva-Board und wenn beide Servos laufen, zieht das schon ein wenig mehr Strom.

    Dass jetzt ein "Next" fehlt, ist nur ein Schönheitsfehler. War schon arg spät gestern. Das Original war für 2 Servos gedacht und ich hab es später wieder auf den Single-Modus reduziert. Damit ihr euch ein Bild machen könnt, hab ich den Rest noch mal hinzu geschrieben und das next vergessen.


    Hast du vielleicht noch eine Idee, wie ich mit einem Controller die Servos zum Laufen bringe, gleichzeitig aber noch die PWM-Eingänge abfrage?
    Geht das besser mit der Abfrage durch einen Timer/Counter oder mit der Pulsein-Routine? Wenn ich Pulsein nutze, flackert der gesetzte Ausgang ziemlich stark, obwohl er Low sein sollte. Scheint mit dem Pulseout des Servos zusammen zu hängen - warum auch immer.


    LG - Maik


    LG - Maik

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Hast Du schon überprüft ob der mega wirklich mit 8MHz läuft? (einfacher 1Hz LED-Blinker).

    Ich frage mich grade warum du die LED überhaupt mit einem PWM ansteuerst? Könnte man den Pin nicht als IO benutzen, wenn es die Anwendung zu lässt ... ansosnten könnte es am Takt des mega liegen -> prüfen mit Blinker.
    Ich bin der Meinung das kein flackern wahrnehmbar sein sollte.

    Ach so, wollte ich vorhin ja schon sagen: Die for-next Schleifen sind hier vermutlich so auch überflüssig. Wenn ich es richtig sehe gibst du doch den Servowert in der ISR an...wozu zählen die Schleifen da auch noch was mit - wenn ich so drüber nachdenke .... das wird das zittern verursachen, weil es auch einfach keinen Sinn macht die Ausgabepins von 0 - 100 hoch zu zählen, zumal der mega8 effektiv nur 23 Pins hat, und sicher nicht alle davon für dich in frage kommen
    Und bei mir sieht der Befehl für Portb.0 so aus : Pulseout Portb, 0, wert. Warum das bei dir anders ist kann ich nicht sagen, ob falsch ist natürlich auch nicht. Aber die Hilfe sagt was anderes als bei dir steht.

    Auch ist ein Long etwas sehr überdimensioniert, hier tut es ein Word. Denn du hast sicher niemals einen Wert über 65535.

    Ich kenne das Eva-Board nicht und weiß auch nicht wie die Spannung aussieht die Du da benutzt. Wenn es aber mit der Single-Version läuft, dann könntest du den Tipp von hbquax als erstes versuchen umzusetzen. Wenn das Problem dann weiterhin auftritt, hast Du wahrscheinlich einen Spannungseinbruch - vielleicht auch mit unbemerktem reset des µC- das kann auch das zittern auslösen.

    Und nun lass uns nochmal über etwas grundsätzliches kurz sprechen: Es macht keinen Sinn ein Programm zu posten, das aber nicht den Fehler produziert - denn einen Servo Befehl sehe ich hier nicht. Und auch einen Programmteil einfach wieder rein zu schreiben - womöglich ohne es erneut zu testen, macht wenig Sinn.

    Viele Grüße
    Jörg
    Geändert von HeXPloreR (02.10.2014 um 22:19 Uhr)

  4. #4
    HI.

    Jeden neuen Controller setupe ich extra mit AVRStudio, weil ich damit die Lock-Bits setzen kann. Und da setze ich den Controller immer auf 8Mhz +64ms.

    Hm - um ehrlich zu sein, kann ich dir die Frage nach der For-Next-Schreife nicht beantworten. Allerdings kann ich nur so den Pulseout-Befehl ausgeben, denn nur dort ist die Variable "A (bzw. B)" verankert, welche ja die Anzahl an Wiederholungen wiederspiegelt. Und hier hört dann auch leider mein "Fachchinesisch" dazu auf, denn viel mehr habe ich über den Pulseout-Befehl leider nicht finden können.

    Ui - ich werde deine Variante des "Pulseout" ausprobieren. Zum Aufschlüsseln: Pulseout ist ja klar, dahinter der entsprechende Ausgangsport, an 3ter Stelle nehme ich an, wird die fallende Flanke getriggert, zuletzt dann die Variable, welche in der ISR aufgerufen wird. Nicht, dass nämlich die 3te Variable "0" für die direkte Portnummer steht ^^.

    E-V-A: Eingabe - Verarbeitung - Ausgabe ^^. Ich nenne mein Evaluationsboard so. Habe das STK500 . Ist für mich einfacher, jedoch kannst du natürlich nicht wissen, was ich damit meine. Entschuldige.

    Na klar - ändere das "Long" auf "Word".

    Nein. Das Zittern spiegelt keinen "Reset" des µC wieder. Mit den Variablen habe ich das Servo in einem Aktionsradius von exakt 180° zu Laufen. Es fährt die entsprechenden Stellungen ja an, z.B. 90° (ca. Wert 2900, 1250 = linker Anschlag, 4550 = rechter Anschlag) ja an und hält diese auch, nur dass das ausgangssignal anscheinend (z.B. bei Wert 2900 = Mittelstellung) nicht bei exakt 1,50 Milisekunden liegt, sondern in einem Bereich zwischen 1,3ms und 1,7ms liegt - und genauso verhält sich das Servo dann auch. Würde der Controller durch den Spannungseinbruch zurück gesetzt, würde das Servo ja wieder in die Ausgangsposition fahren, und die liegt bei 1ms - also linker Anschlag (Startwert bei 1250). Das kanns dann augenscheinlich nicht sein.
    Möglich wäre nur, dass das Servo selbst bei Belastung die Spannungs mit Einbruch-Spitzen überlagert und der Controller so Fehlsignale einfach weitergibt.

    Ich werde mal folgendes tun:
    Ich besorge mir für die Zukunft ein 2tes Netzteil und erstelle mit eine Spannungs-Unterstützung. Auf der wird dann ein 5V Festspannungsregler untergebracht, der die Spannung für Nebenaggregate aufrecht hält. Sofern ich die Masse dieses Boards dann mit der zentralen Masse des STK500 verbinde, sollte der Controller beim Ausprobieren auch das Servo stellen können - hoffe ich zumindest.


    Jörg - du hast recht. Ich probiere es nun erst einmal mit deinem Vorschlag. Erreiche ich damit nichts, poste ich das gesamte Programm. Versprochen.
    Will ja, dass du zufrieden bist und mir so auch etwas mehr helfen kannst.


    LG - Möhrchen

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Leider kombinierst Du anscheinend ein LED-Lauflicht mit Deiner Anwendung die ja eindeutig eine PWM-Ausgabe auf mindestens einen (oder vielleicht auch zwei) festen Ausgang hat. Wenn Du aber mit einem Zähler in der Schleife auch noch den Pulseout beschickst ... also kurz gesagt ich denke Du benutzt den Befehl leider einfach falsch.

    Welche Anzahl von Wiederholungen denn? Du drückst doch eine Taster, daraufhin verfährt der Servo auf einen festen Wert. Wiederholungen gibt es doch, abgesehen von der eigentlichen Hauptschleife garnicht, oder? Und auch wenn du Wiederholungen einbauen wollen würdest, ganz sicher nicht an dieser Stelle. Um eine Wartezeit von zb 15ms zu erzeugen würde ich vorerst einfach ein waitms15 vor die loop setzen. Der Nachteil dabei ist dein debounce-Befehl ... das ganze würde ich in eine Interrupt packen ohne debounce, deshalb Hardware entprellt und dort das drücken zählen lassen (- den Taster würde ich persönlich immer hardware entprellen - da ich mir grade nicht sicher bin ob debounce im Interrupt einfach funktionieren würde)

    Zusaätzlich könntest du den Tipp von hbquax nachmal ansehen... ...und dazu Deinen Code: wenn Du genau hinsiehst erkennst du vermutlich das Du zwei Variablen angelegt hast, die vermutlich letzten Endes das Gleiche enthalten. Auch das wäre unnötig, wenn beide Servo die gleichen Werte bekommen sollen, denn genau dazu sind Variablen eben auch gut

    Ein wenig Bascom für die Praxis - Halvar.at

    EVA - Guckst Du hier

    Viel Erfolg
    Jörg
    Geändert von HeXPloreR (02.10.2014 um 22:21 Uhr)

  6. #6
    Recht hast du. Wiederholungen gibts im Dem Sinne nicht. Ich sehe leider nicht die Software die hinter der Hardware steckt. Mit "Wiederholungen" meinte ich wohl das Verfahren der Servos, jedoch habe ich dabei nicht betrachtet, dass mit dem Tastsendruck das ausgegebene PWM-Signal sofort geändert wird und das Servo halt nur seine Zeit braucht, um den dazu gehörigen Wert anzufahren.

    Nein, kein Lauflicht, sondern eine PWM-Eingabe. Habe einen Sevotester, der ein PWM-Signal ausgibt. Damit füttere ich den Controller, und der soll das dann nur auswerten und einen Ausgang ab 1,8ms PWM-Input einschalten. Also genau das Gegenteil von dem, was ich mit den Servos vor habe.

    Werde heute oder morgen noch mal ein wenig Probieren - u.U. komme ich aber erst kommende Woche dazu. Dann poste ich auch das Programm.


    LG - Maik

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Zitat Zitat von stardust19322 Beitrag anzeigen
    Ich sehe leider nicht die Software die hinter der Hardware steckt.
    Wie meinst Du das? - Ich nehme mal an die schreibst die Software selbst - in Bascom, oder wovon reden wir jetzt? "Hardware entprellen" bedeutet das parallel zu dem Taster z.B. ein 10µF Keramikkondensator verbaut wird. Damit spart man sich den Debounce in der Software, was eben auch seine Vorteile haben kann.

    und das Servo halt nur seine Zeit braucht, um den dazu gehörigen Wert anzufahren..
    ...hört sich an als drückt man sehr ungeduldig auf dem Taster rum.

    .... und der soll das dann nur auswerten und einen Ausgang ab 1,8ms PWM-Input einschalten. Also genau das Gegenteil von dem, was ich mit den Servos vor habe.
    Nur weil es vielleicht das Gegenteil ist ändert es nicht die Tatsache das auch hier ein fester Eingang mit Pulsein benutzt werden kann. Und ab dem dazu fraglichen Wert ein IO eingeschaltet wird.

    Sollen diese beiden Anwendungen später irgendwas zusammen machen oder sich gegenseitig beeinflussen?

Ähnliche Themen

  1. Mehrere RC Signale einlesen und mehrere Servos ausgeben
    Von R2D2 Bastler im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 74
    Letzter Beitrag: 10.01.2022, 08:35
  2. Mehrere ATMEL parallel programmieren
    Von Realisator im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.05.2009, 16:54
  3. mehrere Ausgänge parallel regeln?
    Von marius86 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 20.07.2008, 21:23
  4. Mehrere RS232 Rx/Tx parallel?
    Von Jaecko im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 24.03.2007, 09:24
  5. [ERLEDIGT] Mehrere LED´s Parallel geschaltet
    Von Gast A.M. im Forum Sensoren / Sensorik
    Antworten: 25
    Letzter Beitrag: 05.06.2005, 11:37

Berechtigungen

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

LiFePO4 Speicher Test