Forum: Mikrocontroller und Digitale Elektronik IR-Reflexschranke über Schieberegister einlesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Highii H. (highii)


Lesenswert?

Hallo,

Ich habe mehrere IR-Reflexschranken. Bei denen fällt am IR-Empänger eine 
Spannung ab, die abhängig davon ist, wie nah ich mit meiner Hand als 
Reflektor an der IR-Led bzw. IR-Empfänger dran bin. Ist meine Hand nicht 
da, so fallen 0V ab. Bin ich ganz nah dran, sind es 5V.

Nun möchte ich ein digitales Signal der Reflexschranken\Refelxtaster 
über ein 74HC165 Eingangsschieberegister am Atmega einlesen. Auf ein 
Multiplexing mit einem ADC-Eingang und einem mehrkanäligen 
Analog-Digitalwandler möchte ich verzichten. Zum Einen aus Kostengründen 
zum Anderen, da ich im Mikrocontroller nur ein Binäres Signal haben 
möchte.

Nun die Frage:
Wie kann ich die "Schaltschwelle" einstellbar machen, also sagen, ab 
wieviel Volt am Schieberegister high oder low anliegt? Am besten noch 
einstellbar, ohne dass ich Bauteile umbauen muss. Also entweder 
irgendwas Richtung Poti, sodass ich einfach die Schwelle einstellen 
kann. (Poti ist wahrscheinlich nicht das richtige Einstellinstrument).
Wie macht man es am besten generell? Mit einer Diode, die bis zu einer 
bestimmten Spannung sperrt? Oder einem Transistor?

von Joe F. (easylife)


Lesenswert?

Highii H. schrieb:
(...)
> Auf ein Multiplexing mit einem ADC-Eingang und einem mehrkanäligen
> Analog-Digitalwandler möchte ich verzichten. Zum Einen aus Kostengründen

Multiplexing auf einen ADC Eingang ist die kostengünstigste Lösung.
z.B. CD74HC4067 (16:1) ca. 0,30 ... 0,80 EUR

> zum Anderen, da ich im Mikrocontroller nur ein Binäres Signal haben
> möchte.

Eine Zeile Code in der Firmware.
ADC Wert >= Schaltschwelle -> Digitalwert = 1
ADC Wert <  Schaltschwelle -> Digitalwert = 0

Vorteil: Schaltschwelle ist in der Firmware für jeden Sensor 
konfigurierbar.
Kann auch dynamisch verändert werden (z.B. bei Umgebungslichtänderung)

>
> Nun die Frage:
> Wie kann ich die "Schaltschwelle" einstellbar machen, also sagen, ab
> wieviel Volt am Schieberegister high oder low anliegt? Am besten noch
> einstellbar, ohne dass ich Bauteile umbauen muss. Also entweder
> irgendwas Richtung Poti, sodass ich einfach die Schwelle einstellen
> kann. (Poti ist wahrscheinlich nicht das richtige Einstellinstrument).
> Wie macht man es am besten generell? Mit einer Diode, die bis zu einer
> bestimmten Spannung sperrt? Oder einem Transistor?

Wenn man es unbedingt extern machen möchte, brauchst du für jeden Sensor 
einen Komparator, möglichst mit Hysterese.
Die Ausgänge der Komparatoren kann man dann auf die Eingänge eines 
Schieberegisters legen.
Insgesamt ist das ein wesentlich höherer Bauteileaufwand, und damit auch 
teurer.

von Highii H. (highii)


Lesenswert?

Joe F. schrieb:
> Multiplexing auf einen ADC Eingang ist die kostengünstigste Lösung.
> z.B. CD74HC4067 (16:1) ca. 0,30 ... 0,80 EUR

Das klingt sehr interessant. Dazu habe ich zwei Fragen:
(1) Bei welcher Bezugsquelle findest du 0,30 bis 0,80 EUR? Ich möchte 
DIP-Gehäuse.
(2) Kann man diese Kaskadieren, sodass ich 32:1 oder 48:1 realisieren 
kann?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?


von Highii H. (highii)


Lesenswert?

Knut B. schrieb:
> 1) nicht DIP aber SO24:
> 
http://www.reichelt.de/SMD-HC-4067/3/index.html?&ACTION=3&LA=446&ARTICLE=107904&artnr=SMD+HC+4067&SEARCH=4067
>
> 2) ja

Das klingt sehr interessant. Den werde ich mir mal anschauen.
Vielen Dank!

von Highii H. (highii)


Lesenswert?

Knut B. schrieb:
> 1) nicht DIP aber SO24:
> 
http://www.reichelt.de/SMD-HC-4067/3/index.html?&ACTION=3&LA=446&ARTICLE=107904&artnr=SMD+HC+4067&SEARCH=4067

Gibt es eigentlich IC-Sockel von S024 nach DIP? Oder wie verlötet man 
diese am besten auf eine 2.54mm Platine?

von Michael U. (amiga)


Lesenswert?

Hallo,

falls Dich I2C nicht stört und jeweils 4 A/D-Werte reichen, such mal bei 
ebay nach PCF8591.

Dauert nur etwas, wenn Du in China bestellst.

Gruß aus Berlin
Michael

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


Lesenswert?

Knut B. schrieb:
> 1) nicht DIP aber SO24:
> 
http://www.reichelt.de/SMD-HC-4067/3/index.html?&ACTION=3&LA=446&ARTICLE=107904&artnr=SMD+HC+4067&SEARCH=4067

Selbstverständlich hat Reichelt auch DIP. Den 4067 als 4000er CMOS 
(statt 74HC) z.B. hier 
https://www.reichelt.de/ICs-C-MOS-DIL/MOS-4067/3/index.html?&ACTION=3&LA=2&ARTICLE=12620&GROUPID=2924&artnr=MOS+4067

ist mit EUR 1,55 aber vergleichsweise teuer. Aber wenn der TE ohnehin 
kaskadieren will, braucht er ja nicht notwendigerweise einen Analog- 
multiplexer mit 16 Ports. Der 4051 mit 8 Ports ist viel günstiger und 
mit 9 Stück davon kann man bis 64 analoge Eingänge realisieren. Den 
gibts wahlweise als klassischen 4000er: 
https://www.reichelt.de/MOS-4051/3/index.html?&ACTION=3&LA=446&ARTICLE=12610&artnr=MOS+4051&SEARCH=4051 
für EUR 0,24 oder als 74HC: 
https://www.reichelt.de/74HC-4051/3/index.html?&ACTION=3&LA=446&ARTICLE=3229&artnr=74HC+4051&SEARCH=4051 
für EUR 0,37.

von Michael B. (laberkopp)


Lesenswert?

Highii H. schrieb:
> Wie kann ich die "Schaltschwelle" einstellbar machen

Natürlich kannst du das so bauen
1
                             +------+
2
+5V ---+--------+----+----+--|VCC   |   uC
3
       |        |    |    |  |      |
4
+-----------+   |    |   10k |      |-- CLK
5
|IR-Schranke|---(---|+\   |  |  74  |
6
+-----------+   |   |  >--+--|A HC  |-- S/L
7
       |      Poti--|-/      |  165 |
8
       |        |    |LM399  |      |-- QH
9
GND ---+--------+----+-------|GND   |
10
                             +------+
aber es wäre einfach bescheuert so was aufzubauen, es ist viel zu 
aufwändig. Die meisten uC können direkt 8 Analogsignale erfassen (du 
brauchst schon 3 Anschlüsse für deine extra-Elektronik), und wenn man 
externe Multiplexer wie CD4051 einsetzt, reicht auch ein Analogeingang.
1
                +------+
2
+5V ---+--------|VDD   |   uC
3
       |        |      |
4
+-----------+   |      |-- A
5
|IR-Schranke|---|0 CD  |-- B
6
+-----------+   | 4051 |-- C
7
       |        |      |
8
       |     +--|VSS  Y|-- A/D
9
GND ---+-----+--|VEE   |
10
                +------+
dann kann die Schaltschwelle in Software verstellt und gespeichert 
werden, viel weniger Aufwand, viel billiger, und weniger Platz kostet es 
auch noch.

von Highii H. (highii)


Lesenswert?

Axel S. schrieb:
> Der 4051 mit 8 Ports ist viel günstiger und
> mit 9 Stück davon kann man bis 64 analoge Eingänge realisieren. Den
> gibts wahlweise als klassischen 4000er:
> 
https://www.reichelt.de/MOS-4051/3/index.html?&ACTION=3&LA=446&ARTICLE=12610&artnr=MOS+4051&SEARCH=4051
> für EUR 0,24 oder als 74HC:
> 
https://www.reichelt.de/74HC-4051/3/index.html?&ACTION=3&LA=446&ARTICLE=3229&artnr=74HC+4051&SEARCH=4051
> für EUR 0,37.

Das klingt sehr interessant. Was ist der Unterschied zwischen den beiden 
(MOS und 74HC)?
Interessant für mich ist auch, in welcher Frequenz ich die einzelnen 
Kanäle ansprechen kann. Gerade wenn ich mehrere 4051 kaskadiere, sinkt 
ja die Auslesefrequenz für einen Kanal. Wenn mein xMega mit 32MHz läuft, 
in welcher Frequenz kann ich dann 48 Signale abtasten? (Wenn 48:1)

: Bearbeitet durch User
von Lurchi (Gast)


Lesenswert?

Die 74HC... Version ist etwas schneller und hat niedrigere Widerstände 
im eigeschalteten Zustand. Auch ist der Versorgungsspannungsbereich wohl 
etwas kleiner. Einfach nur für die Lichtschranken macht es kaum einen 
Unterschied.

Es ist zwar nicht schön, weil die Hysterese fehlt, aber man kann auch 
direkt von der Lichtschranke auf den 74HC165. Die schwelle kann man z.B. 
über je einen Widerstand/trimmer einstellen. In Grenzen geht das auch 
mit festen Widerständen und variabler Spannung.

Eine etwas andere Lösung ist es die Leichtschranken (Phototransistor) 
nicht gegen einen Widerstand arbeiten zu lassen sondern einen 
Kondensator aufladen zu lassen. Die Empfindlichkeit kann man dann über 
die Zeit zwischen entladen des Kondensators und auslesen anpassen. Das 
kann man auch mit dem Auslesen per ADC kombinieren, wenn man z.B. die 
Intensitäten über einen sehr großen Bereich erfassen will.

Für wenig Bauteile könnte man ggf. sogar die Versorgung der HC165 runter 
fahren und die Kondensatoren über die IC internen Diode entladen - nicht 
schön, dürfte aber funktionieren.

von Lurchi (Gast)


Lesenswert?

Der ADC im Xmage geht soweit ich weiß bis etwa 1 MHz Abtastrate. Für das 
Umschalte der Kanäle sollte man nicht allzuviel Zeit verlieren, 
zumindest wenn man 6 ADC Eingänge am µC nutzt und die MUX nicht noch 
Kaskadiert. Entpechend dürfte man 48 Känale wohl bis knapp 20 kHz 
abtasten können. Es kann aber gut sein, das dies nur bei hoher 
Lichtintensität gute Werte gibt - in nur 50 µs kommt ggf. noch kein 
gutes Signal zusammen.

Um das Signal nicht nur aus der kurzen Abtastzeit zu erhalten sollte man 
wohl jedem Kanal einen eigenen Speicherkondensator spendieren, und nicht 
nur einfach die Lichtschranken als Phototransistor und Widerstand haben.

von Highii H. (highii)


Lesenswert?

Danke für die hilfreichen Antworten. Das hilft mir sehr weiter.

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


Lesenswert?

Highii H. schrieb:
> Axel S. schrieb:
>> Der 4051 mit 8 Ports ist viel günstiger und
>> mit 9 Stück davon kann man bis 64 analoge Eingänge realisieren. Den
>> gibts wahlweise als klassischen 4000er:
>>
> https://www.reichelt.de/MOS-4051/3/index.html?&ACT...
>> für EUR 0,24 oder als 74HC:
>>
> https://www.reichelt.de/74HC-4051/3/index.html?&AC...
>> für EUR 0,37.
>
> Was ist der Unterschied zwischen den beiden (MOS und 74HC)?

In deiner Anwendung: keiner. Der 4000er Typ funktioniert zwischen 3V und 
15V Betriebsspannung, der 74HC zwischen 2V und 6V. Wenn du deinen µC mit 
5V (oder auch 3.3V) betreibst, passen beide. Daß der 74HC schneller 
umschaltet (30ns vs. 300ns) und einen geringeren Kanalwiderstand hat, 
dürfte für deine Anwendung irrelevant sein.

> Interessant für mich ist auch, in welcher Frequenz ich die einzelnen
> Kanäle ansprechen kann. Gerade wenn ich mehrere 4051 kaskadiere, sinkt
> ja die Auslesefrequenz für einen Kanal.

Die Begrenzung kommt in jedem Fall durch den ADC. Ein ATmegaxx braucht 
mindestens 13µs für eine AD-Wandlung. Ob das Umschalten von einem Kanal 
auf den nächsten dann 30ns oder 300ns dauert, ist im Vergleich dazu 
unerheblich.

: Bearbeitet durch User
von Highii H. (highii)


Lesenswert?

Eine Sache fällt mir noch ein:
Wenn ich mehrere 4051 kaskadiere, wie adressiere ich die am besten? Also 
bei jedem einzelnen muss ja über drei Signale die Kanal ausgewählt 
werden. Wie mache ich es bei mehreren? Ich will ja nicht n x 3 Outs von 
meinen Mikrocontroller zum adressieren verschwenden.
Was ist eurer Meinung nach die Klügste Art das zu realisieren?

von Lurchi (Gast)


Lesenswert?

Wirklich kaskadieren würde ich nicht, sondern je einen 4051 zu einem ADC 
Eingang des µC schalten. Die Adressierung geht dann parallel, also bei 
allen 4051 die gleiche Adresse und dann auf 6 Eingänge am µC.

Wenn man wirklich nur einen ADC Eingang frei hat, könnte man noch den 
Enable Pin am 4051 nutzen. Dann kämen die "Ausgänge" der 4051 alle 
zusammen, aber nur bei eine der Chips wird Enable aktive. Dafür bräuchte 
man dann moch ein IC wie z.B. 74HC139 oder 74HC42 oder ähnlich (die 
Polarität des Enable Signals müsste man noch prüfen, um zu sehen welche 
Art decoder passt). Damit hat man dann eine 3+3 = 6 Bit addresse für den 
Kanal - das spart aber auch nur 2 Pins und man braucht 1 extra IC.

Soweit ich weiss ist der ADC beim Xmega noch etwas schneller - wohl aber 
nicht mit voller 12 Bit Auflösung. Bei nicht sehr viel Licht dürft eher 
die Lichtmenge die Geschwindigkeit begrenzen - das ist dann aber relativ 
unabhängig vom µC.

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


Lesenswert?

Highii H. schrieb:
> Eine Sache fällt mir noch ein:
> Wenn ich mehrere 4051 kaskadiere, wie adressiere ich die am besten? Also
> bei jedem einzelnen muss ja über drei Signale die Kanal ausgewählt
> werden. Wie mache ich es bei mehreren? Ich will ja nicht n x 3 Outs von
> meinen Mikrocontroller zum adressieren verschwenden.

Natürlich nicht.

Mit drei digitalen Ausgängen deines µC kannst du einen von 8 Eingängen 
eines 4051 wählen. Um mehrere 4051 zu kaskadieren, schließt du einfach 
den Ausgang des 4051 an einen Eingang eines weiteren 4051 an. Da dieser 
4051 der zweiten Ebene noch weitere 7 Eingänge hat, kannst du weitere 7 
4051 auf die erste Ebene packen (die dann alle von den gleichen 3 Bit 
gesteuert werden). Insgesamt brauchst du dann 6 Bit - 3 für die erste 
Ebene und 3 für die zweite - um mit insgesamt 8+1 = 9 Stück 4051 einen 
von 64 Eingängen auf den ADC-Eingang durchzuschalten.

Wenn es nur maximal 32 Eingänge sein sollen, dann reichen 4+1 4051 und 5 
Bit zur Kanalwahl (den Eingang C des 4051 der zweiten Ebene legst du 
dann einfach fest auf L).

Und alternativ kannst du statt des 4051 der zweiten Ebene auch einfach 
mehrere ADC-Eingänge deines µC verwenden. Intern hat der µC auch nur 
einen Analogmultiplexer ganz ähnlich zum 4051 zwischen allen seinen 
Analogeingängen und seinem einzigen ADC. Ist alles eine Frage wieviele 
(und welche) Pins du an deinem µC noch frei hast.

von Highii H. (highii)


Angehängte Dateien:

Lesenswert?

Ich habe es mal in der Schaltung umgesetzt. (Siehe Anhang)
Mit 74HC154 (4 to 16 bit Decoder) kann ich über 4 Outputs bis zu 16 mal 
74HC4051 ansteuern. 74HC154 ist hier an dieser Stelle zu viel, ließe 
aber die Erweiterung weiterer 4051 zu.
Über Signalleitungen (V6, V7, V8) kann ich die Adressen von den 4051 
auswählen. Dann braucht man noch die OR-Gatter (74HC32), um bei den 
restlichen 4051 Eingang Y7 durchzuleiten.

Auf diese Weise kann ich mit 7 Outputs am Mikrocontroller theoretisch 
bis zu 113 ADC-Kanäle auf einen einzigen multiplexen. Jetzt braucht man 
nur noch ne kleine Logik im Controller, um die 7 Outputs korrekt zu 
besetzen.

Was meint ihr? Könnte das gehen oder sehr ihr irgendwelche Probleme?

von Lurchi (Gast)


Lesenswert?

Das ist viel zu kompliziert - irgendwie noch wie Schieberegister 
gedacht.

Günstiger ist es das Signal nur durch je einen der 4051 zu senden. Dazu 
gibt es den G Anschluss, um all Kanäle zu deaktivieren. Damit kann man 
dann die "Ausgänge" (Z) aller 4051 zusammen schalten und über die G Pins 
den Auswählen der gerade aktiv sein soll. Zur Auswahl könnte der HC154 
passen - ggf. auch besser ein HC138. Mehr als einen 4051 je 8 Kanäle und 
den HC154/138 für bis zu 16 bzw. 8 der 4051 braucht man also nicht.

von Highii H. (highii)


Lesenswert?

Lurchi schrieb:
> Günstiger ist es das Signal nur durch je einen der 4051 zu senden. Dazu
> gibt es den G Anschluss, um all Kanäle zu deaktivieren. Damit kann man
> dann die "Ausgänge" (Z) aller 4051 zusammen schalten und über die G Pins
> den Auswählen der gerade aktiv sein soll. Zur Auswahl könnte der HC154
> passen - ggf. auch besser ein HC138. Mehr als einen 4051 je 8 Kanäle und
> den HC154/138 für bis zu 16 bzw. 8 der 4051 braucht man also nicht.

Das habe ich leider noch nicht ganz verstanden. Was mir klar ist, ist, 
dass ich in der dargestellten Schaltung einen HC138 anstatt eines HC154 
nehmen kann.
Aber wo schalte ich alle Z der 4051 zusammen? Auf einen anderen 4051? 
Oder ist es so gedacht, dass ich alle Z auf wirklich einer mechanischen 
Leitung zusammenschließe? Also alle in einen Knoten zusammenlaufen?

von wendelsberg (Gast)


Lesenswert?

Highii H. schrieb:
> auf wirklich einer mechanischen
> Leitung zusammenschließe?

Nein, die Leitung sollte schon elektrisch sein.

wendelsberg

von Highii H. (highii)


Lesenswert?

wendelsberg schrieb:
> Nein, die Leitung sollte schon elektrisch sein.

Jo, is mir klar. Aber ist es so gedacht, dass sie sich in einem Knoten 
treffen?

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


Lesenswert?

Highii H. schrieb:
> Das habe ich leider noch nicht ganz verstanden.
> wo schalte ich alle Z der 4051 zusammen? Auf einen anderen 4051?

Du sollst die Z-Anschlüsse deiner 4 4051 direkt miteinander verbinden. 
Dann darfst du aber natürlich den G Anschluß nur eines 4051 auf L legen 
(der ist dann aktiv) und die anderen alle auf H (die sind dann inaktiv). 
Diesen Teil kannst du mit einem L-aktiven Decoder wie z.B. dem '138 
machen den du mit 2 GPIOs ansteuerst.

Vom Aufwand her vergleichbar ist es, wenn du die vier Z-Anschlüsse an 4 
Eingänge eines 5. 4051 anschließt und einen der Eingänge über S0, S1 auf 
Z (der an den ADC geht) durchschaltest. Das ist die Kaskadierung die ich 
schonmal vorgeschlagen habe. Einziger Nachteil der Kaskadierung ist, daß 
das Signal jetzt durch zwei 4051 durch muß statt immer nur durch einen.

Die Anschlüsse A, B, C (oder meinetwegen S0, S1, S2) der 4 4051 
verbindest du untereinander und mit je einem GPIO des µC. Den ganzen 
Kokolores mit extra Gattern läßt du weg.

von Highii H. (highii)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> Du sollst die Z-Anschlüsse deiner 4 4051 direkt miteinander verbinden.
> Dann darfst du aber natürlich den G Anschluß nur eines 4051 auf L legen
> (der ist dann aktiv) und die anderen alle auf H (die sind dann inaktiv).
> Diesen Teil kannst du mit einem L-aktiven Decoder wie z.B. dem '138
> machen den du mit 2 GPIOs ansteuerst.

Danke. Jetzt hab ich es verstanden. Habe es eben mal in LTSpice 
umgesetzt. Es funktioniert. Jetzt werde ich es mal "real" nachbauen.
Danke!!!

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.