PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pic 16f877a timer überlauf, zeitnehmung



vatertheresa
15.03.2007, 13:07
also ich brauch für ein projekt eine zeitnehmung und einen rundenzähler. zu realisieren mit einem pic 16f877a und geschrieben in c.

soll einfach loszählen wenn an einem bestimmten (geeigneten) eingang eine 1 anliegt (in dem fall kommt ein signal einer diode eines lichtschrankens) und wieder stoppen wenn wieder eine 1 anliegt. ist für eine rennbahn und es soll eben die zeit und die rundenzahl an einem lcd dargestellt werden. hw is vorhanden nur an der sw scheiterts ein bisschen.

lg

kalledom
15.03.2007, 14:29
Vermutlich möchtest Du die Zeit in 1/1000 Sekunden stoppen ?
Dann solltest Du einen Timer so initialisieren, daß er jede Millisekunde einen Interrupt auslöst. Damit ist erst einmal gewährleistet, daß kein Timer-Überlauf verpaßt wird und somit keine Zeit verloren geht.
Die Lichtschranke würde ich an den INT-Eingangspin legen, damit bei jeder steigenden Flanke ebenfalls ein Interrupt ausgelöst wird.
Bei jedem Millisekunden-Int wird ein 16...24-Bit-Zähler (= 3 Bytes) um 1 erhöht.
Bei einem Eingangs-Int wird der Zähler-Inhalt in eine 'Anzeige-Variable' kopiert und dann auf 0 gesetzt. Außerdem einen weitern Zähler für die Runden um 1 erhöhen. Dann noch ein Flag setzen, damit das Hauptprogramm die neuen Werte für das Display aufbereiten und dort zur Anzeige bringen kann.

Fragen nach C-Programmierung kann ich nicht beantworten, da ich ausschließlich in Assembler programmiere.
Beispiele zu meinem Vorschlag findest Du (in Assembler) auf dieser (http://www.domnick-elektronik.de/picasm.htm) und dieser (http://www.domnick-elektronik.de/picpwm.htm) Seite.