Forum: Mikrocontroller und Digitale Elektronik Empfehlung Datenbus für AVR: SPI oder TWI


von Sascha V. (sasvoe)


Lesenswert?

Hallo hilfsbereite mc-Gemeinde,

bei meiner Recherche für die Ansteuerung von externen Bauteilen mittels 
AVR Controller (ATmega8) habe ich mich nun über die unterschiedlichen 
Schnittstellen belesen.

Gibt es erfahrungsbedingt eine Empfehlung für eine Schnittstelle ala TWI 
zwar störanfällig, aber mit AVR einfacher zu betreiben als SPI, etc.?
Oder fällt dieser Punkt unter "Geschmackssache"?

Vielen Dank schonmal im Vorraus.

Grüße
Sascha

von (prx) A. K. (prx)


Lesenswert?

Das entscheidende Kriterium fehlt: *wozu?*

von Cyblord -. (cyblord)


Lesenswert?

Das kommt vor allem auf die "externen Bauteile" an die du anschließen 
willst. Diese geben den Bus vor.

Der Unterschied zwischen TWI(I2C) und SPI dürfte nach kurzem Studium der 
beiden auf der Hand liegen. SPI = einfach zu implementieren, weit 
verbreitet, braucht aber viele Leitungen bei vielen Slaves.

I2C= komplexer zu Implementieren, lässt aber bis 128 Slaves an nur 2 
Leitungen zu.


gruß cyblord

von Sascha V. (sasvoe)


Lesenswert?

Im Prinzip interessiert mich auch eine Antwort, wenn es kein "wozu" 
gibt. In meinem Fall war Anstoß für die Recherche, um die Auswahl für 
einen Digital-Analog-Wandler einzugrenzen.

Vielen Dank schonmal an Cyblord.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Ein AVR hat beides. Und das bestimmt nicht, weil eines besser ist. SPI 
ist schneller, I2C einfacher zu implementieren. Jeder hat seinen 
Anwendungsfall.

von Cyblord -. (cyblord)


Lesenswert?

Walter Tarpan schrieb:
> I2C einfacher zu implementieren.

Bitte? Genau andersrum.

Und warum soll SPI schneller sein? Nicht in jedem Fall.
SPI kann Fullduplex und benötigt keine Start/Stop Bedingung, ja. Aber im 
reinen Durchsatz gibt sich das nicht viel. Kommt auf den Anwendungsfall 
an.

von Walter T. (nicolas)


Lesenswert?

Ein AVR hat beides. Und das bestimmt nicht, weil eines besser ist. SPI 
ist schneller, I2C einfacher zu implementieren. Jeder hat seinen 
Anwendungsfall.

[EDIT:]

cyblord ---- schrieb:
> I2C= komplexer zu Implementieren,

Hihi, habe die gegenteilige Ansicht erst nachher gesehen. Vielleicht 
sollte ich ergängen: I2C auf der Leiterplatte/im Gerät einfacher zu 
implementieren, SPI dafür in der Software (was aber ab dem Zeitpunkt, wo 
man die Ansteuerroutinen einmal hat nebensächlich ist).

von PittyJ (Gast)


Lesenswert?

cyblord ---- schrieb:
> Und warum soll SPI schneller sein?

Im normalfall hat ein I2c Device 400 KHz, während SPI im 2-stelligen MHz 
Bereich liegt. Also Faktor 10 mindestens.

von Cyblord -. (cyblord)


Lesenswert?

PittyJ schrieb:
> cyblord ---- schrieb:
>> Und warum soll SPI schneller sein?
>
> Im normalfall hat ein I2c Device 400 KHz, während SPI im 2-stelligen MHz
> Bereich liegt. Also Faktor 10 mindestens.

Liegt aber nicht am Bus, sondern an den Geräten.

Und ja, ich gehe von höherer Komplexität in der SW aus. Weniger 
Leitungen hatte ich ja schon angesprochen. Im Layout daher einfacher.

von Sascha V. (sasvoe)


Lesenswert?

Der DAC soll eine lineare Spannung ausgeben, mit der ein Stellglied für 
ein Ventil angesteuert werden kann. Es handelt sich somit nicht um eine 
Anwendung die möglichst genau und auch nicht besonders schnell seien 
muss.

von Walter T. (nicolas)


Lesenswert?

cyblord ---- schrieb:
> Und warum soll SPI schneller sein?

Naja, man kann grob nach Geschwindigkeit sortiert sagen:

One Wire Bus
I2C
UART/USART
SPI

Und nach sinnvoller Leitungslänge sortiert:

SPI
I2C
One Wire Bus
UART/USART

und sich danach das für den jeweiligen Zweck passende nach Aufwand und 
Nutzen aussuchen. Unterschiede in der Geschwindigkeit liegen vor allem 
an:

Notwendige Pausenzeiten (One Wire/UART)
Duplex (SPI,UART,USART vs. One Wire Bus, I2C) und natürlich der Taktrate
I2C, One Wire, UART: kHz, USART, SPI MHz.

Das gilt nicht in allen Fällen, ist aber eine sinnvolle 
Schnellabschätzung.

von Cyblord -. (cyblord)


Lesenswert?

Wenn nur ein Slave angeschlossen werden soll, und es nicht auf jeden Pin 
ankommt, ist hier eindeutig SPI zu bevorzugen. Dafür wird es wohl auch 
mehr Auswahl an DACs geben.

von Walter T. (nicolas)


Lesenswert?

Sascha V. schrieb:
> Der DAC soll eine lineare Spannung ausgeben, mit der ein Stellglied für
> ein Ventil angesteuert werden kann

Dann nimm einfach das, wofür ein DAC gut erhältlich ist und Deine 
Kabellänge ausreicht. Bei einem Ventil ist jeder Bus schnell genug. Je 
nach Umgebung könnte sich auch CAN anbieten (lange Leitung).

von Rudolph (Gast)


Lesenswert?

SPI ist auch noch beim gleichen Takt schneller als TWI weil der Overhead 
wegfällt.

Ich benutze sehr gerne die DAC7512 von TI, das ist ein einzelner 12-Bit 
DAC im SOT23-6 Gehäuse. Dem schickt man zwei Bytes und fertig.
An dem mag ich auch die drei Power-Down Modes mit 1k gegen GND, 100k 
gegen GND oder hoch-ohmig am Ausgang.

von Sascha V. (sasvoe)


Lesenswert?

Vielen Dank an alle! Mir wurde geholfen...

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.