mikrocontroller.net

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


Autor: logic88 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sonic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: logic88 (Gast)
Datum:

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

Autor: logic88 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.