Hallo Leute, bin gerade dabei einen Funktionsgenerator mit dem XR2206 oder XR8038 zu bauen. Das eigentliche Problem betrifft aber die Anzeige der Frequenz auf dem Display. Eine Frequenzmessung ist eigentlich recht leicht aber ich möchte kein "Gatter-Grab" anlegen. Meine erste Idee war der 12-bit Zähler 4040, dann 2 Schieberegister (4 Pins bleiben wohl frei oder aufrüstbar), die das in den AVR 2313 reinschieben. Ausgangsseitig ein MUX 4051 (liegt grad rum) für die 5(?) Ziffern und ein 74xx164 für die Segmente, danach jeweils Treiber. Dann hab' ich im Netz das hier gefunden: http://hem.passagen.se/communication/freqcount.html Der Unterschied der Schieberegister 4014 zu meinen (74xx165) ist irgendwie fast null. Die kaskadierung spart aber Portpins. Das nächste Projekt ist schon ziemlich genial: http://www.myplace.nu/avr/countermeasures/index.htm Der Zähler 74xx590 hat 3-state Ausgänge und ein Ausgangsregister, damit kann man die Portpins mehrfach verwenden, spart Schieberegister am Ein- und Ausgang! Leider gibt's den 590er bei Reichelt als LS zum Sparpreis von 4,05, als HC auch nur in DIL, bei Conrad eine SMD Version, die ich garantiert bestellen muß. Kennt jemand vielleicht eine Alternative zum dem 590er? Irgendwas mit mehr als 8 bit. Ansonsten ist mir nämlich keine sparsamere Variante eingefallen. Man könnte höchstens einen 590er einsparen und softwaremäßig die 16bit Zählerstand erreichen. Bei meiner ersten Version wird's langsam blöd, auf der Platine alles zu verdrahten...
Suche doch 'mal nach: reziproker frequenzzähler at90s2313
Schau dir die AVR-Timer/Counter mal genauer an. Die lassen sich nämlich auch als Counter mit einem I/O-Pin hochzählen. Dann noch in regelmäßigen Abständen den Counterstand abfragen und daraus die Frequenz errechnen. Wenn man das Abfrage-Intervall sinnvoll auswählt, kann die Rechnerei recht trivial werden. Da bleibt dann auch noch Kapazität für die Ansteuerung eines LCD oder einer mehrstelligen 7-Segment-Ziffernanzeige (Multiplexbetrieb) übrig. Und das alles in einem Chip, der kaum Ansprüche an die Platine stellt. ...
Ja, das mit dem Interrupt auf dem Timer Pin ist mir bewußt. Ich hatte einfach Angst, daß das nicht so genau hinhaut. Also Du meinst, daß der 16-bit Timer einfach bei jeder steigenden Flanke hochzählt. Da das Signal eh vor der Endstufe des Generators kommt, also um die 0V herumschwankt, dürfte die Aufbereitung mit nem LM358 oder LM393 genügen. Dann bei bestimmten Zählerständen überprüfen, wieviel Zeit vergangen ist und eventuell die Torzeit verlängern (Autorange). Das Problem ist evtl, daß nur ein 16-bit Timer vorhanden ist, zur Zeitmessung oder Taktzählung muß dann der Überlauf softwaremäßig gehandelt werden. Die Links sind übrigens nicht schlecht!
Ich meinte aber keinen Interrupt auf einem Timerpin. Ich meinte den Zähleingang T1, der als Taktquelle für Timer/Counter1 genutzt werden kann, ohne dass man dazu einen Interrupt braucht. Dies macht dann die Hardware im Hintergrund, es wird nur der Vorteiler auf externen Takt an Pin T1 (PD5 beim 2313) eingestellt. Timer0 nutzt man dann für die Steuerung des Programms. Z.B Interrupt alle 10ms, in dem der "Torzähler" gezählt wird, das Anzeige-Multiplexing (falls 7-Segment-Ziffernanzeige) erledigt wird, falls erforderlich Tasten abgefragt werden usw. Bei Überlauf des Torzählers wird dann Timer1 ausgelesen, gelöscht und der Wert zur Anzeige aufbereitet. Anhand des gemessenen Wertes kann man auch die Torzeit variieren, z.B. langsame Frequenzen 1s, schnellere 10ms bzw. 100ms, und dabei den Dezimalpunkt verschieben. Dies ermöglicht in allen Bereichen eine brauchbare Auflösung. ...
Oder so. Mein Layout sieht gleich besser aus! Obwohl der andere Timer nur 8 bit hat, ist die Genauigkeit auch nicht so gering, wenn man den Prescaler einsetzt.
Ne feste Torzeit ist ungünstig bei kleinen Frequenzen. Deshalb macht man üblicher Weise eine kombinierte Frequenz-/Periodendauermessung: Man zählt für etwa 500ms die Frequenz (input an T0) und dann wartet man auf die nächste Flanke (input an ICP) und stopt damit die genaue Zeit der Flanke. Eine Multiplikation und Division später hat man dann die Frequenz. Mehr als 4 Stellen braucht die Anzeige für einen RC-Generator nicht. Hier mal ein Beispiel mit dem AT89C2051: http://www.progforum.com/attachment.php?attachmentid=144 Peter
@Hannes: >>Ich meinte den Zähleingang T1... es wird nur der Vorteiler auf >>externen Takt an Pin T1 (PD5 beim 2313) eingestellt. Snip aus dem Datenblatt: The synchronization and edge detector logic introduces a delay of 2.5 to 3.5 system clock cycles from an edge has been applied to the T1/T0 pin to the counter is updated. Each half period of the external clock applied must be longer than one system clock cycle to ensure correct sampling. The external clock must be guaranteed to have less than half the system clock frequency (fExtClk < fclk_I/O/2) given a 50/50% duty cycle. The edge detector uses sampling, the maximum frequency of an external clock it can detect is half the sampling frequency (Nyquist sampling theorem). However, due to variation of the system clock frequency and duty cycle caused by Oscillator source (crystal, resonator, and capacitors) tolerances, it is recommended that maximum frequency of an external clock source is less than fclk_I/O/2.5. An external clock source can not be prescaled. End Snip. 1.) ein externer Clock an T1/T0 kann nicht den Prescaler benutzen 2.) ein externer Clock sollte mindestens 2.5 mal langsammer sein als der Main Clock. Bei 16Mhz Takt kann man also nur maximal 6.4 MHz mit T0,T1 messen. @Alexander: >> also um die 0V herumschwankt, dürfte die Aufbereitung mit nem LM358 >> oder LM393 genügen Was schwebt dir da vor ? Der LM393 Komparator benötigt ca. 1.5µs pro Flankenwechsel bei 5mV Overdrive. Das beschränkt die maximal messbare Frequenz auf ca. 700KHz. Ich arbeite nämlich zur Zeit an einem ähnlichem Problem, und komme mit der analogen Inputlogik nicht so recht weiter. Ziel wäre es ein beliebiges Taktsignal, sei es Rechteck oder Sinus mit DC Offsets zu messen. Die minimale Amplitude sollte 1V betragen. Mit normalen Logikgattern zb. LVS Reihe kommt man da nicht weit. Mich würde also brennend interessieren wie man ein solches Signal so aufbereiten kann das es mit größtmöglichem Meßbereich ein sauberes Rechtecksignal für die nachfolgende digitale Logik liefert. Zz. experimentiere ich mit dem LM319 Komparator der 80ns schafft. Gruß Hagen
@Hagen: Ich hatte mich nicht präzise genug ausgedrückt, stimmt. Aufgrund das zweiten Beitrags (Hinweis auf 2313) hatte ich mich auch (fälschlicherweise) auf eine Lösung mit (Mega) 2313 eingeschossen. Ich meinte natürlich das zuständige Controlregister des 16-Bit-Timers mit den Bits für die Auswahl der Timer-Taktquelle. Dort wo der "Vorteiler" eingestellt wird. Denn eine dieser Einstellmöglichkeiten (mit den "Vorteiler-Bits") schaltet den Timer auf den Eingang T1. Der Vorteiler hängt fest am Prozessortakt und kann daher natürlich (zumindest beim 2313) nicht zwischen T1 und dem Zähleingang geschaltet werden. Das hatte ich auch nicht gemeint. Dass ich die Bits nicht konkret benenne hat damit zu tun, dass ich in erster Linie Hilfe zur Selbsthilfe geben möchte, dem Fragenden also den Blick ins Datenblatt nicht ersparen möchte. Er soll nur einen Tip bekommen, wo es weitere Informationen gibt. Dass die Taktfrequenz an T1 begrenzt ist, sollte aber akzeptiert werden. Ein Frequenzzähler in LS-TTL oder CMOS (bei 5V) ist sicherlich auch nicht schneller. Und ein professioneller (schneller) Frequenzzähler kostet nicht umsonst richtig Geld. Aber das weißt du ja alles selbst. ...
@Hannes: war auch keine Kritik an deinem Posting, sondern nur eine weitere Präzisierung der Möglichkeiten ;) @Läubi: >> Wie wäre es mit einem Eisntelbarem Vorteiler? Der digitale Teil dürfte das geringste Problem sein. In die engere Auswahl kommt bei mir der 74HCT4060 der bis 88Mhz läuft und den ich gerade in der Bastelkiste finde. Der analoge Eingangsteil macht mir die Probleme. Gruß Hagen
Also der 4060 hat zwar 14-bits aber nur 12 Ausgänge, deswegen wollte ich den nicht verwenden. @Hagen Zum analogen Eingangsteil: Der LM358 liegt halt gerade rum, dachte der geht schon. Zum Testen reichts jedenfalls. Bei beliebigen Quellen muß der DC-Anteil weg, klar. Mein Problem ist dann auch, daß ich negative Halbwellen bekomme. Wie krieg' ich die weg?? Überspannung mit Z-Diode aber Unterspannung? Dachte, daß die Z-Diode das übernimmt aber erst bei -0,6V. Ist halt nicht ganz digital... Ich seh' grad, daß sowas wie der NE529 geht. Schnell und TTL Ausgang. Wegen der Geschwindigkeit: 10MHz Systemtakt sind beim 2313 drin. Ein Vorteiler für höhere Frequenzen scheint mir bei den obigen Postings sinnvoll. Im Programm müßte dann zuerst der Zählerstand des Teiles abgefragt werden um dann bei niedrigen Frequenzen auf T1 umzuschalten. Eine Frage hätte ich noch zum Ausgangsteil des Generators: Einfach einen 50 Ohm Widerstand an den OP-Ausgang? Oder per Schaltung aus dem Tietze/Schenk die Überstrombegrenzung einstellen. Leider ist dann der rauschende Transistor dazwischen. Wahrscheinlich macht das nix aus.
Hi Alexander, mein derzeitger Entwurf sieht so aus. Ich benutze 2 74ACT163, das sind zwei synchrone binäre 4 Bit Counter die kaskadiert sind. Sie teilen den takt für T1 eines ATMega8 auf 1/128 runter. Davor liegt ein 4fach NAND Gatterdas die Selektion des Inputkanales übernimmt. Der AVR setzt RUN_F auf H, FLUSH_F auf H und RUN_CL auf L. Nun kann von der FREQUENCY Eingangslogik der Takt an die 4Bit Zähler durch. Der AVR wartet nun eine Zeit und zählt 128'tel der Takte per T1 mit. Dann setzt er RUN_F auf L Pegel, und taktet FLUSH_F solange selber weiter T1 wieder auf 0 steht. Der AVR ermittelt also die Anzahl der nötigen Takte bis der 8 Bit Zähler intern wirder auf 0 steht. Damit haben wir also einen 16Bit Wert aus Timer1->T1 + 8Bit unterste Bit um die Genauigkeit zu erreichen. Da der AVR über FLUSH_F den 8Bit Zähler immer auf 0 inkrementiert fält die komplette zusätzliche Beschaltung des Zählers recht simpel aus. Als NAND benutze ich 74F00 und somit komme ich auf eine theoretische maximale meßbare Frequenz von 140MHz. Bisher habe ich den analogen Eingansteil noch sehr einfach aufgebaut und weis eben nicht ob er funktonieren wird. Gruß Hagen
Also 2^8*(Zählerstand T1) + (2^8-Takte bis Überlauf 163) ist die Wellenanzahl am Eingang. Das ganze durch die Zeit ist die Frequenz. Was der OP bei Dir macht weiß ich nicht. Ist das ein Tiefpaß? Was kommt eigentlich bei C und L rein? Bei dem 163er Counter gibt's auch welche in einem Gehäuse. 390 oder 393 glaub ich. Bei dem analogen Eingangsteil brauchst Du für 140MHz aber einen schnelleren Transistor. Wenn ich mich nicht verrechnet habe ist auch der Eingangswiderstand bei 140MHz und 100pF nur 11mOhm, verstärkung ist angesagt. Schau mal bei ELV, deren Counter heit FC700x (7 oder 8) und hat einen LT1016 als Komparator drin.
<<bin gerade dabei einen Funktionsgenerator mit dem XR2206 oder XR8038 zu bauen. Das eigentliche Problem betrifft aber die Anzeige der Frequenz>> Wieviel GHz kann man denn mit diesen F-Generatoren so erzeugen ? Oder was soll die Diskussion über MHz-Eingangsstufen und Vorteiler ? Oder raffe ich wieder etwas nicht ?
@Alexander: 2^7 * T1, da ich ja am zweiten 4Bit Counter Q3 benutze um T1 zu takten. Um nun nach einer Messung die Bits aus den Counter'n, sprich den Rest der Messung ermitteln zu können (ohne das ich über Q0 bis Q7 wieder 8 Pins am opfern muß) taktet der AVR nun selber den Zähler. Dabei werde ich so vorgehen: Ein 8Bit register auf 0 gesetzt. Nun wird solange FLUSH_F getoggelt bis T1 auf1 geht. In dieser Schleife wird das 8Bit register natürlich dekrementiert. Dann wird in einer zweiten Schleife solange FLUSH_F getoggelt bis T1 von 1 auf 0 geht und das 8Bit register wiederum dekrementiert. Dies benötigt also maximal 256 Schleifendurchläufe. Gesamttakte wären dann T1 * 2^7 + 2^7 - Register / 2. >> Was der OP bei Dir macht weiß ich nicht. Ist das ein Tiefpaß? Was >> kommt eigentlich bei C und L rein? Das ist ein LM319 dual Comparator. Er misst entweder die Kapazität oder Induktivität. Den Schaltplan dazu findet man oft im WEB. Den zweiten LM319 möchte ich wenn es klappt bei der ESR Messung verbauen. Diese ESR Messung ist ebenfalls eine Kombination aus verschiedenen Einzelschaltplänen aus dem WEB. Ich dachte mir das ich eine Kombination als ELM Chang's Kapazitätsmessung (aber mit LM319 Komparator) + einem 100KHz Lock-In-Amplifier zu Milli Ohm Messung ein ESR Messgerät hinbekommen könnte. Das es andere fertige Chips gibt ist mir bewusst, aber bei diesem Projekt verbaue ich NUR Bauteile die ich auch hier liegen habe. Das Gerät wird mit > 5V aus einer Batterie oder Akku gespeist. Es wird nur einen Schalter geben, nämlich einen Einschalttaster. Möglich wird dies da ich den MAX8880 als Spannungsregler verbauen werde. Der AVR schaltet also selbständig den MAX8880 in den Standby Modus und das Boad verbraucht dann nur noch 1.5µA. Die Buchsen sind 3.5mm Stereo Klinke mit Schaltern, von denen ich auch noch einige rumliegen habe. Dabei werden die integerierten Schalter in den Klinkenbuchsen benutzt um den AVR mitzuteilen was man messen möchte. Es gibt also nur EINE Meßklammer die ich mir sprichwörtlich aus einer Wäscheklanmmer gebastelt habe. Messen möchte ich hauptsählich SMDs. Anzeige könnte es 3 mögliche geben: 1.) RS232 + Windows Software 2.) Pollin LCD per I2C 3.) Nokia LCD per SPI, deshalb auch den ATMega16 als MCU. Allerdings bin ich bis jetzt immer noch am konstruieren der Schaltung. Immerhin habe ich noch nie sowas "kompliziertes" in Analogtechnik gemacht. Mein persönliches Ziel bei der ganzen Geschichte ist es eher mich zu zwingen mit den Grundlagen der einzelnen Bauteile auseinanderzusetzen. Dasa kann man wie an der UNI natürlich auch alles in reiner Theorie aus Büchern, ich aber weiß das ich es nur begreifen kann wenn ich es praktisch aufbauen muß. Das ist halt ein anderer Lernprozess. >>Bei dem analogen Eingangsteil brauchst Du für 140MHz aber einen >>schnelleren Transistor. Wenn ich mich nicht verrechnet habe ist auch >>der Eingangswiderstand bei 140MHz und 100pF nur 11mOhm, verstärkung >>ist angesagt. Gut, da habe ich gleich ne Frage: Wenn ich die 100p auf 1n vergrößere komme ich mit der max. Meßfrequenz von 140MHz noch hin ?? Den BC547 habe ich erstmal nur eingebaut weil er die richtige Bauform hat. Im Datenblatt steht aber das er bis 300Mhz geht ?? Ich wollte einen C-Typ verbauen hFe >= 420 -800 ?? @Michael: Mir geht es erstmal um eine Frequenzmessung, nicht Erzeugung. Und so wie ich die Eingangsfrage verstanden hatte geht es Alexander auch nur darum. Gruß Hagen
Ok, mit dem BC327 hab ich mich verdacht. Dachte, der ist viel langsamer. Hier auf S.9 ist was nettes: ELV MFG9001 UTZ100, S. 6 ist einfach und gut (wichtig ist die Diode Eingang-GND damit bei negativen Spannungen nix abraucht) Wegen der Eingangimpedanz bin ich mir auch nicht sicher. Würde halt wie bei ELV zuerst nen Widerstand einbauen. C in die Leitung und dann R nach GND ist doch ein Hochpaß. Den dann auf ein paar Hz einstellen. Bei meinem Oszi wird's ähnlich sein. Wenn man die DC Spannung aufdreht, folgt der Strahl bei AC Kopplung noch etwas. Bei ELV raff ich die FET Verstärkerstufe nicht. Der komlizierte Eingang muß aber nicht sein, beim UTZ100 ist es ganz passabel. LC Meter kommt bei mir auch noch aber mit einem funktionierenden Generator und Oszi brauch ich den net unbedingt. Am präzisesten geht's über Meßbrücken aber mit manuellem Abgleich ist das ein ziemlicher Scheiß.
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.