XMEGA 128A3U: DAC durch anderen Pin beeinflusst

Gast #3976514
Lesenswert?
• ▲
▼
Hallo zusammen,

ich bin gerade dabei einen XMEGA 128A3U zu programmieren und dabei bin 
ich auf ein Problem mit dem DAC gestoßen.

Ich verwende den DAC an Pin PB3 um mir eine Spannung auszugeben.

An den Pins PB0 und PB1 hängt jeweils eine LED, die leuchten, wenn ich 
den Pin auf LOW setze.

DAC und LEDs funktionieren unabhängig voneinander wunderbar. Der DAC 
konvertiert und die LEDs leuchten.

Wenn ich aber den DAC und die LED an Pin PB0 verwende macht der DAC 
Probleme.
Sobald ich den LED Pin als Ausgang schalte und die LED anmache (PB0 = 
low), kommt am DAC keine Spannung mehr (wie wenn ich dem DAC eine 0 zum 
Konvertieren gebe).
Wenn ich dann den LED Ausgang auf High schalte, damit die LED aus ist, 
gibt mir der DAC Pin eine Spannung (entweder ~VCC oder etwa ~0,5VCC, da 
bin ich mir nicht mehr sicher und die Platine hab ich gerade nicht zur 
Hand).

Wenn ich den Pin PB0 in Ruhe lasse funktioniert alles ganz gut. Ich kann 
auch die LED an PB1 verwenden, ohne dass es Probleme gibt. Beide LEDs 
werden identisch angesteuert.
Mein Durchgangsprüfer sagt mir, dass die Pins PB0 und PB3 nicht 
verbunden sind.

Hat vielleicht irgendjemand eine Ahnung was das Problem sein könnte oder 
wie ich es zumindest weiter eingrenzen könnte?

Vielen Dank
Fabian
Gast #3977175
Lesenswert?
• ▲
▼
Referenzspannung ist AVCC, sofern ich das richtig programmiert habe.

Knut Ballhause schrieb:
> Das ist ein nicht haltbares Gerücht. Es liegt am Code! Die A3Us, die ich
> kenne, haben das Verhalten nicht.

Und ich wollte nicht sagen, dass das die XMEGA immer so machen. Sondern 
nur, dass es meiner zur Zeit macht. Und ich bin davon ausgegangen, dass 
es an mir liegt ;)
Gast #3977327
Lesenswert?
• ▲
▼
Fabian schrieb:
> Referenzspannung ist AVCC, sofern ich das richtig programmiert habe.

Hast du nicht. Zum einen ist bei
1
  DACB.CTRLC = DAC_REFSEL_gm | 0x01;
das DAC_REFSEL_gm falsch benutzt. Alles was auf _gm (group mask) endet 
ist dazu gedacht, um eine Bit-Gruppe zu löschen. Was da brauchst sollte 
was mit _gc (group configuration) sein.

Zum anderen überschreibst du das direkt danach mit
1
  DACB.CTRLC = ~(DAC_LEFTADJ_bm);

Damit benutzt du zum einen AREFB (PB0) und setzt zum anderen einen 
Haufen reservierter Bits auf 1.
Gast #3977344
Lesenswert?
• ▲
▼
Ich stelle mir vor (ich kann es nur vermuten) dass das Konfigurieren
eines Ports deinen DAC stören kann.

Beim Setzen oder Löschen einer LED konfigurierst du jedes Mal
den Port neu. Warum? Ist für mich ungewöhnlich und unsinnig.
Deine Schaltung verändert sich ja nicht dauernd dynamisch
sodass zu "nachprogrmmieren" müsstest.

Dann solltest du auch mal zeigen wie du die LEDs an den
Controller angeschlossen hast.
Gast #3977361
Lesenswert?
• ▲
▼
Vielen Dank!
Dann war deine Vermutung ja richtig!
Leider bin ich noch ein Neuling und die DAC Konfiguration hab ich mir 
aus einem Tutorial abgeschaut. Anscheinend nicht aus dem besten.

Ich hab mir das Datenblatt nochmal angesehen, hätte ich vielleicht 
vorher nochmal gründlich machen soll.

Wenn ich
1
DACB.CTRLC = 0x08;

schreibe, müsste es passen oder?

Dann setzte ich DAC_REFSEL auf 01, DAC_LEFTADJ und den Rest auf 0.
Gast #3977372
Lesenswert?
• ▲
▼
isidor schrieb:
> Beim Setzen oder Löschen einer LED konfigurierst du jedes Mal
> den Port neu

Ja das ist unsinnig, da hast du recht. Das ganze habe ich leider etwas 
unsauber programmiert, da ich noch nicht so ganz fit bin.

Aber ich denke es liegt wirklich daran, dass ich das DACB.CTRL Register 
falsch gesetzt habe.

Die LED hängt volgendermaßen am MC:

VCC---R---LED---MC

Ich kann das mit dem Register leider erst morgen testen. Ich berichte 
dann, ob es geklappt hat.

Schon mal allen DANKE!

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