Forum: Mikrocontroller und Digitale Elektronik Wie Taktlücke erzeugen ?


von Lück (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

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

von Max D. (max_d)


Lesenswert?

Das ist nicht zufällig das gleiche Problem: 
Beitrag "Dynamisch ein paar Takte auslassen bei der 8051 CLK"

von gustav (Gast)


Lesenswert?

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

von Max D. (max_d)


Lesenswert?

Keines der beiden Probleme ist meines. Mich hat nur diese Frage an den 
anderen thread erinnert. Deswegen hab ich nachgefragt

von Walter T. (nicolas)


Lesenswert?

Lück schrieb:
> da mein Buch knapp aber komplex geschrieben ist

Meins auch. Haben wir das selbe Buch?

von Lück (Gast)


Lesenswert?

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 ?

von georg (Gast)


Lesenswert?

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

von Sebastian S. (amateur)


Lesenswert?

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!

von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

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

von Besucher (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

Ja, so ähnlich wie Sascha meine ich das auch. Nur nicht ganz so 
kompliziert.

: Bearbeitet durch User
von Lück (Gast)


Lesenswert?

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.

von Lück (Gast)


Lesenswert?

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.

von HildeK (Gast)


Lesenswert?

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.

von Lück (Gast)


Lesenswert?

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 ?

von Lück (Gast)


Lesenswert?

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.

von Lück (Gast)


Lesenswert?

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  :-)

von HildeK (Gast)


Lesenswert?

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.

von Lück (Gast)


Lesenswert?

Hoffentlich funktioniert die Schaltung vom Sascha - obwohl ich sie nicht 
ganz nachvollziehen kann. Ich glaube ich muss ein paar Nüsse einwerfen 
:-)

von Lück (Gast)


Lesenswert?

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 ?

von Thomas E. (thomase)


Lesenswert?

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
von HildeK (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

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
von Lück (Gast)


Angehängte Dateien:

Lesenswert?

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).

von Lück (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

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

von Lück (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

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

von Lück (Gast)


Angehängte Dateien:

Lesenswert?

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).

von Lück (Gast)


Lesenswert?

Aber du hast mich inspiriert und mir die Symbole für die D-Flipflops 
gegeben damit ich was zeichnen konnte  :-)

von Sascha W. (sascha-w)


Lesenswert?

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

von Dominik (Gast)


Lesenswert?

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

von Sascha W. (sascha-w)


Lesenswert?

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

von Karl B. (gustav)


Lesenswert?

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
von Lück (Gast)


Lesenswert?

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.

von Dominik (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.