Hallo Ich habe mir gerade überlegt, daß man Frequenzbereich eines Zählers mit AVR´s nicht einfach erweitern kann, in dem man Vorteiler davor setzt. Wenn ich den mit 20Mhz takte, kann ich bestenfalls bis 10 Mhz direkt zählen. Angenommen, ich hätte einen 16:1 Teiler davor, dann wird meine angezeigte Frequenz (bei sagen wir 100Hz) nur 96Hz sein. (100Hz/16=6,25Hz abgerundet auf 6Hz*16 ergibt 96Hz). Das ist eine Ungenauigkeit von 4%. Meine Idee wäre ein externer Zähler der ebenso wie der interne Timer1 (als Counter)65536 Schritte zählen kann. Wenn ich dessen Zählerstand über 2 Ports einlese(muß ich ja, denn das Ding ist ja dann 16 Bit breit)und dann drin die 2 Bytes "zusammenschiebe", müßte ich doch auf´s Hertz genau messen können? In der Not würde ich 4 Stück D193 oder etwas etwas Schnelleres kaskadieren. ....oder liege ich komplett falsch? MfG Paul
Hallo Paul, D193 ??? Hatten wir zu DDR Zeiten. Habe damals schon 093 benutzt. 193 hat so viel Strom geschluckt.... Also bin ich auch ein O.... Aber das ändert ja nichts am Fankt. Der Zähler vor dem IC muß ja gestartet und gestoppt werden. Also mußt Du natürlich bei Vorzähler die "Torzeit" entsprechend dem "vorzähler" zB./10 verkürzen. Auf zB. 1/10 von "normal" wenn der Teiler /10 teilt. Oder ohne Änderung der Torzeit, das Ergebnis mit 10 multiplizieren. Schau mal bei www.sprut.de vorbei. Ist zwar Pic, aber das Prinzip bleibt das gleiche So denn
Dein Fehler ist, Du denkst noch in alten Schaltkreisgräbern. Der MC kann rechnen, also ist es ein einfaches, immer genau mit den Flanken des Eingangssignals zu messen und dann in Frequenz umzurechnen. Dann nimmt Dir ein Vorteiler kein Fitzelchen an Genauigkeit. Für kleine Frequenzen (<16Hz) ist es natürlich sinnvoll, den Vorteiler überbrücken zu können, aber das geht ja mit dem 74HC193 sehr einfach. Peter
Gut, also werde ich es mit Vorteiler machen. Wenn der Meßwert einen bestimmten Betrag unterschreitet, kann ich ihn "überbrücken" lassen. @Peter Ich denke aber schon, daß der Vorteiler mir die Auflösung "stiehlt". Man sieht in vielen Veröffentlichungen, daß 2 Eingänge vorgesehen werden, einmal mit Vorteiler, einmal ohne um direkt in den Professor einzuspeisen. Wegen der Genauigkeit. Das wollte ich mit meiner obigen Idee umgehen. Tja, ich habe hier noch Unmengen von alten Schaltkreisen, von denen ich bei etlichen die Funktion noch aus dem Kopf kenne. Ein "Hoch" auf das HFO! :-)) MfG Paul
Hi die Schaltung im Attachment habe ich selber schon so aufgebaut. Der 74HC4060 ist der Vorteiler. An seinen Q-Ausgängen schließt man den AVR am T1 oder T2 Eingang an, je nach gewünschtem Teilerfaktor. Der 4060 taktet also den Timer 1 oder Timer 2 über dessen externen Takteingang. Der 4060 selber wird gefüttert über 2 NAND Gatter. An IN kommt unser zu messendes Signal rein. Über ENABLE=HIGH und FLUSH=HIGH wird dann damit der 4060 getaktet. ENABLE und FLUSH kommen ebenfalls an 2 Pins des AVRs. Wenn ENABLE=LOW ist kann man über das Takten von FLUSH per AVR den 4060 weiter zählen lassen. Eine Messung sieht nun so aus: 1.) ENABLE = LOW und FLUSH = getaktet per AVR so lange bis T1 auf HIGH geht und wieder auf LOW schaltet. 2.) Timer 1 (16 Bit) im AVR wird extern getaktet über T1 und auf 0 gesetzt 3.) Timer 2 im AVR wird auf eine entsprechende Zeitbasis initialisiert, zb. 100ms 4.) ENABLE = HIGH und FLUSH = HIGH. Nun wird der 4060 über IN getaktet. 5.) nachdem Timer 2 nach zb. 100ms abgelaufen ist wird ENABLE=LOW gesetzt Nun haben wir im Timer 1 die Anzahl der Takte an IN / 2^x stehen. 2^x ist der Teilerfaktor des 4060. Wir müssen nun den 4060 zurücksetzen auf 0 und gleichzeitig ermitteln wie groß der Rest an Takten am IN EIngang war. Dazu ENABLE = LOW setzen und FLUSH wieder so lange Takten bis T1 auf HIGH geht. Wir zählen die dazu notwendigen Takte im AVR per Software mit. Dieser Wert kann nun umgerechnet werden mit IN_TAKTE = (Timer1 +1) * 2^x - Anzahl Takte an FLUSH bis T1 = HIGH ist. Im Grunde erweitern wird das 16 Bit Register des Timer 1 im AVR extern um x Bits im 74HC4060. Wenn der Teilerfaktor des 4060 zb. 256 ist == 2^8 dann wäre unser viertuelles Timer 1 Register defakto 24 Bit groß. 16 Bits im AVR + 8 Bits im 4060. Durch die vorgeschalteten NAND Gatter haben wird nun die Möglichkeit den 4060 per AVR zu takten und somit auch die Chance dessen Register Inhalt "auszulesen". Gruß Hagen
Hallo, ich mache das gerade mit einem 74HC590, hat für mich 2 Vorteile: er hat ein Ausgangs-Latch, ich kan den Datenport zum Einlesen also auch noch für andere Dinge nutze (ext. ADC), weiter kann man bei geschickter Zusammenschaltung der Steuerleitungen des 590 (CNT_OE und CNT_CLR zusammen und CNT_CE mit CNT_STR zusammen) mit 2 Portbits die Steuerung komplett erledigen. Mit CNT_OE/CNT_CLR wird das Ausgangslatch mit dem gezähliten Zählerstand vom AVR eingelesen und gleichzeitig der Zähler auf 0 gesetzt (nur der Zähler, nicht das Latch behält den Zählwert). Zum Zählen wird mit CNT_CE/CNT_STR ab der H/L-Flanke bei Low gezählt. Am Ende der Torzeit geht CNT_CE/CNT_STR auf H, der Takteingang ist gesperrt und mit der L/H-Flanke wird der Zählerstand ins Ausgangs-Latch übernommen. Kürzer habe ich es noch nicht hinbekommen. ;) Gruß aus Berlin Michael
@Michael: wenn ich deine Verschaltung richtig verstanden habe dann benötigst du aber 2 Pins als Steuerleitung und 8 Pins um den Zählerstand auslesen zu können. Das sind 8 Pins zuviel ;) Gruß hagen
Mahlzeit, ich habe einen 32 Bit-Zähler in einen CPLD programmiert. Davon habe ich zwei. Der eine zählt die Frequenz eines OCXO, der andere die zu zählende Frequenz. Durch Doppelzählung entfällt die exakte Torzeitlänge! Ein weiterer Vorteil ist, dass der auswertende µC lediglich Start, Stop, Reset und eben die Zählerstände abfragen muss und somit Zeit für andere Spielereien hat :-) Ein XL9572-15 schafft mindestens 100MHz. Torzeitlängen >30 Sekunden sind auch drin! Holger
@Hagen Gute Idee und vor allem gute Erklärung der Funktion. Ich denke aber, daß der 4060 zu langsam ist, um z.B. bis 100Mhz zu messen. Ich habe noch welche hier und eben mal mit einem 80 Mhz-Generator geguckt. Da kam nur noch Unfug aus dem 4060. :-( @Michael Das ist es, was ich meine. Ich habe im Datenblatt gesehen, daß man den 590 auch vom Bus "hochnehmen" kann. Da würde man mit einem Port des Prozessors für die Daten reichen. Kannst Du mal Dein Programm schicken? (Hoffentlich nicht in C), bin alter Bascom Freak. Aber Zeit spielt ja dann keine Rolle, wenn der eigentliche Zähler "draußen" dran ist. Mfg Paul
Naja, der 590 kann gerade mal bis 24 MHz getaktet werden, der 4060 aber bis 80Mhz laut Datenblättern. Als NAND Gatter benutze ich den 74HC132, das ist ein Quad NAND Schmitt Trigger. Damit bin ich bis auf 50Mhz gekommen, reichte mir damals aus, weil der Frequenzzähler-Part nur ein zusätzliches "Gimmeck" war. Hauptanwendungszweck war die Messung von Kapazitäten und Induktivitäten. Gruß Hagen
@Hagen Da muß ich mal sehen, ob ich einen anderen 4060 auftreibe. Das war hier ein V4060 aus DDR-Produktion. Vielleicht gibt es HC Typen. Womit hast Du Dein Programm geschrieben? MfG paul
Ich verwende immer einen AHC oder AC4040, oder was ich sonst so an schnellen Teilern da habe. Die machen problemlos 50MHz und das reicht für die meisten üblichen Schaltungen. Mehrere Ausgänge davon gehen auf einen 8zu1 Multiplexer, so dass der UC sich das beste Signal aussuchen kann: Dazu stellt er vor der Messung den Auswahlschalter auf maximales Teilerverhältnis, misst kurz die Frequenz und wählt dann abhängig von der sehr ungenau gemessenen Frequenz den Teiler für die richtige Messung aus. Allerdings sollte man den Messbereich des AVRs nicht voll ausnutzen, denn wenn das Tastverhältnis nicht 50% beträgt, wird der Messbereich kleiner, da die kurzen Impule dann nicht mehr erkannt werden. Ich schalte daher schon ab 100kHz auf Teilerfaktor 2 um. 5 Stellen genauigkeit reichen für einen einfachen Frequenzzähler mit Quarz als Zeitbasis. Daher kann man den Vorteiler auch immer laufen lassen, und kann dessen Werte ignorieren, denn der Fehler des Quarzoszillators ist größer als die 24bit Auflösung die alleine der uC interne Zähler liefert.
Hallo, @Hagen ich habe noch nicht probiert, was wirklich mit dem '590 geht. Prinzipiell reichen mir im Moment auch 20MHz. Schneller würde ich es für mich dann eher mit einem Vorteiler :4 machen. Die Stellen brauche ich da sowieso nicht, dazu ist die Zeitbasis (16MHz-Quarz am ATMega) sowieso zu ungenau. @Paul Baumann Ja, 2 Steuerleitungen und den Datenport. Am Datenport hängen bei mir sowieso noch ein ADC0820 für Speicheroszi und Spannungsmessung, ein 74HCT373 für Logikanalyzer, ein 74HCT137 für die Bereichsumschaltung mit DIL-Relais, Datenport eines 240x128-Pixel Display und 8k externer Ram (ATMega8515). Sind alle Tri-State-fähig, es wird also jeweils nur der passende Baustein aktiviert. Source wäre kein Problem, ist Assembler. Prinzipiell: 16Bit-Counter auf 0, Zählen von ext. Impulsen (da hängt der Übertrag des '590 dran). Dann CNT_CE/CNT_LE auf L - Hier startet die Zählung - Torzeit abwarten (bei mir ein Loop mit bekannter Taktzahl) - CNT_CE/CNT_LE auh H, jetzt übenimmt der '590 den Zählerstand ins Latch 16Bit Counter-Daten holen (Byte2 und Byte1 des Ergebnisses) - CNT_OE/CNT_RE auf L, jetzt liegen die Latch-Daten am Port an (Der Zähler wird hier schon wieder auf 0 gesetzt für die nächste Zählung) Einlesen '590 Wert als Byte 0 - CNT_OE/CNT_RE wieder auf H, Zählerport ist wieder frei Gruß aus Berlin Michael
@Michael Danke für die Erklärung der Funktion. Ich werde mir mal einen Ablaufplan machen und dann mal sehen, ob ich dem Prozessor meine Absichten klarmachen kann. :-) Im Moment habe ich hier eine Schaltung mit 2 74F74 und Attiny 2313(20Mhz) dahinter. Das funktioniert bis ca.97 Mhz einwandfrei, aber die Auflösung ist eben durch den 16:1 Teiler zu ungenau und ich muß über ein Gatter einen 2. Eingang direkt in den Countereingang des Professors basteln. Das wollte ich vermeiden. Gut, da versuch ich es mal mit den 2 74HC590, die hier liegen. MfG Paul
Hallo, bei üblichen Quarzen stimmen bei 100MHz die letzten 3-4 Stellen sowieso nicht mehr... Selbst Vergleiche zur Stabilität der Frequenz bringen nichts, da man nicht weiß, ob die Quelle oder die Torzeit weggelaufen ist. 0,005% sind etwa erreichbar ohne Ziehtrimmer und Kalibrierung. Sind bei 100MHz also rund 5kHz Fehler... 100MHz auf 100Hz genau zu zählen, erfordert eine Zeitbasis, die auf 10Hz, besser auf 1Hz genau ist. Woher nehmen, womit eichen, wie stabil bekommen? Es ist nur vorgetäuschte Genauigkeit, die man so erreicht und wenn man sich der Fehlergrenzen nicht bewußt ist, verführt es zu tagelanger Fehlersuche, wo garkein Fehler ist. :) Gruß aus Berlin Michael
#paul will auch nen counter bauen, habe mir schon das konzept überlegt: avr, tiny2313 od mega48, hc4020, tsa5511, lcd display. in a: 1hz...50Mhz, in b: 50Mhz...1Ghz wenn du willst, bzw auch wer sonst interessiert ist, machen wir teamwork : alfsch<at>freenet.de
@Michael Da hast Du auch wieder Recht mit der Genauigkeit. Also mit dem 590 kriege ich ein Signal von 97 (mehr habe ich nicht) sauber geteilt. (oszi) @Alfsch Zu spät :-) Ich mache es so, wie Michael vorschlug, da ich die Schaltkreise da habe. Von ganzem Hertzen :-) Paul
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.