So vielleicht?
(ungetestet)Code:' Display an folgenden Ports ' Enable = Port C.4 ' RS = Port C.5 ' DB7 = Port C.7 ' DB6 = Port C.6 ' DB5 = Port C.3 ' DB4 = Port C.2 ' ' Leds an folgenden Ports ' Grün an A.0 ' $regfile "m32def.dat" 'Definiert den Atmega als Atmega 32 $crystal = 1000000 'Gibt die Quarzfrequenz an in Herz $hwstack = 32 'Default use 32 for the hardware stack $swstack = 10 'Default use 10 for the SW stack '------------------------------------------------------------------------------- ' Konfiguration fürs Display Config Lcd = 16 * 2 'definiert das LCD Display in Art und Größe Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4 '------------------------------------------------------------------------------ ' Variablen Dim Takt1 As Word Dim Takt2 As Word Dim Takt1_temp As Word Dim Takt2_temp As Word '------------------------------------------------------------------------------ Portb = &B00011110 ' Pull Up setzen für Pin B1 Ddra = &B11111111 ' Pin A.7 als Ausgang setzen für blaue Led '------------------------------------------------------------------------------ ' Timer 0 Config Timer0 = Timer , Prescale = 1024 Enable Timer0 On Timer0 Timer_null '--------------------------------------- ' Timer 1 Config Timer1 = Timer , Prescale = 64 Enable Timer1 On Timer1 Timer_eins Enable Interrupts Cls '------------------------- H A U P T P R O G R A M M -------------------------- Do Gosub Anzeige Waitms 500 Loop '------------------------------ D I S P L A Y - A N Z E I G E ----------------- Anzeige: Disable Interrupts Takt1 = Takt1_temp Takt1_temp = 0 Takt2 = Takt2_temp Takt2_temp = 0 Enable Interrupts Cls Locate 1 , 1 Lcd "Takt1" ; Takt1 Lcd "Takt2" ; Takt2 Return '--------------------------------- T I M E R - 0 ----------------------------- Timer_null: Toggle Porta.0 ' Led Grün Takt1_temp = Takt1_temp + 1 Return '--------------------------------- T I M E R - 1 ------------------------------ Timer_eins: Toggle Porta.7 ' Led Blau Takt2_temp = Takt2_temp + 1 Return '------------------------------------------------------------------------------
Die Zählerstände werden alle 0,5 Sekunden angezeigt und auf null gesetzt. Da jeder Aufruf der Interruptroutinen gezählt wird, sollte das Display so direkt die Frequenz in Hz anzeigen.
Beim Lesen der 16-Bit Zählerstände werden die Interrupts kurz gesperrt. Das könnte zusammen mit der (Un-)Genauigkeit von Waitms 500 zu einem kleinen Messfehler führen.
Gruß
mic







Zitieren

Lesezeichen