Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

StefanRau

RCLine User

  • »StefanRau« ist der Autor dieses Themas

Wohnort: D-71* nähe Stuttgart

  • Nachricht senden

1

Freitag, 26. Februar 2010, 16:23

Pic24 Timer für ms

Hallo,

ich benötige eine Zeit in ms auf dem PIC24HJ12GP201.
Wie programmiert man so etwas(C-Code).

Ich beschreibe noch kurz meine Problemstellung.
Ich habe 20 Messwerte, ich nehme beim ersten Messwert die Zeit und beim letzten, dann
kann ich die Veränderung in der Zeit berechnen. So würde ich es jedenfalls auf dem PC machen. ich bin Neuling auf dem PIC.

Viele Grüße

Stefan
Pimp Daddy :D

from

The flying Pimps :ok:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »StefanRau« (26. Februar 2010, 16:35)


hsh

RCLine User

Wohnort: Österreich

  • Nachricht senden

2

Samstag, 27. Februar 2010, 02:02

Dein Stichwort ist Timer.
Für Details musst du dir die entsprechenden Kapitel im Datenblatt anschauen. Ich bin mit der Pic Familie leider nicht vertraut.
Von der Funktion her können die Timer/Counter Pegelwechsel zählen und mit Zählerständen von Compareregistern vergleichen. Als Taktquellen stehen gewöhnlich externe Pins und der Systemtakt mit konfigurierbaren Vorteilern zur Verfügung. Je nach Systemtakt und Konfiguration kannst du dir so Interrupts in definierten Zeitintervalen/Zählerständen generieren lassen (Capture Compare/Output Compare). Möglich wäre auch einen Timer frei laufen zu lassen und mit der Differenz der Timerwerte die Zeitdifferenz zu errechnen. Dabei musst du die Vorteiler so wählen, dass es zwischen den Messungen nicht zu mehreren Überläufen kommen kann (per Interrupt könntest du dies jedoch auch berücksichtigen) und dein gewünschter Zeitbereich abgedeckt wird.
Denkbar wäre auch die Messungen per Timerinterrupt z.B. alle 5ms zu machen... damit sparst du dir das Berechnen der Zeitbasis.

Programmtechnisch schaut es etwa wie folgt aus:
1) Initalisierung der entsprechenden Register (Vorteiler, Komparewerte, Interrupts, Betriebsmodi)
2) falls genutzt die entsprechende Interruptroutinen (dafür hat jeder Kompiler seine eigenen Schreibweisen)
3) aktivierung der Interrupts im Hauptprogramm
fallls nicht per Interruptroutinen gelöst, auslesen/schreiben des Timerregisters wie jede andere Variable und entsprechende Berechung deiner Zeitdifferenz.
Du kannst den Timer natürlich auch im laufenden Programm neu konfigurieren, stoppen und starten wenn du z.B. anderer Zeiten messen willst.
mfg Harald

3

Samstag, 27. Februar 2010, 08:04

Wenn Du Neu in dieser Materie bist, solltes Du Dir überlegen, ob Du nicht gleich auf AVR Controller umsteigst.
Hier im Forum sind, soweit ich das überblicke, auf jeden Fall wesentlich mehr ATMEL AVR User als PIC Anwender.

Die Lösung deines Problems hat Harald ja schon gut skizziert.