$regfile = "M8def.dat" 'Set the chip type to ATmega8 $crystal = 8000000 '8 Mhz Prozessortakt an PB6 Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising Ddrb = &B11111110 'Pin PB0 Signal-Eingang Portb = &B00000001 'pull-up von PB0 aktivieren Config Portc = Output Config Portd = Output Portc = 0 Portd = 0 On Icp1 Oncapture On Ovf1 Onoverflow Enable Icp1 Enable Ovf1 Config Lcd = 16 * 2 Config Lcdmode = Port Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.1 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3 Display On Cursor Off Deflcdchar 0 , 31 , 31 , 31 , 24 , 24 , 24 , 24 , 24 ' replace ? with number (0-7) Deflcdchar 1 , 31 , 31 , 31 , 3 , 3 , 3 , 3 , 3 ' replace ? with number (0-7) Deflcdchar 2 , 24 , 24 , 24 , 24 , 24 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 3 , 3 , 3 , 3 , 3 , 3 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 4 , 32 , 32 , 32 , 32 , 32 , 31 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 5 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 6 , 31 , 31 , 3 , 3 , 3 , 3 , 31 , 31 ' replace ? with number (0-7) Deflcdchar 7 , 31 , 31 , 24 , 24 , 24 , 24 , 31 , 31 ' replace ? with number (0-7) Home Cls Dim Wcountlo As Long , Wcounthi As Long , Zahl1 As Long , Zahl2 As Long , Zahl As Long , Freq As Long , Thousand As Long , Hundret As Long , Ten As Long , Oner As Long , Calc1 As Long , Calc2 As Long , Dela As Long , X As Byte , Y As Byte Enable Interrupts Main: Waitms 333 Dela = 122 * 2 'Dela = 122 * sekunden (von Wartezeit) If Wcounthi > Dela Then 'Wartezeit bis "no signal"-Fehlermeldung Freq = 0 End If If Freq > 9999 Then Upperline Lcd " measure failed " Lowerline Lcd " overflow " Goto Main Else If Freq < 1 Then Upperline Lcd " measure failed " Lowerline Lcd " no signal " Goto Main End If End If Thousand = Freq / 1000 '1. stelle berechnen Calc1 = Thousand * 1000 Calc1 = Freq - Calc1 Hundret = Calc1 / 100 '2. stelle berechnen Calc2 = Hundret * 100 Calc1 = Calc1 - Calc2 Ten = Calc1 / 10 '3. Stelle Calc2 = Ten * 10 Oner = Calc1 - Calc2 '4. Stelle If Freq < 10 Then Upperline : Lcd " " Lowerline : Lcd " " Goto Einer Else If Freq < 100 Then Upperline : Lcd " " Lowerline : Lcd " " Goto Zehner Else If Freq < 1000 Then Upperline : Lcd " " Lowerline : Lcd " " Goto Hundert Else Goto Tausend End If End If End If Tausend: Locate 1 , 1 : Lcd " " Locate 2 , 1 : Lcd " " X = 2 Select Case Thousand Case 1 : Gosub One Case 2 : Gosub Two Case 3 : Gosub Three Case 4 : Gosub Four Case 5 : Gosub Five Case 6 : Gosub Six Case 7 : Gosub Seven Case 8 : Gosub Eight Case 9 : Gosub Nine Case Else : Nop End Select Hundert: Locate 1 , 4 : Lcd " " Locate 2 , 4 : Lcd " " X = 6 Select Case Hundret Case 0 : Gosub Zero Case 1 : Gosub One Case 2 : Gosub Two Case 3 : Gosub Three Case 4 : Gosub Four Case 5 : Gosub Five Case 6 : Gosub Six Case 7 : Gosub Seven Case 8 : Gosub Eight Case 9 : Gosub Nine Case Else : Nop End Select Zehner: Locate 1 , 8 : Lcd " " Locate 2 , 8 : Lcd " " X = 10 Select Case Ten Case 0 : Gosub Zero Case 1 : Gosub One Case 2 : Gosub Two Case 3 : Gosub Three Case 4 : Gosub Four Case 5 : Gosub Five Case 6 : Gosub Six Case 7 : Gosub Seven Case 8 : Gosub Eight Case 9 : Gosub Nine Case Else : Nop End Select Einer: Locate 1 , 12 : Lcd " " Locate 2 , 12 : Lcd " " X = 14 Select Case Oner Case 0 : Gosub Zero Case 1 : Gosub One Case 2 : Gosub Two Case 3 : Gosub Three Case 4 : Gosub Four Case 5 : Gosub Five Case 6 : Gosub Six Case 7 : Gosub Seven Case 8 : Gosub Eight Case 9 : Gosub Nine Case Else : Nop End Select Locate 1 , 16 : Lcd " " Locate 2 , 16 : Lcd " " Goto Main Oncapture: Disable Interrupts Wcountlo = Timer1 Timer1 = 0 Zahl1 = Wcounthi Zahl2 = Wcountlo Wcounthi = 0 Zahl = Zahl1 * 65536 Zahl = Zahl + Zahl2 Freq = 480000000 / Zahl ' Drehzahl=(Quarz*60)/Zahl Enable Interrupts Return Onoverflow: Incr Wcounthi Return Zero: Locate 1 , X: '0 Lcd Chr(0) Lcd Chr(1) Locate 2 , X: Lcd Chr(2) Lcd Chr(3) Return One: Locate 1 , X: '1 Lcd Chr(254) Lcd Chr(3) Locate 2 , X: Lcd Chr(254) Lcd Chr(255) Return Two: Locate 1 , X: '2 Lcd Chr(5) Lcd Chr(6) Locate 2 , X: Lcd Chr(2) Lcd Chr(4) Return Three: Locate 1 , X: '3 Lcd Chr(5) Lcd Chr(6) Locate 2 , X: Lcd Chr(4) Lcd Chr(3) Return Four: Locate 1 , X: '4 Lcd Chr(2) Lcd Chr(3) Locate 2 , X: Lcd Chr(254) Lcd Chr(255) Return Five: Locate 1 , X: '5 Lcd Chr(7) Lcd Chr(5) Locate 2 , X: Lcd Chr(4) Lcd Chr(3) Return Six: Locate 1 , X: '6 Lcd Chr(7) Lcd Chr(5) Locate 2 , X: Lcd Chr(2) Lcd Chr(3) Return Seven: Locate 1 , X: '7 Lcd Chr(0) Lcd Chr(1) Locate 2 , X: Lcd Chr(254) Lcd Chr(1) Return Eight: Locate 1 , X: '8 Lcd Chr(7) Lcd Chr(6) Locate 2 , X: Lcd Chr(2) Lcd Chr(3) Return Nine: Locate 1 , X: '9 Lcd Chr(7) Lcd Chr(6) Locate 2 , X: Lcd Chr(4) Lcd Chr(3) Return