Hallo,
danke, das wars
Ich hatte mir vorher sogar noch ein paar Beispiele angesehen, wo das Flag auch gelöscht wurde, aber irgendwie habe ich das wieder vergessen... Dankeschön!
Jedoch gibts jetzt schon das nächste Problem:
Folgende Zeile
Code:
Config Event_system = Dummy , Mux0 = Porte.0 , Digflt0 = 8 Mux1 = Tcc0_ovf
funktioniert (ohne Komma zwischen Digflt0 = 8 & Mux1 = Tcc0_ovf), diese nicht:
Code:
Config Event_system = Dummy , Mux0 = Porte.0 , Digflt0 = 8 , Mux1 = Tcc0_ovf
Aber ich denke mal, das ist ein Bug?!
Mit der ersten Zeile wird die DMA Channel1 ISR aufgerufen, bei der zweiten Zeile jedoch nicht... Aber damit kann ich Leben, wenn ichs weiß 
Nächstes Problem:
Wenn ich mir in der DMA Channel1 ISR die PWM_Input Variable ausgeben lasse, trägt diese immer den Wert von Timer_Reload_Value... Ich glaube, der Timer läuft noch nicht... Mal sehen
Vielen Dank & Gruß
Chris
EDIT:
1. Ich habe die Register vertauscht!! Das Register, in dem der aktuelle Zählerstand steht, heißt TCC0_CNT.
2. Gerade habe ich gesehen, dass man mit dem Timer auch direkt die PWM Pulsweite messen kann... Somit wird mir der Umweg über den DMA usw... erspart... Trotzdem ein sehr interresantes Kapitel 
EDIT2:
Also: PWM einlesen mit TCE0 CaptureA funktioniert, mit CatpureB jedoch nicht... Weiß jemand Rat?
Das funktioniert:
Code:
$regfile = "xm64a3def.dat"
$crystal = 32000000
$framesize = 100
$hwstack = 100
$swstack = 100
$lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
Config Osc = Disabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
Dim X As Word
Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Open "COM2:" For Binary As #1
Config Porte.0 = Input
Porte_pin0ctrl = &B00_011_010
Config Event_system = Dummy , Mux0 = Porte.0 , Digflt0 = 1
Config Tce0 = Normal , Prescale = 1 , Capturea = Enabled , Event_source = E0 , Event_action = Pwc , Resolution = 16
Config Tcd0 = Pwm , Prescale = 1 , Comparea = Enabled , Resolution = 16
Tcd0_cca = 30000
Enable Interrupts
Config Priority = Static , Vector = Application , Lo = Enabled
Do
Incr X
If X = 65500 Then X = 0
Tcd0_cca = X
Print #1 , Tce0_cca
Loop
End
Das funktioniert nicht:
Code:
$regfile = "xm64a3def.dat"
$crystal = 32000000
$framesize = 100
$hwstack = 100
$swstack = 100
$lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
Config Osc = Disabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
Dim X As Word
Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Open "COM2:" For Binary As #1
Config Porte.1 = Input
Porte_pin1ctrl = &B00_011_010
Config Event_system = Dummy , Mux0 = Porte.1 , Digflt0 = 1
Config Tce0 = Normal , Prescale = 1 , Captureb = Enabled , Event_source = E0 , Event_action = Pwc , Resolution = 16
Config Tcd0 = Pwm , Prescale = 1 , Comparea = Enabled , Resolution = 16
Tcd0_cca = 30000
Enable Interrupts
Config Priority = Static , Vector = Application , Lo = Enabled
Do
Incr X
If X = 65500 Then X = 0
Tcd0_cca = X
Print #1 , Tce0_ccb
Loop
End
Lesezeichen