Forum: Mikrocontroller und Digitale Elektronik 24 Lichtschranken mit dem PC überwachen


von Dominik R. (drdontknow)


Lesenswert?

Hallo,
ich bin auf der Suche nach eine günstigen Möglichkeit 24 oder mehr 
Lichtschranken mit einem PC zu überwachen und die Auslöser 
aufzusummieren.

Die Lichtschranken registrieren Gasbläschen in einer Sperrflüssigkeit, 
die bei einer chemischen Reaktion entstehen.

Ich habe auch schon ein Prototypen fertig der direkt an der serielle 
Schnittstelle (RS232) hängt. Das funktioniert super. Ich benötige leider 
nur mehr als einen Eingang.

Ich habe beim Prototypen festgestellt, dass die Abfrage des 
Phototransistor über 5kHz liegen muss, ansonsten gehen Signale verloren, 
will heißen ein Gasbläschen schummelt sich vorbei und der 
Spannungsabfall wird nicht registriert.

Eine Möglichkeit, die ich in Betracht ziehe wäre, drei Parallel - 
Seriellwandler (IC4021 vergl. www.skilltronics.de) in Reihe zu schalten 
und somit 24 Eingänge abfragen zu können. Fragwürdig ist, ob die 
Geschwindigkeit ausreicht (5kHz an jedem Eingang).

Eine weitere Möglichkeit ist einen Counter mit seriellem Ausgang 
zwischen Phototransistor und den Eingängen des 4021 zuschalten. Ein 
8-Bit Counter sollte genügen, da in der Minute maximal 100 Bläschen 
entstehen, jedes Bläschen löst zwei Spannungsabfälle aus also max. 200 
counts. Wenn der Counter alle 1 bis 10 Sekunden abgefragt wird, reicht 
das massig. Der Counter müsste allerdings einen seriellen Ausgang haben, 
und so einen habe ich bisher nicht finden können.
Vielleicht gibt es auch eine sehr viel einfachere Lösung. Ich bin offen 
für alles was Erfolg verspricht.

Grüße und Vielen Dank

von Frederik K. (n0ll4k)


Lesenswert?

Wie darf ich denn direkt an die serielle Schnittstelle verstehen?


Lösbar wäre das ganze ja mit nem passenden uC der dir dann über die 
Serielle Schnittstelle Daten schickt was wann geschaltet ist.

von Barny (Gast)


Lesenswert?

Wenn kein Ereignis verpasst werden soll, würde ich die Signale nicht 
direkt am PC auswerten.
Außer du verwendest ein Echtzeitbetriebssystem.

Es gibt 2 Möglichkeiten wie du das professionell lösen kannst.

Zum Einen mit einer speziellen I/O Karte für den PC.
(z.B. von National Instruments)

Oder zum Anderen mit einem Mikrocontroller und einem UART-RS232 
Pegelwandler.

von David .. (david1)


Lesenswert?

Ich würde irgendnen Atmel mit 16 Eingängen und nem Uart nehmen, den Uart 
über nen Pegelwa ndlerauf die RS232 Schnittstelle geben und mit dem 
Controller im 5kHz Takt oder mehr oder weniger die Eingänge abfragen und 
dann aufem Uart z.B. das ausgeben:

01:0,02:0,03:0,04:1,05:0,06:0,07:1,08:0,09:0,10:0,11:1,12:0,13:0,14:0,15 
:1,16:1,  ...

Das kann man dann ja Problemlos mittem PC auswerten.

von Thomas H. (flaretom)


Lesenswert?

Hallo,

Bei Modellbahnen wird als Rückmeldekanal eine Kette Schieberegister 
benutzt (Stichpunkt "S88"). Dazu gibt es Linux/Windows-Programme die so 
einen Bus ausnutzen. Zeitmäßig sollte das locker für 24 Eingänge 
reichen.

http://www.der-moba.de/index.php/S88-R%C3%BCckmeldebus

Irgendwo habe ich auch einfache DIY PC-Interfaces gesehen (praktisch nur 
Pegelwandlung auf RS232).

von Dominik R. (drdontknow)


Lesenswert?

Danke für die schnelle Antwort,

An Frederik:
Direkt an der seriellen Schnittstelle meint:
Es sind eine IR-Diode an der DSR und GND Leitung und ein passender 
Phototransistor an der RTS und CTS Leitung meines Com-Ports 
angeschlossen.

Ich hab ein Programm in VisualBasic geschrieben der die DSR Leitung 
(Photodiode) anschaltet und das Event PinChanged abfragt. Immer wenn 
einer Änderung stattgefunden hat und die CTS Leitung True wiedergibt 
wird einer dazugezählt. Der Rest ist hoffe ich klar.

Ich habe auch in einem Versuch einen Timer gesetzt (bei vb ist ein 
minimaler Intervall von 1 ms möglich) und so in regelmäßigen 
Zeitabständen CTS abgefragt und dabei festgestellt das von hundert 
Signalen etwa eins verlorengeht. Bei dem PinChanged-Event habe ich 
Verluste nicht merken können sie liegen weit unter einem von tausend.


Bei 5kHz sollte nur noch eines von fünfhundert Signalen verlorengehen, 
ein Fehler, mit dem ich leben kann, solange er systematisch (linear) 
ist, wird er im Faktor ‚ml pro count‘ einfach rausgerechnet. Der Ganze 
Versuchsaufbau hat einen Fehler von etwa 3% was machen 0,2% aus?

An Barny/David:
Eine TTL-I/O Karte habe ich auch schon in Betracht gezogen, z.B. von 
Quancom bei 'conrad' für ~200€, dass übersteigt mein Büget. Was das 
Programmieren von Mikrokontrollern angeht, davon habe ich kaum Ahnung, 
aber man kann das lernen, wenn man Zeit hätte und keine Ausrüstung.
Langfristig sicherlich interresant mal sehen im Winter wenn das Wetter 
schlechter ist.

An Thomas:
Das werde ich mir mal an schauen. ‚S88‘

Vielen Dank für die Antworten.
Gruß Dominik

von Andreas K. (derandi)


Lesenswert?

Wenn die Aufgabe nur darin besteht, zu überwachen OB und WANN 
Gasbläschen auftreten könnte man doch die Lichtschranken einfach alle 
ODER-Verknüpfen.
Je nach Technik der Lichtschranke würden dazu schon ein bisschen Draht 
und ein paar Dioden reichen.

von Martin P. (billx)


Lesenswert?

kann dabei nicht einfach auch eine blase zwischen zwei sensoren 
aufsteigen ohne das du es mitbekommst?

von Michael H. (michael_h45)


Lesenswert?

Folgendes kannst du machen:

Die Abfrage deiner Phototransistoren verlagerst du vom PC in einen 
Mikrocontroller deiner Wahl. Das können alle ausreichend schnell.

Wenn du noch eine RTC (Real Time Clock) an den Mikrocontroller 
anschließt, kriegst du deine "Blasenevents" locker Millisekundengenau 
auf einfache Weise.

Die serielle Schnittstelle - die praktisch jeder Mikrocontroller 
mindestens 1 mal hat - nutzt du dann nur noch zur Übertragung der vom 
Mikrocontroller fertig aufbereiteten Daten zum PC.

von Dominik R. (drdontknow)


Angehängte Dateien:

Lesenswert?

An Thomas:
Die S88 aus dem Modellbau sind leider auch nicht gerade günstig. Da ich 
zwei benötigen würde. Wären IO-Karte und S88 preislich nicht mehr weit 
auseinander.

An Andreas:
Über wachen war vielleicht nicht ganz korrekt ausgedrückt. Es müssen 
schon alle einzeln ausgezählt werden, da an jedem Zähler ein 
Reaktionsgefäß angeschlossen ist. Und ich von jedem ich die Gasmenge 
über der Zeit brauche.

An Martin:
Wenn Du meinst, dass rein mechanisch eine Blase den Strahlengang 
umwandert. Nein, dass alles ist in einem Reagenzglas (Innendurchmesser 
~15mm) und eine Düse erzeugt Bläschen, die groß genug sind, um sicher 
den Strahlengang zu passieren.
Signale gehen verloren weil die Blasen genau in der Millisekunde den 
Transistor auslösen, in der er nicht abgefragt wird.

An Michael:
Klingt einfach, ist das auch so?
Mikrocontroller (IC) meiner Wahl wäre wie oben schon erwähnt ein Counter 
mit serieller Schnittstelle, den hab ich bisher aber nicht finden 
können. Es gibt Counter ICs mit parallelem Ausgang zuhauf, das Signal 
müsste erst wieder seriell umgewandelt werden. Ein bisschen zu 
kompliziert.

Ist gibt von Mikrochip einen PIC10200 (Nr. ohne Gewähr). Der hat einen 
8-Bit Timer so weit ich da durchsehe kann der über eine externe Clock 
(mein Phototransistor) auch als Counter geschaltet werden. Dazu 3 oder 4 
I/O Pins in Kombination mit den 'IC4021' sollten die Daten irgendwie in 
den Rechner kommen können. Mein Hacken daran ist Ausrüstung kaufen 
(PICKit o.ä.) und Assembler lernen.

Darum wäre mir ein fertiger IC lieber vielleicht hat jemand einen Tipp.

Danke

von Barny (Gast)


Lesenswert?

Dominik R. schrieb:
> Ist gibt von Mikrochip einen PIC10200 (Nr. ohne Gewähr). Der hat einen
> 8-Bit Timer so weit ich da durchsehe kann der über eine externe Clock
> (mein Phototransistor) auch als Counter geschaltet werden. Dazu 3 oder 4
> I/O Pins in Kombination mit den 'IC4021' sollten die Daten irgendwie in
> den Rechner kommen können. Mein Hacken daran ist Ausrüstung kaufen
> (PICKit o.ä.) und Assembler lernen.

Dann brauchst du wieder für jede Lichtschranke einen Prozessor.

Nimm einfach einen Prozessor mit ausreichend Pin-Change Interupts.
Dann kannst du einfach hochzählen.
Ich weis nicht wie's mit den Pic's aussieht.
Aber jeder ATmega (AVR) hat einen USART eingebaut.
Dass ist nichts anderes wie eine RS232 Schnittstelle mit 0V/5V Pegeln.

Die AVR's haben den Vorteil dass die Programmierumgebung nichts kostet( 
AVR-Studio + WinAVR ) und einfach in C programmiert werden kann.

von Martin (Gast)


Lesenswert?

Ich glaube an deiner Stelle würd ich mir einen STK500 + ATMega32 
besorgen der hat die serielle sowie 32IO´s... der hat einen 16 bit 
counter sowie 2 8bit....baudratenquarz....

Und für Anfänger tuts auch Bascom oder für härtergesottene c.....

von Michael H. (michael_h45)


Lesenswert?

Dominik R. schrieb:
> An Michael:
> Klingt einfach, ist das auch so?
Nein (und nein =)
> Mikrocontroller (IC) meiner Wahl wäre wie oben schon erwähnt ein Counter
> mit serieller Schnittstelle, den hab ich bisher aber nicht finden
Nene, nicht ganz so primitiv.
Wie schon irgendwo steht, nimm am besten einen Atmega - zum Beispiel 32 
- und probier mit dem ein bisschen rum.
Sprich: Pins einlesen, über serielle Schnittstelle (UART genannt) zum PC 
übertragen, usw.
Alles, was du dazu brauchst - inkl persönlicher Unterstützung - findest 
du hier im Forum und beim AVR-Tutorial.
Wenn du das hast, versuch dich daran, die 24 Eingänge (das können auf 
die Schnelle 24 Stück Draht auf einen Massekontakt sein) einzulesen und 
auszuwerten und dann auch zum PC zu übertragen.

> können. Es gibt Counter ICs mit parallelem Ausgang zuhauf, das Signal
> müsste erst wieder seriell umgewandelt werden. Ein bisschen zu
> kompliziert.
Und auch der etwas falsche Ansatz. Da muss mehr "Intelligenz" her.

> Mein Hacken daran ist Ausrüstung kaufen
> (PICKit o.ä.) und Assembler lernen.
Es wäre vergebne Liebesmüh. Dein Ansatz ist dir noch nicht ganz klar - 
wenn ich das mal so sagen darf =)
Es gibt übrigens auch für die AVRs (Familie der Atmega) Basic. Nennt 
sich Bascom. Damit musst du nicht mal Assembler oder C lernen. Siehe 
dazu:
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/


Was ich mit meinem vorigen Beitrag sagen wollte:
Der Mikrocontroller übernimmt alles zur Detektion, was du bisher mit dem 
PC gemacht hast.


> Darum wäre mir ein fertiger IC lieber vielleicht hat jemand einen Tipp.
Atmega32.
Ja, auch der Tipp mit dem STK500 ist gut. Es garantiert reibungsloseres 
Einsteigen.

von Barny (Gast)


Lesenswert?

Ich würde aber einen uC nehmen, der über sogenannte PCINT verfügt.
Da bekommt man ein Ereignis, sobald sich ein Pegel an einem Eingang 
ändert.

von Karl H. (kbuchegg)


Lesenswert?

Barny schrieb:
> Ich würde aber einen uC nehmen, der über sogenannte PCINT verfügt.
> Da bekommt man ein Ereignis, sobald sich ein Pegel an einem Eingang
> ändert.

Ist in den Fall schon fast zuviel Aufwand.
Eine Polling Schleife, die alle Lichtschranken nacheinander durchgeht 
und auf Veränderung prüft. In den Pausen dazwischen kann man ja dem Mega 
noch ein wenig andere Arbeit zuschanzen (vielleicht etwas bei SETI 
mitrechnen), damit er sich nicht langweilt.

von Sam .. (sam1994)


Lesenswert?

Die serielle Schnittstelle würde sogar gehen, wenn du ein kleines 
bisschen mit deiner Abtastrate runtergehst:
24 Werte * 1bit = 3 Byte
3Byte*5Khz = 15KB/s
dafür brauchst du dann 15.000*8=120.000Baud.
Da man mit dem PC aber nur bis 115200baud gehen kann. Kannst du nur 
115200  8  3 = 4800 Messungen pro sekunde machen.

EDIT: Hab überlesen, dass es nur hundert Bläschen sind, dann ist es 
effizienter wenn du es jedes Bläschen überträgst wenn es ankommt.

von Derda (Gast)


Lesenswert?

Sieh dir mal den USB4ALL von Sprut an. Mit externen Portexpandern ist 
das kein problem. Überwache 128 Eingnge damit. Mit 10khz! Portexpander 
habe ich über I2C angebunden. Software habe ich in VB geschrieben, weil 
wirklich einfach zu bedienen.

von Floh (Gast)


Lesenswert?

Wenn du sowieso mit Basic und der seriellen Schnittstelle arbeitest, 
schau dir mal das an:
http://www.b-kainka.de/lpmikros.htm
Da haste dann erst mal alles zusammen, "Progger", Mikrocontroller, 
Bascom, serielle Schnittstelle.

von Sam .. (sam1994)


Lesenswert?

Naja für die serielle Schnittstelle vom PC musst du sowieso 
programmieren lernen. Allerdings würde ich dann nicht mit VB anfangen 
(ist zwar einfach, allerdings auch nicht sehr professionel). Ich würde 
z.b. c# nehmen, da ist es auch sehr einfach,.

von Michael H. (michael_h45)


Lesenswert?

Samuel K. schrieb:
> Naja für die serielle Schnittstelle vom PC musst du sowieso
> programmieren lernen. Allerdings würde ich dann nicht mit VB anfangen
lesen. das programm steht schon. deswegen reden wir hier auch alle von 
basic.

von Detlev T. (detlevt)


Lesenswert?

Dominik R. schrieb:
> 24 oder mehr
> Lichtschranken

Ein bisschen genauer müsste es schon sein. Mit einem 40-Pin ATMEGA hast 
du für 24 genug Pins. Du musst nur in regelmäßigen Abständen drei Ports 
auslesen (pollen bzw. Timer-ISR) und die Bits auswerten. Ab und an 
schnürt der ATMEGA dann ein Päckchen und versendet es via RS232.

Wenn du aber auf einmal 32 Lichtschranken abfragen willst, gehen dir die 
Pins aus.

von Sam .. (sam1994)


Lesenswert?

Detlev T. schrieb:
> Samuel K. schrieb:
>> Naja für die serielle Schnittstelle vom PC musst du sowieso
>> programmieren lernen. Allerdings würde ich dann nicht mit VB anfangen
> lesen. das programm steht schon. deswegen reden wir hier auch alle von
> basic.

Sorry hab ich überlesen.

von Dominik R. (drdontknow)


Lesenswert?

Hallo
Ich arbeite zurzeit mit 24 parallelen Versuchen. Mehr sind immer besser. 
Daher fand ich die Idee mit den einzelnen Counter-ICs gut. Die haben die 
Kapazität, eine Minute nicht abgefragt werden zu müssen. Was in 
Datenübertragung ja ein astronomischer Wert ist. Ich könnte das System, 
denke ich, dann einfach erweitern.

Wie schon richtig bemerkt, arbeite ich mit Basic, weil das seit 20 
Jahren mache und die ganzen Sonderzeichen und Klammern von C befremdend 
finde. Meiner Meinung nach sollte die Maschine eine Sprache verstehen, 
die auch der Mensch spricht „FOR…NEXT“ klingt für mich einfach logisch. 
Und das bisschen mehr Tippen macht mir nichts. Meine Abneigung gegen 
über Assembler ich schon geäußert.

Ich glaube auch die Frage, warum ich die serielle Schnittstelle benutzte 
ist einfach beantwortet:
Sie ist einfach, langt für einen Prototypen völlig und kostet nix extra.
Ich muss ja nicht nur die Elektronik zusammen basteln. Mich 
interessieren viel mehr Fragen wie: Linearität des ganzen Systems, 
Dauerstandfestigkeit (Verdunstung der Sperrflüssigkeit), Einfluss der 
Füllhöhe, Temperaturabhängigkeit, etc…

Und eigentlich will ich wissen, was in meinem Reaktor passiert…

Ich fasse mal zusammen:
Ich werde wahrscheinlich nicht um einen Mikrocontroller und die 
Anschaffung eines Brenners für die kleinen schwarzen Käfer herumkommen. 
Ist immer noch günstiger als die PCI-Karte. Und langfristig flexibler, 
aber auch Zeit intensiver und Zeit tickt...

Da Hardware für mich Neuland ist, muss erstmal sondieren, was es gibt.
Ich danke für alle Beiträge.

Dominik

von Sam .. (sam1994)


Lesenswert?

Das ist bei mir gerade anderstdrum: Ich finde C logisch und das 
Primitive Basic verwirrend. Aber das kommt wahrscheinlich davon, dass 
ich mit Sprachen wie  c angefangen hab bevor ich überhaupt programmieren 
konnte.

von Floh (Gast)


Lesenswert?

Dominik R. schrieb:
> Ich arbeite zurzeit mit 24 parallelen Versuchen.

Nochmal um die Anforderungen zu verstehen:

Ist es wichtig, welche Lichtschranke auslöst, oder können die 
Lichtschranken parallel geschaltet werden, um insgesamt einen Zähler zu 
takten?

von Ralph (Gast)


Lesenswert?

Wenn du dich hier mit µC für das Problem beschäftigen willst, dann sieh 
dir mal den TMS 470 von TI an . Ist ein ARM7 TDMI chip.

Ist zwar nicht so ganz der µC typ der hier im Forum favorisiert wird, 
ich denke aber für deine Anforderungen besser geeignet.

The TMS 470 hat ein Modul das sich HET( HighEndTimer) nennt.
Dieses Modul kann je nach µC Variante bis zu 32 IO Kanäle als separate 
Timer , Counter oder auch PWM Pins betreiben.
Und das mit einer Auflösung < 5 µsec für jeden Pin.

Zu Verbindung mit dem PC kannst du die vorhandene Uart nutzen.

von Martin V. (oldmax)


Lesenswert?

Hi
Nachdem ich die Antworten kurz überflogen habe, kann ich dir auch nur 
einen Cntroller vorschlagen. Das Pollinboard bringt eigentlich alles 
mit, was du brauchst und du kannst die Platine für deinen Versuchsaufbau 
gleich einbeziehen. Kosten zwischen 15 und 22 €. Die Atmegas (min. 3-5 ) 
kannst du dort auch bekommen Ca, 1,50 €/Stk und Software gibt's im Netz.
Mit einer Eingabematrix kannst du locker 24 Eingänge verarbeiten. RS 232 
ist auf Atmega 8 bereits drauf, muß nur versorgt werden. Infos gibt's 
hier in den Tutorials, danach hab ich auch gelernt.
Ich denke, der Aufwand hält sich in Grenzen
Gruß oldmax

von Karl H. (kbuchegg)


Lesenswert?

Detlev T. schrieb:

> Wenn du aber auf einmal 32 Lichtschranken abfragen willst, gehen dir die
> Pins aus.

Da hast du recht.
Das sollte man von Anfang an berücksichtigen.

Bleibt es bei den 24, oder können das auch irgendwann einmal 100 werden?
(Nur um jetzt mal eine große Zahl zu nennen).

Gegen das Pin-Dilemma gibt es einen einfachen Ausweg: Schieberegister 
als I/O Erweiterung.
Das Ganze könnte man als Basis-Modul mit ansteckbaren Erweiterungen 
konzipieren, wobei man mit jeder Erweiterung zuätzlich weitere 8 
Eingänge für Lichtschranken erhält.

Hardwaremässig ist das nicht der große Aufwand und softwaremässig ist es 
auch kein Thema.

Ist die Anzahl der Lichtschranken aber fix, dann ist so ein 
erweiterbarer Aufbau zweifellos Overkill.

von Detlev T. (detlevt)


Lesenswert?

Hallo Karl Heinz,

es ist doch komisch, dass immer noch gilt: Wer die Frage nicht kennt, 
findet auch keine passende Antwort. :D

Bei den heutigen Preisen könnte es sogar sinnvoll sein, an jede 
Lichtschranke einen ATTINY fürn € o.ä. zu packen und mit einem Bus zu 
verbinden. Vielleicht auch als Ring. Der Master schickt ein leeres Paket 
los, jeder Kontroller hängt seine Daten an und am Ende landet alles 
wieder beim Master. Ideen gibt es immer.

Gruß, DetlevT

von Dominik R. (drdontknow)


Lesenswert?

Hallo Detlev

endlich jemand der mich versteht.

Ich weiß nicht genau was ein ATTINY ist. Aber der PIC10200 kostet 0,5€!! 
Die Dinger Zählen lassen und ab und zu den Wert abfragen, Zähler nullen 
und von vorne. Ich glaube man könnte so auch hundert hinter einander 
schalten. Sie müssen ja nur einmal die Minute abgefragt werden.
Es gibt auch fertige Counter ICs aus der 40xx Reihe die kosten ebenfals 
unter 1€, haben jedoch eine parallel Schnittstelle. Das Draht-Gefummel 
ist damit einfach zu komplizert.

Mein Favorit wäre immer noch ein kleiner 8 Pin IC mit einem Pin der 
Zählt einem zum Reseten und drei für den Datentransfer. (Nächstes Byte, 
Nächste Bit, Data). Davon 24+x an die 4021 Parallel-Serielwandler (0,9€ 
für 7 Eingänge + 1 für den Übertrag) und ich bin ohne groß Hirnschmalz 
in Registern etc. zu verlieren bei einer flexiblen und günstigen Lösung.

Gruß Dominik

von Dominik R. (drdontknow)


Angehängte Dateien:

Lesenswert?

Hallo

nochmals Danke für die Unterstützung. Letztendlich habe ich mir ein 
Pollin Board besorgt. Das ist zwar etwas unwillig aber billig.

Auch die Idee mit dem Ringbus habe ich bei Seite geschoben und mich für 
die schnell umsetzbare Methode des Pin abfragens an einem ATMEGA32 
entschieden.

Das Tutorial "kleiner_bascom_avr_kurs" ist Idioten sicher.

Nach dem ich Stunden mit Ponyprog und Internetforen durchkämmen 
verbracht habe nur um festzustellen das mein Kabel zu lang war, blinkern 
die kleinen Lämpchen und ich strahle wie ein Honigkuchenpferd.


Zum meinem Problem:

Wie schließe ich eigentlich einen Fototransitor (siehe unten) an den 
ATMEGA32 an? So wie auf dem Bild? Muss ich dann die internen PullUp 
Widerstände anschalten?


Datenblatt des Fototransistors:
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/156408-da-01-en-IR_PHOTOTRANSISTOR_PT331C.pdf

Gruß Dominik

von Michael H. (michael_h45)


Lesenswert?

Dominik R. schrieb:
> Nach dem ich Stunden mit Ponyprog und Internetforen durchkämmen
> verbracht habe nur um festzustellen das mein Kabel zu lang war, blinkern
ein Klassiker =)
> die kleinen Lämpchen und ich strahle wie ein Honigkuchenpferd.
Gratuliere! Freut mich.

> Wie schließe ich eigentlich einen Fototransitor (siehe unten) an den
> ATMEGA32 an? So wie auf dem Bild? Muss ich dann die internen PullUp
Fast. Häng den AVR-Eigang unter die LED, damit der sicher vom 
Phototransistor auf GND gezogen wird und nicht irgendwo bei der 
Vorwärtsspannung der LED schwebt.
Die Pegel, an denen ein Portpin als high oder low erkannt wird, stehen 
im Datenblatt unter Electrical Characteristics. Es empfiehlt sich, diese 
einzuhalten und mit einem Multimeter zu kontrollieren.

> Widerstände anschalten?
Nein, brauchst du nicht.

Was hat denn dein Vorwiderstand für einen Wert?

von Dominik R. (drdontknow)


Lesenswert?

Hallo,

meine Kenntnisse in Elektrotechnik sind nicht die besten:
Ich würde mit einem Poti hoch anfangen bei 100kOhm  oder so und dann 
langsam runter drehen bis, die LED leuchtet und der Pin auf den 
Spannungswechsel reagiert. Den Widerstand messen und etwas 
vergleichbares +- 10% einbauen.

Wenn ich die LED unter den AVR schalte. Dann blinkt sie aber nicht mehr 
wenn der Transitor ausgelöst wird, oder?. Sie dient als optische 
Kontrolle und sollte wenn möglich blinken wenn sich eine Bläschen sich 
ablöst. Ist aber am Ende auch nur Mäusekino. Kann man auch weg lassen.

Gruß Dominik

von Michael H. (michael_h45)


Lesenswert?

Dominik R. schrieb:
> Ich würde mit einem Poti hoch anfangen bei 100kOhm  oder so und dann
> langsam runter drehen bis, die LED leuchtet und der Pin auf den
> Spannungswechsel reagiert. Den Widerstand messen und etwas
> vergleichbares +- 10% einbauen.
Ja, guter Ansatz.
Aber auf alle Fälle noch validieren, dass sich die vorkommenden Größen 
innerhalb der in den jeweiligen Datenblättern aufgeführten zulässigen 
Grenzen bewegen.
Das sind v.a. Kollektorstrom im Phototransistor, Verlustleistung am 
Phototransistor (Kollektor-Emitterspannung auf Kollektorstrom) und 
high-/low-Pegel des AVR-Portpins.

Nachdem die Energiedichte, die am Phototransistor ankommt, nicht mit der 
einer direkten Bestrahlung vergleichbar sein wird und der maximale 
Kollektorstrom damit sehr niedrig ausfallen wird, würde ich dir entweder 
empfehlen, eine zusätzliche Transistorverstärkerstufe einzuplanen, oder 
aber die LED wegzulassen.
http://vorlon.case.edu/~flm/eecs245/Datasheets/Sharp%20photodevices.pdf
Figure 11 zum Beispiel für ersteren, Figure 9 für zweiteren Fall.

> Wenn ich die LED unter den AVR schalte. Dann blinkt sie aber nicht mehr
> wenn der Transitor ausgelöst wird, oder?. Sie dient als optische
Doch, sicher. Der Portpin des AVR ist als Eingang so hochohmig, dass du 
seinen Einfluss bei den vorkommenden Bauteilen völlig ignorieren kannst.

von Dominik R. (drdontknow)


Lesenswert?

Hallo,

ein Problem jagt das nächste.
Der Fototransistor ist, wie kurz zuvor (15.08.2010 02:01 siehe oben) 
beschrieben, an PORTA.2 angeschlossen. Die Idee mit der LED war quatsch, 
sie leuchtet nicht, blinkt also auch nicht.
Für den Widerstand hat sich ein Wert von 10 MOhm ergeben. Ist die 
Lichtschranke offen, liegen etwa 50 mV an. Ist sie zu, so sind es 3.5 V.

Mein Programm auf dem Chip (Atmega 32) funktioniert prinzipiell so:

10 Port kopieren
20 Kopie mit Temp. vergleichen
30 Wenn sie nicht identisch sind dann sende alle Ports an den PC
40 Kopie als Temp setzen.
50 nächsten Port
60 GOTO 10 (um C++ler jetzt richtig zu schocken...)

Am PC wartet ein Programm, das den Com-Port Buffer ausliest und die 
Ports in binärer Form listet.

Die Pins werden vom Pollin-Eval-Board über ein 40-Pol-Flachbandkabel, zu 
einem Steckbrett geführt. Dort ist erstmal eine Lichtschranke aufgebaut.

Wenn ich jetzt mein Stückchen Pappe  durch die Lichtschranke schiebe, 
bekomme ich folgende Ausgabe:

ist:

Port    A        B        C
Pin     76543210 76543210 76543210
----------------------------------
1       10011111:00000000:11000010:
2       10011011:00000000:11000010:
3       10010011:00000000:11000010:
4       10000011:00000000:11000010:
5       10000010:00000000:11000010:
6       10000110:00000000:11000010:
7       10000111:00000000:11000010:
8       10001111:00000000:11000010:
9       10000111:00000000:11000010:
----------------------------------

soll:

Port   A        B        C
Pin    76543210 76543210 76543210
----------------------------------
1      00000100:00000000:00000000      'Und es sollte so aussehen.
2      00000000:00000000:00000000      'Der Fototransitor ist an PORTA.2
----------------------------------     'Angeschlossen

Wird der Transistor an einen anderen Pin geschlossen dann sieht es 
ähnlich aus.

Folgendes habe ich schon probiert:

Kondensator parallel zu dem Fototransistor (1nF,3.3nF,1000nF mehr gibt 
meine Bastelkiste nicht her). Je nach Größe wird die Reaktion auf mein 
Pappengewedel langsamer und es sind ein paar Pinwechsel weniger. Die 
Daten oben wurden mit 1000nF aufgezeichnet.

Die Auswertung der Pins mit DEBOUNCE. Es wird nur noch ein 
Spannungswechsel angezeigt (DEBOUNCE unterscheidet zwischen auf und 
absteigender Flanke), meine Routine nicht. Aber das Problem mit den 
Kuddelmuddel zwischen den Pins besteht weiter. Und es wird sehr langsam.

Die UART-Schnittstelle funktioniert sicher. Ich lasse mir am Beginn des 
Programms die Werte 255,127,63...2,1 ausgeben und die kommen auch so an.

Gruß Dominik

von Dominik R. (drdontknow)


Lesenswert?

Oh...

Hat sich erledigt nach Studium des Datanblattes und dem kleinen 
Bascom-Kurs:

Am Port A liegen die AD-Wandler. Mit einem Kondensator (100nF) AREF auf 
GND werden sie entstört.

Ciao

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.