Hallo,
erst gestern ist mein selbstgemachtes ATXMega64A3 Testboard fertig geworden. Nun bin ich natürlich wie wild am rumprobieren (geile Sache so ein XMega)
Leider gibts auch schon die ersten Probleme:
Ich wollte den ADCA_Channel1 (PINA.1) im Free Running Mode laufen lassen und der DMA sollte dann den 8Bit Wert in das TCC0_CCA Register schreiben. Somit wollte ich mittels eines Potis völlig im Hintergrund eine einstellbare Frequenz erzeugen (Timer im Freq Modus).
Das erzeugen von Frequenzen funktioniert und auch der ADC funktioniert... Jedoch nur im Single-Mode! Im Free Running Mode steht immer nur der Wert 0 im Register (ADCA_CH1_RES).
Gibt es jemanden, der mir bei meinem Problem helfen kann? Die SuFu habe ich bereits benutzt, jedoch nichts brauchbares gefunden. Auch die XMega Samples im Bascom Ordner helfen mir nicht weiter...
Bascom-Version ist die 2.0.7.2 (Full).
Hier noch mein Code:
Vielen Dank & Gruß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 Byte Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM2:" For Binary As #1 'Config Tcc0 = Freq , Prescale = 4 , Comparea = Enabled , Resolution = 8 'Config Adca = Free , Convmode = Unsigned , Resolution = 8bit , Dma = Ch01 , Reference = Arefa , Event_mode = None , Prescaler = 32 , Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = 8 Config Adca = Free , Convmode = Unsigned , Resolution = 8bit , Dma = Off , Reference = Arefa , Event_mode = None , Prescaler = 128 , Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = 8 '8 Config Pina.1 = Input 'Config Dma = Enabled , Doublebuf = Disabled , Cpm = Ch01rr23 'Config Dmach0 = Enabled , Burstlen = 1 , Chanrpt = Enabled , Tci = Lo , Eil = Lo , Singleshot = Enabled , Sar = Burst , Sam = Fixed , Dar = Burst , Dam = Fixed , Trigger = &H11 , Btc = 1 , Repeat = 0 , Sadr = Varptr(adca_ch1_res) , Dadr = Varptr(x) 'tcc0_cca 'Config Dmach1 = Enabled , Burstlen = 2 , Chanrpt = Enabled , Tci = Lo , Eil = Lo , Singleshot = Enabled , Sar = Burst , Sam = Fixed , Dar = Burst , Dam = Inc , Trigger = 1 , Btc = 5 , Repeat = 1 , Sadr = Varptr(tcd0_per) , Dadr = Varptr(empf(1)) 'On Dma_ch0 Dma_ch0_int Config Priority = Static , Vector = Application , Lo = Enabled Enable Interrupts Print #1 , "START" Print Do 'X = Getadc(adca , 1) Print #1 , Adca_ch1_res 'L Waitms 500 Loop End
Chris
EDIT:
Hat sich erledigt, ich hatte etwas übersehen; die sweep Einstellung. Hier der funktionierende Code:
Aber eine Frage habe ich noch: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 Byte Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM2:" For Binary As #1 Config Tcc0 = Freq , Prescale = 4 , Comparea = Enabled , Resolution = 8 Config Adca = Free , Convmode = Unsigned , Resolution = 8bit , Dma = Off , Sweep = Ch01 , Reference = Arefa , Event_mode = None , Prescaler = 128 , Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = 8 Config Pina.1 = Input Config Dma = Enabled , Doublebuf = Disabled , Cpm = Ch01rr23 Config Dmach0 = Enabled , Burstlen = 1 , Chanrpt = Enabled , Tci = Lo , Eil = Lo , Singleshot = Enabled , Sar = Burst , Sam = Fixed , Dar = Burst , Dam = Fixed , Trigger = &H11 , Btc = 1 , Repeat = 0 , Sadr = Varptr(adca_ch1_resl) , Dadr = Varptr(tcc0_cca) Config Priority = Static , Vector = Application , Lo = Enabled Enable Interrupts Print #1 , "Start" Do !NOP Loop End
Das sweep = ch01 bedeutet doch, dass abwechselnd die Kanäle 0 und 1 gemessen werden... Ich möchte aber eigentlich NUR Kanal1 einlesen. Gibt es dafür einen Trick?
EDIT2:
Hier das Ganze noch mit 16Bit Frequenz und 12Bit ADC
Meine Frage von oben steht jedoch nochCode:$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 Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM2:" For Binary As #1 Config Tcc0 = Freq , Prescale = 8 , Comparea = Enabled , Resolution = 16 Config Adca = Free , Convmode = Unsigned , Resolution = 12bit , Dma = Ch01 , Sweep = Ch01 , Reference = Arefa , Event_mode = None , Prescaler = 128 , Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = 8 Config Pina.1 = Input Config Dma = Enabled , Doublebuf = Disabled , Cpm = Ch01rr23 Config Dmach0 = Enabled , Burstlen = 2 , Chanrpt = Enabled , Tci = Lo , Eil = Lo , Singleshot = Enabled , Sar = Burst , Sam = Inc , Dar = Burst , Dam = Inc , Trigger = &H11 , Btc = 2 , Repeat = 0 , Sadr = Varptr(adca_ch1_res) , Dadr = Varptr(tcc0_cca) Config Priority = Static , Vector = Application , Lo = Enabled Enable Interrupts Print #1 , "Start" Do !NOP Loop End![]()







Zitieren
Lesezeichen