Hallo zusammen und zu Beginn erstmal frohe Weihnachten. Ich versuche aktuell (erstmal in der Theorie) zwei Platinen miteinander zu verbinden. Zum einen den Raspberry Pi mit seinen GPIO Pins und zum anderen die ELV Lichtorgel 12V 3-Kanal (Schaltplan www.hed-radio.com/pdf/bausatz/elv/Lichtorgel_12V_3-Kanal.pdf). Nun möchte ich im Grunde folgendes erreichen: die Tiefen/Mitten/Höhen möchte ich mit 3 Pins vom Raspberry Pi verbinden, sodass ich in einem Programm z.B. alle 10 ms die Ports abfragen kann, ob diese gerade high oder low sind. Ich habe bereits nach Antworten zu meinen nun folgenden Fragen und Problemen gesucht, war allerdings nicht wirklich fündig. Wahrscheinlich dürften sich die Probleme aber für Fortgeschrittenere absolut trivial anhören. Ich wäre daher schon dankbar, wenn man mich z.B. auf bestimmte Suchbegriffe hinweist, mit denen ich die Antworten selber finden kann. Für tiefergehende Antworten bin ich aber natürlich auch sehr dankbar :) Generell erstmal zu meinen Problemen. Die GPIO Pins des Raspberry Pi vertragen maximal 3,3V, die Lichtorgel wird allerdings mit 12V betrieben. Weiterhin sind es auch unterschiedliche Netzteile, sodass ich davon ausgehe, dass ich z.B. die jeweiligen GND der Platinen nicht einfach so miteinander verbinden darf (Potentialdifferenz). Was mir spontan einfallen würde wäre jeweils 1 Relais für Tiefen/Mitten/Höhen, das je an die 12V, GND von der Lichtorgel angeschlossen wird (Steuerspannung) und dann noch an einen GPIO Pin + GND vom Raspberry, sodass der GPIO Pin auf Ground gezogen wird. Ich kann mir allerdings nicht vorstellen, dass dies eine elegante Lösung ist. "Perfekt" wäre, wenn es etwas gibt, was sich mit meinen aktuellen Bauteilen herstellen lassen würde (Kombination von BC 547, BC 557, BC 337, Widerständen, Kondensatoren, wenn nötig 1N 4004, 1N 4148, Zener 3,3V). Gibt es vielleicht jemanden, der eine Idee hätte oder mir Tipps geben könnte? Weiterhin: Es gibt für 3,3V die Logikpegel high (2,0 - 3,3V), low (0,0 - 0,8V) und undefiniert. Ich könnte mir vorstellen, dass je nach Abfrageintervall die Eingangspegel meist undefiniert sein könnten. Würde da eventuell ein Analog/Digital-Wandler wie z.B. der MCP3008 (http://de.farnell.com/microchip/mcp3008-i-p/10bit-adc-2-7v-8ch-spi-16dip/dp/1627174) eher Sinn machen? Hier bin ich allerdings auch unsicher, wie ich die Daten im Datenblatt zu verstehen habe. Der IC hat Vdd, Vref, Agnd, Dgnd. Mal angenommen der IC würde 12 Volt vertragen, könnte ich dann Vdd und Dgnd mit dem Raspberry Pi und Vref und Agnd mit der Lichtorgel verbinden? Leider kann ich aus dem Datenblatt auch nicht herauslesen, wie hoch Vref überhaupt sein darf. Lediglich der Satz "The MCP3004/3008 devices operate over a broad voltage range (2.7V - 5.5V)." lässt mich vermuten, dass Vref maximal 5.5V sein darf. Wo kann ich aus dem Datenblatt das maximale Vref herauslesen? Ich hoffe, ich habe die Fragen zumindest halbwegs verständlich gestellt. Sollte sich jemand nicht mit dem Raspberry Pi auskennen, darf gerne davon ausgegangen werden, dass ich die Lichtorgel mit einem AVR µC auslesen möchte :) Schon mal vielen Dank für das Durchlesen! Marc
Hallo Marc, wie Dein Titel schon sagt, möchtest Du analoge Signale verarbeiten. Der Raspberry ist aber ein digitales Teil und versteht nur digitale Signale. Deshalb musst Du natürlich eine A/D-Wandlung vornehmen. Schau mal bei Erik Bartmann (www.erik-bartmann.de) nach. Da findest Du wunderbare Tutorials über alle möglichen Dinge, u.a. auch über den A/D Wandler MCP3008 und den Anschluss an den Raspberry. Hier der Link: http://www.erik-bartmann.de/programmierung/downloads2.html?task=files.download&cid=31 Außerdem kann ich sein Buch über Raspberry nur empfehlen. Vref kann maximal 0,5 V über der Versorgungsspannung liegen, also bei den max. erlaubten 5V Vdd sind das 5,5 V. Dein analoges Eingangssignal musst Du über einen Spannungsteiler von 12 V auf die maximal mögliche Eingangsspannung von 5 V des MCP3008 herunterteilen. Lies Dir mal das obige Tutorial durch. Programm-Beispiele für den Raspberry zum Auslesen des MCP3008 gibt es auch dort. Frohe Weihnachten Horst
Tach Tar, Die Ausgänge der Lichtorgel sind genauso "digital" wie die pins deines Prozessors. Der MOSFET wird entweder eingeschaltet oder ausgeschaltet. Einzig die Spannung ist unterschiedlich. > Weiterhin: Es gibt für 3,3V die Logikpegel high (2,0 - 3,3V), low (0,0 - > 0,8V) und undefiniert. Du möchtest am rasp eine Spannung von 0-0,8V und 2-3,3V haben. Der Ausgang deiner Lichtorgel zeigt dir aber irgend was um 0V und 12V. Das lässt sich schnell mit einem Spannungsteiler korregieren. Siehe dazu den Artikel Spannungsteiler. > Ich könnte mir vorstellen, dass je nach Abfrageintervall die > Eingangspegel meist undefiniert sein könnten. Würde > da eventuell ein Analog/Digital-Wandler wie z.B. der MCP3008 > (http://de.farnell.com/microchip/mcp3008-i-p/10bit-...) > eher Sinn machen? Den ersten Satz verstehe ich nicht komplett. Wie oben beschrieben gibt es bei der Lichtorgel nur an oder aus. Es findet natürlich ein Übergang zwischen den beiden Stadien statt der sich "schalten" nennt statt. Für einen mehr oder weniger kurzen Moment befindet sich daher die SPannung im undefinierten Bereicht. Für genau solche Fälle hat ein µC EIngang aber schmidttrigger. Kurz erklährt: Der von denem Programm gelesene "Wert" deines pins bleibt bei einem undefinierten Eingangssignal so lange auf dem letzten gemessenen Wert bis das Eingangssignal wieder in den definierten Bereicht zurück kehrt. Dafür brauchst du keinen ADC. > Die GPIO Pins des Raspberry Pi vertragen maximal 3,3V, die Lichtorgel > wird allerdings mit 12V betrieben. S.o. > Weiterhin sind es auch unterschiedliche Netzteile, sodass ich davon > ausgehe, dass ich z.B. die jeweiligen GND der Platinen nicht einfach so > miteinander verbinden darf (Potentialdifferenz). Nun, ein Potential entsteht nicht einfach aus dem Nichts. Hast du bereits irgend welche Kabel von der Lichtorgel zum rasp gezogen? Das wäre ein Potential. Ein wichtiger Aspekt ist noch die Erde. Viele Netzteile haben die lokale Masse verbunden mit der Erde. Bei rasp wird das ganz sich so sein, denn der Schirm des Netzwerkkabels ist immer geerdet und auch jeder PC ist geerdet(5V USB Stromversorgung). Das macht aber nichts, denn du möchtest ja sowieso nur die Massen verbinden. Die haben keinen Potentialunterschied. Thor
Hi zusammen und erstmal vielen Dank für die Antworten :) Leider bin ich in den letzten Tagen nicht dazu gekommen, hier zu antworten. @ hgrucho Das Tutorial von Erik Bartmann hatte ich bereits gefunden und den MCP3008 auf meine Einkaufsliste gesetzt. Da die Bestellung heute angekommen ist, werde ich die nächsten Tage mal genauer schauen. "Dein analoges Eingangssignal musst Du über einen Spannungsteiler von 12 V auf die maximal mögliche Eingangsspannung von 5 V des MCP3008 herunterteilen." Den Artikel über den Spannungsteiler hatte ich 5 Minuten nach meinem Post hier gefunden, wusste aber nicht genau, ob das die beste Möglichkeit ist. Scheinbar ist die Verwendung eines Spannungsteilers aber die beste/einfachste Möglichkeit :) @ Alex S. Genau den Artikel bezüglich Spannungsteiler hatte ich gefunden :) "Kurz erklährt: Der von denem Programm gelesene "Wert" deines pins bleibt bei einem undefinierten Eingangssignal so lange auf dem letzten gemessenen Wert bis das Eingangssignal wieder in den definierten Bereicht zurück kehrt. Dafür brauchst du keinen ADC." Das wusste ich nicht. Ich hatte die Befürchtung, dass wenn ich in einem undefinierten Zustand auslesen möchte, ich falsche Werte zurückgeliefert bekomme. Aber wenn ich immer nur definierte Werte bekomme (eben 0 oder 1), ist alles perfekt. Ich bin mir allerdings noch nicht sicher, ob ich das nicht doch mit einem A/D Wandler kombiniere, auch wenn er im Grunde nicht nötig ist. "Nun, ein Potential entsteht nicht einfach aus dem Nichts. Hast du bereits irgend welche Kabel von der Lichtorgel zum rasp gezogen? Das wäre ein Potential." Nein, bis jetzt gibt es noch garnichts. Allerdings habe ich mir ein Netzteil bestellt, welches 5V und 12V liefert und da ist dann ein Common Ground dabei. Das Problem hat sich daher auch gelöst :) Nochmal vielen Dank an Euch für die Antworten!
Wenn du Logiksignale auf einer höheren Spannung als die 3.3V hast, ist eine einfache und sichere Methode, die mit dem Raspberry Pi zu verbinden ein Optokoppler. Für 3 Pins kostet das etwa 50 Cent und ist in jedem lokalen Elektronikladen erhältlich. ;) Im Gegensatz zu einem Spannungsteiler hat das den Vorteil, dass das Pi hervorragend vor Überspannungen geschützt ist, selbst wenn die Gegenseite mal mehr als 12 Volt liefert (solange keine Blitze überspringen, passiert dem Pi selbst bei 1000 Volt nix, nur der Optokoppler schmilzt halt). Ich mache das jedenfalls auch so und es funktioniert prima. AD-Wandler für Logikpegel geht sicher auch, ist aber irgendwie unelegant.
Danke für die Info :) Da ich morgen eh nochmal kurz bei Conrad vorbei müsste, wäre das halb so wild, noch ein paar Bauteile mitzunehmen. Wenn ich also http://www.mikrocontroller.net/articles/Optokoppler "richtig" verstanden habe, könnte ich bereits die dort angegebenen 4N32 oder 4N33 Optokoppler nehmen, U_Ein mit der 12V Lichtorgel verbinden (natürlich mit entsprechendem Widerstand) und an der anderen Seite die 3,3V, GND und an U-Aus noch ein Widerstand mit Verbindung zu Ground?
Kurz ein Nachtrag ... Conrad hat nur 4N28, aber die sollten ja im Grunde auch gehen. Oder wären andere Optokoppler empfehlenswerter?
Da kannst du so gut wie jeden Optokopler nehmen, auch CNY17 oder so was geht. Behandle den Eingang des Optokopplers wie eine LED, d.h., du benötigst auf jeden Fall Vorwiderstände. Bei 12 Volt am Eingang und 15mA Strom durch die LED wären das also Widerstände mit ca. 700 Ohm, der nächste Normwert ist 680 Ohm. Auf der Raspberry Seite (die mit dem Phototransistor) benötigst du einen Arbeitswiderstand im Kollektorkreis als sogen. Pullup. Nimm das was zwischen 1k bis 3k3 zwischen Kollektor des OK und den +3,3 Volt des RPi. Der Emitter des OK kommt dann an Masse. Am Kollektor steht das Ausgangsignal. Invertierte Logik, beachte das beim Treiber schreiben.
Nochmal hi zusammen und erstmal frohes Neues, ich hoffe, ich bekomme nochmal ein wenig Hilfe, da ich noch etwas Probleme bei den Datenblättern (korrekte Angaben finden) und der Berechnung der Widerstände habe. Im Grunde (nochmal kurz zusammengefasst) folgende Ausgangssituation: Ein digitales Signal von 12 Volt soll mittels Optokoppler an einen Microcontroller mit 5 Volt geleitet werden (ich habe die Schaltung noch etwas geändert, daher jetzt nicht mehr 3,3V). Dazu möchte ich den Optokoppler 4N28 verwenden. Was ich also als Erstes mache ist mir den Vorwiderstand für die LED des Optokoppler am 12 Volt Strang zu suchen. Dazu schaue ich in das Datenblatt und finde "typical Vf = 1,25 Volt". Was mich allerdings stutzig macht ist, dass dort If mit 50mA (und unter MAX mit 60mA) angegeben ist, was ich doch recht hoch finde. Im Testcircuit (Figure 2) auf der nächsten Seite ist If = 10mA. Für mich als Anfänger stellt sich nun die Frage, welchen Wert für If ich nun nutzen soll. Gelesen habe ich aber "Wenn man die LED jedoch deutlich unter dem Nennstrom betreibt (50% und weniger), ...", sodass ich persönlich jetzt einen Wert von 25mA nutzen würde. Ist das eine falsche Annahme? Bei 1,25V Durchlassspannung, 12V Betriebsspannung und 25mA Strom erhalte ich dann 430 Ohm, ergo 470 Ohm. Sollte ich hier bereits Fehler gemacht haben, gerne Bescheid sagen :) Nun zum Arbeitswiderstand. Laut Empfehlung von Matthias Sch. soll ich am Kollektor einen PullUp Widerstand anbringen. Laut http://www.mikrocontroller.net/articles/Optokoppler wäre dies die "Invertierung am Ausgang" Schaltung. Was ich mich direkt zu Beginn frage: warum ist diese Schaltung besser geeignet als die nichtinvertierende Schaltung ganz links? Um den Arbeitswiderstand zu berechnen nutze ich die Formel auf der Wiki-Seite: Vcc = 5V Sf = 2 (da ich If = 25mA nutze statt 50mA) Iled = 0,025A CTR = 0,1 ergibt 4000 Ohm, also 3,9k Widerstand? Sehe ich das auch richtig, dass die Basis an Port 6 garnicht angeschlossen wird? Ich wäre sehr froh, wenn sich jemand meinen längeren Text durchlesen würde und mir sagen könnte, ob ich die Berechnungen richtig gemacht habe oder wo meine Fehler liegen :) Schonmal vielen Dank! Bis dann, Marc
Dein LED Vorwiderstand ist richtig. Den pullup kannst du idR per Daumen dimensionieren. So hoch wie möglich so niedrig wie nötig. Wenn du auf 4k raus kommst kannst du auch 10k nehmen. Es geht hier primär um die Schaltzeiten und den lowpegel. Solange du keine riesen Kapazitäten an den Kollektor hängst oder starke Funkstörungen in der Umgebung hast kannst du auch locker hoch dimensionieren. Thor
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.