Forum: Mikrocontroller und Digitale Elektronik DAC im ATmegaxxM1


von Rudolph R. (rudolph)


Lesenswert?

Ich benutze zwar schon länger den ATmega16M1 als kleinen niedlichen CAN 
und/oder LIN Controller, den DAC habe ich bis jetzt aber nicht 
gebraucht.

Jetzt schaue ich mir den DAC gerade im Datenblatt an und finde das schon 
etwas sehr dünn gehalten. Gerade mal fünf Seiten inklusive der 
Beschreibung er zwei Register und rein gar nichts in den "Electrical 
characteristics".

Ich konnte leider auch weder eine Application-Note endecken, noch einen 
anderen Controller mit der gleichen Unit.
Die 90PWM sind scheinbar ähnlich, da steht aber noch weniger im 
Datenblatt und der DAC ist langsamer.

"The output impedance of the driver is around 100Ohm. So the driver is 
able to load a 1nF
capacitance in parallel with a resistor higher than 33K with a time 
constant around 1μs"

Okay, 100 Ohm ist schon angenehm wenig - nur leider ist das die einzige 
Angabe dazu im Datenblatt die ich bisher entdeckt habe.
Der DAC wird ja wohl nicht +/- 50mA treiben können bei 5V.

Und die 1µs sind die einzige Angabe zum Timing.
Das ist wirklich unabhängig vom Takt des Controllers??

Was passiert da von einem Wert auf den anderen?

"The first DAC conversion result after switching reference voltage 
source may be inaccurate, and the user
is advised to discard this result."

Das sieht ja eher aus wie ein Copy-Paste Fehler.

Was kann man dem DAC zumuten?

Die Anwendung die ich hätte wäre die Strombegrenzung von zwei 
Konstantstromquellen RCD-24 einzustellen.
Per Pullup auf 5V um die beim Einschalten/Reset des Controllers auf Null 
zu drehen und dann auf aktuell so gegen 2V einstellen.

Wäre z.B. unlustig wenn der DAC bei einer Wertänderung erstmal auf 0V 
einbricht.
Hinderlich wäre jetzt auch, wenn der gar keinen Strom aufnehmen kann.

Erfahrungen? Meinungen? Habe ich was übersehen? :-)

von Rudolph (Gast)


Lesenswert?

Hmm, nichts?

Okay, ich spiele gerade ein wenig mit dem DAC rum, ist ja mit zwei 
Registern einfach genug soweit. :-)

Na okay, es wird die Referenz vom ADC benutzt, also einschalten muss man 
die dann auch noch, im Falle des ATmega16M1 so:

 ADMUX = (1<<REFS0); // Ref = AVCC
 ADCSRB = (1<<AREFEN); // Kondensator am ARef Pin


Jetzt den DAC aktivieren mit:

 DACON = (1<<DAOE) | (1<<DAEN);

Und einfach mal Werte in das DAC Register schreiben.

Das funktioniert auch erstmal.
Allerdings gibt es Aussreisser beim 8-Bit Überlauf.

Eigentlich dachte ich ja, dass sich der GCC automatisch um die richtige 
Reihenfolge beim Zugriff auf 16 Bit Register kümmert.
Zumindest beim DAC klappt das aber nicht.

Es muss zuerst DACL und dann DACH geschrieben werden, mit

 DAC = wert;

wird aber wohl erst DACH und dann DACL gechrieben.

Also von Hand richtig herum und sieht gut aus.

Und zumindest mit 10k Pullup gegen 5V hat der DAC auf den ersten Blick 
auch kein Problem.

von RES (Gast)


Lesenswert?

Hey,
Here two ASM snippets on how to setup and read the DAC of the ATmegaxxM1 
series AVR micro.

ldi    temp, (1<<DAOE)|(1<<DAEN)  ;enable DAC & output (D2A)
sts    DACON, temp      ;Vref DAC = AVcc (5.00V)

Polling the DAC as fast as you like.
sts    DACL, ZL      ;store 10-bit sample on DAC
sts    DACH, ZH

Bye :)

von RES (Gast)


Lesenswert?

*polling=updating

von RES (Gast)


Lesenswert?

PS. reference voltage DAC is set by the reference voltage ADC.

ldi    temp, 0b01100111  ;ADC7, AVcc + 100n @ Aref
sts    ADMUX, temp    ; left adjusted result

von Rudolph R. (rudolph)


Lesenswert?

RES schrieb:
> update the DAC as fast as you like.

Hmm, no limits mentioned does not always mean there are none. :-)

RES schrieb:
> PS. reference voltage DAC is set by the reference voltage ADC.

As I wrote above. :-)

The problem remains though that while the DAC sort of works the amount 
of information in the datasheet is a bad joke.

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.