Hallo Ich wollte mal fragen ob mir jemand helfen kann, eine Lücke in einen durchgehenden Takt einzufügen. Ich habe das Problem als Bild angehängt. Das auszulösende Signal kann beliebigen Pegel vor und nach dem Wechsel haben. Ich habe von Verzögerungsgliedern gelesen doch ich werde nicht schlau aus dem Zeug, da mein Buch knapp aber komplex geschrieben ist. Im Internet kommt nur der google-Müll und RC-Glieder. Es können übrigens bis zu 4 Takt-Impulse ausgelassen werden, was ja das eigentliche Ziel ist. Doch vier mal einen Takt auszulassen geht auch bzw. zwei mal zwei Takte.
Hi @Lück, Zum Finden der Lösungswege müsste man noch wissen, welche Idee dahintersteckt, bzw. was bezweckt werden soll. a) Arbeit mit MCU, evtl. mit welcher. b) mit Monoflops und Torschaltungen aufgebaut mit Extra ICs. Bei a) stelle ich mir vor, es soll ein Taktsignal auf einen Port geführt werden, aber "softwaremäßig" über eine "Torschaltung" laufen. Das könnte man mit Timern und Interrupts gut machen, könnte ich mir vorstellen. Bei b) habe ich bezüglich Zuverlässigkeit so meine Bedenken. Da Du aber schon von RC-Gliedern redetest, die Du nicht möchtest, kann man diesen Lösungsvorschlag wohl ausschließen? ciao gustav
Das ist nicht zufällig das gleiche Problem: Beitrag "Dynamisch ein paar Takte auslassen bei der 8051 CLK"
Max D. schrieb: > Das ist nicht zufällig das gleiche Problem: > Beitrag "Dynamisch ein paar Takte auslassen bei der 8051 CLK" Hi, habe noch ein Board mit dem 80C51 hier irgendwo rumfliegen. Rudimentär erinnere ich mich dran, dass das Taktsignal asymmetrisch sein muss, dann wird noch das Konstrukt "Maschinenzyklus" eingeführt, so dass man nicht in ATMEL-AVR-Takt-Befehlsausführungszeiten-Vorstellungen denken darf. Da bin ich momentan schon etwas raus. ciao gustav
Keines der beiden Probleme ist meines. Mich hat nur diese Frage an den anderen thread erinnert. Deswegen hab ich nachgefragt
Lück schrieb: > da mein Buch knapp aber komplex geschrieben ist Meins auch. Haben wir das selbe Buch?
Ja, es ist für den Takteingang eines 8051. Würde es mit einem Monoflop 74HC123 gehen ? Im Datenblatt sehe ich aber irgendwie nur den Ausgangsbereich in Mikrosekunden, ich benötige aber maximal 320 Nanosekunden. Könnte man es diskret aufbauen ? ALso mit einem 1% Kerko/Widerstand und ein paar Gattern ?
Lück schrieb: > Das auszulösende Signal kann beliebigen Pegel vor und nach dem Wechsel > haben Das ist logischer Unsinn. Wenn das Signal vorher und nachher Hi ist, was soll dann irgendetwas auslösen? Georg
Ein UND-Gatter und parallel dazu eine monostabile Kippschaltung, die mit einem "auslassen"-Impuls gefüttert wird. Hat letztere keinen inversen Ausgang kann eventuell noch ein Inverter fällig werden. Man kann natürlich auch den "da musst Du nur"-Weg beschreiten und eine ausgewachsene µP-Schaltung einbauen. Wem's gefällt!
Hallo Lück, so sollte es gehen (ohne R oder C) ... Ein beliebiger Flankenwechsel an EVT schaltet jeweils eins der FF's IC1A oder IC2B um. Mit der nächsten fallenden Flanke an CL_IN wird der Ausgang CL_OUT abgeschalten (LOW). Der Zähler zählt vom zählt mit jedem Takt weiter bis 15 erreicht ist, dann werden die FF's in IC1 wieder in den Ruhezustand gebracht. Die nächste Flanke an CL_IN gibt den Ausgang wieder frei und der Zähler wird mit dem Ausganswert neu geladen. Hast ja nicht geschrieben das es einfach sein soll. Sascha
Habe ich mich auch gefragt, entweder das Signal ist ganz kurz auf dem anderen Pegel und geht wieder zurück oder er meint dass es den pegel von High nach Low Ubd von Low nach High ändern kann.
Lück schrieb: > Würde es mit einem Monoflop 74HC123 gehen ? Im Datenblatt sehe ich aber > irgendwie nur den Ausgangsbereich in Mikrosekunden, ich benötige aber > maximal 320 Nanosekunden. Kannst du völlig vergessen. Du gehst die Sache falsch an. Du brauchst keine Lücke, sondern du mußt den Takt abschalten und nach einer vorgegebenen Zeit wieder einschalten. In diesem Fall sollen das 4 Takte sein. Sei erstmal froh, daß du nicht 5 oder 11 brauchst. Einen (Ein-)Schaltimpuls nach 4 Takten bekommst du mit einem Zähler, der bei 0 losläuft am Ausgangsbit2. Du brauchst also eine Schaltung mit ein paar Gattern, einem Flipflop und einem Zähler. Beim Auslösen wird der Takt gesperrt(Flipflop an einem UND), dann startet der Zähler, Bit2 schaltet das Flipflop wieder um und der Takt liegt wieder an.
Ja, so ähnlich wie Sascha meine ich das auch. Nur nicht ganz so kompliziert.
:
Bearbeitet durch User
Genau das mit dem Zähler ist seit Tagen in meinem Kopf (und macht dort Schmerzen :-))! Ich habe das ein wenig durchgespielt und so einen 4-Bit-Zähler gefunden, mit gleich 2 Enable-Eingängen usw. Daher suchte ich nach einer Alternative, zB. ein Monoflop. Doch sollte ich wirklich die Zähler-Variante benötigen werde ich wohl ein wenig zeichnen und grübeln müssen ... Das vom Sascha gucke ich mir morgen an, doch brauche ich einen Zähler bis 4 so wie Thomas es geschrieben hat. Was wäre das Monoflop mit R+C einfach ... doch wenn es nicht geht kann man nichts machen.
Oh ... und: der beliebige Signalwechsel im Diagramm am Steuersignal soll bedeuten dass man das Signal sowohl von L nach H als auch von H nach L ansteuern kann (dauerhaft). Es ist ein Ausgangspin des 8051.
Lück schrieb: > der beliebige Signalwechsel im Diagramm am Steuersignal soll > bedeuten dass man das Signal sowohl von L nach H als auch von H nach L > ansteuern kann (dauerhaft). Wie ist der Wechsel des Auslösesignals bez. des Taktes zeitlich zu sehen? Mal vor der Taktflanke, mal danach? Welche zeitlichen Abstände? Ist die Taktfrequenz fest? Man könnte mit EXOR und einem kleinen Delay (andere EXORs im Baustein) bei jedem Flankenwechsel einen Puls generieren, der dann über ein Monoflop den Takt über ein UND für eine gewisse Zeit sperrt.
Ich habe an meinem 8051 gemessen, dass eine Portausgabe kurz nach dem Anstieg eines Taktimpulses erfolgt. Welcher von den 12 Takten eines Befehlszyklus das ist das habe ich nicht gemessen und es war nicht so wichtig. Der Takt ist fest und läuft endlos mit etwa 12MHz. Ich müsste lediglich immer mal wieder 4 Takte rausnehmen um den 8051 mit etwas zu synchronisieren. HildeK schrieb: > Man könnte mit EXOR und einem kleinen Delay (andere EXORs im Baustein) > bei jedem Flankenwechsel einen Puls generieren, der dann über ein > Monoflop den Takt über ein UND für eine gewisse Zeit sperrt. Das wäre schön doch welches Monoflop passt da ?
Edit: die rausgenommenen Taktimpulse sollen natürlich nicht zeitlich verkürzt sondern in der positiven Präsenz der Impulse reduziert werden. Also vier Pulse sollen einfach auf Masse bleiben für ihre Dauer.
Ich habe auch mit der Umkehrung des Taktes herumprobiert und das auf einen Zähler geschickt, damit die fallenden Taktflanken zählen und es ging eine Weile ganz gut. Doch der Zähler muss sich nach 4 mal Zählen aufhalten, noch dazu muss er am Anfang zurückgesetzt werden, und dabei darf die ganze Start/Endbedingung sich nicht gegenseitig stören. Das ganze Zusammenspiel mit Gattern und Flipflops ist eine Katastrophe :-)
Lück schrieb: > Das wäre schön doch welches Monoflop passt da ? Welche Signalpegel hast du? 3.3V oder 5V? Demnach musst du eine geeignete Familie auswählen, die eine minimale Pulslänge von ca.80ns schafft. Irgendein 74xxx123 z.B. Bei 3.3V würde ich den LVC123 ins Auge fassen.
Hoffentlich funktioniert die Schaltung vom Sascha - obwohl ich sie nicht ganz nachvollziehen kann. Ich glaube ich muss ein paar Nüsse einwerfen :-)
HildeK schrieb: > Welche Signalpegel hast du? 3.3V oder 5V? > Demnach musst du eine geeignete Familie auswählen, die eine minimale > Pulslänge von ca.80ns schafft. Irgendein 74xxx123 z.B. > Bei 3.3V würde ich den LVC123 ins Auge fassen. So wie es aussieht ist die minimale Pulsweite des 74xx123 im Mikrosekunden-Bereich, also untauglich. Ich würde gerne Saschas Schaltung simulieren, doch mit welchem Programm ausser PSpice ?
Lück schrieb: > Oh ... und: der beliebige Signalwechsel im Diagramm am Steuersignal soll > bedeuten dass man das Signal sowohl von L nach H als auch von H nach L > ansteuern kann (dauerhaft). Es ist ein Ausgangspin des 8051. Das wird ja immer schlimmer. Das:
1 | DDRB |= (1 << 3); |
2 | PCMSK |= (1 << PCINT2); |
3 | PORTB |= (1 << 2); |
4 | GIFR = GIFR; |
5 | |
6 | while(1) |
7 | {
|
8 | if(GIFR & (1 << PCIF)) |
9 | {
|
10 | PORTB |= (1 << 3); |
11 | asm volatile ("nop"); |
12 | PORTB &= ~(1 << 3); |
13 | GIFR = GIFR; |
14 | }
|
15 | }
|
macht nach einem Signalwechsel an Pin7 eines Attiny 13a einen Impuls von ca. 320ns bei 9,6MHz an Pin2. Feintuning ist mit dem OSCCAL-Register möglich. Ist allerdings nicht synchron
:
Bearbeitet durch User
Lück schrieb: > So wie es aussieht ist die minimale Pulsweite des 74xx123 im > Mikrosekunden-Bereich, also untauglich. Mit LVC123 sind nach DB typ <100ns bei 5V möglich. Wenn du sowieso 2 oder 4 Pulse ausblenden willst, würde das reichen.
Thomas E. schrieb: > macht nach einem Signalwechsel an Pin7 eines Attiny 13a einen Impuls von > ca. 320ns bei 9,6MHz an Pin2. Feintuning ist mit dem OSCCAL-Register > möglich. Ist allerdings nicht synchron. gustav schrieb: > Hi, > habe noch ein Board mit dem 80C51 hier irgendwo rumfliegen. > Rudimentär erinnere ich mich dran, dass das Taktsignal asymmetrisch sein > muss, dann wird noch das Konstrukt "Maschinenzyklus" eingeführt, so dass > man nicht in ATMEL-AVR-Takt-Befehlsausführungszeiten-Vorstellungen > denken darf. Hat auch kein Programmspeicher onboard, benötigt ein externes EPROM fürs Programm und noch ein Adressen-Latch-IC zusätzlich. (Selbstbau-Programmiergerät ist vorsintflutlich.) Lück schrieb: > Ich habe auch mit der Umkehrung des Taktes herumprobiert und das auf > einen Zähler geschickt, damit die fallenden Taktflanken zählen und es > ging eine Weile ganz gut. Doch der Zähler muss sich nach 4 mal Zählen > aufhalten, noch dazu muss er am Anfang zurückgesetzt werden, und dabei > darf die ganze Start/Endbedingung sich nicht gegenseitig stören. Das > ganze Zusammenspiel mit Gattern und Flipflops ist eine Katastrophe :-) Kannst Du bitte etwas mehr über das Schaltungsdesign verraten? Hab nämlich gerade und noch Excess-3-Zähler und Aikenzähler synchron etc. durchgeblättert. Eine Tabelle für das geforderte Signal wäre gut. ciao gustav
:
Bearbeitet durch User
Ich habe eine Schaltung gezeichnet, sie läuft mit 5V Betriebsspannung. Links sieht man die Problemstelle, diesen Kasten der einen bis maximal vier Taktimpulse unterdrücken soll wenn am Portpin X ein Impuls kommt (der bleibt eine ganze Weile bis der 8051 den nächsten Befehl ausführt).
Zur Lücke ist noch zu sagen, dass ich insgesamt 4 CLK-Takte auslassen/löschen möchte. Dies muss aber nicht unbedingt in einem Durchgang erfolgen, das heisst es die Lücken-Logik kann auch vier mal hintereinander angesteuert werden von Port x falls es möglich ist die Taktlücke nur einen Impuls weit zu machen.
Hi, die vier Impulse Auslassung könnte ein 74HCT163 Synchronzähler bewerkstelligen. (Synchronzähler deswegen, weil die schneller sind als Asynchronzähler.) Und weiter ...hätte jetzt an eine NAND-Logik mit 74HCT00 gedacht. Damit lässt sich eine Torschaltung realisieren. Die NAND-Logik hat immer Priorität. Und damit der MCU-Port. Es kann dann aber auch sein, dass der MCU-Port den gewünschten Impuls zum "Glitch" verformt. ciao gustav
Ich habe eine Schaltung entworfen: Ein Zähler wird durch das Freigabesignal an PortX gestartet (über ein D-Flipflop). Dieser Zähler hält sich an wenn das Zählbit 2 erreicht ist, also wenn er bis 4 gezählt hat. Der Zähler zählt fallende Taktflanken des invertierten CLK-Signales. Dies ist nötig damit der Takt beim aktivieren des Lücken-Mechanismus nicht abrupt vom H-Zustand nach L geht. Wenn der Zähler bis 4 gezählt hat hält er sich selber an und er wird auch zurückgesetzt durch das D-Flipflop. Solange der Zähler zählt halten das NOR an dessen 2 unteren Ausgängen zusammen mit dem UND das CLK-Signal auf Masse. Es kann sein dass ich mich um einen Takt vertan habe am Zählerausgang, das muss ich nochmal genau aufzeichnen. Auch ist die Startbedingung nach dem RESET des Systems nicht so wichtig, da sowieso erst die System-Initialisierung folgt - selbst wenn das anfängliche CLK-Signal Lücken bekommt durch den Zähler.
Hallo Lück, die Schaltung ist deshalb recht umfangreich damit auch ein anliegender H-Pegel beim Takt nicht abgeschnitten wird wenn das Auslösesignal kommt. Hab im PDF mal noch die Ruhepegel der Signale eingetragen. Die FF's IC1A & IC1B lösen nur bei einer Flanke am Event-Eingang aus: IC1A beim Wechsel von H->L IC1B beim Wechsel von L->H der Ausgang (2 bzw. 6) des jeweiligen FF's geht dann auf LOW, durch die Undverknüpfung mit V1/2 geht dessen Ausgang (4) auf High. Mit der nächsten fallenden Flanke an Clock wird dieses High von IC2A an dessen Ausgang (2) übernommen, der negierte Ausgang (3) wechselt nach LOW und schaltet über die Undverknüpfung mit IC3A den Ausgangstakt ab. Durch den Wechsel des Ausgangs (2) von IC2A nach High wird der Load-Eingang das Zählers freigegeben, wodurch dieser nun mit jedem Takt eins weiter zählt bis 15 erreicht wird. Dies wird durch High am CT-Ausgang (15) signalisiert und setzt mithilfe der Negierung durch V1/4 die FF's IC1A & IC1B zurück in den Ruhezustand. Mit der darauffolgenden fallenden Flanke an Clock gibt IC2A über IC3A den Ausgangstakt wieder frei. Sascha
Danke für deine Mühe Sascha :-) Das mit dem unklaren Wechsel der Eingangssignal-Flanke hätte ich dir ersparen können wenn ich mehr Details angegeben hätte. Doch ich habe vielleicht eine Schaltung gefunden, die möglicherweise mit nur 2 Bausteinen auskommt. Sie erzeugt aber nur eine Lücke von nur einem CLK-Impuls (falls sie funktioniert).
Aber du hast mich inspiriert und mir die Symbole für die D-Flipflops gegeben damit ich was zeichnen konnte :-)
Lück schrieb: > Aber du hast mich inspiriert und mir die Symbole für die D-Flipflops > gegeben damit ich was zeichnen konnte :-) naja habs schnell mit Eagle zusammengeklickt ... Sascha
Hallo, Karl B. schrieb: > Thomas E. schrieb: >> macht nach einem Signalwechsel an Pin7 eines Attiny 13a einen Impuls von >> ca. 320ns bei 9,6MHz an Pin2. Feintuning ist mit dem OSCCAL-Register >> möglich. Ist allerdings nicht synchron. Auf den Vorschlag wurde irgendwie nicht so recht eingegangen, wäre von der Bauteileanzahl unschlagbar 1x 8Pinner und 100n kondensator, fertig. Kenne mich mit dem 13a jetzt nicht aus und will nicht erst das Datenblatt durcharbeiten, da ich meist den Attiny45 verwende würde ich es damit versuchen, der läuft mit bis zu 20Mhz. Ungetestetes Gedankenexperiment: Wenn man da die Clock OutputBuffer Fuse setzt wird das Clock Signal durchgereicht, also Eingangstakt=Ausgangstakt/Prescaler; Wenn man dann in der MainLoop schnell hintereinander 2x den Prescaler wechselt von 1:1 nach 2:1 müsste die beabsichtigte Lücke entstehen.
1 | ...
|
2 | CLKPR=(1<<CLKPCE); //Takt synchron |
3 | CLKPR=(1<<CLKPS0); //Takt synchron ab hier halber Ausgangstakt |
4 | nops.. |
5 | CLKPR=(1<<CLKPCE); |
6 | //Zusätzliche Lücke da halber Takt.
|
7 | CLKPR=0; //Takt synchron? |
8 | ...
|
Braucht zwar eine gewisse Vorlaufzeit um den Flankenwechsel auf einem der anderen Pinne noch auszuwerten, aber bei den Eingangs eingeräumten Freiheitsgraden in 1x4 2x2 oder 4x1 ist das ja vielleicht nebensächlich. Wie gesagt ungetestet, habe den Clock Output Buffer bisher noch nie gebraucht. Gruß Dominik
Lück schrieb: > Danke für deine Mühe Sascha :-) > Das mit dem unklaren Wechsel der Eingangssignal-Flanke hätte ich dir > ersparen können wenn ich mehr Details angegeben hätte. > > Doch ich habe vielleicht eine Schaltung gefunden, die möglicherweise mit > nur 2 Bausteinen auskommt. Sie erzeugt aber nur eine Lücke von nur einem > CLK-Impuls > (falls sie funktioniert). das was du beschreibst wird sie tun - genau Du könntest in die Rückfühung (vom 2. zum 1. FF) auch noch weitere D-FF einfügen die mit dem Takt gefüttert werden und den Restet des 1. FF um je einen Takt verzögern. Sascha
Dominik schrieb: > Auf den Vorschlag wurde irgendwie nicht so recht eingegangen, wäre von > der Bauteileanzahl unschlagbar 1x 8Pinner und 100n kondensator, fertig. Karl B. schrieb: > Zum Finden der Lösungswege müsste man noch wissen, welche Idee > dahintersteckt, bzw. was bezweckt werden soll. > a) Arbeit mit MCU, evtl. mit welcher. Lösungsvorschlag a) wurde stillschweigend schon direkt am Anfang vom TO verworfen, also, mit AVR-Features wie zum Beispiel Timer-Interrupt, CTC etc. zu arbeiten, was die Arbeit wohl vereinfachen würde. Eine (Logik-)Lösung mit Advanced- und High-Speed TTL Bausteinen wäre im Zusammenhang mit der 80C31 bzw. 80C51-er Technologie auch irgendwie "stilechter", muss ich zugeben. Das geht. Und auf meine Befürchtung: Karl B. schrieb: > Es kann dann aber auch sein, dass der MCU-Port den gewünschten Impuls > zum "Glitch" verformt. wurde schon eingegangen. Chapeau! Lück schrieb: > Dies ist nötig damit der Takt beim > aktivieren des Lücken-Mechanismus nicht abrupt vom H-Zustand nach L > geht. Eben ein sog. "Glitch". ciao gustav
:
Bearbeitet durch User
Karl B. schrieb: > Eine (Logik-)Lösung mit Advanced- und High-Speed TTL Bausteinen wäre im > Zusammenhang mit der 80C31 bzw. 80C51-er Technologie auch irgendwie > "stilechter", muss ich zugeben. Es soll ja retro werden ... aber wird 12MHz-TTL noch produziert ? Laut Wikipedia ist da einiges veraltet, und bei den Händlern verfügbar muss es auch sein.
Lück schrieb: > Es soll ja retro werden ... Ok, war auch mit Kanonen auf Spatzen (außer was den Platzbedarf auf dem Board betrifft). Low Power Schottky ok? Dieser Baustein ist "noch" verfügbar und erfüllt auch die Timing-Vorstellung, hat darüber hinaus "zufällig" die gleiche Verdrahtung wie der im obigen Schaltplan ;-) SN 74LS74AN Gruß Dominik
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.