Forum: Mikrocontroller und Digitale Elektronik Atmega128 und 16 bit D/A converter


von Roland (Gast)


Lesenswert?

Hallo,

ich bin Anfänger in Sache Mikrocontroller usw.

Ich soll einen modulator kontrollieren und ich benötige dafür 2 DC 
Spannungen. Die will ich mit dem mikrocontroller Atmega128 und einem 
16-bit D/A Wandler erzeugen, der ein parallel port und eine schaltzeit 
von 500ns hat (DAC8822 von Texas Instruments z.B.)

Die zu erzeugenden Spannungen sollen eine Resolution von 16-bit haben. 
Aber der AVR hat nur 8-bit ports. Meine Frage ist dann:

Kann ich aus zwei 8-bit ports des Mikrocontrollers ein 16-bit lang code 
direkt auf dem D/A Wandler schreiben? Die bits aus port A z.B wären die 
ersten 8 bits von meinem Signal und die bits aus port B die restlichen 8 
bits.

Mit "direkt" meine ich, geht das ohne Bauteil dazwischen?

Vielen Dank!

Roland

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Im Prinzip geht das ohne zusätzliche Bauteile (sofern D/A-Wandler und 
Mega128 mit denselben Signapegeln arbeiten), es kann aber zu Problemen 
kommen.

Angenommen, der D/A-Wandler gibt ohne weitere Hinweise direkt den an 
seinen 16 Eingangsleitungen liegenden Wert als Spannung aus, dann wird 
die Tatsache, daß der Mega128 seine Ports nur nacheinander beschreiben 
kann (das ist ein 8-Bit-Prozessor, der pro Instruktion nur jeweils 
8-Bit-Daten in I/O-Register schreiben kann, zu undefinierten Zuständen 
oder Spannungsschwankungen führen.

Angenommen, der D/A-Wandler gibt den Wert 0x1234 aus (0x12 an PortA, 
0x34 an PortB) und soll auf den Wert 0x5678 umgeschaltet werden.

PortA mit 0x56 beschreiben -> Wandler gibt 0x5634 aus
PortB mit 0x78 beschreiben -> Wandler gibt 0x5678 aus

Der Zwischenschritt dauert zwar nicht lange, aber er ist vorhanden.

Besser ist hier die Verwendung von sog. Latches, die ihren (16-Bit-) 
Ausgangswert auf einen Schlag an den D/A-Wandler übergeben ... oder die 
Verwendung eines 16-Bit-Wandlers mit entsprechen eingebauter Logik.

Und das dürfte die Lösung sein; warum einen D/A-Wandler mit 
verschwenderischem Parallelinterface verwenden, wenns doch auch seriell 
(per SPI oder I²C) geht?

von Michael U. (Gast)


Lesenswert?

Hallo,

der DAC8822 hat wohl ein Latch an den Eingängen und kann den Kram dann 
im Stück übernehmen.

Gruß aus Berlin
Michael

von Christian (Guest) (Gast)


Lesenswert?

500 nsec, DAU max :

500 nsec = "2 MHz"

1 Byte ausgeben  = 1 Befehl (out)
4 Byte ausgeben = 2x 16 Bit = 4 Befehl


Falls er 16MHz macht, bedeutet dies:

500nsec/8  pro max. Takt  des DAU
   4x "out" nur um ein Byte zu port zubringen


=> nimm ggf. ARM, falls der DAU bis hierhin verwendet
wird:
   Reserve

von Michael U. (Gast)


Lesenswert?

Hallo,

>Ich soll einen modulator kontrollieren

naja, falls er 16Bit Stereo mit z.B. 48kHz Samplerate ausgeben will, 
sind das knapp 200000 Byte/s. Wenn er eine dazu Flash-Tabellen ausliest, 
sollte das kein unlösbares Problem sein.

Wenn das Ding nichts weiter machen soll, warum nicht?

Gruß aus Berlin
Michael

von Christian (Guest) (Gast)


Lesenswert?

Wenn da nicht noch s/h dazwischen kommt, etc.

ich wollte nur auf ein Limit hinweisen - not more


bei 48 kHz Samplerate
ich nehme jetzt mal 50 kS/sek.  wegen einfacher rechnen:

2 kanale => 2x
16 Bit => 2x
=> 4 Byte
ggf. s/h Info => +1 Byte

=> 5 byte, macht min. 5 Befehle  (wenn nur out)

50 kS = 0,02 msec  = 20 nsec für 5 Befehl (nur out)


Wieviel Befehle kann ein AVR in der Zeit abarb. ?
8 MIPS, if spartyp (max):

8 MIPS => 0,125 nsec je Befehl


Resumee:
    160 Befehl = 20 nsec
      5 davon für out
ein bißchen für-s Berechnen oder laden

Ich würde dann mal sagen:
  Schrieriger ist das layout des DAUs

von Ale (Gast)


Lesenswert?

Sind nicht nsec (nanosekunden) sondern microsekunden :-)

von Roland (Gast)


Lesenswert?

Hi,

"der DAC8822 hat wohl ein Latch an den Eingängen und kann den Kram dann
im Stück übernehmen."

Unabhängig davon, wie schnell das System sein soll, kann ich also die 2 
Hälfte von meiner 16-bit Zahl auf den D/A Umsetzer gleichzeitig 
schreiben, wenn ich z.B. die 8-bit Zahlen aus einer Look-up Tabelle. 
Richtig?

Vielen Dank,

Roland

von Michael U. (Gast)


Lesenswert?

Hallo,

schau Dir das Datenblatt des DAC an, studiere die Funktion der 
Steuerleitungen des DAC, suche Dir die für Dich günstigste Variante raus 
und programmiere los...

Manchmal verstehe ich nicht, warum andere die Datenblätter für ICs lesen 
sollen, die  jemand benutzen will.
Deine Fragen deuten zumindest an, daß Du noch nicht hineingeschaut hast.

Man kommt ohnehin nicht drumrum, sich mit Datenblättern 
auseinanderzusetzen, wenn man µC programmieren will.

Gruß aus Berlin
Michael

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.