Array von Fototransistoren mit Raspberry Pi lesen

Für ein Projekt, an dem ich arbeite, muss ich die Werte aus einer Matrix von Fototransistoren (8x16) in den Raspberry Pi einlesen.

Ich bin mir nicht ganz sicher, wie ich das machen soll, da ich weiß, dass ich irgendwo dort einen ADC einfügen muss. Wenn ich Schieberegister verwende, um die Werte von den Fototransistoren zu lesen, wie kann ich den ADC dort einbauen?

Das Problem ist die ADC-Schnittstelle. Ich schaue mir den MCP3008 an, der anscheinend eine Schnittstelle im SPI-Stil verwendet. Wenn es nur eine einfache Schnittstelle im analog in-> digital outStil wäre, wäre es kein Problem.

Erläutern Sie bitte, was Sie darunter verstehen digital out. SPI ist ein digitaler Ausgang, ebenso I2C sowie parallele Ausgangsschnittstellen (die n GPIO-Leitungen für eine n- Bit-Ausgabe erfordern ).
Ich meine, wenn ich versuche, einen Wert zu lesen, möchte ich nur einen Pin zum Lesen vom ADC verwenden können. Wie im ADC hat er ein Paar Pins analog in und digital out, ohne Steuerleitungen oder so weiter
Ich verstehe diese Frage nicht. Sie müssen mehrere Fototransistoren mit einem einzigen ADC multiplexen. Aber das Hauptproblem ist die digitale Seite der seriellen Schnittstelle des ADC? Ist nicht das Hauptproblem (oder zumindest das besondere Problem), wie man das Array mit einem einzelnen ADC scannt? Und hat der Pi nicht schon einige ADCs? Ein-Dollar-Mikrocontroller haben ADCs.
Ein Schieberegister ist für die Fototransistoren nutzlos, da ein Schieberegister nur Einsen und Nullen enthält. Um das Multiplexen mit einem schieberegisterähnlichen Ansatz zu lösen, benötigen Sie ein "analoges Schieberegister": etwas, das die Spannungen abtastet und hält und sie dann zum ADC verschiebt. Es gibt analoge Shifter: Sie werden Eimerketten genannt. Ich kenne keine, mit der Sie die Eimer parallel laden können! Nein, was Sie hier wollen, ist ein analoger Schalter: ein Gerät, das N Eingänge von Fototransistoren aufnimmt und basierend auf digitalen Eingängen einen davon zum Durchleiten auswählt.
Kaz, und was Sie als analogen Schalter beschrieben haben, klingt genau nach dem, wonach ich suche. Würden Sie einen bestimmten für diesen Job vorschlagen? Außerdem hat der Raspberry Pi keinen eingebauten ADC für die GPIO-Pins

Antworten (2)

Um 8 Zeilen mit 16 analogen Eingängen zu lesen, sollten Sie die Verwendung von 8 analogen CD74HC4067E-Multiplexer-Chips in Betracht ziehen. Um ihre 8 Ausgangsspannungen zu sammeln, fallen mir einige Optionen ein:

  1. Verwenden Sie (einen Teil) eines neunten 4067-Chips im Mux-Modus. Verbinden Sie die 8 analogen Ausgänge mit den ersten 8 analogen Eingängen des neunten 4067. Dies ist wahrscheinlich die sauberste, am wenigsten hackige Lösung.

  2. Verwenden Sie (einen Teil) eines neunten 4067 als 8-Bit-Binärdecoder, um die Ausgangsaktivierungsstifte auf den anderen Chips anzusteuern, und binden Sie einfach ihre Ausgänge zusammen. Dies wäre wahrscheinlich einfacher zu routen und könnte eine geringere Verzerrung aufweisen, da das Signal nur durch einen Mux-Chip statt durch zwei geht.

In jedem Fall haben Sie eine 7-Bit-Adresse, die Sie generieren müssen. Wenn Sie nicht genügend Ausgangspins frei haben, können Sie:

  1. Verwenden Sie ein serielles 8-Bit-Schieberegister mit parallelem Ausgang, um die Ausgangsaktivierungsstifte auf den 8 4067 zu treiben, vielleicht ein anderes, um die Adressstifte auf den 4067 zu treiben, wenn Sie wirklich verzweifelt nach Stiften suchen.

  2. Die meisten "8-Kanal"-ADCs sind eigentlich Einkanal-ADCs mit einem eingebauten analogen 8-Port-Mux. Sie haben normalerweise niedrigere Spezifikationen, aber wenn es funktioniert, wäre eine davon plus die 8 4067 wahrscheinlich die Option mit der niedrigsten Teileanzahl.

Abhängig von Ihren Signalpegeln und wie schnell Sie arbeiten müssen, müssen Sie möglicherweise einen Operationsverstärker oder Puffer zwischen den Multiplexern und Ihrem ADC hinzufügen.

Beachten Sie, dass ich noch keine davon ausprobiert habe, aber Teile sind in der Post (ich arbeite an etwas Ähnlichem).

Update: Wenn Sie mehr Rauschfestigkeit wünschen, können Sie den Sensorteil Ihrer Schaltung mit einer höheren Spannung betreiben und stattdessen DG506B-Mux-Chips verwenden.

Das Problem scheint sich auf die Notwendigkeit auszudehnen, die vom ADC erzeugten digitalen Daten über eine einzeilige Schnittstelle zu erfassen.

Es sind mehrere ADCs verfügbar, die solche Single-Pin-Serial-Line-Schnittstellen unterstützen. Zum Beispiel:

Grundsätzlich muss man nach ADCs mit einer solchen Single-Data-Pin-Schnittstelle suchen und nicht nach dem in der Frage angegebenen SPI-Gerät.

Danke Anindo. Also verwende ich beim DS2450 eine One-Wire-Bibliothek auf dem RPi, um auf den Pin zu schreiben (Einstellung der Schieberegister) und dann vom Pin zu lesen (aus dem genauen Fototransistor, der vom Schieberegister eingestellt wird)?
Die 1-Wire-Schnittstelle wird verwendet, um Daten vom ADC aufzunehmen, sobald der ADC den analogen Wert von dem an seinen analogen Eingang angeschlossenen Fototransistor abgetastet hat. Es kommt kein Schieberegister ins Spiel. Was genau haben Sie sich von dem Schichtregister erhofft?
Ich habe eine Matrix von Fototransistoren (8x16), also hatte ich gehofft, dass das Schieberegister die Anzahl der Pins auf 3 (SPI) reduzieren könnte.
@ user1000229 Nein. Was Sie dann brauchen, ist ein analoger Multiplexer, oder eigentlich mehrere davon, und ein paar zusätzliche GPIO-Leitungen, um sie zu steuern. Das verdient eine separate Frage, sonst wird daraus eine sogenannte Chamäleon-Frage .