- fchao-Sinus-Wechselrichter AliExpress         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 60

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

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Anzeige

    Powerstation Test
    Wenn ich mir die 6 Eingänge über 2 Diodenmatrixen auf nur noch 2 Kanäle reduziere, wird es doch gar nicht nötig so viele Interrupts zu nutzen. Dann reichen mir ja 2. Dann muss nur in der Software mitgezählt werden bei welchem Kanal wir sind, und bei der langen Pause alles zurückgesetzt werden.
    Das ist natürlich auch ne gute Lösung und vermutlich sogar noch platzsparender.

    Allgemein muss man natürlich dann aufpassen, das sich die Ausgangssignale nicht überschneiden.
    Sprich egal wie man es macht wird es nicht mit allen Empfängern funktionieren.

    Vieleicht wär es auch sinnvoll dem ersten Kanal einen eigenen Interrupt zu geben, damit man sicher eine Synchronisation bekommt.

  2. #32
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von wkrug Beitrag anzeigen
    Allgemein muss man natürlich dann aufpassen, das sich die Ausgangssignale nicht überschneiden.
    Sprich egal wie man es macht wird es nicht mit allen Empfängern funktionieren.

    Vieleicht wär es auch sinnvoll dem ersten Kanal einen eigenen Interrupt zu geben, damit man sicher eine Synchronisation bekommt.
    Korrekt, war aber auch nie mein Anspruch mit jedem Empfänger zu funktionieren, sondern mit meinem
    Hier kommen die Servopulse direkt nacheinander ohne Pause, deshalb auch 2 Diodenmatrixen (Ch1,3,5 und Ch2,4,6)
    Werde ich heute Abend auf jeden Fall mal ausprobieren, wie das dann mit 2 INTs funktioniert.

    Die Sync-Pause wird rechnerisch im Worst-Case "nur" 8ms lang sein (6*2sek.), das sollte sich SICHER detektieren lassen denke ich.
    Also ist ein separater INT für Ch1 eher nicht notwendig.

    Gruß Basti

  3. #33
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo Bombi,

    Mit 2 ICs bekommst du das Ganze auf einen Eingang:


    Code:
    
       -                   74x27
     -- ---------    1 -     __        74x02     74x02
         -              ----\  \                  __
     ---- -------    3 ------|  |o-.-------------\  \
            -           ----/__/   |  .-\  \      |  |o---.
     ------- ----    5 -           '--'  |  |o---/__/     |
                                       -/__/              | 74x27
                                                          |  __
                                                          '-\  \
                           74x27                          .--|  |o-
                     2 -     __        74x02     74x02    |-/__/
                        ----\  \                  __      |
                     4 ------|  |o---------------\  \     |
                        ----/__/   |  .-\  \      |  |o---'
                     6 -            ---  |  |o- -/__/
                                       -/__/
    (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
    Du bekommst für jede Flanke einen Nadelimpuls am Ausgang (Je nach Logikfamilie 4-10ns).
    Um die Impulse zu verlängern muss am Ausgang der beiden Inverter noch ein C gegen Masse, bzw. ein RC-Glied dazwischen.

    Etwas Aufwändiger wäre es ein Monoflop am Ausgang nachzuschalten.

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

  4. #34
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Du bekommst für jede Flanke...
    Auch die negativen? Sonst kann ich das Ende von Ch6 nicht detektieren

    EDIT: Wenn ich drüber nachdenke.... Ja für jede Flanke :-D
    Hab zum Glück beide grad zur Hand, kann ich also nach dem Versuch mit der Diodenmatrix auch nochmal testen.
    Geändert von Bomberpilot (18.12.2014 um 11:31 Uhr)

  5. #35
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von wkrug Beitrag anzeigen
    Allgemein muss man natürlich dann aufpassen, das sich die Ausgangssignale nicht überschneiden.
    Dies ist sehr unwahrscheinlich, wenn man sich das Übertragungsprotoll mal angesehen hat.

    Die Impulse werden direkt hintereinander gesendet. Alles andere am Ausgang ist nur Möglich wenn zwischengespeichert wird.
    Die einzig mögliche Überschneidung bewegt sich im Bereich der Laufzeit-Differenzen des I/O-Ports.

    Softwaremässig ist es am Einfachsten eine 1 durch das Port, bzw. eine Variable, zu schieben.

    Code:
    unsigned char Out;
    
    void sync(void)
      {
        Out = 0x1;
        Port = 0x00;
      }
    
    ISR_Flanke(void)
      {
        Port = Out;
        Out <<= 1;
      {
    Drumrum braucht es natürlich noch Timeouts, um Störungen zu erkennen und simulierte ISR um in diesem Fall Standardstellungen an die Servos auszugeben.

    MfG Peter(TOO)

    - - - Aktualisiert - - -

    Hallo,
    Zitat Zitat von Bomberpilot Beitrag anzeigen
    Auch die negativen? Sonst kann ich das Ende von Ch6 nicht detektieren

    EDIT: Wenn ich drüber nachdenke.... Ja für jede Flanke :-D
    Hab zum Glück beide grad zur Hand, kann ich also nach dem Versuch mit der Diodenmatrix auch nochmal testen.
    Jo, für beide!
    Im Prinzip produziert die Schaltung immer zwei Impulse, aber dies überlagern sich.

    Die obere Hälft erzeugt z.B. aus der fallenden Flanke von Kanal1 einen Impuls und gleichzeitig erzeugt die untere Hälfte einen aus der steigenden Flanke von Kanal2.

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

  6. #36
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Softwaremässig ist es am Einfachsten eine 1 durch das Port, bzw. eine Variable, zu schieben.
    Genau so läuft derzeit ja auch meine Ausgabe.
    Und vermutlich gestaltet auch der Controller im Empfänger die Ausgabe so, sonst würden sich ja Pausen zwischen den Pulsen ergeben. Nur durch direktes Weiterschieben des Bits kann das direkt ohne Pause fabriziert werden.

    Wie gesagt, ich werde heute Abend mal die Methode mit 2 Matrixen und 2 INTs testen.
    Und wenn das nicht läuft wie ich das gerne hätte die Methode mit den beiden 74##ern.

    Wobei mir 2 belegte INTs lieber sind, als 2 zusätliche ICs

    Gruß Basti

  7. #37
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Was mach ich falsch, das lauter wirre Zahlen bei rauskommen?
    Erst mal nur ein INT der Kanäle 1,3,5...

    Code:
    $regfile "m32def.dat"$baud = 9600
    $crystal = 16000000
    $framesize = 32
    $swstack = 32
    $hwstack = 64
    
    
    Config Porta.0 = Output
    
    
    Config Timer0 = Timer , Prescale = 256                      'Läuft etwa alle 4 ms über
    Config Int0 = Rising
    
    
    On Int0 Int0_isr
    On Timer0 T0_ovf
    
    
    Dim Ch_cnt As Byte
    Dim Sig(3) As Byte
    
    
    Enable Int0
    Enable Timer0
    Start Timer0
    
    
    Enable Interrupts
    
    
    
    
    Do
       Waitms 200
       Print Sig(1) ; "," ; Sig(2) ; "," ; Sig(3)
    Loop
    End
    
    
    
    
    
    
    Int0_isr:
       If Ch_cnt > 0 Then Sig(ch_cnt) = Timer0                  'Bei erster Flanke soll erst mal nur der Timer auf 0 gestellt werden, bei weiteren dann Wert gespeichert werden
       Timer0 = 0                                               'Timer auf 0 stellen
       Incr Ch_cnt                                              'Kanal Zähler erhöhen
       If Ch_cnt = 3 Then Config Int0 = Falling                 'Wenn alle 3 Pulse durch sind, INT0 auf fallende Flanke setzen für letzten Puls
    Return
    
    
    
    
    T0_ovf:
       Config Int0 = Rising                                     'Wieder auf steigende Flanke
       Ch_cnt = 0                                               'Kanalzähler auf 0
    
    
       'um auf dem Oszi einen Überlauf des Timers zu sehen
       Porta.0 = 1
       Waitus 25
       Porta.0 = 0
    Return
    Geändert von Bomberpilot (18.12.2014 um 19:05 Uhr)

  8. #38
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Bei 2 Interrupts kann man ICP und den analogen Komparator (Vergleich mit 1,1 V Ref intern) nutzen. Auf den beiden Pins kann man die ICP Funktion nutzen, und damit wenigstens die Messung unabhängig von Latenzzeiten machen, ggf. auch ganz ohne Interrupts.

  9. #39
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Hab gestern noch 2 Stunden probiert, irgendwie bekomm ich nur sinnlose Werte raus :-/
    Wie viel würde es denn wohl etwa an Ressourcen bringen, auf C umzusteigen?

    Gruß Basti

  10. #40
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Hab gestern noch 2 Stunden probiert, irgendwie bekomm ich nur sinnlose Werte raus
    Bevor Du da die Flinte ins Korn wirfst, guck doch erst mal wo es hängt.
    Simulieren heisst hier das Zauberwort.
    Auch ein mit Bascom generiertes Programm sollte sich mit AVR Studio simulieren lassen.
    Dann kriegst Du schon raus ob es ein Timing Problem, oder ein Softwarefehler ist.

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Ä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
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad