- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 60

Thema: Mehrere Servo-Signale einlesen, ggf. manipulieren, ausgeben

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Besserwessi Beitrag anzeigen
    Wenn sicher ist, dass die Eingangsignal ungestört sind, könnte man die auch per PinChange Interrupt erfassen, und auch da ein Unterbrechen der Interrupts erlauben.
    Die Zeiterfassung mit Interrupt hat immer das Problem mit Jitter. Kommt natürlich auf die nötige Genauigkeit an, ob das stört.

    Die kürzeste Ansprechzeit, hängt schon vom gerade bearbeiten CPU-Befehl ab. Dieser wird bei den meisten CPUs erst mal zu Ende abgearbeitet. Komplexe Befehle wie MUL und DIV können da schon einige Takte benötigen.

    Dann kommt der Interrupt-Controller ins Spiel. Der setzt Prioritäten und dann können andere Interrupts zuerst bedient werden.
    Normalerweise sind Interrupts während der Ausführung einer ISR gesperrt. Je nach Laufzeit der ISR gibt dies weitere Verzögerungen.

    Der Rest ist dann Glückssache, was in der Praxis wie oft zusammenfällt!

    Ich hatte da. vor langer Zeit, auch mal ein Interrupt-Problem:
    Ein 6502 mit 1MHz Takt.
    Für 1µs war da der Interrupt enabled, wo das nicht sein sollte.
    Bei manchen Geräten führte dies nur so 1x in der Woche zu einem Absturz, bei anderen schon nach einigen Minuten.
    Selbst auf den Zufall ist nicht verlass
    Ob da eine Quantenverschränkung mitgespielt hat??

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.255
    Auch die größeren AVR Controller haben nicht genug einzelne Interrupt Eingänge um 6 bzw. 7 Servosignale einlesen zu können.
    Ich würde mir mal die Pinchange Interups zu Gemüte führen, die fast alle neueren AVR Controller haben.
    Man muss dann nur in der Software rauskriegen welcher Eingang den Interupt mit welcher Flanke ausgelöst hat.
    Die Zeitmessung könnte dann über das auslesen des TCNT Registers eines 16Bit Timers stattfinden.
    Dazu vom TCNT Wert der fallenden Flanke den abgespeicherten TCNT Wert der steigenden Flanke bei jedem Kanal abziehen.
    Dieser 16Bit Timer kann dann auch gleich die Impulsgenerierung für das Summensignal übernehmen.
    Ein Problem könnte noch sein, das auf die Fallende Flanke sofort eine steigende des nächsten Kanals folgt.
    Wie sich das auswirkt wird man wohl nur experimentell rauskriegen.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    ... Die Zeiterfassung mit Interrupt hat immer das Problem mit Jitter. Kommt natürlich auf die nötige Genauigkeit an, ob das stört ...
    Genau das. In der Zeiterfassung steckt das Problem der Genauigkeit. Daher muss die Abtastung so schnell wie möglich erfolgen, meine skizzierter Vorschlag dazu siehe oben. Die zeitlich gerasterte Erfassung ist mit Verlusten in der Eingangsauflösung verbunden, ist mir klar (und oben angemerkt). Da macht es sicher Sinn, die sechs Eingangskanäle mit einem Logikbaustein zu überwachen (1 || 2 || 3 || 4 || 5 || 6) *) und das Ergebnis auf einen externen Interrupt zu geben (nach /RES die höchste Priorisierung). Getriggert wird hier natürlich auf beide Flanken (und ich weiß leider nicht, wie das mit Logikbausteinen realisiert wird oder ob es überhaupt realisiert werden kann). Die Portkonfiguration (siehe mein Posting oben) aller sechs Eingänge gleichzeitig (Zustand_alle = PINB ... gibts sowas in Bascom?) NUR in der extINT-ISR einlesen und mit Zeitmarke versehen ist dann an ein - oder mehrere gleichzeitige oder fast gleichzeitige - Signalereigniss/e gebunden. Spart unnötige Abfragen und wenn die restlichen ISR mit nested Interrupt gefahren werden wird das Jitterproblem noch geringer.

    Der Signalausgang nach all den Überarbeitungen ist wenig zeitkritisch, da es analoge Servos sind.

    *) Anmerkung: in C ist "||" ein "oder".

    PS: ja ich habe die anders gelagerten Vorschläge auch gelesen ;.-.)
    Geändert von oberallgeier (17.12.2014 um 22:28 Uhr)
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Geier,
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Getriggert wird hier natürlich auf beide Flanken (und ich weiß leider nicht, wie das mit Logikbausteinen realisiert wird oder ob es überhaupt realisiert werden kann).
    Beide Flanken sind in diesem Fall gar nicht nötig. Die fallende Flanke des einen Kanals entspricht zeitlich der Steigenden des nächsten.

    Einfach geht es mit einem RC-Glied als Differenzierer, dann bekommt man aus der Flanke einen Impuls.
    Dann bekommt man so etwas:
    http://pi.physik.uni-bonn.de/~kortma...renzierer.html
    Die negativen Impulse kann man dann absägen, indem man noch eine Diode parallel zum Widerstand einbaut.

    Dahinter sollte dann noch ein Schmitt Trigger und ein ODER-Gatter.

    Eine andere Möglichkeit ist diese hier (Absatz: Taktflankengesteuerte Flipflops):
    http://www.netzmafia.de/skripten/dig.../flipflop.html
    Allerdings ist dann der Impuls nur so breit, wie die Gatterlaufzeit des Inverters.
    Damit müsste man dann erst noch Monoflop ansteuern, welches eine vernünftige Impulslänge erzeugt. Wie z.B. so etwas:
    http://www.nxp.com/documents/data_sh...HCT221_CNV.pdf


    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Morgen zusammen,

    also Flip-Flop mit Mono-Flop und Oder-Glied geht mir Hardware mäßig schon fast etwas zu weit :-D
    Eingänge zu Pollen wollte ich eigentlich auch soweit als möglich vermeiden. Gerade bei Zeitkritischen Sachen empfinde ich Polling als sinnlose Rechenzeitverschwendung, in Zeiten von Interrupt gesteuerten Abläufen ^^

    Aber halten wir mal fest:
    -2 Dioden Matrixen
    -Signale kommen exakt abwechselnd an den beiden Kanälen (LOW Flanke auf dem einen = HIGH Flanke auf dem anderen)

    Somit stehen ja nur noch 2 Kanäle zur Auswertung.

    Idee:
    Beide Diodenmatrixen bekommen ein RC-Glied (Impulsgenerierung) negative Flanke natürlich weggeschnitten mit Diode.
    Diese beiden Signale könnte man dann ODER'n. Somit sollte sich doch ein Signal aus 6 kurzen Impulsen ergeben?
    Der Abstand von Puls zu Puls entspricht dann der Signal Dauer.
    Problem besteht nur beim letzten Kanal, der ließe sich nur mit einer follgenden negativen Flanke messen... *hmmm*

    Gruß Basti

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    74
    Beiträge
    11.077
    Zitat Zitat von Bomberpilot Beitrag anzeigen
    Idee:
    ... mit 2 bzw. mehr kleinsten µC auswerten.
    Geändert von PICture (18.12.2014 um 07:59 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von PICture Beitrag anzeigen
    ... mit 2 kleinsten µC auswerten.
    Ein- und Ausgabe zu trennen würde ich noch mitmachen.
    Die Eingabe sollte dann aber schon einer alleine machen. Sonst verschwende ich ja mehr Rechenzeit am Daten synchronisieren als an allem anderen

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    74
    Beiträge
    11.077
    Sorry, aber für mich ist heutzutage ein kleinster 8-pinner in SMD, wie ein "pull up". Ausserdem könnten sie gleich die Signale manipulieren und ausgeben.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Ä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. RC-Signal einlesen verändern und wieder ausgeben.
    Von DanielSan im Forum Arduino -Plattform
    Antworten: 1
    Letzter Beitrag: 21.03.2013, 11:58
  3. Atmel128 Spannungen einlesen und Ausgeben (Display3000)
    Von Gantenbein im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 31.08.2007, 21:41
  4. Mehrere Signale umschalten
    Von flexxo im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.02.2007, 13:56
  5. Servoimpulse einlesen und ausgeben
    Von moelski im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.08.2006, 07:24

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress