Flankenwechsel erkennung..
-
Da würde man (wenn denn vorhanden) gleich einen Timer mit externem Takt verwenden. Aber da wir ja nichtmal wissen, ob das auf einem Controller laufen soll...
-
^^eure vorschläge werden ja immer abenteuerlicher.
-
fricky schrieb:
^^eure vorschläge werden ja immer abenteuerlicher.
das liegt wohl an der sehr interpretationsfreudigen art und weise, wie die frage gestellt ist
-
sothis_ schrieb:
fricky schrieb:
^^eure vorschläge werden ja immer abenteuerlicher.
das liegt wohl an der sehr interpretationsfreudigen art und weise, wie die frage gestellt ist
was hast du an der frage auszusetzen?
ich glaube Boris und Tim meinen das ernst.
-
fricky schrieb:
was hast du an der frage auszusetzen?
nun, nichts
ich meinte nur das solche fragen meistens gleich zu solchen, entschuldige boris, klugscheißposts führt, welche dann den thread in einer wilden spekulationorgie ausarten lässt und dies dann häufig absolut nichts mehr mit der frage zu tun hat
-
klugscheisser?? wir sind im ANSI C forum, und es geht um flankenwechsel... wo liegst problem das man von einem "Microcontroller" ausgehen könnte. Und was hat das mit Klugscheisserei zu zun, wenn "Input Capture" dafür ne alternative wäre...
ohh man entschuldige _sothis, aber du bist ein mongo
, mit deinen ich bin der chef ihr seit nix beleidigungen...
-
Geht's noch?
-
BorisDieKlinge schrieb:
Und was hat das mit Klugscheisserei zu zun, wenn "Input Capture" dafür ne alternative wäre...
weil er die flanken nur zählen will, zeiten interessieren doch nicht. ich würde auf 'nem microcontroller einen interruptfähigen eingang nehmen, den für die entsprechende flanke konfigurieren und in der ISR einfach nur eine variable hochzählen. wer jetzt noch klugscheissern will, der kann ja einwände wie interruptlatenz, glitches usw. bringen. aber Tims vorschlag war ja noch abgefahrener als deiner.
-
Da das eigentlich Thema eh durch sein dürfte...
fricky schrieb:
aber Tims vorschlag war ja noch abgefahrener als deiner.
Warum? Was ist daran "abgefahren"? Warum sollte man etwas im Code erledigen, was die Hardware (je nach Controller natürlich) schon selbst kann?
-
Tim schrieb:
Warum? Was ist daran "abgefahren"?
wozu brauchst du einen 'Timer mit externem Takt'?
-
Brauchen tut man den nicht, aber wenn man ihn hat, kann man ihn doch dafür verwenden.
-
Tim schrieb:
Brauchen tut man den nicht, aber wenn man ihn hat, kann man ihn doch dafür verwenden.
ach jetzt verstehe ich was du meinst. du willst den timer als zähler missbrauchen, weil er so arbeitet wie einige hintereinandergeschaltete j-k flipflops. stimmt, das könnte ja doch gehen. ich dachte ursprünglich, du willst auch zeiten messen wie boris.
-
Ich hatte auch schon das Gefühl, dass wir uns mißverstehen
-
fricky schrieb:
Tim schrieb:
Brauchen tut man den nicht, aber wenn man ihn hat, kann man ihn doch dafür verwenden.
ach jetzt verstehe ich was du meinst. du willst den timer als zähler missbrauchen, weil er so arbeitet wie einige hintereinandergeschaltete j-k flipflops. stimmt, das könnte ja doch gehen. ich dachte ursprünglich, du willst auch zeiten messen wie boris.
Ach, deswegen sind keine Timer mehr frei, wenn man was übernehmen soll? fricky und Tim haben sie alle zu Zählern degradiert ... aaahso
-
pointercrash() schrieb:
fricky und Tim haben sie alle zu Zählern degradiert
dann musst du dir mal eben selbst was basteln: http://static.flickr.com/119/308483274_0ae3c17aa3_o.jpg
-
fricky schrieb:
dann musst du dir mal eben selbst was basteln: http://static.flickr.com/119/308483274_0ae3c17aa3_o.jpg
Wah, ein 74'XX- Grab?
Nein danke, dann doch lieber ein paar Zeilen ABEL oder VHDML für'n Coolrunner.
Wenn's wirklich in Soft sein muß, geht's bei niedrigen Frequenzen dann doch anders. Ich hab' mal ein bisserl gekramt und aus meinen MELPS77- ASM- Gruften das Ding hier geholt und nach C portiert, aber noch nicht gedebuggt, also keine Garantie auf Richtigkeit. Dafür ist es allgemein gehalten, war 'ne Buttonfield- Auswertung, die ich ums Debouncing gekürzt und um die Zählerauswertung erweitert habe. Die nicht ausgewerteten Bits bleiben stehen, in dieser Form wird nur eine einzige Flanke der Restbits detektiert. Läßt sich natürlich beliebig - auch performanceoptimiert- zurechtbiegen:
static char mask = 15; // maskiert die überwachten bits, hier 0 bis 3 const char bit = 2; // das wollen wir zählen, binary 0000'0100 static unsigned int counts[8]; static char fallenbits = 0, raisedbits = 0, lastport = port, nowport; // init: port = HW- Port lastport &= mask; void pollme(char mask, char bit) // mich bitte zyklisch aufrufen { char changed, killmask; nowport = port & mask; // nur die untersuchten Bits behalten if (nowport != lastport) // hat sich was gerührt? { changed = lastport ^ nowport; // ahja, und welche bits? raisedbits |= changed & nowport; // Lo->Hi- Übergang fallenbits |= changed & (nowport ^ 255); // Hi->Lo- Übergang lastport = nowport; // jetzigen Zustand merken // Auswertung killmask = 1 << bit; // Achtung: Performance- Killer if (killmask & raisedbits) { counts[bit]++; raisedbits &= killmask ^ 255; // Ausgewertetes Bit löschen } } }