Hallo zusammen, Ich möchte ein Taktsignal dazu verwenden, in meinem ATMega88 einen Timer laufen zu lassen. Leider musste ich nun feststellen, dass beide Flanken (steigend und fallend) die für mich interessanten Taktinformationen tragen. Da ich nun aber nicht jeden 2. Takt interpolieren möchte sondern gerne die volle Auflösung hätte, würde ich nun das Taktsignal durch eine monostabile Kippstufe schicken um so aus jeder Flanke einen "ganzen Takt" zu generieren. Die Frequenz meines Taktsignals variiert, ist aber auf 26kHz begrenzt, ich möchte daraus also bis zu 52kHz "interpolieren" und das eben per Hardware. Nun zu meinem Problem: Unter der 74XX-Familie gibts ja einige monostabile Kippstufen, doch leider finde ich keine, welche sich zum Takt verdoppeln eigenen, da sie alle das "Problem" haben wie z.B. der 74xx123 http://docs-europe.electrocomponents.com/webdocs/0cb3/0900766b80cb368f.pdf Legt man das Signal an /A und B an so "blockiert" immer einer der Beiden den Ausgang, welcher dann auf Low-Pegel liegt (siehe Wahrheitstabelle) Nun verzweifle ich ein wenig, das Problem der Taktverdopplung ist doch nichts neues. Warum finde ich diesbezüglich keine Schaltungen? Kann mir jemand helfen? Vielen Dank Stefan
Stefan Bergdorf schrieb: > Hallo zusammen, > > Ich möchte ein Taktsignal dazu verwenden, in meinem ATMega88 einen Timer > laufen zu lassen. Leider musste ich nun feststellen, dass beide Flanken > (steigend und fallend) die für mich interessanten Taktinformationen > tragen. > Da ich nun aber nicht jeden 2. Takt interpolieren möchte sondern gerne > die volle Auflösung hätte, würde ich nun das Taktsignal durch eine > monostabile Kippstufe schicken um so aus jeder Flanke einen "ganzen > Takt" zu generieren. > Die Frequenz meines Taktsignals variiert, ist aber auf 26kHz begrenzt, > ich möchte daraus also bis zu 52kHz "interpolieren" und das eben per > Hardware. > > Nun zu meinem Problem: > Unter der 74XX-Familie gibts ja einige monostabile Kippstufen, doch > leider finde ich keine, welche sich zum Takt verdoppeln eigenen, da sie > alle das "Problem" haben wie z.B. der 74xx123 > http://docs-europe.electrocomponents.com/webdocs/0... > Legt man das Signal an /A und B an so "blockiert" immer einer der Beiden > den Ausgang, welcher dann auf Low-Pegel liegt (siehe Wahrheitstabelle) > > Nun verzweifle ich ein wenig, das Problem der Taktverdopplung ist doch > nichts neues. Warum finde ich diesbezüglich keine Schaltungen? > Kann mir jemand helfen? > > Vielen Dank > Stefan Vielleicht solltest Du einfach zwei Monoflos nehmen und die Ausgänge "verunden". Gruss Harald
Harald Wilhelms schrieb: > Vielleicht solltest Du einfach zwei Monoflos nehmen und die > Ausgänge "verunden". Das wäre eine logische folge, aber wäre es dann nicht weniger Bauteileaufwand einen Schmittgetriggerten XOR zu finden und einen Eingang mittels RC-Glied zu verzögern?
Mich wundert, dass noch keiner vorgeschlagen hat, einen Tiny dafür zu verwenden. Da wird das Problem mit einem Bauteil erschlagen. Na ja, 2 mit Stützkondensator. Die Frage drängt sich auf, warum das Problem nicht durch den µC selbst zu lösen sein soll. Wenn Du mal kurz beschreibst, was Du eigentlich machst, wird das Problem fassbarer.
Stefan Bergdorf schrieb: > Da ich nun aber nicht jeden 2. Takt interpolieren möchte sondern gerne > die volle Auflösung hätte, würde ich nun das Taktsignal durch eine > monostabile Kippstufe schicken um so aus jeder Flanke einen "ganzen > Takt" zu generieren. Beide Flanken heißt, das Signal ist bereits das 1.Bit. Du gibst es also ganz einfach auf den Timereingang und gut is. Und beim Lesen liest Du den Timer und den Pin ein, Du hast also insgesamt einen 17Bit-Wert. Peter
Also nach langem Grübeln habe ich mich fast für die quick & dirty Lösung mit nem einfachen EXOR entschieden. Und obwohl es nicht mehr zum Titel passt möchte ich doch nicht einen weiteren Threat für meine Frage, welche mich quält, aufmachen, da es ja doch noch irgendwie hierzu gehört. Ein 74xx86 Gatter sei so beschalten, dass das Taktsignal einmal direkt und einmal über ein RC-Glied "verzögert" in das Gatter geführt wird. Aus dem Datenblatt entnehme ich folgende Werte: High Input Voltage: 0.7 * VCC Low Input Voltage: 0.3 * VCC Der Bereich dazwischen scheint undefiniert da nichts von einem Schmitt-Trigger am Eingang geschrieben steht. Kann das dazu führen, dass am Ausgang ungewollte Flanken auftauchen? Oder wird das Gatter nur bei einem nicht näher spezifizierten Pegel am Eingang umschalten? Peter Dannegger schrieb: > Beide Flanken heißt, das Signal ist bereits das 1.Bit. > Du gibst es also ganz einfach auf den Timereingang und gut is. > Und beim Lesen liest Du den Timer und den Pin ein, Du hast also > insgesamt einen 17Bit-Wert. das ist richtig, ich möchte aber einen Comparematch mit dem entsprechenden Zähler ausführen. Ich könnte zwar bestimmt in einem Interrupt auch noch das "externe" LSB prüfen und ggf. warten, lieber ist mir aber eine Möglichkeit mit Taktverdopplung, da ich ein wenig Angst habe bei niederen Frequenzen des Taktsignals Daten von meinem SPI-Bus zu verlieren, der ebenfalls Interruptgesteuert ist.
@Stefan Bergdorf (Gast) >Der Bereich dazwischen scheint undefiniert da nichts von einem >Schmitt-Trigger am Eingang geschrieben steht. Kann das dazu führen, dass >am Ausgang ungewollte Flanken auftauchen? Ja. > Oder wird das Gatter nur bei >einem nicht näher spezifizierten Pegel am Eingang umschalten? Jain. Aber ohne Hysteres geht das nicht solide. >Interrupt auch noch das "externe" LSB prüfen und ggf. warten, lieber ist >mir aber eine Möglichkeit mit Taktverdopplung, da ich ein wenig Angst >habe bei niederen Frequenzen des Taktsignals Daten von meinem SPI-Bus zu >verlieren, der ebenfalls Interruptgesteuert ist. Über welche Bitraten reden wir denn? Ich glaub das kann man rein is Software besser lösen. MfgG Falk
Falk Brunner schrieb: > Über welche Bitraten reden wir denn? Ich glaub das kann man rein is > Software besser lösen. Bitraten? du meinst die Frequenz? ich erwarte zwischen 0 und 26kHz. Aufgabenstellung, die dahinter steckt: Eine Motorposition soll mit 10bit Auflösung gemessen werden und an bestimmten Positionen sollen zeitnah Funktionen ausgeführt werden! (Erstmal sollen LEDs eine Scheibe Papier anblinken) Einen Sensor, welcher mit 10bit Auflösung die Position absolut messen kann, habe ich bereits. Dieser lässt sich aber über sein Synchronous Serial Interface (SSI; Ähnlich SPI nur mit 16 bit) nicht schnell genug auslesen, um bei 3000 U/min die Position exakt bestimmen zu können. Deshalb wird das LSB noch direkt heraus geführt. Ich möchte nun das LSB "interpolieren" um den Zähler exakt in meinem ATMEGA abbilden zu können und so Interrupts an den gewünschten Positionen ausführen zu können. Wie groß die Prozessorauslastung durch andere Anwendungen noch werden kann, kann ich aktuell noch nicht abschätzen, ich möchte mir allerdings möglichst viel Resourcen freihalten.
@ Stefan Bergdorf (Gast) >Eine Motorposition soll mit 10bit Auflösung gemessen werden und an >bestimmten Positionen sollen zeitnah Funktionen ausgeführt werden! Hmmm. >Einen Sensor, welcher mit 10bit Auflösung die Position absolut messen >kann, habe ich bereits. Dieser lässt sich aber über sein Synchronous >Serial Interface (SSI; Ähnlich SPI nur mit 16 bit) Ist mir bekannt. > nicht schnell genug >auslesen, um bei 3000 U/min die Position exakt bestimmen zu können. >Deshalb wird das LSB noch direkt heraus geführt. Ich möchte nun das LSB >"interpolieren" um den Zähler exakt in meinem ATMEGA abbilden zu können >und so Interrupts an den gewünschten Positionen ausführen zu können. Ob das so eine gute Idee ist? Ich würde lieber nach einem schnellen Sensor suchen. >Wie groß die Prozessorauslastung durch andere Anwendungen noch werden >kann, kann ich aktuell noch nicht abschätzen, ich möchte mir allerdings >möglichst viel Resourcen freihalten. Und wozu brauchst du dann die Taktverdopplung? MfG Falk
Falk Brunner schrieb: > Ob das so eine gute Idee ist? Ich würde lieber nach einem schnellen > Sensor suchen. Der Sensor ist schon fix. Aufgrund seines Preis-Eignung-Verhältnis wurde er schnell ausgewählt und beschlossen (nicht von mir allein). Nungut, ich hab jetzt eine Lösung mit einem 74xx1G86 und einem 74xx2G14 gebastelt. Die kleinen Gatter kosten ein paar Cent und erfüllen den zweck. Das Signal wird jetzt einerseits direkt in das XOR-Gatter andererseits über "Schmitt-trigger - RC-Glied - Schmitt-trigger" ins andere Gate des selben XOR geschickt. Das RC-Glied lässt sich berechnen und fertig ist der Spaß. Sollte laufen meine ich! Trotzdem danke euch! PS: Hätte nicht erwartet, dass ein simples Takt verdoppeln ohne großartige Anforderungen an Symmetrie o.Ä. des Ausgangssignals derart schwierig sein kann...
'm88-Datenblatt Kapitel 12.1 ff. "Pin-Change-Interrupt" der zappelt bei jeder Flanke... ;-)
Stefan Bergdorf schrieb: > PS: Hätte nicht erwartet, dass ein simples Takt verdoppeln ohne > großartige Anforderungen an Symmetrie o.Ä. des Ausgangssignals derart > schwierig sein kann... Man könnte eine Taktverdoppelung auch in SW lösen wie im Beitrag "Re: Frequenzverdopplung" beschrieben. Bleibt noch die Frage, die Falk Brunner schrieb: > Und wozu brauchst du dann die Taktverdopplung?
Ich meine mich zu erinnern, dass der 74HC4538 (oder sein Vorläufer CD4528/4538) die Enable-Logik invers zum 74121/122/123 hat, vielleicht geht die ursprünglich angedachte Schaltung damit.
Für eine Taktverdopplung mit völlig symmetrischem Ausgangssignal gäbe es noch die PLL. Hat aber auch Kniffeligkeiten mit Einschwingzeiten und Frequenzbereichen. Ist die Frage, ob das hier Sinn macht. Die Frequenzverdopplung mit XOR-Gattern sah ich auch schon mal. Und zwar machte jemand 24MHz aus 12MHz. Als Verzögerungsglied hatte die aber einfache TTL-Glieder, anstatt RC.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.