Forum: Mikrocontroller und Digitale Elektronik frequenz berechen (in pascal)


von Hannes F. (pfannkuchen2001)


Lesenswert?

Hallo,

ich möchte die frequenz berechnen, die an einem mega8 an BD2 anliegt 
messen.

machen kann ich das ja irgendwie so:
 wenn hohe flanke dann
   starte timer
      wenn nächste hohe flanke dann
         lies timer

wie kann ich das in pascal umsetzen?
die kurve die da anliegt, ist keine rechteckkurve, sondern eine 
sinuskurve von 0 - 5V; das sollte als auch funktionieren.


Hannes

von JensG (Gast)


Lesenswert?

Also wie das in Pascal auszusehen hat, kann ich nicht (mehr) sagen - 
aber wenn es eine Sinuskurve ist, würde ich daraus erstmal ein Rechteck 
machen. Also Trigger noch mit reinhängen. Wenn der mega8 an dem Port 
einen Trigger hat, dann nimm den.

von Niels H. (monarch35)


Lesenswert?

Ich würde PortD so programmieren, das steigende Flanken einen Interrupt 
auslösen und dann einfach nur zählen, wieviele steigende flanken es pro 
Sekunde gibt.

von Michael Wilhelm (Gast)


Lesenswert?

BD2? Nicht Port D2? Wenn das Layout noch nicht vorgegeben ist, nimm den 
Port B0 als Input Capture Unit. Der ist für solche Sachen beser. Und von 
Pascal hab ich keine Ahnung. Wenn hier im Forum keiner helfen kann, 
versuch es bei e-lab.de
die vertreiben eine Pascal IDE

MW

von Hannes F. (pfannkuchen2001)


Lesenswert?

Niels Hüsken wrote:
> Ich würde PortD so programmieren, das steigende Flanken einen Interrupt
> auslösen und dann einfach nur zählen, wieviele steigende flanken es pro
> Sekunde gibt.

hmm ja aber genau das ist ja mein problem: wie kann ich das 
programmieren, das NUR steigende flanken so einen interrupt auslösen?

leider ist mir die messung pro sekunde zu langsam. desswegen würde ich 
lieber   die zeit messen, die zum beispiel 5 oder 10 steigende flanken 
brauchen. und daraus die frequenz errechen.

nur hab ich praktisch keine ahnung, wie ich so einen interrupt auslöse, 
oder wie ich so einen timer initialisiere....


Hannes

von Niels H. (monarch35)


Lesenswert?

Hannes F. wrote:
> hmm ja aber genau das ist ja mein problem: wie kann ich das
> programmieren, das NUR steigende flanken so einen interrupt auslösen?

Das findest du im Datenblatt des mega8 ganz gut beschrieben....

> leider ist mir die messung pro sekunde zu langsam. desswegen würde ich
> lieber   die zeit messen, die zum beispiel 5 oder 10 steigende flanken
> brauchen. und daraus die frequenz errechen.

Wenn die eine Sekunde zu lang ist, mach sie kürzer z.B. um die hälfte 
und verdoppel einfach das ergebnis...

> nur hab ich praktisch keine ahnung, wie ich so einen interrupt auslöse,
> oder wie ich so einen timer initialisiere....

Dafür haben wir hier diese wunderbaren tutorials. Learning while doing 
ist eh besser als alles vorgekaut zu bekommen, denke ich.

von Hannes F. (pfannkuchen2001)


Lesenswert?

> Dafür haben wir hier diese wunderbaren tutorials. Learning while doing
> ist eh besser als alles vorgekaut zu bekommen, denke ich.

hmm leider gibt es keine wunderbaren tutorials die das ganze unter 
pascal beschreiben.

> BD2? Nicht Port D2? Wenn das Layout noch nicht vorgegeben ist, nimm den
> Port B0 als Input Capture Unit. Der ist für solche Sachen beser.

das hilft mir nicht soo viel weiter ;) warum ist der besser?

> Das findest du im Datenblatt des mega8 ganz gut beschrieben....

hmm davon hab ich noch nichts gelesen, aber mein englisch ist auch 
dermaßen schlecht, das ich es warscheinlich einfach überlesen habe...


> Wenn die eine Sekunde zu lang ist, mach sie kürzer z.B. um die hälfte
> und verdoppel einfach das ergebnis...

ok, wenn ich sie vierteile, dann wird das vielleicht was...

gibt es eigentlich überhaupt leute hier im Forum, die pascal 
programmieren?

Hannes

von Niels H. (monarch35)


Lesenswert?

Hannes F. wrote:
> hmm leider gibt es keine wunderbaren tutorials die das ganze unter
> pascal beschreiben.

Ich kann kein Pascal schreiben; aber ich kanns trozdem lesen. Meiner 
Meinung nach sind die syntaktischen Unterschiede zwischen C und Pascal 
nicht wirklich gravierend.

>> BD2? Nicht Port D2? Wenn das Layout noch nicht vorgegeben ist, nimm den
>> Port B0 als Input Capture Unit. Der ist für solche Sachen beser.
>
> das hilft mir nicht soo viel weiter ;) warum ist der besser?

Gemeint ist, das BD2 kein Inputcapturing (so heisst die technik, die aus 
Flanken Interrupts macht) kann. Daher eignent sich PB0 besser.

> hmm davon hab ich noch nichts gelesen, aber mein englisch ist auch
> dermaßen schlecht, das ich es warscheinlich einfach überlesen habe...

Dann müsste jetzt deine Frage also lauten:

"Wer sucht mir mal die Seite aus dem ATmega8-Doku raus, auf der das 
Thema "Inputcapturing" beschrieben ist."

> gibt es eigentlich überhaupt leute hier im Forum, die pascal
> programmieren?

Ehrlich gesagt habe ich hier noch keine gesehen. Ich würde ohnehin 
jedem, der sich mit uCs beschäftigen will, sich mit C auseinander zu 
setzen. Das C sich in diesem Bereich durchgesetzt hat, hat Gründe.

In deinem Falle denke ich ist der Aufwand ziemlich gering. Wie ich 
eingangs schon erwähnte: so gross ist der Unterschied zwischen Pascal 
und C nicht.

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
Noch kein Account? Hier anmelden.