Forum: Mikrocontroller und Digitale Elektronik mehrere DAC über ein uC


von Joey T. (afgh)


Lesenswert?

Servus Leute,

Ich habe zwar theoretisches Wissen durch Lesen erlangt, doch die 
praktische Umsetzung fehlt mir.

Ich möchte nacheinander mehrere DAC(AD5062) über ein uC steuern. Also 
prinzipiel ein DAC auswählen, wert einstellen und dann weiter zum 
anderen. Als uC habe ich STM32 nucleo. SPI1-MOSI wird an den 
Datenleitungen von allen DAC angelegt. DAC hat ein SYNC(laut datenblatt 
seriell) Eingang, womit man Datenübertragung durch das logische 0 
aktivieren kann. Der uC hat eine I2C Datenleitung. Theoretisch wird 
gesagt, dass man viele Geräte an einem I2C anschließen kann, weil man 
den Slave mit einer Adresse ansprechen kann. Kann ich überhaupt mehr als 
2 AD5062 über ein I2C auswählen bzw. zum Datenübertragung aktivieren? 
Aus dem Datenblatt konnte ich nicht viel herauslesen. Liegt an mangelnde 
Erfahrung.

Ich hoffe ich konnte meine Frage gut rüberbringen.

Schöne Grüße

afgh

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Der AD5062 ist SPI und nicht I2C.
Die Datenübernahme erfolgt mit dem jeweiligen /SYNC.

von Axel S. (a-za-z0-9)


Lesenswert?

Joey T. schrieb:

> Ich möchte nacheinander mehrere DAC(AD5062) über ein uC steuern. Also
> prinzipiel ein DAC auswählen, wert einstellen und dann weiter zum
> anderen. Als uC habe ich STM32 nucleo.

Wie PeDa schon sagte, hat dieser DAC ein SPI Interface. Das ist etwas 
fundamental anderes als I²C.

Die Ansteuerung von N solcher DAC braucht N+2 Pins an deinem µC. Und 
zwar brauchst du N Pins, um die SYNC Anschlüsse der DAC zu bedienen (in 
SPI Terminologie heißt das Signal üblicherweise SS="slave select" und 
nicht SYNC). Die zwei weiteren Pins sind SCLK und MOSI von einem SPI 
Interface deines µC. Die gehen an SCLK und DIN deiner DAC (alle 
parallel).

Hier das Bild dazu: 
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface#Independent_slave_configuration

(dein DAC hat kein MISO, diese Leitung entfällt also)

Zur Datenausgabe setzt du SYNC von genau einem DAC auf L, sendest deine 
3 Bytes über das SPI Interface und setzt SYNC anschließend wieder auf H. 
Und das Reihe nach für alle DAC.

von Olaf (Gast)


Lesenswert?

Es sei erwähnt das es natürlich auch DACs
mit mehren Ausgängen gibt...

Olaf

von Joachim B. (jar)


Lesenswert?

Axel S. schrieb:
> Die Ansteuerung von N solcher DAC braucht N+2 Pins an deinem µC.

2 Pins takten CLK und DATA raus

ja aber statt N Pins für N DAC geht auch I2C Port PCF8574,
https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf

da reicht ein PCF für 7 DAC 3 Bit

000 kein DAC gewählt
001 erster DAC gewählt
...
111 siebenter DAC gewählt

mit ebenfalls 3 Adressmöglichkeiten sind 8 PCF möglich.

von Au weia (Gast)


Lesenswert?

Joachim B. schrieb:
> ja aber statt N Pins für N DAC geht auch I2C Port PCF8574,
> https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
>
> da reicht ein PCF für 7 DAC 3 Bit
>
> 000 kein DAC gewählt
> 001 erster DAC gewählt
> ...
> 111 siebenter DAC gewählt

Sooooo ein Käse.

Der PCF8574 ist ein 8-Bit Port, kein 1-aus-8-Decoder.

von Gustl B. (-gb-)


Lesenswert?

Dann nimm eben ein normales Schieberegister mit Latch für das 
Chipselect. Das benötigt 3 IOs, dazu noch SCLK und Daten. ALso 5 IOs für 
8 DACs ... und da man die Schieberegister kaskadieren kann gehen mit 5 
IOs auch deutlich mehr DACs. Nur das Timing wird etwas fies, kann man 
aber alles schön machen.

von Joey T. (afgh)


Lesenswert?

Axel S. schrieb:
> Joey T. schrieb:

> Wie PeDa schon sagte, hat dieser DAC ein SPI Interface. Das ist etwas
> fundamental anderes als I²C.

Ja ich wollte nur den SYNC(ich nenne es weiterhin SYNC, da im Datenblatt 
so bezeichent wird), auf logisch 1 und 0 reagiert, über I2C steuern. 
Kann sein das ich hier etwas nicht verstanden habe und das gar nicht 
möglich ist. Jedoch habe ich einige beispiele gesehen, wo bei 2 DACs SCL 
an dem einen SYNC und SDA an dem anderen SYNC angelegt war.


> Zur Datenausgabe setzt du SYNC von genau einem DAC auf L, sendest deine
> 3 Bytes über das SPI Interface und setzt SYNC anschließend wieder auf H.
> Und das Reihe nach für alle DAC.

Ja genau das wäre auch meine vorgehensweise gewesen, meine Frage war 
nicht der Ablauf, denn das habe ich nachvollziehen können, sondern wie 
ich das umzusetzen habe(der kompakteste Weg).

> ja aber statt N Pins für N DAC geht auch I2C Port PCF8574,
> https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf

Das scheint mir das zu sein wonach ich gesucht habe, jedoch habe ich 
wieder das Problem mit dem steuern von PCF-Eingängen. Wie ich es gesehen 
habe, hat stm32 F103(glaub ich) 4 Leitungen dafür...2 davon benutze ich 
um ein mux zu steuern, bleiben also nur 2 übrig :/

von Christian W. (orikson)


Lesenswert?

Joey T. schrieb:
> Ja ich wollte nur den SYNC(ich nenne es weiterhin SYNC, da im Datenblatt
> so bezeichent wird), auf logisch 1 und 0 reagiert, über I2C steuern.
> Kann sein das ich hier etwas nicht verstanden habe und das gar nicht
> möglich ist. Jedoch habe ich einige beispiele gesehen, wo bei 2 DACs SCL
> an dem einen SYNC und SDA an dem anderen SYNC angelegt war.

Was genau meinst du damit?
- Willst du eine I2C GPIO-Expander verwenden? Das wäre ein eigener IC, 
den du  vom STM32 per I2C ansprichst und der dann wieder eigene "dumme" 
Ein- und Ausgänge bereitstellt
- Willst du einen Pin vom STM32 verwenden, der theoretisch auch I2C 
ausgeben könnte? In dem Fall konfigurierst du den Pin einfach als GPIO 
um, mehr brauchst und willst du ja gar nicht. Du brauchst aber natürlich 
noch mehr Pins am STM32 als normale Ausgänge. Im einfachsten Fall pro 
SPI "Teilnehmer" einen Pin als Slave/Chip Select

von Joachim B. (jar)


Lesenswert?

Au weia schrieb:
> Sooooo ein Käse.
>
> Der PCF8574 ist ein 8-Bit Port, kein 1-aus-8-Decoder.

nur halber Käse
man kann ihn trotzdem nutzen sogar mit 1-aus-8-Decoder oder 1-aus-16 
Decoder.

OK du hast einen Fehler gefunden gratuliere, sonst noch Tips für den TO?

von Joey T. (afgh)


Lesenswert?

Christian W. schrieb:
> Joey T. schrieb:
>> Ja ich wollte nur den SYNC(ich nenne es weiterhin SYNC, da im Datenblatt
>> so bezeichent wird), auf logisch 1 und 0 reagiert, über I2C steuern.
>> Kann sein das ich hier etwas nicht verstanden habe und das gar nicht
>> möglich ist. Jedoch habe ich einige beispiele gesehen, wo bei 2 DACs SCL
>> an dem einen SYNC und SDA an dem anderen SYNC angelegt war.
>
> Was genau meinst du damit?
> - Willst du eine I2C GPIO-Expander verwenden? Das wäre ein eigener IC,
> den du  vom STM32 per I2C ansprichst und der dann wieder eigene "dumme"
> Ein- und Ausgänge bereitstellt
> - Willst du einen Pin vom STM32 verwenden, der theoretisch auch I2C
> ausgeben könnte? In dem Fall konfigurierst du den Pin einfach als GPIO
> um, mehr brauchst und willst du ja gar nicht. Du brauchst aber natürlich
> noch mehr Pins am STM32 als normale Ausgänge. Im einfachsten Fall pro
> SPI "Teilnehmer" einen Pin als Slave/Chip Select

Ich glaube mein Problem ist mein Halbwissen in diesem Gebiet.
Ich weiß zwar, dass der SYNC Input von ADG5062 mit logische 1 und 0 ein 
und ausgeschaltet werden kann. Ich habe ein STM32 mit dem ich jetzt 
mehrere von den DACs ansteuern will...Ich kann eine MOSI-Leitung an 
allen DACs anlegen, aber die Auswahl des DACs könnte ich über SYNC 
machen. Um darauf zurückzukommen was ich will, ist dass ich nicht genau 
weiß welche Output von dem STM32 als Input für die SYNCs benutzen kann 
-> kam auf die Idee mit I²C. Ja klar, einige würden sagen, lies dir 
Datenblatt durch aber wenn man wenig Ahnung von der digitalen 
Kommunikation hat, dann wird einem auch so ein 100seitiges Datenblatt 
nicht weiterhelfen. Ich hoffe ihr versteht mein Problem.

von H.Joachim S. (crazyhorse)


Lesenswert?

Im einfachsten Fall je ein I/O als Synch/CS.
Wenn man genug frei hat sollte man es so machen.
Alternativ kann man auch Wandler mit MISO nehmen, dann werden alle 
sozusagen in Reihe geschaltet. Je nach geforderter Analogbandbreite sind 
dem aber Grenzen gesetzt.

von Christian W. (orikson)


Lesenswert?

Joey T. schrieb:
> Um darauf zurückzukommen was ich will, ist dass ich nicht genau
> weiß welche Output von dem STM32 als Input für die SYNCs benutzen kann
> -> kam auf die Idee mit I²C. Ja klar, einige würden sagen, lies dir
> Datenblatt durch aber wenn man wenig Ahnung von der digitalen
> Kommunikation hat, dann wird einem auch so ein 100seitiges Datenblatt
> nicht weiterhelfen.

Ich glaub du hast einfach ein Verständnissproblem, da hilft Datenblatt 
lesen auch nicht konkret weiter.

So ziemlich jeden Pin des STM32 kannst du als "dummen" In- oder Output 
und damit zur Ansteuerung vom SS/CS/SYNC verwenden. Dumm heißt in dem 
Fall, dass du den in Software im richtigen Moment händisch mit einem 
Befehl auf 0 (GND, 0 V) oder 1 (üblich VCC, 3.3 V) schalten kannst, 
nicht mehr, nicht weniger.

So ziemlich alle Pins vom STM32 können aber auch andere Funktionen 
bedienen, z.B. I2C, SPI, PWM etc. Diese Funktionalität an dem Pin musst 
du aber nicht verwenden, wenn die der Pin als GPIO reicht.

Wenn du also einen Pin, der I2C (Clock oder Daten ist egal) ausgeben 
könnte, am SYNC von deinem DAC anschließt, wird das funktionieren, wenn 
du den Pin als Output konfigurierst. Wenn du alternativ den gleichen Pin 
als I2C konfigurierst wird es nicht gehen, da der DAC dann Pulse an 
seinem SYNC-Anschluss bekommt mit dennen er nichts anfangen kann.

von Joey T. (afgh)


Lesenswert?

Christian W. schrieb:

> Ich glaub du hast einfach ein Verständnissproblem, da hilft Datenblatt
> lesen auch nicht konkret weiter.
>
> So ziemlich jeden Pin des STM32 kannst du als "dummen" In- oder Output
> und damit zur Ansteuerung vom SS/CS/SYNC verwenden. Dumm heißt in dem
> Fall, dass du den in Software im richtigen Moment händisch mit einem
> Befehl auf 0 (GND, 0 V) oder 1 (üblich VCC, 3.3 V) schalten kannst,
> nicht mehr, nicht weniger.
>
> So ziemlich alle Pins vom STM32 können aber auch andere Funktionen
> bedienen, z.B. I2C, SPI, PWM etc. Diese Funktionalität an dem Pin musst
> du aber nicht verwenden, wenn die der Pin als GPIO reicht.
>
> Wenn du also einen Pin, der I2C (Clock oder Daten ist egal) ausgeben
> könnte, am SYNC von deinem DAC anschließt, wird das funktionieren, wenn
> du den Pin als Output konfigurierst. Wenn du alternativ den gleichen Pin
> als I2C konfigurierst wird es nicht gehen, da der DAC dann Pulse an
> seinem SYNC-Anschluss bekommt mit dennen er nichts anfangen kann.

Ich glaube dein Beitrag hat mein Verständnisproblem gelöst. Ich danke 
dir. Ich werde es wohl so "dumm" programmieren, damit habe ich kein 
Problem, denn ich fühle mich in dem Gebiet auch dumm haha, denn meine 
mama sagt "dumm ist der der dummes tut" :D

Meine Befürchtung war nur, dass ich nicht genug Outputs zur Verfügung 
hätte. Und das wollte ihc mit I2C lösen.

Nun gut, Ich danke fürs erste euch allen für eure Beiträge.

: Bearbeitet durch User
von Michael Gugelhupf (Gast)


Lesenswert?

Joey T. schrieb:
> Ich möchte nacheinander mehrere DAC

Können wir bitte langsam mal ein paar Fakten bekommen, ja?

*Wie viele?!?* 2, 5, 10, 20, 50, 100?

von Joey T. (afgh)


Lesenswert?

Michael Gugelhupf schrieb:
> Joey T. schrieb:
>> Ich möchte nacheinander mehrere DAC
>
> Können wir bitte langsam mal ein paar Fakten bekommen, ja?
>
> *Wie viele?!?* 2, 5, 10, 20, 50, 100?

nicht mehr als 10...ist wohl abhängig davon wieviele ich alleine mit dem 
uC steuern kann, ohne weitere bauteile wie schalter oder ähnliches zu 
realisieren.

von Einer K. (Gast)


Lesenswert?

Was wollt ihr mit I2C?
Oder gar mit I2C Multiplexern?
Der DAC kann das nicht.

Der I2C Weg ist also ein Irrweg.

von Gustl B. (gustl_b)


Lesenswert?

Jo, daher hatte ich das Schieberegister für die ChipSelects eingeworfen. 
Das sind dann 5 IOs für SPI ohne MISO.

3 für Schieberegister mit Latch und dazu noch SCLK und MOSI.

von Joey T. (afgh)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was wollt ihr mit I2C?
> Oder gar mit I2C Multiplexern?
> Der DAC kann das nicht.
>
> Der I2C Weg ist also ein Irrweg.

Das hat sich erledigt, da die Verwirrung meinerseits zustande kam.

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was wollt ihr mit I2C?
> Der I2C Weg ist also ein Irrweg.

I2C kann die benötigten 10 DAC CS oder Sync Signale erzeugen ohne 10 
Ports dafür zu brauchen!

2 Pins für CLK und Data
2 Pins für fast beliebig viele Sync / CS statt 10 Sync Pins für 10 DACs

Joey T. schrieb:
> Das hat sich erledigt, da die Verwirrung meinerseits zustande kam.

nein nicht nur, denn du schriebst ja auch

Joey T. schrieb:
> nicht mehr als 10...ist wohl abhängig davon wieviele ich alleine mit dem
> uC steuern kann, ohne weitere bauteile wie schalter oder ähnliches zu
> realisieren.

jeder µC braucht ja auch noch Pins für Anderes:
Taster, LED, Encoder, Display?

: Bearbeitet durch User
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.