Forum: Mikrocontroller und Digitale Elektronik XMEGA 128A3U: DAC durch anderen Pin beeinflusst


von Fabian (Gast)


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

von Stefan (Gast)


Lesenswert?

Bitte Code posten

von Marcel (Gast)


Lesenswert?

Erster Verdacht ohne den Code zu kennen: Du benutzt PB0 als 
Referenzspannung für den DAC.

von Mike R. (thesealion)


Lesenswert?

Zweite Idee: Stat nur den entsprechenden Pin zu setzen, wir der 
komplette Port geändert. :-)

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


Lesenswert?

Fabian schrieb:
> XMEGA 128A3U: DAC durch anderen Pin beeinflusst

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

von Fabian (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, dass es etwas länger gedauert hat.
Ich habe den Code auf die Problemstellen gekürzt und die Dateien dann in 
eine ZIP gepackt.
Ich hoffe das ist so in Ordnung.

Danke schon mal!

von Fabian (Gast)


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

von Marcel (Gast)


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.

von isidor (Gast)


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.

von Fabian (Gast)


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.

von Fabian (Gast)


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!

von Fabian (Gast)


Lesenswert?

Es funktioniert! DAC und LED funktionieren jetzt gemeinsam!

Danke nochmal!

von isidor (Gast)


Lesenswert?

Fabian schrieb:
> Es funktioniert!

Jaaaa..... die Wunder der Technik ...... diese Mikrokontroller
haben doch etwas Esoterisches .....

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


Lesenswert?

isidor schrieb:
> diese Mikrokontroller
> haben doch etwas Esoterisches

Ja! Manche Leute haben sogar Angst, Mikrocontroller in Schaltungen zu 
benutzen, an denen schon mal eine höhere Spannung hängt. Weil wenn der 
Controller sich mal verhaspelt, dann kann es ganz schön blitzen! Hat man 
mir erklärt....

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.