Forum: Mikrocontroller und Digitale Elektronik Zeitabhängig Steuern...


von logic88 (Gast)


Lesenswert?

Hallo liebe Leute!

ich habe einen Auftrag von meiner Freundin bekommen, dass ich für ihre
Physik-Stunde etwas baue und zwar:

..es geht um Beschleunigung eines Gegenstandes. Der Gegenstand (z.B.
Stein) liegt in einer Wanne auf Rollen. An der Wanne ist eine Schnur
geknotet. Nun wenn man vorne an der Schnur ein Gewicht dranhängt fährt
der Wagen los, und beschleunigt. Bis dahin simpel ;)

Nun ist die Lauffläche der Wanne genau einen Meter lang und alle 10 cm
soll eine Lichtschranke sein (ich habe vorgeschlagen, auch einen
Reed-Kontakt (magnetisch: magnet befindet sich am Anfang der Wanne,
nicht optisch) zu nehmen).

Nun soll die Beschleunigung des Wagens ausgerechnet werden.

Meine Aufgabe: Ich werde die einzelnen Lichtschranken/Reed-Kontakte an
die Pins meines Mikrocontrollers anschließen und somit die einzelnen
Momentanwerte der Durchbrechung/schließzeit speichern.

Ich benötige also einmal eine Zeit, die konstant ab der ersten
Lichtschranke durchläuft und genau 10 Variablen, welchen ich den
Momentanwert (in sec. bzw. millisec.) zuweise.


Nur: Wie kann ich im Mikrocontroller ab der Durchbrechung der
allerersten Lichtschranke (sozusagen der "Startschuss") einen Timer
loslaufen lassen und außerdem diese bestimmten Zeiten (10 Stück, pro
Lichtschranke/Reed-Kontakt) abspeichern?????

Letztenendes soll ein Graph mit den daraus ermittelten Werten erstellt
werden! - Keine Angst, diesen Vorschlag des Lehrers habe ich ziemlich
spontan abgewirkt, da ich bereits Erfahrung gemacht habe wie
"einfach" es ist, ein Grafik-LCD anzusteuern achtung ironie.

Nun Wieder Spaß beiseite.: Ich werde dann eher ein kleines 16x4-Display
nehmen und dann die einzelnen Zeiten darauf ausdrucken.

Danke für euere Hilfe!!!

PS: ich habe vor, einen ATmega16 zu verwenden. Als Compiler habe ich
bisher BASCOM verwendet.

von Sonic (Gast)


Angehängte Dateien:

Lesenswert?

Hi, weiß nicht wie weit du in C fit bist, habe dir aber mal meinen
(etwas älteren) Code eines Geschwindigkeitsmessers gepostet. Der
arbeitet mit 2 Lichtschranken und interruptgesteuert. Zählen tut das
Ding weit in den Tagebereich, auf 0.5µs genau. Ein externer Quarz
vorausgesetzt. Die Stop-Lichtschranke kannst du ja diodenentkoppelt
durch mehrere Schalter ersetzen. Vielleicht hilft's weiter.

von logic88 (Gast)


Lesenswert?

ok danke schonmal für deine Mühe...ich werde es mal anschauen, bin in C
zwar nicht ganz so fit....

von logic88 (Gast)


Lesenswert?

nun, was vielleicht noch erwähnenswert ist. ich habe bereits ein Board
aufgebaut mit einem ATmega16, 8 LEDs und 8 Schaltern. Vielleicht könnte
man das Programm, das man zu meinem Projekt schreiben muss erstmal an
dem Board testen.

Und zwar, in dem ich durch das Drücken des ersten Tasters die Zeit
"loslaufen" lasse und durch das einzelne durchdrücken der
hintereinander folgenden Schalter die einzelnen WErte speichere. Und
durch das Drücken des letzten Schalters den Zähler "stoppe".

Wäre das nicht ein wenig einfacher, weil ob es nun Lichtschranken sind
oder Taster....


danke!

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Man nehme einen Timer, der konstant durchläuft und bei jedem Überlauf
weitere Variablen (per Interrupt) inkrementiert, weil der Zählumfang
von 16 eher nicht reichen wird.
Man kann den Timer auch starten, wenn die erste Lichtschranke betätigt
wurde.
In einer Schleife werden die Lichtschranken dann angefragt, und sobald
die letzte Lichtschranke betätigt wurde, kann die Schleife verlassen
werden.
Wurde nun die entsprechende Lichtschranke betätigt, wird der aktuelle
Zählerwert (alle n Bytes) gesichert.
In der Auswertung werden dann einfach die einzelnen Zählerstände von
einandern abgezogen. Zur Zeitbasis (Quarzfrequenz) kann man dann noch
die entsprechende Geschwindigkeit ausrechnen.

von Sonic (Gast)


Lesenswert?

@inoffizieller WM-Rahul:
genau die Vorlage habe ich gerade gepostet! Eben nur mit Start und Stop
(2 INTs benutzt), kann aber leicht modifiziert werden.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

@Sonic: Hab ich mir nicht angegeguckt...
@OP:Wo ist denn das Problem, beim Erkennen einer Flanke am Eingang
(eben war er noch Hi, jetzt ist er low), den Zählerstand in einen
Feldeintrag zu kopieren?
Notfalls fragt man immer nur eine Lichtschranke ab, und sobald sich ihr
Zustand ändert, wird der Zählerstand in einem Feld gespeichert und die
Schleife verlassen, um die nächste Lichtschranke in einer Schleife
abzufragen.
Ist die letzte Schleife zuende, berechnet man die Zeitdifferenzen.
Das sollte man sogar in Bascom relativ schnell hinbekommen.
Optimieren kann man immer noch.

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.