Forum: Mikrocontroller und Digitale Elektronik [Cortex M3] Flankenzähler zählt keine Flanken


von A. M. (am85)


Angehängte Dateien:

Lesenswert?

Hi

Ich habe bei einer recht banalen Aufgabe ein großes Problem. Ich möchte 
mit den Zählern eines Cortex (genauer dem LM3S9b92 Eval Kit) die 
Frequenz eines rechteckigen Eingangssignals messen. Nehme ich den Timer0 
der so konfiguriert werden kann, dass man seine internen TimerA und B 
als seperate 16 Bit Timer/Counter nutzen kann. So habe ich den Timer0A 
so konfiguriert, dass er mir nach 100 ms einen Interrupt erzeugt (ich 
weiß, ich könnte auch den SysTickTimer nehmen) und der Timer0B soll im 
"edge count mode", aufwärtszählend, die Flanken des Eingangssignals 
zählen. Die 100 ms sind kein Problem und der Timer läuft gut. Auch in 
die ISR wird richtig gesprungen. Aber die Flankenzählung erzeugt nur 
schwachsinn. Im Timer0B Register steht nur schwachsinn drin, egal, wie 
ich die Messzeit variiere. Das Messignal, mit einem Oszi nachgemessen, 
ist ein sauberes Rechtecksignal mit 0V für low und 3,3V für high. Der 
Cortex wird mit 80 MHz betrieben. Der Zähler hat einen Prescaler von 
128, wird vorgeladen mit einem Wert von 62500 und zählt dann runter. Das 
Eingangssignal liegt bei ca. 2,5kHz, sollte also kein Problem sein, ein 
Wert um 250 Flanken sollten zählbar sein. Damit sind als Überläufe 
ausgeschlossen.

Ich bin so langsam mit meinem Latein am Ende, woran es liegen könnte. 
Ich habe auch schon den Timer1 Block genommen, das Problem ist aber das 
gleiche. Hätte vielleicht jemand eine Idee? Meinen bisherigen Code habe 
ich mal angehängt. Er ist aus meinem bisherigen Projekt herauskopiert, 
als bitte nicht meckern, wenn da was unschön aussieht ;-)

Vielen Dank schon mal

von A. M. (am85)


Lesenswert?

push

von A. M. (am85)


Lesenswert?

Sollte jemand ein ähnliches Problem haben... 1. kann der Zähler im Edge 
Count Modus nur abwärtszählen und 2. muss dann ein Matchvalue vorgegeben 
werden. Im Normalfall wäre der Startwert bei dem 16 Bit Timer dann bei 
0xFFFF und der Matchvalue bei 0x0000.

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.