PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GP2D12 als digitalsensor?



MarkusH
02.03.2005, 11:38
Hallo,
ich hab den Sharp GP2D12 Analog-Sensor. Habe aber keine ADC-Ports mehr an meinem AVR. Ich habe jetzt den sensor über einen Transistor angeschlossen. Ich möchte jetz das der Transistor 5V schaltet wenn an der Basis ne bestimmte Voltzahl von der Lichtschranke anliegt. Aber ich glaube das Transistoren grundsätzlich bei ca. 1,5V schalten oder so. Kann ich vielleicht die Lichtschranken-ausgangsspannung auf ein bestimmtes Niveau angleichen damit sie bei einer bestimmten entfernung diese 1,5V überschreitet?

Vielen Dank für eure hilfe.

Gruß, Markus

MarkusH
02.03.2005, 12:06
Ich hab grad nach ein bischen stöbern im Conrad bemerkt das es für sowas sogenannte Schwellwertschalter gibt. Hat da jemand erfahrung damit? Welchen nimmt man denn da am besten?

Ringo
02.03.2005, 12:50
Ich kenn mich da auch nicht so aus.. aber ein Schmitt Trigger (oder?) vergleicht 2 spannungen und wenn eine höcher ist dann schaltet er auf High..

Manf
02.03.2005, 13:14
Zu dem Thema hatten wir auch schon was:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=54583#54583
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=58356#58356


http://www.elektronik-kompendium.de/sites/bau/diagramm/02092412.gif

Jan_Weber
02.03.2005, 17:56
Mensch! Das ist die Funktion eines Komparators, eine der absoluten Grundschaltungen des Operationsverstärkers.

Der nichtinvertierende Eingang (+) kommt an dein Sensor-Signal,
der invertierende Eingang (-) an ein Poti, womit du den Schwellenwert einstellen kannst,

und mit dem Ausgang kannst du einen Transistor oder den AVR-Pin direkt ansteuern.

Wenn du Hysterese hinzufügt (die zeigt das Diagramm von Manf), kannst du ausschließen, dass der Komparatorausgang chaotisch hin- und herschaltet, wenn Sensorausgang und Schwellenwert fast deckungsgleich sind und minimal fluktuieren. Du erhältst damit eine Beruhigung des Ausgangssignals.

Eine Alternative wäre, die AD-Ports mit einem Multiplexer umzuschalten.

Ein Transistor (Silizium) schaltet ab etwa 0,6 V.

Jan

vish
02.03.2005, 20:35
Guten Abend!

Warum nimmst du nicht einfach den PCF8591 von Phillips?
Der wandelt dir sogar bis zu 4 analoge Signale in digitale Form um und schiebt dir das digitale Signal auf den I²C Bus.
Einen Digital/Analog Wandler hat der Chip auch noch integriert.
Edit: Nur so als kleine Korrektur: Transistoren schalten ab 0,7V Basisvorspannung durch. (Jedenfalls die meisten)

Grüße,
Jonas

MarkusH
03.03.2005, 11:56
Danke für die vielen Antworten. Das mit dem PCF8591 klingt mal ganz gut. Allerdings habe ich noch nie mit diesen von-IC-zu-anderem-IC-bussen zu tun gehabt. Dieser I²C-Bus ist das gleiche wie der SPI von meinem ATmega162 oder? Hat jemand zufällig schon einen Bascom-Codeschnipsel zum ansteuern eines PCF8591?

Jan_Weber
03.03.2005, 13:01
Ich würde dir eher einen Multplexer vorschlagen, das ist ein billiges CMOS-4000er IC, mit dem du aus einem AD-Eingang bis zu 16 machen kannst. Der Baustein heißt CD4067. Such dir mal bei Google ein Datenblatt. Du brauchst kein neues Bus-Protokoll zu implementieren, das müsstest du beim I2C-CHip PCF8591 tun. I2C ist nicht SPI.

Ich verwende es selber auch in meinem Robot. Es braucht 4 Digitalports, um den jeweiligen Eingang zu selektieren und einen AD-Pin für seinen Ausgang.

ICh habe bei meinem Aufbau die oberen 4 Pins des AD-Ports als Outputs definiert, und den Eingang AD0 als Analogeingang benutzt. Den internen AD-Multiplexer setzt du also für immer auf Eingang 0. Auf die oberen Pins schreibst du einfach die Nummer des Kanals, den du auslesen willst. Dann startest du die AD-Konversion.

So opferst du zwar 4 Pins, bekommst aber 16 dafür. Und der PCF8591 hat glaube ich auch nur 2 oder 4 AD-Kanäle.

Gruß,

Jan

03.03.2005, 20:42
Ja aber der CD4067 ist ja nur ein multiplexer. Wenn ich das richtig verstanden hab brauch ich ja trozdem einen AD-Port an meinem Atmega an den ich dann halt über den CD4067 mehrere analog-spannungen anlegen kann ja? Mein Problem ist das die beiden AD-Pins des Atmegas als zweite funktion das 2.UART haben. Und das UART hab ich schon angeschlossen und will das nicht wieder abreißen wenns schon funktioniert. Somit habe ich keinen AD-Pin mehr frei und kann mir den CD4067 sparen oder?

MarkusH
03.03.2005, 20:43
Hoppla, war nicht eingeloggt O:)

Jan_Weber
04.03.2005, 00:02
Welchen ATmega verwendest du denn jetzt? Der 162 hat doch gar keinen AD-Wandler? Drück dich mal was klarer aus.

Jan

MarkusH
04.03.2005, 17:49
Ja, ich hab den Atmega162. Vielleicht ist das kein AD wandler sondern ein Analog-Comparator. Die Pin-Bezeichnung ist RXD1/AIN0 und TXD1/AIN1. Mit den AIN-Pins kann man doch analog-spannungen messen bzw. mit einer Referenz-Spannung vergleichen. Konnt ich zumindest mit den AIN-Pins des Mega8. Jetzt hab ich mir nen ATmega162 zugelegt weil der ein zweites UART hat. Und jetzt kann ich die AINs nicht nutzen weil das eben die gleichen pis sind wie das zweite UART. Und da suche ich jetzt verzweifelt eine Lösung dafür.

Jan_Weber
04.03.2005, 19:21
Jo, das ist ein Analog-Komparator. Dann habe ich die Lösung schon weiter oben genannt:

Du musst einen externes Komparator-IC nehmen (LM339, LM311 o. ä.), die Eingänge wie oben beschrieben verbinden und dann den Ausgang auf auf einen Digitalport legen.

Das wärs eigentlich auch schon.

Einen externen AD-Wandler einzubauen ist dann eigentlich die beste Lösung, weil du dann den Wert des Sensors in voller Qualität erfassen kannst.

Jan

MarkusH
05.03.2005, 12:28
Oh, sorry, ich dachte das es bei deinem Beitrag weiter oben noch um den Schmitt-Trigger geht. Also ich hab mal das Datenblatt vom LM339 angekuckt, sieht einfach aus... ich glaub den werd ich mal ausprobiern.
Vielen Dank

Jan_Weber
05.03.2005, 12:54
Du kannst einem Komparator eine Schmitt-Trigger-Charakteristik geben, wenn du im eine Hysterese verpasst. Liest das mal im Elektronik-Kompendium nach.

Du kannst alternativ auch einen Operationsverstärker verwenden - wenn du einen LM741, LM324, TL07x, TL08x oder ähnlich zu Hause hast, ist der genauso gut (in diesem Fall).

Jan