Erzeugen eines Impuls mit nur einer Instruktion

OP #3613573
Lesenswert?
• ▲
▼
Hallo Zusammen,

Die beiden AVR Befehle CBI und SBI sind ja eher gemütlich und brauchen 2 
Cyclen. Ich möchte aus Performance Gründen nicht immer 4 Cyclen 
verbraten, ich will ja nur ein Datum in ein Register laden. Beim ATMEGA 
den ich einsetze kann man mit einem CBI PINx,y einen Pin auch "toggeln". 
Daher möchte ich gerne aus einer Flanke eine Impuls erzeugen. Der Impuls 
triggered ein Edge-Triggered Register (74HCT574). Der Impuls sollte 
sowohl bei fallender als auch steigender Flanke erzeugt werden. Im 
Anhang habe ich eine Schaltung die zwar nur bei steigender Flanke einen 
Puls generiert, aber wenn ich das AND durch ein EX(N)OR ersetzte gibt es 
einen Impuls in beiden Fällen. Frage, weiss jemand wie zuverlässig so 
eine Schaltung ist?

Gruss

Peter
Angehängte Dateien:
OP #3613720
Lesenswert?
• ▲
▼
Der minimale Impuls beim 74HCT574 (Worstcase Angabe im Datenblatt bei 
4.5V und -40 bis +85 Grad Celsius) sollte 20ns betragen (low oder high). 
Mit zuverlässig meine ich, kann man die Schaltung so gestalten, dass sie 
zuverlässig einen minimal 20ns langen Impuls erzeugt, aber auch nicht 
wesentlich über 50ns liegt. Sagen wir reproduzierbar in allen 
Betriebsumgebungen (0-50 Grad Celsius und 5V+/-5%) eine Impuls von 
mindestens 20ns aber maximal 60ns erzeugt. Er darf vor allem nicht zu 
lang sein, da auch die Pause zwischen den Impulsen nicht kleiner als 
20ns sein darf. Also muss ich wissen, wie lange er maximal wird, sonst 
geht es schief. Früher gab es mal Verzögerungsgatter die eine definierte 
(min/max) Verzögerung hatten.

Ja genau, den Pin kann man natürlich mit setzen von PINx,y nur dann 
toggeln wenn er auf OUTPUT gesetzt ist (steht ja so im Datenblatt). Muss 
ja OUTPUT sein, will ja damit den CP vom 74HCT574 ansteuern.

Ja die CKDIV8 Fuse ist heimtückisch (so wie ja auch die JTAG Fuse) und 
ich versuche immer darauf zu achten. Ich betreibe den ATMEGA bei 20MHz 
mit Quarz. Und der Grund warum mich die 4 Cyclen stören ist, dass ich in 
jedem Durchlauf 2 x 4 Cyclen brauche (2 Impulse) und das 20% der 
Durchlaufzeit des zeitkritischen Teils ist. Die daraus resultierende 
Performance des Systems ist dann ganz knapp zu gering (ich habe mal das 
ganze mit einem 25MHz Quarz betrieben und dann klappt das Timing über 
alles bestens). Ich habe ausgerechnet, wenn ich 4 Cyclen sparen kann, 
dann reichen 20MHz wunderbar und müsste so den ATMEGA nicht übertakten.
OP #3613894
Lesenswert?
• ▲
▼
Ich glaube ich habe die Lösung. Statt den Delay mit Inverter und evtl. 
einem RC Glied zu erzeugen nehme ich ein D-FF (74HCT74), bei 20MHz 
ergibt das einen Puls von genau 50ns wenn ich das richtig sehe. Der Port 
wird ja mit der steigenden Flanke ausgegeben. Das 74HCT74 übernimmt die 
Daten auch mit der steigenden Flanke, d.h. wenn ich XTAL2 (Full Swing 
Quarz Oscillator) als Clock für das FF nehme, steht am Ausgang vom FF 
jeweils ein Takt später der Wert des Output Pins zur Verfügung.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.