www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 14Bit über SPi an DAC schicken


Autor: Ron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich sitze gerade vor folgendem Problem:

Ich habe einen Fujitsu-Controller (MB96340).Von einem Sensor lese ich 
über I2C einen 12Bit Wert in den Controller ein,der als Integer 
gespeichtert wird.
Diesen Wert möchte ich nun über SPI (USART des Controllers als SPI 
genutzt) an den DA-Wandler DAC7612 schicken.Die SPI-Kommunikation ist in 
Hardware realisiert womit 8Bit Werte per write-Befehl gesendet werden.

An den DAC können 14Bit-Werte geschickt werden,wobei die Bits 13 und 12 
die interne Adresse des DAC darstellen und die restlichen 12Bit den 
Wert,den ich über I2C eingelesen habe (MSB first).

Meine Frage ist,wie ich das nun anstellen kann,dass nur 14Bit und keine 
kompletten 16Bit an den DAC gesendet werden?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder "zu Fuß" über Bit-toggeln anstelle der UART Funktionalität.
Oder die letzten beiden Bits als "inaktiv" wie der Ruhepegel der Tx 
Leitung und einfach probieren ob der Empfänger das so frisst.

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Üblicherweise werden in einem Schieberegister nur die letzten Bits 
gehalten, alles was davor reingeschoben wurde, ist wurscht. Also kann 
man hier auch 16 Bit reinschieben, wobei die beiden ersten egal sind.

Sollte aber auch irgendwo im Datenblatt stehen.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schick einfach 2 mal 8 Bit hintereinander ohne den /CS dazwischen 
abzuschalten.
Der 7612 kann das ab, mach ich schon seit vielen Jahren so.

Autor: Ron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank erstmal für die Antworten.

@ Dieter Werner:

Ich hab 2 mal 8Bit mit einem write_SPI()-Befehl geschickt.Das ganze 
scheint auch soweit zu funktionieren.
Den CS zieh ich wie im Datenblatt beschrieben auf low und nach den 
Datentransfers wieder auf high.

Was mich gerade nur wundert: Im ersten Byte das ich sende gebe ich die 
Adresse 10 (A1:1   A0:0) an,womit die Daten ja eigentlich in DAC A 
gelegt werden sollen.Trotzdem treten in DAC B irgendwelche schwankenden 
Werte auf.

Auch im DAC A treten schwankende Werte auf,d.h. mein erwarteter Wert 
steht wird nicht permanent am Analogausgang A ausgegeben.

Jemand eine Idee woran das liegen kann?

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.