Forum: Mikrocontroller und Digitale Elektronik 8 Lichtschranken mit Tutorialaufbau abfragen


von Johannes Permoser (Gast)


Lesenswert?

Hi,

es geht um eine Facharbeit:
Ich soll 8 Lichtschranken abfragen, und jeweils die Zeit der
auf-zu-auf-Zyklen messen und die Zeitabstände, in denen die Schranken
geöffnet werden.

1. Ist dies mit einem ATmega8 und der Entwicklungplatine ausm Shop
möglich?
2. Wie schwer ist es, die Daten mit dem PC dann wieder auszulesen?
3. Wie genau wird die Zeitmessung ungefähr?

MfG, Johannes Permoser

von Thomas (Gast)


Lesenswert?

Das was Du brauchst, sind 8 Eingänge. Die hat der Mega8!

Ich weiß nicht, wie genau Du die Messungen machen musst. 8MHz sollten
reichen; ansonsten nimm einen µC+Quarz der bis zu 32MHz kann...aber,
das wirst  wahrscheinlich nicht benötigen.

Die Daten mit dem PC auslesen? Nicht schwer! Ein Pegelwandler ist ja
schon drauf. Sieht Tutorial - Kapitel 6 UART.

Wie genau die Zeitmessung wird? Sehr genau - sofern Dir die Aussage
reicht ;-)

von Markus (Gast)


Lesenswert?

Hi.
Also ich habe zwar nichts mit Zeitmessung gemacht aber eine IR
Lichtschranke mit 8 Eingängen gebaut.
Das war Sinn und zweck für eine Eisenbahn um zu erkennen ob auf dem
Gleis ein Zug steht oder nicht.

Ich denke ich kann dir helfen aber du müsstest eben noch mehr Infos
dazuschreiben.

Was genau willst du eigentlich messen (nur Interesse halber)?
Wie lange und wie schnell darf so ein Zyklus (also von offen bis
geschlossen) sein?

Das Auslesen über RS-232 funktioniert mit ein paar Zeilen code. Ist
nicht sehr aufwendig.
Welche Kenntnisse über µC hast du schon?

von Johannes Permoser (Gast)


Lesenswert?

> Wie genau die Zeitmessung wird? Sehr genau - sofern Dir die Aussage
> reicht ;-)

Ungefähre Größenordnung? Milli-  Mikro-  Nanosekunden?

> Was genau willst du eigentlich messen (nur Interesse halber)?

Es geht um eine Lichtschrankenschiene mit 8 LS. Später wird für
Beschleunigungsversuche mal ein Gleiter durchfahren.

> Wie lange und wie schnell darf so ein Zyklus (also von offen bis
> geschlossen) sein?

Also sagen wir mal der Gleiter fährt am Ende der Schiene mit 2m/s. Dann
unterbricht das 1cm breite Fähnchen die Lichtschranke für 0.005s. Dieser
Wert sollte mit ca. drei gültign Ziffern ermittelt werden. Außerdem soll
noch die Zeit gemssen werden, die der Gleiter zwischen den
Lichtschranken verbringt. Das sind bei v= 2m/s ungefähr eine Zehntel.
Auch hier wieder 3 geltende Ziffern.
Die ganze Messung wird wohl in unter 10sec abgeschlossen sein.

> Welche Kenntnisse über µC hast du schon?

Das was ich im Tutorial und auf ein paar anderen Seiten dazu gelesen
habe ^^

von Markus Neubauer (Gast)


Lesenswert?

"Ungefähre Größenordnung? Milli-  Mikro-  Nanosekunden?"
Wenn du dir selbst fragen stellst aber meine nicht beantwortest wird
das nicht einfacher.

Hast du die Tutorials "nur" gelesen oder damit auch schon was
programmiert.
Eigentlich ist in dem Tutorial hier auf der Page alles drin was du
brauchst. Da wären die I/Os sowie der Timer und die RS-232 anbindung.

Also um die 5ms zu Messen ist das von der µC Geschwindigkeit her kein
Problem.

Wenn ich das richtig verstanden habe sollen sobald die letzte
Lichtschranke durchquert ist, die Messwerte per RS-232 an den PC
übermittelt werden?

Ich würde dir empfehlen den Code so weit zu machen wie du kommst und
dann gezielt einfach zu Fragen wenn du nicht mehr weiter kommst.

von Rahul (Gast)


Lesenswert?

8 Eingänge im Abstand von 100µs abfragen und eventuell noch Zeiten
notieren?
Das kann mna fast schon in Bascom machen...
Guck mal auf hannes Internet-Seite (musst halt suchen...) . Da macht er
sowas im 10µs-Raster...

von Johannes Permoser (Gast)


Angehängte Dateien:

Lesenswert?

So, ich hab mal einen Schaltplan angefertigt. Bitte mal anschauen und
kontrollieren ob was falsch ist.

Der Pullup-Widerstand an den Schaltern sorgt dafür, dass der Strom und
die Spannung, die den Controller bei geschlossenem Schalter trifft,
begrenzt wird?
Man könnte anstatt der Widerstände RA - RD auch, einen Wiederstand
(gleich viel Ohm) vor die Verzweigung setzten, dann dürfte aber nur
immer einer der Schalter S1 - S4 geöffnet werden um die gleichen
Ergebnisse wie mit 4 Widerständen zu erreichen. Stimmt das?
Wie groß müssen die Widerstände RA - RH sein?

von Rahul (Gast)


Lesenswert?

nimm 10kOhm... oder die internen Pull-Up...
Wo sind denn die Lichtschranken?

von Markus (Gast)


Lesenswert?

Jo ich würde auch ganz einfach die internen Pull UP Wiederstände
aktivieren.

von Hannes L. (hannes)


Lesenswert?

Den 4433 gibt's nicht mehr, das Tutorial gibt's ja schon 'n paar
Wochen... Nimm den Mega8, der ist pinkompatibel.

Die Megas haben interne Taktquellen, du kannst dir den Quarzoszillator
(Stromfresser und Störmüllschleuder) sparen. Sie werden mit aktiviertem
internen Taktgenerator 1MHz ausgeliefert. Einen Quarz brauchst du nur,
wenn der Takt sehr genau sein muss, z.B. für UART (dann Baudratenquarz
benutzen) oder Uhr.

Spendiere Vcc und AVcc jeweils einen 100nF-Keramik-Kondensator
möglichst dicht am IC gegen Masse. Das unterdrückt Störungen.

...

von Johannes Permoser (Gast)


Angehängte Dateien:

Lesenswert?

> Wo sind denn die Lichtschranken?

Ich hab sie mal im Bild mit rot gekennzeichnet.

> Ich würde einfach die internen Pull UP Widerstände aktivieren.

1. Wie macht man das?
2. Wie muss ich dann die Lichtschranken schalten? Einfach die
Widerstände weglassen?

> Einen Quarz brauchst du nur, wenn der Takt sehr genau sein muss, z.B.
> für UART (dann Baudratenquarz benutzen) oder Uhr.

Ich bräuchte beides. Eine genaue Uhr und Datenübertragung zum PC.
Welchen Oszillator soll ich dann nehmen? Bei Reichelt gibts ja
mindestens 20 im Bereich von 1 - 8 MHz (so viel schafft der ATmega8
doch maximal, oder?)

> Spendiere Vcc und AVcc jeweils einen 100nF-Keramik-Kondensator
> möglichst dicht am IC gegen Masse. Das unterdrückt Störungen.

Sind die an den blauen Stellen richtig platziert?

von Hannes L. (hannes)


Lesenswert?

Besorg dir erstmal das Datenblatt (vollständige Version) des Mega8. Ohne
das kommst du sowiso nicht weiter.

Die internen PullUp-Widerstände schaltet man ein, indem man den Port
als Eingang schaltet (ddrx auf 0 setzt) und den Ausgang auf 1 setzt
(portx auf 1). Dann kann man an pinx den Eingangspegel einlesen, der
durch die internen PullUps gegen Vcc gezogen wird, wenn er von außen
nicht nach GND gezogen wird.

Die Transistoren der Lichtschranken sollen den Pin nach GND ziegen.

Die 100nF-Keramik-Cs müssen zwischen +5V und GND, der an AVcc ist also
falsch. Wichtig ist aber, dass sie so dicht wie möglich an die Pins des
Controllers müssen. Ich nehme dazu gern SMD-Chipkondensatoren, die
lassen sich leicht an die Leiterzüge pappen.

Bei der Auswahl des Quarzes (normaler zweibeiniger Quarz an xtal1 und
xtal2) geht die serielle Schnittstelle vor. Du brauchst also einen
Baudratenquarz. Welche Frequenzen für Baudraten besonders geeignet
sind, erfährst du im Datenblatt unter USART in den Baudratentabellen.
3,686400MHz oder 7,372800MHz sind schonmal gut geeignet. Ein gutes (und
preiswertes!) Sortiment an Baudratenquarzen bekommst du bei
http://www.csd-electronics.de/. Zum Quarz brauchst du noch 2
Kondensatoren um die 18pF von den Quarzanschlüssen gegen GND. Da kannst
du auch Chipkondensatoren nehmen.

Die (und die 100nF) gibt es auch sehr günstig bei CSD, genau wie AVRs
und viele andere oft gebrauchte Dinge. Bei kleinen Bestellungen sind
auch die Versandkosten klein. Einfach mal reinschaun und den
PDF-Katalog herunterladen, dann per Mail oder im Onlineshop bestellen.

...

von Johannes Permoser (Gast)


Angehängte Dateien:

Lesenswert?

> Besorg dir erstmal das Datenblatt (vollständige Version) des Mega8.
> Ohne das kommst du sowiso nicht weiter.

Ok, gemacht.

> Die internen PullUp-Widerstände schaltet man ein, indem man den Port
> als Eingang schaltet (ddrx auf 0 setzt) und den Ausgang auf 1 setzt
>(portx auf 1).

Das sollte man bevor man die Lichtschranken anschließt über das
Terminalprogramm erledigen, oder?

> Dann kann man an pinx den Eingangspegel einlesen, der
> durch die internen PullUps gegen Vcc gezogen wird, wenn er von außen
> nicht nach GND gezogen wird.
> Die Transistoren der Lichtschranken sollen den Pin nach GND ziegen.

Müsste dann wie im Ahang aussehen, oder?

> Die 100nF-Keramik-Cs müssen zwischen +5V und GND, der an AVcc ist
also
> falsch.

Wo muss er dann hin?

> Wichtig ist aber, dass sie so dicht wie möglich an die Pins des
> Controllers müssen. Ich nehme dazu gern SMD-Chipkondensatoren, die
> lassen sich leicht an die Leiterzüge pappen.

Wie so dicht wie möglich an die Pins des Controllers? Ich dachte sie
sollten zwischen Vcc und GND?
Die SMD-Kondensatoren sind doch aber schwerer zu löten und man braucht
dafür eine spezielle Leiterplatte mit Pads? (zumindest lese ich das
grad im Tutorial)

Noch eine Frage: Unser Leherer meinte, wir sollten das ganze doch
lieber mit einem USB-Anschluss machen. Was wäre hier wohl die
leichteste Lösung? Einfach anstatt das MAX232 einen FT232 nehmen?

von Karl H. (kbuchegg)


Lesenswert?

> Die internen PullUp-Widerstände schaltet man ein, indem man den Port
> als Eingang schaltet (ddrx auf 0 setzt) und den Ausgang auf 1 setzt
>(portx auf 1).

> Das sollte man bevor man die Lichtschranken anschließt über das
> Terminalprogramm erledigen, oder?

Nein. Das erledigt das Program, das am µC laeuft.
Die Pullups brauchst Du nur deshalb, damit am Port
immer ein definierter Pegel anliegt.

Wenn ich mir Deine Fragen so anschaue:
Besorg Dir den Atmel. Besorg Dir ein Steckbrett.
Arbeite mal das Tutorial auf dieser Site durch und
probier das alles aus.

von Hannes L. (hannes)


Lesenswert?

> Das sollte man bevor man die Lichtschranken anschließt über das
> Terminalprogramm erledigen, oder?

Nööö...
Das muss das AVR-Programm (also das Programm, welches im Mega8 läuft
und welches du selbst schreiben musst, wenn der Mega8 auch nur
irgendetwas tun soll) erledigen. Das Terminalprogramm (auf dem PC) kann
allerhöchstens zum Anzeigen der Daten genutzt werden.

Vielleicht solltest du das inzwischen beschaffte Datenblatt auch mal
lesen?

> Müsste dann wie im Ahang aussehen, oder?

Ja, schon, wenn die Leitungen zu den Tastern/Lichtschranken kurz sind
und keine Störungen zu erwarten sind. Mit externen PullUp-Widerständen
wird es allerdings sicherer, da nicht so leicht Störungen eingefangen
werden können. Jede Leitung ist schließlich eine Antenne und die
internen PullUps sind relativ hochohmig (siehe Datenblatt, electrical
characterisics).

> Wo muss er dann hin?

Er muss zwischen Plus und Minus, also zwischen Vcc und GND, du hast ihn
aber in Reihe zur Stromversorgung AVcc.

> Wie so dicht wie möglich an die Pins des Controllers? Ich dachte sie
> sollten zwischen Vcc und GND?

Richtig, aber räumlich so dicht wie möglich an die Stromversorgungspins
des AVRs. Das hat aber nix mit AVR-Spezialwissen zu tun, sondern mit den
Grundlagen der Digitaltechnik und des Platinendesigns. Dieses Wissen
solltest du dir schon aneignen, wenn du Platinen mit Digitaltechnik
entwerfen und anfertigen willst. Das ist auch etwas komplexer, als dass
man das per Frage und Antwort im Forum vermitteln könnte. Da gibt es
dicke Bücher drüber, und viele Webseiten...

> Die SMD-Kondensatoren sind doch aber schwerer zu löten und man
> braucht
> dafür eine spezielle Leiterplatte mit Pads? (zumindest lese ich das
> grad im Tutorial)

Dann nimm doch die bedrahteten Kondensatoren. Ich nehme lieber die
SMDs, weil man die (bei Experimentierplatinen) so schön zwischen zwei
sowiso vorhandene Leiterzüge pappen kann.

Wenn dir aber noch so viele Grundlagen fehlen, dann nimm doch lieber
eine fertige Experimentierplatine, wie sie von diversen Anbietern
angeboten werden. Es muss ja auch nicht der Mega8 sein, ein Mega16 ist
(incl. Platine) auch nicht viel teurer, hat aber mehr und vor allem
übersichtlicher angeordnete Ports. Such doch mal nach AVR und Board, da
findest du sicher etwas. Mit einem fertigen Board hast du eine
Fehlerquelle weniger, denn die erste selbstgestrickte Platine
funktioniert in den seltensten Fällen auf Anhieb.
Leider kann ich dir kein konkretes Board empfehlen, da ich sowas nicht
benutze.

> Noch eine Frage: Unser Leherer meinte, wir sollten das ganze doch
> lieber mit einem USB-Anschluss machen. Was wäre hier wohl die
> leichteste Lösung? Einfach anstatt das MAX232 einen FT232 nehmen?

Kein Problem, wenn du das programmieren kannst... - Ich kann es
(bisher) nicht...

Tip (auch auf die Gefahr, mich unbeliebt zu machen):
Lerne bitte die Grundlagen, ehe du nach den Sternen greifst.

...

von Johannes Permoser (Gast)


Lesenswert?

> Kein Problem, wenn du das programmieren kannst... - Ich kann es
> (bisher) nicht...

Ist das dann ein Problem der Software auf dem µC oder der Software auf
dem PC?

> Tip (auch auf die Gefahr, mich unbeliebt zu machen):
> Lerne bitte die Grundlagen, ehe du nach den Sternen greifst.

Nein, nein. Unbeliebt macht man sich nicht, wenn man hilft.

von Johannes Permoser (Gast)


Angehängte Dateien:

Lesenswert?

Nochmal ich ^^

Hab jetzt nochmal versucht die 100k Kondensatoren zu platzieren. Bitte
sagt mir einer ob sie so passen. Wenn nicht, würde sich dann jemand
erbarmen und sie einzeichnen, weil mir fällt langsam nichts mehr ein
:-/

von Hannes L. (hannes)


Lesenswert?

Stromlaufplan und Layout sind zwei verschiedene Dinge.

Im Stromlaufplan kannst du den Kondensator hinzeichnen, wo du willst,
auch der links oben ist demnach richtig. Wo der C dann auf der Platine
angeordnet wird, ist im Stromlaufplan unwichtig.

Auf der Platine (im Layout der Platine) ist es aber verdammt wichtig,
wo die Abblock-Kondensatoren platziert werden. Denn sie bilden zusammen
mit den Induktivitäten der Leiterzüge unter Umständen Schwingkreise, die
genau das Gegenteil von dem bewirken, was der Abblock-C eigentlich
machen soll. Er gehört (auf der realen Platine) also so dicht wie
möglich an die Stromversorgungspins.

Die Abblock-Kondensatoren sollten 100nF (keine 100k) haben und vom Typ
"Keramik" sein. Elkos sind ungeeignet, sie sind zu langsam.

Auf deiner Skizze sind sie jetzt korrekt.

Die Kondensatoren am Spannungsregler 7805 (auch 100nF Keramik) sind
keine klassischen Abblock-Kondensatoren wie an Digitalschaltkreisen.
Sie haben die Aufgabe, die Schwingneigung des 7805 zu unterdrücken.
Deshalb müssen auch diese so dicht wie möglich an die Pins des 7805.
Ansonsten können sie mehr schaden als nutzen.

Das sind jetzt aber nicht alle Regeln, die man beim Schaltungsdesign
beachten muss, das Regelwerk ist so umfangreich, dass es Bücher füllt.

...

von Johannes Permoser (Gast)


Lesenswert?

Gut, danke für die Erklärungen!

Eine Lösung für das USB Problem habe ich jetzt auch gefunden (das
Problem war, dass ich mir das Zusammenlöten eines FT232 ohne genaue
Anleitung nicht zutraue):
Ich baue einfach den Aufbau aus dem Tutorial nach, dann wird für 4.99
bei Ebay ein RS232 -> USB Adapter gekauft, der anschließend
ausgeschlachtet wird, und in dem doch ausreichend großen Gehäuse der
Lichtschrankenschiene verstaut wird. So habe ich die Möglichkeit, immer
noch auf die RS232 zurückzugreifen, wenn ds mit der USB-Programmierung
nicht hinhaut :-)

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.