- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: 12 Kanal Summensignal

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

    12 Kanal Summensignal

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen,
    ich habe im Wiki folgendes Gefunden:
    Code:
    $baud = 9600
    $crystal = 16000000
    $regfile "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 64
    Config Timer0 = Timer , Prescale = 256 , Capture Edge = Falling , Noise Cancel = 1
    Enable Timer0
    On Timer0 Pausedetected
    Config Int1 = Falling                             'Summensignal an int1 (am Mega32: Port D3), Reaktion auf fallende Flanke
    Enable Interrupts
    Enable Int1                                       'einschalten Int1
    On Int1 Measure                                   'springe zum Interrupt von Timer0
    Dim Empf(6) As Word
    Dim Channel As Byte
    
    Do                                'Main Loop gibt Signale per UART aus
        Print Empf(1) ; " CH1"
        Print Empf(2) ; " CH2"
        Print Empf(3) ; " CH3"
        Print Empf(4) ; " CH4"
        Print Empf(5) ; " CH5"
        Print Empf(6) ; " CH6"
        Print " "
        Waitms 500
    Loop
    
    Measure:                               'Reaktion auf fallende Flanke
    
    If Channel > 0 And Channel < 6 Then
      Empf(channel) = Timer0
    End If
    
    Timer0 = 6                                        'preload für 4ms
    Incr Channel
    Return
    
    Pausedetected:
    Channel = 0
    Return
    
    End
    Der Code kann so wie ich es sehe ja nur 6 Kanäle aus dem Summensignal Filter?

    Da ich den Simprop Gigascan 5 Nehme, möchte ich gerne alle 12 Kanäle auslesen. Kann ich jetzt einfach den Zähler von <6 auf <12 erhöhen?

    Oder kann ich das anders Lösen?
    Gruß
    MiniMax

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    keiner ne Idee?
    Gruß
    MiniMax

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Kann ich jetzt einfach den Zähler von <6 auf <12 erhöhen?
    Im Prinzip ja - nur musst Du diese Änderung an allen anderen Stellen auch vornehmen. Also z.B. Dim Empf(12) as Word, etc., etc.


    Einiges an dem Code scheint mir seltsam:

    Code:
    If Channel > 0 And Channel < 6 Then
      Empf(channel) = Timer0
    End If
    Damit wirst Du niemals einen Wert für Empf(6) bekommen.

    Und außerdem ist es bei meinen Summensignalen immer so, dass die Summe aus High- und Low-Zeiten eines Impulses immer gleich bleibt - es verändert sich nur das Verhältnis von High- zu Low-Zeit. Wenn Du also die Zeiten zwischen zwei fallenden Flanken misst, dürfte immer das gleiche herauskommen, unabhängig von der Dauer des einzelnen High-Impulses.

    Allerdings weiß ich nicht, ob die Summensignale der heutigen mondphasenadjustierten, menügeführten, polyredundanten GHz-Hightech-Anlagen noch genauso aussehen wie bei meiner guten alten Multiplex Cockpit MM

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    20ms sind 20ms und die beleiben auch so (außer FASST da sind es 16ms )
    Wieso bekomme ich nie nen wert für 6? Du meinst weil weniger als 6 richtig?
    Dann müsste man ja sagen <=6? richtig? also dann für 12 Kanäle auch <=12 ?
    Gruß
    MiniMax

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Dann müsste man ja sagen <=6? richtig? also dann für 12 Kanäle auch <=12 ?
    ...genau, oder < 13. Ich weiß nicht, ob das auf ASM-Ebene einen Unterschied macht.

    20ms sind 20ms und die beleiben auch so (außer FASST da sind es 16ms)
    Den hab´ ich allerdings nicht vertanden. Macht aber auch nix

    Ich hab das mit den Summensignalen immer mit einem auf Change konfigurierten Interrupt gemacht. In der ISR wird dann abgefragt, ob die Flanke steigend (Eingang High) oder fallend war. Je nachdem wurde der Timer entweder gestartet, oder aber angehalten, ausgelesen, zurückgesetzt und der Kanalzähler um 1 erhöht. Und bei einem Timer-Überlauf wurde der Kanalzähler auf 1 zurückgesetzt.

    Also etwa so:

    Code:
    Config INTX = change
    On INTX Flanke
    Enable INTX
    Enable Interrupts
    
    Config timer0=timer, prescale = XX
    On timer0 Synchronimpuls
    enable timer0
    
    Dim Impuls(12) as word
    Dim Channel as Byte
    Channel =1
    
    Do
    ...
    ...
    Loop
    
    Flanke:
    If PINX.Y = 1 then
     Start Timer0
    Else
     Stop Timer0
     Impuls(Channel) = Timer0
     Timer0=0
     Channel = Channel + 1
    End if
    Return
    
    Synchronimpuls:
    Stop timer0
    Timer0=0
    Channel = 1
    Return
    Hat eigentlich immer bestens funktioniert...

Berechtigungen

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

12V Akku bauen