mikrocontroller.net

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


Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind nicht nsec (nanosekunden) sondern microsekunden :-)

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.