keiner ne Idee?
Hallo Zusammen,
ich habe im Wiki folgendes Gefunden:
Der Code kann so wie ich es sehe ja nur 6 Kanäle aus dem Summensignal Filter?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
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
keiner ne Idee?
Gruß
MiniMax
Im Prinzip ja - nur musst Du diese Änderung an allen anderen Stellen auch vornehmen. Also z.B. Dim Empf(12) as Word, etc., etc.Kann ich jetzt einfach den Zähler von <6 auf <12 erhöhen?
Einiges an dem Code scheint mir seltsam:
Damit wirst Du niemals einen Wert für Empf(6) bekommen.Code:If Channel > 0 And Channel < 6 Then Empf(channel) = Timer0 End If
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
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
...genau, oder < 13. Ich weiß nicht, ob das auf ASM-Ebene einen Unterschied macht.Dann müsste man ja sagen <=6? richtig? also dann für 12 Kanäle auch <=12 ?
Den hab´ ich allerdings nicht vertanden. Macht aber auch nix20ms sind 20ms und die beleiben auch so (außer FASST da sind es 16ms)
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:
Hat eigentlich immer bestens funktioniert...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
Lesezeichen