Hallo zusammen,
ich lese über das Event System des Atxmega32a4 den Wert eines RC Kanals ein. Über einen Timer Compare Output steuere ich 1:1 ein Servo an. Das funkioniert prima. Jetzt würde ich aber gerne eine Art nachlaufen des Servos realisieren. Wenn ich den Steuerknüppel auf unterster Stellung habe, bekomme ich einen Wert von 4000, bei Mitte 6000 und bei Maximum 8000. Wenn ich jetzt zügig von unterster auf die oberste Stellung gehe, dann soll das Servo merklich "langsamer" bis zur obersten Stellung nachlaufen. Ich hoffe man kann verstehen was ich meine
Wie würdet Ihr das realisieren ? Ich steh aufm Schlauch und finde keinen Ansatz.
Gruß Kay
PS: Hier mein Code:
Code:'### Chip ### $regfile = "xm32a4def.dat" $crystal = 32000000 '32MHz $hwstack = 64 $swstack = 40 $framesize = 100 '### Xmega Clock Settings ### Config Osc = Disabled , 32mhzosc = Enabled '32MHz Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'CPU Clock = 32MHz '### Com Port Settings ### Config Com2 = 19200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM2:" For Binary As #1 '### Config LED ### Config Portb.0 = Output Led_1 Alias Portb.0 '### Config Servo Out ### Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Tcc0 = Pwm , Prescale = 8 , Comparea = Enabled , Compareb = Enabled , Comparec = Enabled , Compared = Enabled , Resolution = 16 Tcc0_per = 65535 'Set Period = FFFF = 65535 --> 65535/4MHz = 16.38mSec '### Interrupt Prio ### Config Priority = Static , Vector = Application , Hi = Enabled Enable Interrupts '### Dims ### Dim Temp1_rc As Word Dim Temp2_rc As Word Dim Temp3_rc As Word Dim Temp4_rc As Word Dim Kca As Bit Dim Kcb As Bit Dim Kcc As Bit Dim Kcd As Bit '### Config Inputs ### Config Pind.0 = Input Config Pind.1 = Input Config Pind.2 = Input Config Pind.3 = Input Portd_pin0ctrl = &H00 Portd_pin1ctrl = &H00 Portd_pin2ctrl = &H00 Portd_pin3ctrl = &H00 '### Timer ### Tcd0_per = &H7FFF Tcd0_ctrla = &B0000_0100 ' Clock / 8 Tcd0_ctrlb = &B1111_0000 ' CCxEN Enabled Tcd0_ctrld = &B1100_1000 '### Event Channels ### Evsys_ch0mux = &B0110_1000 ' Mux Portd.0 Evsys_ch1mux = &B0110_1001 ' Mux Portd.1 Evsys_ch2mux = &B0110_1010 ' Mux Portd.2 Evsys_ch3mux = &B0110_1011 ' Mux Portd.3 '### Clear Interrupt ### Temp1_rc = Tcd0_cca Temp2_rc = Tcd0_ccb Temp3_rc = Tcd0_ccc Temp4_rc = Tcd0_ccd '### Enable all interrupts ### Enable Tcd0_cca , Hi On Tcd0_cca Capture_a Enable Tcd0_ccb , Hi On Tcd0_ccb Capture_b Enable Tcd0_ccc , Hi On Tcd0_ccc Capture_c Enable Tcd0_ccd , Hi On Tcd0_ccd Capture_d '### Main ### Main: Tcc0_cca = Temp1_rc Tcc0_ccb = Temp2_rc Tcc0_ccc = Temp3_rc Tcc0_ccd = Temp4_rc Goto Main '******************************************************************************* '### ISR ####################################################################### '******************************************************************************* Capture_a: Temp1_rc = Tcd0_cca Return Capture_b: Temp2_rc = Tcd0_ccb Return Capture_c: Temp3_rc = Tcd0_ccc Return Capture_d: Temp4_rc = Tcd0_ccd Return







Zitieren

Lesezeichen