Che Guevara
04.03.2012, 19:18
Hallo,
erst gestern ist mein selbstgemachtes ATXMega64A3 Testboard fertig geworden. Nun bin ich natürlich wie wild am rumprobieren (geile Sache so ein XMega) :D
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:
$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
Vielen Dank & Gruß
Chris
EDIT:
Hat sich erledigt, ich hatte etwas übersehen; die sweep Einstellung. Hier der funktionierende 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
Aber eine Frage habe ich noch:
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 ;)
$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
Meine Frage von oben steht jedoch noch :D
erst gestern ist mein selbstgemachtes ATXMega64A3 Testboard fertig geworden. Nun bin ich natürlich wie wild am rumprobieren (geile Sache so ein XMega) :D
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:
$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"
Do
'X = Getadc(adca , 1)
Print #1 , Adca_ch1_res 'L
Waitms 500
Loop
End
Vielen Dank & Gruß
Chris
EDIT:
Hat sich erledigt, ich hatte etwas übersehen; die sweep Einstellung. Hier der funktionierende 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
Aber eine Frage habe ich noch:
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 ;)
$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
Meine Frage von oben steht jedoch noch :D