Forum: Mikrocontroller und Digitale Elektronik merkwürdiges Problem / AND gates und Counter ICs


von Klaus D. (kolisson)


Angehängte Dateien:

Lesenswert?

Hallo mal wieder.

Ich suche seit Tagen nach einer Lösung für ein merkwürdiges Problem.

Zur Beschreibung (siehe Anhang):

Bei Schaltung A wird der 8Mhz Takt für 1 Sekunde an die Counter
(zu Testzwecken beide Eingänge pararallel) weitergereicht.
Nach dieser Sekunde werden die Counter ausgelesen zu zeigem beide
identische Zählwerte in der Grössenordnung von 8 Megatakten
Die Betonung liegt hier auf identisch, was ja auch zu erwarten wäre.


Bei Schaltung B kommt nun ein weiterer Takt hinzu.
Nun erwarte ich in den Countern ja nur den Zählwert der H-Zeiten.
Hier also 50 % vom Sysclock.
Tatsächlich klappt das und die Zähler zeigen beide einen Zählwert
in der Grössenordnung von 4 Megatakten.
Allerding sind die Zählerstände nicht bei jeder Messung identisch.
Mal zeigt Zähler A etwas mehr an , mal Zähler B.
Die Abweichung liegt im Bereich von 1 - ca. 70 Takten und weist keine
Regelmässigkeit auf.

Mein Problim ist hier nicht der absolute Messwert sondern der Grund,
warum die parallel gespeisten Zähler unterschiedlich zählen.

Ich habe statt der AC08 auch HC08 und HCT sowie LS ausprobiert.
Ebenso bringt der Ersatz der beiden Dual-In-And durch einen
Triple And (AC10) keinen Unterschied.

Mir leuchtet nix ein, woher dieser Schlupf kommen kann.

Hat vielleicht einer einen Tipp für mich ?


Gruss Klaus

von Entwickler (Gast)


Lesenswert?

Da werden vermutlich Spikes generiert, die der eine Zähler gerade noch 
erkennen kann und der andere nicht.
Nimm ein Scope und untersuche das Signal direkt an den Zählereingängen 
nach zu kurzen Impulsen.

von Klaus D. (kolisson)


Lesenswert?

nun ja .. mit meinem analoge Scope kann ich das nicht messen.
Da sehe ich nicht ob von 4 Megapulsen evt. 10 zu schmal sind.

und es ist ja auch so, daß mancher Durchlauf Zähler A bevorzugt, mancher
aber auch Zähler B.

Gruss Klaus

von (prx) A. K. (prx)


Lesenswert?

Mit einem analogen Scope wird das schwierig. Dafür benötigt man ein DSO 
mit Pulsbreitentrigger.

von Entwickler (Gast)


Lesenswert?

Dann mach es anders herum. Spendier dem betreffenden ..08 ein D-FF zur 
Synchronisierung oder verlänge den Impuls zu den Zählern.

von Klaus D. (kolisson)


Lesenswert?

Hmm,
D-FF für den 08er ..  wohin sollte der dann deiner Meinung nach ?
meinst nen 7474 ?

Gruss Klaus

p.s.
Ich hatte auch schon 7414ern an den Ein und Ausgängen des 08er
experimentiert, was auch nix nutzt.

von karadur (Gast)


Lesenswert?

Hallo

Deine Generatoren sind wahrscheinlich asynchron. Das UND-Gatter macht 
bei Änderung beider Eingangssignale Ausgangssignale die der Überlappung 
beider Signale entspricht. Das können auch sehr kurze Pulse werden. Die 
Synchronisierung mit D-FFs löst das Problem.

von karadur (Gast)


Lesenswert?

Takte das D-Flipflop mit deinen 8MHz und übernehme damit das Signal des 
08.

von Entwickler (Gast)


Lesenswert?

>D-FF für den 08er ..  wohin sollte der dann deiner Meinung nach ?

Überall, wo asynchrone Impulse aufeinandertreffen: an U2, an U4 und U5.

von Aufpasser (Gast)


Lesenswert?

Das ist doch sein Problem:
 > Mein Problim ist hier nicht der absolute Messwert
 > sondern der Grund, warum die parallel gespeisten Zähler
 > unterschiedlich zählen.

und nicht die Syncronisierung der Generatoren.

von Klaus D. (kolisson)


Angehängte Dateien:

Lesenswert?

Ist das so gemeint ?

von karadur (Gast)


Lesenswert?

Jetzt können immer noch die 1kHz und der 0,5Hz Puls Spitzen erzeugen, 
aber deine Zähler sollten so gleich Zählen.

von Entwickler (Gast)


Lesenswert?

Pin 1 von U5 an Pin 5 vom D-FF und Pin 2 vom D-FF an Pin 3 von U4, wenn 
ich nicht irre.

@Aufpasser:
Das Problem ist, dass die Zähler nur gleich aber nicht identisch 
funktionieren :-)
Um das zu beheben, muß man synchronisieren oder "stretschen".

von Klaus D. (kolisson)


Lesenswert?

... und den clk vom FF dann an den sysclock 8Mhz ?
Ich werde es nachher mal probieren.

Wie könnte ich denn als Alternative das Stretching machen.
Monoflop ist klar .. aber so schnell ?
Als Pulsdauer stelle ich mir dann sowas in der Grössenordnung
von 15nS vor um den Counter dann später auch voll auszunutzen.
(Die 8Mhz sind jetzt nur für die Testphase. Später will ich so auf
40-50Mhz hoch)

von Aufpasser (Gast)


Lesenswert?

@Entwickler
 > Allerding sind die Zählerstände nicht bei jeder Messung identisch.

Versteh ich immer noch nicht:
 > Mal zeigt Zähler A etwas mehr an , mal Zähler B.

Heißt für mich: jeder der beiden Zähler hat nach jeder Messung einen 
anderen Displayinhalt. Die Zähler differieren untereinander, obwohl sie 
den SELBEN Input bekommen (verschliffen oder nicht).

von Klaus D. (kolisson)


Lesenswert?

@ Aufpasser

>Heißt für mich: jeder der beiden Zähler hat nach jeder Messung einen
>anderen Displayinhalt. Die Zähler differieren untereinander, obwohl sie
>den SELBEN Input bekommen (verschliffen oder nicht).

Ja, exact das meine ich.
Beide Zähler IC sitzen an einem Atmega und werden von diesem
nach Beendigung eines Messzyklus ausgelesen.
(gleiche Softwareroutine)

Wenn ich über einen anderen Mega eine definierte Pulsanzahl
in die Zähler jage, kann ich beweisen, dass diese sich nicht
grundsätzlich verzählen.

Alle IC sind bestens gepuffert. 10u tanto, 2,2u Smd und 100nF Ker je IC.
Leitungen vom AND zum Zähler mitlerweile exact gleiche Länge (2cm).

Und wie gesagt (Bild erster Post) : der Fehler tritt erst auf,
wenn der dritte Takt ins Spiel kommt.

Selbst, wenn ich eine z-B. eine Tendenz erkenne, dass z.B. Zähler B
eher etwas mehr als weniger Zählt ändert das vertauschen der
beiden Chips in den Sockeln nicht die Richtung der Tendenz.

Also wirklich mirakulös

Gruss Klaus

von karadur (Gast)


Lesenswert?

Synchronisier mal den 0,5Hz Takt und den 1kHz Takt mit den 8MHz und mach 
dann deine Verknüpfung.

von Klaus D. (kolisson)


Angehängte Dateien:

Lesenswert?

Anbei noch eine Messreihe.

SYS takt = 8Mhz Dil Quarzosc.

Gemessen wird 1 Sekunde lang die oberen Periodenzeiten.
(Gate Tim ing abgeleitet von Quarzoscillator)

Der dritte Takt (ext. Clck) wird auch aus einem Quarzoscliattor erzeugt.

Es sind also 3 Stck. Dil Osc. in der Schaltung (also  asynchron)

Problem ist derzeit wirklich nicht  der Absolutwert der Messung
sondern ausschliesslich die Abweichung von A zu B, obwohl diese
parallel gespeist werden.

Gruss k

von Entwickler (Gast)


Lesenswert?

>... und den clk vom FF dann an den sysclock 8Mhz ?
So hattest Du es schon gezeichnet.

>Ich werde es nachher mal probieren.
Dann wirst Du feststellen, dass es funktioniert und keinen Sinn mehr 
darin sehen, es jemals wieder anders zu machen.

Durch die asynchronen Taktsignale, insbesondere 1kHz zu 8MHz, entstehen 
am betrefenden ..08-Ausgang Impulse mit Längen von 0 - 125ns. Die Zähler 
brauchen eine tw von min. 10ns (siehe Datenblatt). Da es sich bei den 
Zählern nicht um exakte mathematische Modelle handelt, zählt der eine 
noch 9,1ns und der andere, sogar 8,7ns. Folglich weichen die 
Zählerstände am Ende voneinander ab.
Oder anders ausgedrückt, der eine Zähler schafft 43MHz und der andere 
macht bei 41,5MHz schon schlapp.

Anderes Beispiel: es wurde ein ATmega angesprochen. Bei diesem und allen 
anderen µCs werden die Zähleingänge grundsätzlich mit dem internen Takt 
synchronisiert. Daher liegt die max. Zählfrequenz zumeist bei 1/2 oder 
1/4 des CPU-Taktes.

von Aufpasser (Gast)


Lesenswert?

> Wenn ich über einen anderen Mega eine definierte Pulsanzahl
 > in die Zähler jage, kann ich beweisen, dass diese sich nicht
 > grundsätzlich verzählen.

Somit müssen beide Zähler auch gesund sein.
Allerdings hat bei diesem Test der Ersatz-Impulsgeber einen anderen 
Ausgangwiderstand.
Der Output des Gatters hat einen Totem-Pole.
Das passt möglicherweise den Zählern nicht so recht.
Oft hilft einfach 100 Ohm vor den Eingang jedes Zählers (probieren).

von Entwickler (Gast)


Lesenswert?

... und ich dachte, ich hätte das Problem und auch seine Lösung 
hinreichend verständlich erklärt.

von Klaus D. (kolisson)


Lesenswert?

@ Entwickler
Jo .. hast Du ja. Ich habe halt nur noch mal weiter erklärt.

@ All
Ich werde aufgrund der neuen Tipps einfach mal weiter testen und 
nachdenken.

Dann melde ich mich wieder zum Thema

Danke soweit

Klaus

p.s.
Wenn ich es jedoch richtig verstanden habe, würde auch ein Streching am
Eingang des Counters helfen. Also eine garantierte Mindestpulslänge von
sagen wir 15nS. Wie sollte man das machen ?
Zudem sind ja die dafür verwendeten Chips auch nicht unendlich
präzise und schnell. Das gäbe dann wohl nur ein Verschieben des 
Problems,
oder ?

von Klaus D. (kolisson)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
um diesen Beitrag nun mal zu vollenden schreibe ich hier mal die
Schlussinformationen:

Zunächst einmal die Bestätigung, dass ihr recht hattet und das Problem
die fehlende Synchronisation und die dadurch entstehenden "superkurzen"
Impulse waren. Es fehlte also noch ein extra FF. Da ich die Problematik
mit einem analog Osci nicht messen konnte und auch ein Simmulator
natürlich keine Ergebnisse liefert (da sind ja alle Bauteile gleich),
war es etwas zwickelig die richtige Position für das extra FF zu finden.

Im Anhang nun also die endgültige Schaltung und das Oscillogramm.

Nun zur Sinn- und Funktionsbeschreibung:

A) Sinn:
gebaut wurde ein spezieller Frequenzzähler (mit Hardwarecountern 
74LV8154), der eine kombinierte Messung von F und reziprok F durchführt. 
Zudem wird
durch die getrennte Erfassung der Pulspakete für H-Periode und L-Periode
auch gleich noch der Tastgrad von Fmess erfasst.
Die Ablaufsteuerung erfolgt über Atmega.

B)Funktion:
Am Eingang Fmess liegt die zu messende Frequenz an.

Vor einer Messung werden die FF und auch die Counter IC über ein L
am Eingang "clear Signa" zurückgesetzt.

nun erzeugt die CPU ein H am Eingang Gate Timing.
Hier bestimmt die CPU in etwa die Länge der Messung z.B. 1 sekunde.

Der FF U1B wartet nun auf die nächste steigende Flanke von Fmess und
aktiviert durch H am Ausgang Q des FF die eigentliche Messung.

Nach der Vorgabe von z.B. 1 sekunde setzt CPU das Gate Signal wieder
auf L. Dies beendet jedoch nicht die eigentliche Messung, da das FF
noch auf die nächst folgende steigende Flanke von Fmess wartet.

die eigentliche Messung wird also meistens etwas länger dauern als die
Vorgabe von 1 Sek. Dies stellt aber sicher, dass immer nur ganze
Perioden gemessen wurden.

Zudem erfassen die Zähler für Periode L + H die Systemtakt (25Mhz)
Pulspakete für die eigentlichen Perioden. Es ist also eine Perioden-
messung über soviele Perioden wie sie in etwa 1 Sekunde hereinpassen.

Nun haben wir in den Zählern einige Daten gesammelt, wissen aber
nicht genau wie lang die Messung eigentlich real gedauert hat.
Dies kann jedoch einfach ermiitelt werden, da ja der Systemtakt (25Mhz)
bekannt ist un d die Addition von periode-L und Periode-H die Anzahl
Takte kennt.

wenn also Systemtick = 1 / 25Mhz ist
Peri_low = die Pulspakete für Low
Peri_High = die Pulspakete für High
Perigesamt_a = Peri_low + Peri_high

(aus Korrekturgründen muss jeweils von Perihigh und Perilow
1 mal Freqcounts_a abgezogen werden .. siehe Nadelimpuls Oscillogramm)

ergibt sich die Messzeit aus:
Messzeit_a = Perigesamt_a * Systemtick

Für die Anzeige der gemessenen Frequenz wird nun nicht der Zähler
Fmess angezeigt (der hat ja keine Kommastellen) sondern ein wert
aus Fmess und Periodenzeit gebildet.

reale Frequenz  = Freqcounts_a / Messzeit_a


Insofern haben wir jetzt einen recht genauen Frequenzzähler mit
kombinierter Periodenmessung, der keine Bereichsumschaltung benötigt,
da der Einfluss der Priodenmessung zu kleineren FMess automatisch
zunimmt und zu steigender Fmess abnimmt.

Ich hoffe, ihr könnt mit den Infos was anfangen.

Ich habe diese Schaltung nun gleich 2 mal aufgebaut
(2-Kanal Zähler  = 6 Stück 74LV8154) und diese beiden Kanäle
dann wieder über FF so gekoppelt, dass die Zeitdifferenz der steigenden
Flanke von Kanal A und B auf einen 7ten 74LV8154 geschickt wird
(in 1/25Mhz).

Dadurch kann man ggf. auch noch eine Phasenmessung durchführen oder hat
eine recht genaue Stoppuhr.

Leider ist die Grenzfrequenz der 74LV8154 recht niedrig.
50mhz geht noch durch. Deshalb habe ich vor dem Zähler für Fmess
noch einen /2 Prescaler mit 74F74 gesetzt, der dann auch ausgewertet
wird.

Gruss Klaus

Ergänzung:
Der FF U4B mit der Led wird vom CPU abgefragt ob die letzte Messung auch 
tatsächlich schon beendet ist

von Ulirch (Gast)


Lesenswert?

Ich sehe da 2 Probleme:

Beim 74HC74 wird auf die steigende Flanke getriggert. Das heißt die 
Änderung am Ausgang des FF kommt genau in der H Phase des Taktes an. An 
den Zählerausgänngen bekommt man so beim Umschalten des FF U16A gerade 
kurze Pulse von etwa 2 Gatterlaufzeiten - das sind genau solche Pulse 
die man vermeiden sollte weil die eventuell aureichen, um den Zähler zu 
triggern oder auch nicht. Wenn das Eingangssignal hart an der Grenze 
ist, kann das FF auch mal länger brauchen (Grenze zum metastabilen 
Zustand) - dann wird er Puls auch länger. Der Takt zum FF sollte da 
besser noch einmal invertiert werden.

Das Signal vom Gate ist auch gerade falsch synchronisiert. Das FF U1B 
macht das Signal Synchron zum Eingangssignal - nicht mit dem Takt. Bei 
den UND gatter U7C und U7D gibt es dann ggf. Probleme, wenn die Flanken 
dicht zusammen fallen. Das wird nicht so oft passieren (maximal 2 mal 
bei einer Messung), ist aber nicht gut. Eine Lösung könnte es sein - an 
FF U1B nicht direkt das Eingangssignal, sondern einen Ausgang vom FF 
U16A zu nutzen das ist dann mit dem Takt synchron. Welche Polung ist 
Geschmackssache. Vom Timing kommen da aber einige Verzögerungen 
zusammen. Das könnte kritischer als die 50 MHz des Zählers werden - 
eventuell lieber auch hier ein 74F74.

von Klaus D. (kolisson)


Angehängte Dateien:

Lesenswert?

Hallo Ulrich,
danke für die Einlassung. Es liest sich gut und ich werde die
ganze Sache nochmal unter diesen Aspekten durchdenken.
Das mache ich aber eher morgen als heute, da hier einige Konzentration
nötig sein wird.
Vielleicht sind die von dir erwähnten Problemchen ja auch der Grund,
warum ich meine angepeilten 50Mhz Sysclock nicht verwenden kann
(Fehlmessungen) und daher auch mit den jetzigen 25 Mhz glücklich bin,
da es prima klappt .

Anbei noch ein Extrafoto von einem Quarzofen nebst Schaltung ,
der sozusagen als  Abfallprodukt entstanden ist.

Als Testreferenz verwende ich übrigens den Langwellensender Monaco,
Roumoules, 2x 1000 Kilowatt in etwa 500km Entfernung.

Also bis denne .. ich gehe wieder in Klausur bis weisser Rauch 
aufsteigt.


Gruss Klaus

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.