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:
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.?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
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).







Zitieren

Lesezeichen