Forum: Mikrocontroller und Digitale Elektronik Drehzahlmessung --- Prinzip


von nadja (Gast)


Lesenswert?

Hallo zusammen,

ich hätte da, an diesem wundeschönen Sonntag, mal wieder ein Problem:
Mit einem Mega8 würde ich gerne eine Drehzahl und eine analoge Spannung
messen. Ich arbeite mit Bascom.

Ist dieses Grundprinzip soweit richtig (???):

Timer0 läuft los und zählt munter vor sich hin.
Bei jedem Überlauf wird in der Interruptroutine die Variable A um 1
hochgezählt.
Erfährt nun der externe Interrupt Int0 eine steigende Flanke (kommt zu
Testzwecken erstmal aus einem Rechteckgenerator), so wird die Routine
ausgelöst und A ist das vorläufige Ergebnis (Dreh_temp = A).
Dreh_temp wird zur Beobachtung erstmal auf dem LCD ausgegeben.
A wird gleich 0 gesetzt und es geht wieder von vorne los.

Klappt soweit :-)))

Nun möchte ich jedoch etwa alle 200ms ADC1 auslesen und den Wert
zusammen mit Dreh_temp auf dem LCD ausgeben.
Setzte ich diesen Vorgang mit in die Int0-Routine klappt alles
einwandfrei, jedoch ist dann die "Refresh-Rate" des LCD und auch das
Lesen des ADC0 abhängig von der Drehzahl.
Das wollen wir ja nun nicht. Also habe ich Timer1 eingerichtet.

Nun das Problem: Irgendwie kollidieren die beiden.
Ich lasse erstmal nur eine LED durch Timer1 ca. alle 500ms blinken.
In dem Moment, wo die LED blinkt, stimmt der Wert von Dreh_temp im LCD
nicht mehr. Dort wird z.B. immer 1909 angezeit und wenn durch Timer1
die LED blickt steht da kurz z.B. 1766

Was mache ich falsch ???

Vielen Dank !!!

Nadja

von Profi (Gast)


Lesenswert?

Grundsätzlich: die Drehzahl (oder auch Frequenz) kann man messen, indem
man die Ereignisse eine feste Periode lang zählt und dann in /s oder
/min umrechnet,
oder aber man misst die Zeit zwischen zwei Ereignissen und rechnet das
mit f=1/t um. Meines Erachtens der bessere Weg bei niedrigen
Frequenzen.
Zu Deinem Problem: ohne Code ?? Sollen wir hellsehen?

Auf jeden Fall musst Du gewährleisten, dass während des
Timer-Interrupts der die Impulse auch gezählt werden.

Viel Erfolg

von anfänger (Gast)


Lesenswert?

normalerweise macht man im interrupt auch nicht so "große" sachen wie
lcd-ansteuerung. am besten ein flag setzten und dann in der
hauptschleife die zeitintensiven sachen ausführen. sonst kann es
nämlich mal leicht passieren, das ein interrupt nicht ausgeführt wird,
weil du noch in nem anderen drinhängst. glaube ich :-)

von Dave (Gast)


Lesenswert?

hmm wie groß ist denn die frequenz des signals.. ich bin grad beim
erfassen der drehzahl von lüftern (12v, pc)

ich lasse einfach in der hauptschleife ablaufen:
loop:
in temp1, pinX
in temp2, pinX
eor temp1, old_state   (was beim letzten mal da war)
mov old_state, temp2

und nu sind alle änderungen der pins in temp1 gespeichert.. war ne
änderung, so steht an dem bit ne 1

dann nur noch
sbrc temp1, 0
inc zaehler
rjmp loop

und beim interrupt wird der zaehler mit so und so viel multipliziert
und sogar in ascii umgerechnet und ausgegeben.. zu beachten ist, dass
nen 12v lüfter 2 signale (open collektor) sendet und dass die routine
hier von mir 2 signale aus jedem macht (steigende flanke 1x und
fallende 1x)

dave

von nadja (Gast)


Lesenswert?

Schönen guten Abend zusammen,

kommme der Sache nun näher.
Ihr habt Recht, zeitintensive Vorgänge wie das LCD sind wohl der Grund.
Hab das mal rausgenommen und gebe testweise die Werte per RS232 aus. Das
sieht dann schon deutlich besser aus.
Wenn nachher alles klappt, sollen sie eh in ein EEprom geschrieben
werden.

Jetzt habe ich aber ein ganz anderes Problem:
Der ADC0 wird vom Rechtecksignal am Int0 beeinflußt. Kann das sein ??
Ich gebe einfach das Rechtecksignal von einem Frequenzgenerator mit
z.B. 10Hz auf den Int0. Der ADC0 bekommt eine Spannung aus einem
Spannungsteiler der VCC teilt.
Sehe ich mir Spannung an ADC0 auf dem Oszi an, kann man ein Rechteck
entsprechend der Frequenz des Int0-Signals erkennen?
Benötigen ADC0 oder Int0 eine Außenbeschaltung ?


Viele Grüße
Nadja

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.