Hallo,

ich bräuchte einen ganz einfachen Drehzahlmesser und habe auch mal die SuFu bemüht. Ich will die Drehzahl von meinem Roller auslesen (2Takt - 1 Zylinder), dass heisst ja das ich pro Impuls eine Umdrehung habe oder?
Das Ganze soll dann am besten auf 4 7-Segment Anzeigen angezeigt werden (Ist Preiswerter als LCD und auch schneller oder?).
ich möchte gerne einen AtMega8 benutzen.


Mit der SuFu habe ich folgendes gefunden:

Code:
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.2 , Db6 = Porta.4 , Db7 = Porta.6 , E = Portc.7 , Rs = Portc.6
'Config Lcd = 16 * 2
Config Lcd = 16 * 1
'$sim


Dim Count1 As Single
Dim Rpm As Word
'Dim Temp As Single
Dim Uberlauf As Bit
Dim Menuselect As Byte
Dim Zylinder As Byte
Dim Lampe_an As Word
Dim Lampe_aus As Word

Config Timer1 = Timer , Prescale = 8

'On Timer1 Timer1_isr

Config Pind.4 = Output
Portd.4 = 1

Set Portb.0
Config Pinb.0 = Input                                       ' eingang fur drehzahl
' ********* Menu Tasten *************
Config Pind.2 = Input
Set Portd.2
Config Pinb.4 = Input
Set Portb.4
Config Pinb.5 = Input
Set Portb.5
Config Pinb.6 = Input
Set Portb.6
Config Pinb.7 = Input
Set Portb.7
' ********* end Menu Tasten *************
On Int0 Menu_int0
Enable Int0
Enable Timer1
Enable Interrupts
Stop Timer1

Do
   Bitwait Pinb.0 , Reset
   Start Timer1
   Timer1 = 0
   Bitwait Pinb.0 , Set
   Bitwait Pinb.0 , Reset
   Stop Timer1
   Count1 = Timer1
   Count1 = 1000000 / Count1
   Count1 = Count1 * 60

   Rpm = Int(count1)
   Cls
   Cursor Off Noblink
    Lcd Rpm ; " RPM"
If Rpm > Lampe_an And Rpm < Lampe_aus Then
    Portd.4 = 0
Else
    Portd.4 = 1
End If
   Waitms 300
   Bitwait Pinb.0 , Set
   Loop

End                                                         'end program



Timer1_isr:
Cls
Lcd "Fehler"
Waitms 100
Rpm = 0
Count1 = 0
Return




Menu_int0:
Menuselect = 0
Do
Waitms 100
If Pind.2 = 0 Then
Incr Menuselect


Do
Loop Until Pind.2 = 1
End If
If Menuselect > 6 Then
Menuselect = 1
End If
  Select Case Menuselect
Case 1                                                      'Max_drehzahl
   Cls
   Lcd "Drehzahl"
   If Pinb.4 = 0 Then
   Do
   Loop Until Pinb.4 = 1
   Gosub Max_drehzahl
   End If
Case 2                                                      'Motortype
   Cls
   Lcd "Motortype"
   If Pinb.4 = 0 Then
   Do
   Loop Until Pinb.4 = 1
   Gosub Motor_type
   End If
Case 3                                                      'Zylinder Zahl
   Cls
   Lcd "Zyl. Zahl"
   If Pinb.4 = 0 Then
   Do
   Loop Until Pinb.4 = 1
   Gosub Zyl_zahl
   End If
Case 4                                                      ' Lampe an
   Cls
   Lcd "Lampe an"
   If Pinb.4 = 0 Then
   Do
   Loop Until Pinb.4 = 1
   Gosub Lampe_an
   End If
Case 5                                                      ' Lampe aus
   Cls
   Lcd "Lampe aus"
   If Pinb.4 = 0 Then
   Do
   Loop Until Pinb.4 = 1
   Gosub Lampe_aus
   End If
Case 6                                                      ' ruruck
Cls
Lcd "return"
If Pinb.4 = 0 Then
Exit Do
End If
End Select
 Loop
Return

Max_drehzahl:
'Cls
'Lcd "Max Drehzahl"
'Waitms 100
Return


Motor_type:
'Cls
'Lcd "Motor type"
'Waitms 100
Return


'***************************************
Zyl_zahl:
Cls
Do
   Cls
   Lcd "Zylinder"
   Lcd Zylinder
   Waitms 100
   If Pinb.5 = 0 Then
      Incr Zylinder
      If Zylinder > 8 Then
         Zylinder = 1
      End If
      Do
      Loop Until Pinb.5 = 1
   End If
   If Pinb.6 = 0 Then
      Decr Zylinder
      If Zylinder = 0 Then
         Zylinder = 8
      End If
      Do
     Loop Until Pinb.6 = 1
   End If
   If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
   Exit Do
   End If
Loop
Return

'*******************************************
Lampe_an:
Cls
Do
   Cls
   Lcd "Lam. An "
   Lcd Lampe_an
      Waitms 100

   If Pinb.5 = 0 And Pind.2 = 0 Then
      Lampe_an = Lampe_an + 100
      If Lampe_an > 23000 Then
         Lampe_an = 0
      End If

   End If
   If Pinb.6 = 0 And Pind.2 = 0 Then
      Lampe_an = Lampe_an - 100
      If Lampe_an =< 0 Then
         Lampe_an = 23000
      End If

   End If
   If Pinb.5 = 0 And Pind.2 = 1 Then
      Incr Lampe_an
      If Lampe_an => 23000 Then
         Lampe_an = 0
      End If
   End If
   If Pinb.6 = 0 And Pind.2 = 1 Then
      Decr Lampe_an
      If Lampe_an =< 0 Then
         Lampe_an = 23000
      End If
   End If
   If Pinb.4 = 0 Then                                       'zuruck
       Do                                                   ' enprellen
       Loop Until Pinb.4 = 1
       Dta1:
       Data Lampe_an
   Exit Do
   End If
Loop
Return

'*******************************************
Lampe_aus:
Cls
Do
   Cls
   Lcd "Lam. aus "
   Lcd Lampe_aus
      Waitms 100

   If Pinb.5 = 0 And Pind.2 = 0 Then
      Lampe_aus = Lampe_aus + 100
      If Lampe_aus > 23000 Then
         Lampe_aus = 0
      End If

   End If
   If Pinb.6 = 0 And Pind.2 = 0 Then
      Lampe_aus = Lampe_aus - 100
      If Lampe_aus =< 0 Then
         Lampe_aus = 23000
      End If

   End If
   If Pinb.5 = 0 And Pind.2 = 1 Then
      Incr Lampe_aus
      If Lampe_aus => 23000 Then
         Lampe_aus = 0
      End If
   End If
   If Pinb.6 = 0 And Pind.2 = 1 Then
      Decr Lampe_aus
      If Lampe_aus =< 0 Then
         Lampe_aus = 23000
      End If
   End If
   If Pinb.4 = 0 Then                                       'zuruck
       Do                                                   ' enprellen
       Loop Until Pinb.4 = 1
   Exit Do
   End If
Loop
Return
Welchen Teil davon brauche ich, da steht ja noch ziemlich viel anderer Code drinne, aber ich brauche ja nur den Drehzahlmesser Ohne LCD,Lampen etc.?
Und wie steuer ich denn am Besten die 7 Segmentanzeigen an? Der Mega8 hat ja keine 28 IO Pins die ich dafür nehmen könnte (Wäre ja auch eine ziemliche verschwendung).