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.
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.
ok danke schonmal für deine Mühe...ich werde es mal anschauen, bin in C zwar nicht ganz so fit....
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!
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.
@inoffizieller WM-Rahul: genau die Vorlage habe ich gerade gepostet! Eben nur mit Start und Stop (2 INTs benutzt), kann aber leicht modifiziert werden.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.