Forum: Mikrocontroller und Digitale Elektronik Platine mit MLX90393 und Pegelwandler für SPI


von Matthias W. (matt007)


Lesenswert?

ein MLX90393 in QFN16 soll mit 3.3V versorgt an einem Arduino Nano 3 
(5V) per SPI laufen. Für den Test am Steckbrett suche ich eine kleine 
Platine wo der Sensor drauf ist nebst Pegelwandlung. Von Adafruit gibt 
es zwar etwas - nur ist keine Pegelwandlung für SPI vorgesehen. Der 
INT/TRG-Pin ist ggf. auch zu wandeln falls der INT genutzt werden soll.

Gibts eine kleine Platine die auf ein Steckbrett passt wo neben dem Chip 
auch die Pegelwandlung für SPI ist?

Gruss
Matthias

von Murmeltier (Gast)


Lesenswert?

Ich nehme in solchen Fällen oft schon vorhandene MOSFET Pegel Anpasser. 
Die werden zwar meist für I2C Anwendungen verkauft, funktionieren aber 
bei nicht zu hohen Datenraten völlig ausreichend und funktionieren ab 
2.5V. Siehe Links:
https://www.adafruit.com/product/757?hidden=yes&main_page=product_info&part_id=757
https://electronics.stackexchange.com/questions/352590/level-shifter-for-multiple-voltage-levels

Sonst könnte man noch Widerstandsteiler von 5V auf 3.3 nehmen. Nur für 
die Datenrichtung 3.3V auf 5V wird es eng. Weil die Schwelke für H 
Erkennunng bei 5V Logik oft auch um 3.3V liegt und es unzuverläßig 
werden kann. Man kann allerdings zur Not damit davon kommen wenn man den 
Pegel mit einem Widerstandsteiler nach Vdd (5V) etwas verschiebt um aus 
der 3.3V Umschaltzone weit genug entfernt zu sein. Dann sieht der 5V 
Baustein Z.B. L=1V, H=4V. Nicht elegant, aber passiv. Sonst gibt es noch 
diverse Pegelwandler ICs.

Die am Anfang erwähnten MOSFET Wandler funktionieren gut solange die CLK 
und Datenfrequenz durch die unvermeidlichen Kapazitäten nicht zu sehr 
abgerundet werden. (Der Pullup R und Schaltungs-C bilden ein 
Tiefpassfilter. Bis 1MHz sollte es aber funktionieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Der µC auf dem Modul kann auch mit 3,3V arbeiten.
Und so würde man da im echten Leben auch machen: µC und Peripherie auf 
die selbe Logikspannung. Bei dem Andruiden muss man nur den 5V 
Spannungsregler austauschen. Oder ihn ausbauen und auf den 5V  von 
extern mit 3,3V versorgen.

von Gerhard O. (gerhard_)


Lesenswert?

Lothar M. schrieb:
> Der µC auf dem Modul kann auch mit 3,3V arbeiten.
> Und so würde man da im echten Leben auch machen: µC und Peripherie auf
> die selbe Logikspannung. Bei dem Andruiden muss man nur den 5V
> Spannungsregler austauschen. Oder ihn ausbauen und auf den 5V  von
> extern mit 3,3V versorgen.

Die Nanos haben aber meist 16MHz Taktfrequenz. So schlimm ist die 
Pegelanpassung doch nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gerhard O. schrieb:
> Die Nanos haben aber meist 16MHz Taktfrequenz.
Wenn ich unbedingt mehr als 8MHz brauche, dann nehme ich einfach einen 
µC, der mit 3,3V mehr als 8MHz kann.

> So schlimm ist die Pegelanpassung doch nicht.
Naja, Murks bleibt Murks.

Und hier die Anleitung:
https://forum.arduino.cc/index.php?topic=158513.0

von Matthias W. (matt007)


Lesenswert?

Murmeltier schrieb:
> Bis 1MHz sollte es aber funktionieren.

Vielen Dank ! ich hatte schon gehofft 8 MHz per SPI nutzen zu können. 
Momentan hatte ich an einen TXB0104 als Pegelwandler gedacht, nur ist 
der eben auch in SMD. Das passt nicht so leicht auf ein Steckbrett.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Der µC auf dem Modul kann auch mit 3,3V arbeiten.

ja. Das bedeutet jedoch diverse Umbauten die ich nicht vornehmen möchte 
auf dem fertigen Modul. Der Quarz müsste getauscht werden. Der 
USB-Baustein hat dann nicht die richtige IO-Spannung. Spannungsregler 
müsste dran und Diode raus. Der Bootloader streikt dann ggf. auch.

kurzum - ich müsste ein anderes Modul kaufen und dann mit 8MHz statt 16 
MHz arbeiten. Die SPI wäre dann 4 MHz wohl. Das ist nicht das was ich 
wollte.

: Bearbeitet durch User
von Matthias W. (matt007)


Lesenswert?

Gerhard O. schrieb:
> So schlimm ist die Pegelanpassung doch nicht.

im Idealfall gibt es eine Platine wo das alles nebst dem MLX-chip drauf 
ist. Eben das ist die Frage.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Und hier die Anleitung:
> https://forum.arduino.cc/index.php?topic=158513.0

Danke. Das ist eine Menge Änderung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Matthias W. schrieb:
> Das ist eine Menge Änderung.
Ja, nur Veränderung bringt dich voran...  ;-)
> Das ist eine Menge Änderung.
Verglichen mit dem Gebastel, das du mit dem Pegelwandler haben wirst, 
eigentlich nicht.
Denk da bei den schnellen Treibern auch an eine Serienterminierung. 
Sonst klingelt das Signal wie sonstwas. Siehe den 
Beitrag "Re: Probleme mit 8 MHz SPI Takt ausschliessen"

Matthias W. schrieb:
> Das ist nicht das was ich wollte.
Du musst eines berücksichtigen: interessant ist im Prinzip nicht, was du 
willst, sondern was die Lösung deiner Aufgabe braucht. Wenn du das 
mit einem 1MHz SPI und einem 4MHz Controller erreichst, dann bist du 
fertig. Es bringt nichts, wenn der Controller doppelt so schnell ist.

Matthias W. schrieb:
> ich hatte schon gehofft 8 MHz per SPI nutzen zu können.
Brauchst du tatsächlich 8MHz auf dem SPI?

Matthias W. schrieb:
> Der USB-Baustein hat dann nicht die richtige IO-Spannung.
Das sieht mir nach selektivem Lesen und Auslegen des Datenblatts aus. 
Wenn du statt 5V dort 3,3V in den Andruiden einspeist, dann passt das 
genau. Denn die IO-Spannung des FT232 ist genau die Spannung, die der 
µC ebenfalls als IO-Spannung hat (bei dem ist ja Vcc = Vio). Und der 
FT232 kann da von 1,8V bis 5,25V. Insofern lägen 3,3V optimal in der 
Mitte und genau richtig.

Du kannst natürlich weiter mit den Pegelwandlern weitermachen, wenn du 
das willst. Ich wollte dir nur sinnvolle Alternativen zeigen, es 
reicht, wenn du weißt, dass es welche gibt.

: Bearbeitet durch Moderator
von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Denk da bei den schnellen Treibern auch an eine Serienterminierung.

Danke für den Hinweis Lothar !

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> was die Lösung deiner Aufgabe braucht.

da hast Du natürlich recht. Das behalte ich durchaus im Auge. Es geht 
erst mal um einen Versuchsaufbau um auszuloten was wie passt. Wenn ich 
mehr weiß werde ich eine Platine machen. Nur jetzt am Anfang wollte ich 
das nicht gleich machen.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Wenn du das mit einem 1MHz SPI und einem 4MHz Controller erreichst,
> dann bist du fertig.

klar. Nur warum soll ich dann überhaupt SPI nehmen? Mit I2C geht es bei 
diesem chip ja auch. Das zeigt ja das Board von Adafruit.

warum baut dann der Hersteller SPI noch auf das chip? Zum Spaß?

eben dazu möchte ich mir ein Bild machen. Wenn ich am Ende erkenne daß 
das mit I2C besser und einfacher geht - dann werde ich I2C nehmen. 
Berührungsängste habe ich da keine.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Ich wollte dir nur sinnvolle Alternativen zeigen, es
> reicht, wenn du weißt, dass es welche gibt.

für diese Diskussion bin ich durchaus dankbar. Daher schaue ich die 
Datenblätter noch mal genauer an und überlege. Bis 12MHz wären bei 3.3V 
möglich. Nur müsste ich dann den Quarz ändern usw. Das ist auf den 
gekauften Boards so nicht sinnvoll. Das abzulöten ist eine Qual. Dann 
besser neu aufbauen. Das jedoch geht erst wenn ich die Platine habe.

es wäre auch denkbar ganz andere CPUs zu nehmen. Der LPC1343 braucht 
jedoch auch nicht gerade wenig Strom wenn man ihn oberhalb 12MHz taktet.

der MSP430 war mal eine Wahlmöglichkeit wenn es sparsam sein sollte. Nur 
braucht jedes chip auch wieder eine andere Entwicklungsumgebung und 
Einarbeitung. Auch dies muss man überlegen.

da das Gerät am Ende mit Batterien auch betrieben werden soll spielt 
Energiebedarf auch eine Rolle. Wie oft ich Werte erfasse (möglich sind 
bis 500 Messungen pro Sekunde) bestimmt auch mit die Rechenleistung.

dazu kommt die Anforderung die Daten dann brauchbar abzulegen. Wenn eine 
SD-Card noch dran soll die sich die SPI teilt so sollte es da nicht beim 
Zugriff und den Wartezeiten der Karte zu Konflikten kommen.

der Atmega328 hat ja nur eine SPI.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Denn die IO-Spannung des FT232 ist genau die Spannung, die der
> µC ebenfalls als IO-Spannung hat

ja. Nur leider verursacht auch der FT232 wieder Stromverbrauch weshalb 
ich den Chip bei Batteriebetrieb nicht versorgen möchte. Erst zum 
Auslesen wird er dann ggf. gebraucht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Nur leider verursacht auch der FT232 wieder Stromverbrauch weshalb ich
> den Chip bei Batteriebetrieb nicht versorgen möchte.
Dieses "Problem" ist aber unabhängig von 3V3 oder 5V, denn die 
IO-Spannung des FT232 hängt ja auf der Platine immer parallel zum µC. 
Wenn der µC versorgt wird, wird der IO-Block vom FT232 versorgt. Sieh 
dir da mal den Schaltplan an.

Matthias W. schrieb:
> da das Gerät am Ende mit Batterien auch betrieben werden soll spielt
> Energiebedarf auch eine Rolle.
Und der steigt mit der Taktfrequenz. Gerade bei Batteriebetrieb ist ein 
möglichst geringe untere Versorgungsspannung und Taktfrequenz Pflicht. 
Ich habe da z.B. einen ATtiny als Scrabbletimer, der seit bald 10 Jahren 
mit und direkt an einer kleinen CR1620 läuft, das Jahr über alle 2 
Minuten mal die LED blitzen lässt und wenn man auf den Knopf drückt, 
läuft die Sanduhr los.

> Wie oft ich Werte erfasse (möglich sind bis 500 Messungen pro Sekunde)
> bestimmt auch mit die Rechenleistung.
Bei 500 Messungen pro Sekunde passen bei 8MHz noch 16000 
Maschinenbefehle zwischen 2 Messungen. Da kann man schon was mit 
anfangen.
Und wenn du auf dem Bus für 500 Messungen pro Sekunde jeweils 512 Bits 
übertragen müsstest (was sicher nicht nötig ist), dann reicht im Prinzip 
eine Taktfrequenz von etwas mehr als 250kHz.

Matthias W. schrieb:
> klar. Nur warum soll ich dann überhaupt SPI nehmen?
> Mit I2C geht es bei diesem chip ja auch.
Richtig. Die Frage solltest du beantworten und am besten mit Zahlen 
belegen können. Denn du hast diese Schnittstelle doch ausgewählt.

> warum baut dann der Hersteller SPI noch auf das Chip? Zum Spaß?
Da stellt sich eher die Frage: warum baut der Hersteller noch I2C auf 
den Chip wenn da ein SPI drauf ist, der noch viel schneller ist?
Ganz einfach: weil man ihn dann da oder dort anschließen kann. Aber man 
muss eben nicht unbedingt mit absolut höchstmöglichem Vollgas über 
jeden Bus brettern.

: Bearbeitet durch Moderator
von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Wenn der µC versorgt wird, wird der IO-Block vom FT232 versorgt.

nicht unbedingt. Momentan habe ich beim FTDI beide Versorgungspins 
zusammen auf VUSB gehängt. Der FTDI wird so nicht automatisch von der 
µC-Seite versorgt.

der TXD-Pin der CPU ist über 1kOhm mit dem FTDI verbunden. Wenn der Pin 
low ist sollte kein Strom fließen.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Die Frage solltest du beantworten und am besten mit Zahlen
> belegen können. Denn du hast diese Schnittstelle doch ausgewählt.

der Applikationsmann bevorzugt die schnellere SPI. Daher wollte ich im 
ersten Versuch das probieren. Wenn das läuft kann ich im Vergleich noch 
I2C ansehen. Bei I2C kommt der Stromverbrauch durch die Pullups hinzu 
wenn sonst nichts am Bus hängt wie z.B. ein FRAM.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> man muss eben nicht unbedingt mit absolut höchstmöglichem Vollgas über
> jeden Bus brettern.

ja. Da hast Du absolut recht. Noch dazu wenn es minimal 1.8ms für einen 
Messwert dauert. Man muss die Gesamtapplikation im Auge behalten. Da 
kann es Sinn machen den Speicher auf I2C zu legen und den Sensor auf 
SPI.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Bei 500 Messungen pro Sekunde passen bei 8MHz noch 16000
> Maschinenbefehle zwischen 2 Messungen. Da kann man schon was mit
> anfangen.

ja. Die Daten müssen ausgelesen, verarbeitet und gespeichert werden. 
Dazu möchte ich sie auch per UART zum Laptop senden. Das Programm wird 
schrittweise entstehen und dabei werde ich sehen wo etwas klemmt.

Solange die Daten stets weggeschrieben werden können bevor die nächsten 
Daten da sind sollte es keine Probleme geben. FRAMs sind schnell. Da 
muss man nicht warten. Schwieriger wird es wenn man ein Flash schreibt 
und man einen Sektor löschen muss und warten.

Solche Sachen wollte ich später angehen. Erst mal sollen die 
Grundfunktionen laufen.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Gerade bei Batteriebetrieb ist ein
> möglichst geringe untere Versorgungsspannung und Taktfrequenz Pflicht.

deswegen schaue ich mehrere mögliche Schaltungsvarianten an. Momentan 
gibt es eine mit Atmega168 5V und eine mit LPC1343 3.3V. Den MSP430 
möchte ich auch noch untersuchen. Der wird sparsamer sein.

zur Versorgung sind 2 Alkalizellen vorgesehen oder 2 Akkus mit 
Boostwandler.

von Matthias W. (matt007)


Lesenswert?

Lothar M. schrieb:
> Ja, nur Veränderung bringt dich voran...  ;-)

da ist was Wahres dran !
wenn ich die vielen Änderungen nun anschaue so müsste ich ein Stück 
voran nun sein :-)

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.