-
        

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 67

Thema: RC-Empfänger Auswerten

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241

    RC-Empfänger Auswerten

    Anzeige

    Halllo Zusammen,
    ich habe folgendes Problem:
    Ich möchte gerne einen Empfänger Kanal auslesen, und einen Wert zwischen -100 und +100 Bekommen. Wie man dass mit ner Summensignalmessung macht is mir klar nur ich möchte den Normalen RC Ausgang vom Empfänger nehmen! Ich programmiere in Bascom.
    Kann mir da jemand weiter Helfen??
    Vielen Dank im Voraus
    Gruß
    MiniMax

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    Hallo Minimax,

    im Prinzip ist es ganz einfach
    Du configuriest einen externen interrupt auf steigende flanke (rising) und in der isr startest du dann einen timer (z.b. timer0). Außerdem configurierst du den interrupt um, auf fallende flanke (falling). Wenn der interrupt nun das nächste mal ausgelöst wird, stopst du den timer, configurierst wieder auf falling.
    In der timer isr (welche auf z.b. 10µs eingestellt wird) erhöhst du jedesmal einen wert, welchen du dann beim fallenden signalpegel in eine andere variable einliest. diese variable ist dann dein PWM-Wert. Diese solltest du jedoch noch durch 100 teilen, um auf einen wertebereich zwischen 0 und 255 zu kommen.
    Hier mal schnell ein beispiel, habs gerade schnell geschrieben, müsste aber funktionieren
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $framesize = 80
    $hwstack = 80
    $swstack = 80
    
    
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
    Config Lcdbus = 4
    Initlcd
    Cls
    
    Config Pind.2 = Input
    Portd.2 = 1
    
    Config Int0 = Rising
    On Int0 Servo_input
    Enable Int0
    
    Config Timer2 = Timer , Prescale = 1
    Timer2 = 96
    On Timer2 Servo_zaehler
    Stop Timer2
    Enable Timer2
    
    Dim Servo_pin As Bit
    Dim Servo_wert As Word
    Dim Servo_wert_read As Word
    
    Servo_pin = 0
    
    
    Enable Interrupts
    
    
    Do
    
    If Servo_wert_read <> 0 Then
    Servo_wert_read = Servo_wert_read / 100
    Locate 1 , 1
    Lcd "Servo_wert: " ; Servo_wert_read ; "  "
    Servo_wert_read = 0
    End If
    
    Loop
    
    End
    
    
    Servo_zaehler:
    Timer2 = 96
    Incr Servo_wert
    Return
    
    Servo_input:
    If Servo_pin = 0 Then
    Servo_pin = 1
    Timer2 = 96
    Start Timer2
    Config Int0 = Falling
    Elseif Servo_pin = 1 Then
    Servo_pin = 0
    Stop Timer2
    Config Int0 = Rising
    Timer2 = 96
    Servo_wert_read = Servo_wert
    End If
    Return
    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Ah ok --
    Nur was ist der Servo wert den ich noch durch 100 Teilen muss??
    Is das Servo Wert?
    Gruß
    MiniMax

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    Der servo wert ist die high-zeit des pwm-signals. 1ms entspricht einem wert von 100.
    Da du ja einen wert im ms haben möchtest, musst du durch 100 teilen.
    128 bedeutet z.b., dass das signal 128ms lang high ist und 255-128=127ms low ist.

    Hoffe das ist verständlich, bin nicht so der Erklärer
    Gruß
    Chris

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Also ist 0 = -100 % und 225 = + 100% ??
    Gruß
    MiniMax

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    ja, so könnte man es sagen.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    ah ok danke! Und die Variable ist dann ServoWert wo die 0 bis 225 angegeben sind? Also das Gemessene?
    Gruß
    MiniMax

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.785
    Blog-Einträge
    8
    Könnte man das nicht auch mit dem Pulsein-Befehl lösen?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    nein, servo_wert_read ist die endgültige variable.
    Was ich noch vergessen habe, du musst nach jedem Messen die variable servo_wert zurücksetzen, da diese sonst immer größer wird.

    Gruß
    Chris

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    und wo schreibe ich das rein? Am Ende der Procedure? Und ich habe noch den Timer1 nebenbei laufen und in seiner Subrrutine Disable Ich die Interrups und am Ende der Rutine Enable ich sie -- ist das nen Problem?
    Gruß
    MiniMax

Seite 1 von 7 123 ... LetzteLetzte

Berechtigungen

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