Zeitabhängig Steuern...

Gast #407410
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.
Gast #407411
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.
Angehängte Dateien:
Gast #407413
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!
Gast #407414
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.
Gast #407416
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.