Forum: Mikrocontroller und Digitale Elektronik XMega ADC Start Conversion


von Alex B. (Gast)


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.

von heinz (Gast)


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

von Alex B. (Gast)


Lesenswert?

Aha, also bei CTRLA starte ich alle Kanäle gleichzeitig und bei CTRL nur 
einen bestimmten Kanal.

von heinz (Gast)


Lesenswert?

nein bei ctrla kannst du auch jeden kanal einzeln starten aber wie 
gesagt ich verwende nur einzelmessungen und mache dies in den 
channelregistern...

von Alex B. (Gast)


Lesenswert?

OK, jetzt hab ichs verstanden. DANKE

von Alex B. (Gast)


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;
}

von heinz (Gast)


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

von Alex B. (Gast)


Lesenswert?

Stimmt, jetzt läufts, DANKE!

von Alex B. (Gast)


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?

von Alex B. (Gast)


Lesenswert?

Ich glaub ich habs jetzt schon selbst gefunden:

TBD == to be defined

:-(

Die sind ja lustig...

von heinz (Gast)


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

von Alex B. (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Wenn ich den XMega aber nur mit 32kHz laufen lassen, dann ist
>er angeblich nur 11°C warm (kalt)...

...was daran liegen könnte, daß Dein ADC einfach viiiiieeeel zu langsam 
getaktet ist, um noch korrekte Messungen machen zu können. Siehe 
Taktrate des ADC.

von Alex B. (Gast)


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?

von heinz (Gast)


Lesenswert?

weil die interne sample&hold schaltung die spannung nicht so lange 
halten kann...

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Genau. Aber das steht doch im Datenblatt - vielleicht nicht 
wortwörtlich, aber sinngemäß.

BTW: Alex, nichts für ungut, aber willst Du jetzt zu jedem Modul des 
ATXMega, das Du ausprobieren willst, einen eigenen Thread aufmachen? Wo 
bleibt Deine Eigeninitiative?

von Alex B. (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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...

von heinz (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Christoph L. (clauer)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.