- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: Quadcopter Frage wegen Rc Empfänger

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    29.01.2010
    Beiträge
    8
    Anzeige

    Praxistest und DIY Projekte
    Zitat Zitat von goara
    das geht so:

    Code:
    $regfile = "m644def.dat"
    
    $framesize = 32
    
    $swstack = 32
    
    $hwstack = 32
    
    $crystal = 20000000
    
    $baud = 9600
    
    
    
    
    
    ' ----- Empfänger -----
    
    Dim Kanal_nick As Integer
    
    Dim Kanal_roll As Integer
    
    Dim Kanal_yaw As Integer
    
    Dim Kanal_pitch As Integer
    
    Dim Kanal_nick_check(3) As Integer
    
    Dim Kanal_roll_check(3) As Integer
    
    Dim Kanal_yaw_check(3) As Integer
    
    Dim Kanal_pitch_check(3) As Integer
    
    Dim Kanal_nick_init As Integer
    
    Dim Kanal_roll_init As Integer
    
    Dim Kanal_yaw_init As Integer
    
    Dim Kanal_pitch_init As Integer
    
    Dim Puls(8) As Integer
    
    Dim Kanal As Byte
    
    Dim Empfaenger_ok(4) As Byte
    
    
    
    
    
    
    
    
    
    '-----------Interupts----------
    
    On Icp1 Get_empfaenger Nosave                               ' ICP fuer Funke
    
    On Ovf1 Kanal_reset Nosave
    
    
    
    Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
    
    Enable Ovf1
    
    Enable Icp1
    
    Enable Interrupts
    
    
    '...
    'blablablabalbal... codecode
    
    '...
    
    
    
    
    
    '------------Interupts---------------                      ' FUnke am ICP interrup
    
     Get_empfaenger:
    
          push r10
    
          push r11
    
          push r24
    
          push r25
    
          push r26
    
          push r27
    
          in r24,sreg
    
          push r24
    
          Puls(kanal) = Timer1
    
          Timer1 = 40000
    
          Incr Kanal
    
          pop r24
    
          !Out Sreg , R24
    
          pop r27
    
          pop r26
    
          pop r25
    
          pop r24
    
          pop r11
    
          pop r10
    
         Return
    
    
    Kanal_reset:
    
        push r24
    
        in r24,sreg
    
        push r24
    
        Kanal = 1
    
        pop r24
    
        !Out sreg,r24
    
        pop r24
    
       Return
    
    End
    Die Signale sind alle am anfang von dem Signal, das erste nach der langen Pause ist also kanal 1 usw...
    Bild hier  
    [/code]
    Hi Goara,

    Habe dein Code mal in Bascom ausprobiert, aber er funktioniert nicht.
    Summensignal ist am ICP angeschlossen (Empfänger = ACT DSL4top Typ: MK)
    Hier mein Code:
    Code:
    'Einstellungen
    $regfile = "m644pdef.dat"                                   'Atmega 644P
    $crystal = 20000000                                         '20Mhz ext
    $baud = 115200
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    
    'ADC Einstellungen
    Config Adc = Single , Prescaler = Auto , Reference = Aref   'Aref = 3V3
    Start Adc
    'Acc Nullwerte: Z = 611 ; Y = 497 ; X = 511 für ACC-Mode
    
    
    'I2C Bus Einstellungen
    Config Scl = Portc.0                                        'I2C Port SCL
    Config Sda = Portc.1                                        'I2C Port SDA
    I2cstart                                                    'I2C Bus starten
    
    
    'Serialport Einstellungen
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin = Buffered , Size = 254
    Config Serialout = Buffered , Size = 254
    
    
    'PPM Messung
    Dim Kanal_nick As Integer
    
    Dim Kanal_roll As Integer
    
    Dim Kanal_yaw As Integer
    
    Dim Kanal_pitch As Integer
    
    Dim Kanal_nick_check(3) As Integer
    
    Dim Kanal_roll_check(3) As Integer
    
    Dim Kanal_yaw_check(3) As Integer
    
    Dim Kanal_pitch_check(3) As Integer
    
    Dim Kanal_nick_init As Integer
    
    Dim Kanal_roll_init As Integer
    
    Dim Kanal_yaw_init As Integer
    
    Dim Kanal_pitch_init As Integer
    
    Dim Puls(8) As Integer
    
    Dim Kanal As Byte
    
    Dim Empfaenger_ok(4) As Byte
    
    
    On Icp1 Get_empfaenger Nosave                               ' ICP fuer Funke
    
    On Ovf1 Kanal_reset Nosave
    
    
    
    Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
    
    Enable Ovf1
    
    Enable Icp1
    
    
    
    
    'Interrupteinstellungen
    Enable Interrupts                                           'Interrupts einschalten
    
    
    
    Do
    'Mainblablabla
    Loop
    
    '------------Interupts---------------                      ' FUnke am ICP interrup
    
     Get_empfaenger:
    
          push r10
    
          push r11
    
          push r24
    
          push r25
    
          push r26
    
          push r27
    
          in r24,sreg
    
          push r24
    
          Puls(kanal) = Timer1
    
          Timer1 = 40000
    
          Incr Kanal
    
          pop r24
    
          !Out Sreg , R24
    
          pop r27
    
          pop r26
    
          pop r25
    
          pop r24
    
          pop r11
    
          pop r10
    
         Return
    
    
    Kanal_reset:
    
        push r24
    
        in r24,sreg
    
        push r24
    
        Kanal = 1
    
        pop r24
    
        !Out sreg,r24
    
        pop r24
    
       Return
    
    
    
    
    'Ende des Programms#############################################################
    End
    Habe mir die Kanäle mit

    Print Kanal_nick ; " Nick"
    Print Kanal_yaw ; " Yaw"
    Print Kanal_nick_init ; " Nick init"
    Print Kanal ; " Kanal"

    anzeigen lassen. Leider ist alles 0. Bis auf "Kanal" der wechselt.
    Desweiteren habe ich auch versucht, den Timerpreloader auf 55536 anstatt 40000 zu stellen (um auf 4 ms zu kommen). Leider auch ohne erfolg.

    Dann habe ich auch noch diesen Code hier ausprobiert:
    http://www.rn-wissen.de/index.php/RC...nger_auswerten
    und auf meine Werte angepasst (Timer1, Summensignal am INT1, Preloader usw.) auch ohne Erfolg.

    Empfänger funktionier (Am Kanal1 hab ich das Summensignal, Am kanal2 hängt ein Servo)

    Kann mir jemand vll weiter helfen?

    Danke

  2. #22
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Beim Code oben fehlt noch etwas. Bis jetzt wird nur die Fallende Flanke ausgewertet. Es müßte da auch noch was bei der Steigenden Flanke passieren:

    Bei der Steigenden Flanke müßte der Timer auf einen Startwert (z.B. 0 ) gesetzt werden, und dann auf die fallende Flanke umgeschatet werden.
    Bei der Fallenden Flanke = Ende des Pulses, kann man dann die Zeit auslesen und müßte dann auch wieder die steigende Flanke umschalten.

    Im Zweifelsfall sollte man erstman dem Compiler das retten der Register überlassen, auch wenn es langsamer wird. Da ist man dann sicher nicht noch da einen Fehler drin zu haben.

    Wenn man schon den ICP Eingang nutzt, könnte man die Zeit auch gleich aus dem ICP Registern auslesen. Das wird etwas genauer, auch wenn das auslesen aus dem Timer auch ausrechend genau ist.


    Das externe zusammenführen der Signal zu einem Summensignal ist zwar ein Umweg, aber auch nicht so kompliziert. Das könnte man realtiv leicht selber aufbauen mit einer Diode je Kanal und einem Pulldown Widerstand - da ist ja nur eine Oder Verknüpfung.

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    29.01.2010
    Beiträge
    8
    Hi,
    hier im Wiki:
    http://www.rn-wissen.de/index.php/RC...nger_auswerten
    wird doch auch nur die fallende Flanke ausgewertet oder hab ich da irgendo was übersehen?
    Bye

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests