Wie realisiert ihr die messung solch hoher Frequenzen?
Ich muss für ein schulprojekt ein Kapazitätsmessgerät bauen und habe nun auch den Teil zu Frequenzmessung geschrieben, doch er schafft nur frequenzen bis 25 khz richtig anzuzeigen, danach kommt nur noch schrott raus. Ich brauche aber 780khz, also noch über eine Stelle mehr.
Das ganze soll auf einem LCD ausgegeben werden, was die Sache etwas Zeitkitisch macht.
Ich habe, dass zu messende signal an Int0 angeschlossen und lasse bei fallender Flanke eine Variable Hochzählen. Ein interner Timer zählt eine Sekunde und gibt dann Die Variable am Display aus. Eigentlich ganz einfach
Hardware
-Mega 8 8Mhz
-27x4 LCD
-Bascom
-Funktionsgenerator der Schule
Code:$regfile = "m8def.dat" 'Atmel MEGA 8 controller $crystal = 8000000 'Quarz auf 8MHz Ddrd.2 = 0 'PD2/INT0 als Eingang deklarieren Portd.2 = 1 'Pullup Widerstand aktiveren '27 x 4 LCD Display angeschlossen 'Festlegen der Verwendeten Ports Ddrc = &B00111111 ' LCD ANzeige Ddrd.6 = 1 Ddrd.7 = 1 Dim ___lcdno As Bit Config Lcdpin = Pin , E = Portc.2 , E2 = Portc.3 , Rs = Portc.0 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.6 , Db7 = Portd.7 Config Lcd = 40 * 4 Dim Tasten_zaehler As Integer 'Variable für anzahl der Tastendrücke Dim Frequenz As Integer 'Frequens den tastendrucks Dim Timerprescale As Integer 'um timer auf 1 sec ztu stellen On Int0 Taste0 'Interrupt Unterprogram für Taste 1 festlegen On Timer0 Ontimer 'Interrupt Programm für Timer0 überlauf Config Int0 = Falling 'Fallende Flake als Interrupt festlegen Config Timer0 = Timer , Prescale = 1 'Timer als Timer Festlegen Enable Int0 'Interruptlauscher Aktivieren Enable Timer0 'Timer einschalten Enable Interrupts 'Allgemein Interrupts erlauben '--Hauptprogramm--------------------------------------------------------------- Tasten_zaehler = 0 'startwert festlegen Timerprescale = 0 'startwert festlegen Stop Timer0 'erstmal stop damit nicht schon jetzt interrupts kommen ___lcdno = 0 'Ober Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt Initlcd Cursor Off Cls ___lcdno = 1 'untere Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt Initlcd Cursor On Cls ___lcdno = 0 Home Lcd "Das neue Frequenzmessgerät" Locate 2 , 5 Lcd "***** MEGA 8 *****" ___lcdno = 1 Home Locate 1 , 5 Lcd "(c) Boris Eskin" Locate 2 , 5 Lcd "(c) Olaf Petersen" Wait 2 '--jetzt kann es losgehen ___lcdno = 1 Cls Home Start Timer0 Do If Timerprescale >= 31250 Then 'Sekundentakt auswerten der Tasten Stop Timer0 'damit nicht heimlich weitergezählt wird ffals die Anzeige länger braucht Disable Int0 Timerprescale = 0 Frequenz = Tasten_zaehler 'Anzahl der Impulse in Frequenz umrechnen (Periodendauer 1sec) Tasten_zaehler = 0 Locate 1 , 10 Lcd Frequenz , " HZ" 'Ausgabe am LCD nop Enable Int0 Start Timer0 End If Loop End '--Unterprogram--Interrupt an Taste 2------------------------------------------- Taste0: Incr Tasten_zaehler 'Impulse Zählen Return '--Unterprogramm Timer Überlauf 256 mal Quarztakt------------------------------- Ontimer: Incr Timerprescale 'Überlaufzähler um eins erhöhen# Return






Zitieren

Lesezeichen