- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 1 von 1

Thema: XMega ADC Free Running Mode

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578

    XMega ADC Free Running Mode

    Anzeige

    Praxistest und DIY Projekte
    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:
    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:
    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
    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
    
    
    
    
    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
    Geändert von Che Guevara (04.03.2012 um 20:36 Uhr)

Ähnliche Themen

  1. Stanford's 'Intro to AI' Course, For Free
    Von Günter49 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 05.08.2011, 15:54
  2. ADC im Free-Run Modus
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 24.07.2010, 15:51
  3. AD-Wandlung im Free Run Modus
    Von Ozzy im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 15.09.2007, 08:49
  4. AD-Wandler im "free running" mode??
    Von moin im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 16.07.2007, 11:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen