XMega ADC Start Conversion

Gast #997621
Lesenswert?

Hallo,

ich versuche gerade den ADC meines XMega128A1 (STK600, GNU C, AVR 
Studio4) zum laufen zu bringen.
Jetzt gibts es nur laut Datenblatt scheinbar zwei Register mit denen man 
den ADC starten kann:

1. CTRLA - ADC Control Register A
Dort kann man mit Bit 2 - 5 eine Conversion starten

und

2. CTRL - ADC Channel Control Register
Dort kann man mit Bit 7 eine Conversion starten

Kann mir vielleicht jemand den Unterschied erklären bzw. wofür die 
beiden Möglichkeiten sind. Ich verstehe das im Datenblatt nämlich nicht 
so ganz.

Danke schon mal.
Gast #997633
Lesenswert?

Im CTRLA kannst du eben die vier kanäle starten vll für den sweep 
angenehmer hab bis jetz nru single conversions gemacht...

Im CTRL vom jeweiligen channel nur diesen Channel.


Wieso? naja das fragt man sich bei einigen dingen beim xmega wird sich 
bestimmt irgendwann ergeben
Gast #997697
Lesenswert?

Scheinbar scheint mein ADC jetzt zu laufen. Der ADC soll nun noch eine 
ISR starten, in der ich den erhaltenen Wert auf meine LEDS ausgeben. 
Doch leider startet die ISR nicht. Das InterruptFlag des ADC wird aber 
laut Debugger gesetzt. Was mache ich falsch? Hier der Code:


...
        //ADC A initialisieren
  ADCA.CTRLA = 0x01;      //aktivieren
  ADCA.CTRLB = 0x04;      //unsigned mode und 8Bit
  ADCA.REFCTRL = 0x00;    //internal 1.0V Reference
  ADCA.PRESCALER = 0x00;    //Prescaler auf 4
  ADCA.CH0.CTRL = 0x00;    //inpurt mode internal
  ADCA.CH0.MUXCTRL = 0x00;  //muxctrl auf temperature reference

  //Interrupts freigeben
  sei();
  PMIC.CTRL=0x07;
...

//ISR durch Counter 0
ISR(TCC0_OVF_vect)
{
  ADCA.CH0.CTRL = 0x80;           //ADCA Channel 0 starten
}

//ISR nach ausgeführter ADCA Wandlung
ISR (ADCA_CH0_vect)
{
  temp = ADCA_CH0RES;
  PORTA.OUT = temp;
}
Gast #997708
Lesenswert?

Du hast keinen Interrupt Level für den Channel eingestellt und dazu noch 
nicht wann ein Interrupt ausgelöst werden soll

das kannst du im INTCTRL register des Kanals machen

Merke: Xmega keine Interrupts ohne definiertes Interrupt level des 
Auslösers
Gast #997772
Lesenswert?

Als Input für den ADC benutze ich aktuell die interne Temperature 
Reference, welche die Temperatur des XMegas angibt. Laut Datenblatt 
lässt sich diese Temperatur jetzt anhand des ADC Ausgabewertes wie folgt 
berechnen:

T = TBD ⋅ ADCRESULT + TBD

ADCRESULT ist der Ausgabewert des ADC, das ist klar.

Aber was ist TBD?
Gast #997791
Lesenswert?

naja die jungs von atmel brauchen halt noch ;)

außerdem der Controller ist ja noch nichtmal auf dem Markt also was will 
man erwarten.

Warscheinlich sind die Ergebnisse eh nicht so besonders genau.

lass dir doch die Rohdaten über die LEDs anzeigen und schau ob die die 
Messungen wenigstens einigermaßen stabil sind...

btw: 8-Bit ist schätzen :P
Gast #997841
Lesenswert?

Das 8-Bit nicht sonderlich genau ist, ist klar. Aber ich wollte den ADC 
auch lediglich mal ausprobieren.

Die Werte die dort rauskommen sind schon etwas seltsam. Wenn ich den 
XMega mit 32Mhz laufen lasse, dann ist er angeblich 31°C warm. Könnte 
stimmen. Wenn ich den XMega aber nur mit 32kHz laufen lassen, dann ist 
er angeblich nur 11°C warm (kalt), was bei ca. 20°C Umgebungstemperatur 
schon etwas unwahrscheinlich ist.
Gast #998736
Lesenswert?

Mir leuchtet aber nicht ein, in wie fern die Taktrate des ADC mit dessen 
Genauigkeit zusammenhängt. Bei niedrigem Systemtakt dauert eine 
Umwandlung zwar sicher relativ lange, aber warum sinkt dadurch die 
Genauigkeit?
Gast #998869
Lesenswert?

@Travel Rec

Eigeninitiative ist da, aber wenn man noch Anfänger ist, freut man sich 
über jeden Tip von etwas erfahreneren Leuten. Außerdem habe ich leider 
nicht ewig Zeit mich in diese Thematik einzuarbeiten.

Und mal davon ganz abgesehen zwinge ich ja auch niemanden auf meine 
Fragen zu antworten ;-)
Und ich glaube auch, das diese Threads auch für andere Anfänger und für 
Leute die sich mit den neuen XMegas beschäftigen wollen, interessant 
sein könnten.
(Firma: TravelRec.) Persönliche Seite #998915
Lesenswert?

Da stimme ich Dir grundlegend zu: Anfänger waren und sind wir alle mal. 
Aber wenn man sich an neue Dinge herantraut, geht man nicht gleich 
online und fragt, wie mach ich denn dies und wo finde ich das und warum 
geht das nicht... Das zeugt nämlich nicht gerade von Entdeckungsgeist 
und Spaß an der Materie. Wenn man Schritt für Schritt an die Sache heran 
geht und genau befolgt, was in den Datenblättern steht, dann kommt man 
auch zum Ziel. Das kann auch mal etwas dauern, aber dafür hat man´s 
hinterher auch begriffen.

>Außerdem habe ich leider
>nicht ewig Zeit mich in diese Thematik einzuarbeiten.

Nun, das ist schade. Aber was bedeutet schon "ewig"?

>Und ich glaube auch, das diese Threads auch für andere Anfänger und für
>Leute die sich mit den neuen XMegas beschäftigen wollen, interessant
>sein könnten.

Ja. Bestimmt. Aber noch interessanter sind Threads, in denen bereits 
fundiertes Wissen weitergegeben wird, oder aber ein Artikel oder 
Tutorial. Das liest sich auch interessanter, als ein ständiges 
Frage-Antwort-Spiel, zumal wenn immer dieselben Fehler gemacht werden...
Gast #999246
Lesenswert?

@Travelrec: Ich stimm dir da großteils schon aber das problem mit den 
xmegas ist zur zeit eben das im datenblatt einige informationen die 
ziemlich hiflreich wären noch nicht vorhanden sind und man ziemlich viel 
zeit braucht um weiter zu kommen wenn man nicht 100%ig in der Materie 
drin steckt...
Beispielsweise gibt es ein Kalibrierungsregister für den ADC und das 
einzige was sinngemäß darüber im aktuellen datenblatt steht ist dass es 
für die kalibrierung verwendet werden kann

aber stimmt schon was du sagst wenn was nicht klappt sollte man eben 
register für register der peripherie die zum einsatz kommen soll 
durchgehen und jedes bit überprüfen und wenn man dann den fehler findet 
lernt man umso einiges mehr als durch hingeworfene antworten

jedoch stelle ich bei bestimmten teilen die ich in meinen ersten 
Versuchen mti dem Xmega gemacht habe gerne zur Verfügung es bleibt dann 
dem threadersteller überlassen ob er sich selber versuchen will oder es 
eben satt hat

Das Problem von Alex ist eben dass er als Anfänger gleich einen so 
komplexen Prozessor an die Hand bekommen hat. Ist schon Hammer das Teil 
braucht aber erst einige Grundlagenarbeit bis man ihn wirklich so 
einsetzen kann wie es möglich ist.
(Firma: TravelRec.) Persönliche Seite #999264
Lesenswert?

>>...zur zeit eben das im datenblatt einige informationen die
>>ziemlich hiflreich wären noch nicht vorhanden sind...

Dafür gibt es das Manual und da steht fast alles drin. Was dort nicht 
drin steht, steht in den AppNotes auf www.atmel.com. Was dort nicht 
steht, kann man in den Datenblättern der ATMEGAs nachlesen, in denen 
auch viele Codebeispiele stehen. Viele Daten der im XMega verwendeten 
Technik kann man von den klassischen AVRs ableiten.

>Beispielsweise gibt es ein Kalibrierungsregister für den ADC und das
>einzige was sinngemäß darüber im aktuellen datenblatt steht ist dass es
>für die kalibrierung verwendet werden kann

Das stimmt. Ist zum Kalibrieren der Differenzmessung mit Gain. Single 
Ended und ohne Gain muß man nicht kalibrieren. Da gibt es höchstens 
einen kleinen Offset von 1...2 LSB.

>Das Problem von Alex ist eben dass er als Anfänger gleich einen so
>komplexen Prozessor an die Hand bekommen hat. Ist schon Hammer das Teil
>braucht aber erst einige Grundlagenarbeit bis man ihn wirklich so
>einsetzen kann wie es möglich ist.

Da hat er mit dem XMega aber noch Glück gehabt. Der ist logisch auf 
jeden Fall zusammenhängender und verständlicher aufgebaut, als manche 
der älteren Megas. Die korrespondierenden Register stehen endlich 
blockorientiert an einer Stelle zusammen und nicht wild über den 
gesamten I/O und RAM-Bereich verstreut.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren