PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ganz simpler Drehzahlmesser



hardstyleroxx
25.10.2005, 18:06
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:


$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).

PicNick
25.10.2005, 20:26
Im Grunde recht einfach: du definierst einen Interrupt auf INT0 oder INT1, mit dem zählst du einfach die Impulse, die vom Unterbrecher kommen. Weiters einen Timer, der in Zeit-Intervallen die gezählten Impulse auf Geschwindigkeit umrechnet und herzeigt, der Zähler stellt er wieder auf Null.
Und die Anzeige machst du mit "multiplexen", da brauchst du 7 Pin für die Segmente und 4 zur Auswahl der Anzeige.
Ich glaub, das sollt' sich beim Mega8 ausgehen. Eventuell, wenn die LED größer sind, 4 Treiber-transistoren. That's it.
Im Detail kann man dir dann noch helfen.

hardstyleroxx
25.10.2005, 20:53
hmm... klingt alles leichter als es ist wenn man ein totaler Anfänger is :P

Ich habe einen fertigen Code für einen DZM mit 5 7-Segment Anzeigen gefunden die auch gemultiplext werden, also genau das was ich suche.
Blos ist das für einen Motor mit 4 Zylindern und ich weiss nicht genau wie ich den Code umändern muss das er bei mir stimmt. Wäre nett wenn ihr mir helfen könntet.

Hier mal der Code:


' Drehzahlmesser für 4-Zylinder Motoren
' (c) formtapez (Oktober 2003)
' 5-stellige Version (ungetestet)

' Hardware:
' ---------
' PD0: gelbe LED (ab 6250 Umdr./min.)
' PD6: Signaleingang
' PB0-PB6: 7-segment - Segment A bis G
' PD1-PD5: 7-segment - Ziffer - Select


$regfile = "2313def.dat" 'AT90S2313
$crystal = 8000000 '8MHz Quarz
Ddrb = &B11111111 'PortB = Ausgang
Ddrd = &B0111111 'PortD = Ausgang bis auf PD6

Dim Icount As Long At &H60
Dim Wcountlo As Word At &H60 Overlay
Dim Wcounthi As Word At &H62 Overlay
Dim Temp As Integer At &H80
Dim Temp2 As Integer At &H80 Overlay
Dim Y As String * 5 At &H70
Dim Z(5) As Byte At &H70 Overlay
Dim Frequenz As Long
Dim Freq As Word
Dim Freq1 As Word
Dim Freq2 As Word
Dim Timeout As Byte
Dim Impulse As Byte
Dim X(5) As Byte
Dim Test As Integer
Dim Test2 As Integer
Dim Zaehler As Byte
Timeout = 0

On Icp1 Oncapture
On Ovf1 Onoverflow
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising
Enable Icp1
Enable Ovf1
Enable Interrupts


'*******************
'* Start-Animation *
'*******************

Do
Portb = 1
Portd = 2
Waitms 50
Portd = 4
Waitms 50
Portd = 8
Waitms 50
Portd = 16
Waitms 50
Portb = 2
Waitms 50
Portb = 64
Waitms 50
Portd = 8
Waitms 50
Portd = 4
Waitms 50
Portd = 2
Waitms 50
Portb = 16
Waitms 50
Portb = 8
Waitms 50
Portd = 4
Waitms 50
Portd = 8
Waitms 50
Portd = 16
Waitms 50
Portb = 4
Waitms 50
Portb = 64
Waitms 50
Portd = 8
Waitms 50
Portd = 4
Waitms 50
Portd = 2
Waitms 50
Portb = 32
Waitms 50
Loop Until Temp2 = 1 'Bis zum 1. Impuls



'******************************************
'* Hauptschleife - LED-Anzeigen ansteuern *
'******************************************

Main:
Incr Timeout 'Bei Timeout: 0 U/min.
If Timeout = 10 Then
Timeout = 10
Freq = 0
Y = Str(freq)
Z(1) = 0
Z(2) = 0
Z(3) = 0
Z(4) = 0
Z(5) = 48
End If

For Test2 = 1 To 5 'Wert sichern .....
X(test2) = Z(test2)
Next Test2

For Test2 = 1 To 400 '..... und 400 mal Anzeigen
For Zaehler = 1 To 5
Test = X(zaehler)
Select Case Test
Case 48 : Portb = 63
Case 49 : Portb = 6
Case 50 : Portb = 91
Case 51 : Portb = 79
Case 52 : Portb = 102
Case 53 : Portb = 109
Case 54 : Portb = 125
Case 55 : Portb = 39
Case 56 : Portb = 127
Case 57 : Portb = 111
Case Else : Portb = 0
End Select
Portd.zaehler = 1
Waitus 100 'Zeit für jede Anzeige
Portd.zaehler = 0
Next Zaehler
Next Test2

Goto Main




'*************************************
'* Interrupt-Routine (Zeiten messen) *
'* (wird bei jedem Impuls ausgelöst) *
'*************************************

Oncapture:
Disable Icp1
Incr Impulse
If Impulse = 8 Then
Impulse = 0
Timeout = 0
Wcountlo = Timer1
Timer1 = 0
Frequenz = 240000000 / Icount 'Umrechnung für 4-Zylinder
Wcounthi = 0

Freq2 = Freq1
Freq1 = Frequenz
Frequenz = Freq1 + Freq2
Frequenz = Frequenz / 2
Freq = Frequenz

If Freq > 5999 Then Portd.0 = 1 Else Portd.0 = 0 ' gelbe LED ab 6000 U/min
If Freq < 150 Then
Freq = 0
Y = Str(freq)
Z(1) = 0
Z(2) = 0
Z(3) = 0
Z(4) = 0
Z(5) = 48

Else

Y = Str(freq)
If Z(4) = 0 Then 'Führende Nullen eliminieren
Do
Z(5) = Z(4)
Z(4) = Z(3)
Z(3) = Z(2)
Z(2) = Z(1)
Z(1) = 0
Loop Until Z(5) > 0
End If
End If
End If

Temp = 1
Enable Icp1
Return

Onoverflow:
Incr Wcounthi
Return

hardstyleroxx
26.10.2005, 21:31
Keiner der mit helfen kann? Ist echt wichtig.

Werner_Just
27.10.2005, 10:27
4 Zylinder, 4Takter -> 2 Impulse / Umdrehung

"Frequenz = 240000000 / Icount" ; Frequenz in U/min
240.000.000 = F_osz * 60s / Anz_Imp/U

ohne Gewähr.

Ciao,
Werner

hardstyleroxx
27.10.2005, 15:57
Also einfach 480000000, werde gleich mal zu Conrad heizen und die benötigten bauteile kaufen. Brauche ich zum Multiplexen der 7-Segmentanzeigen eigentlich Transistoren um die Katoden zu Schalten oder kann ich die direkt an den ATMega8 klemmen?

PicNick
27.10.2005, 16:04
Sicherer ist es schon. Nachdem sowas öfter vorkommt, nehme ich immer bei Gelegenheit aus wühlkisten sackweise irgendwelche "no-name" npn u. pnp.

hardstyleroxx
27.10.2005, 19:03
Hab mit jetzt einfach 5 BC gekauft... Kann ich das Signal eigentlich direkt vonner Zündung abgreifen (pickup - sind 1-3V) und aufn atmega schicken?

Guy
04.11.2005, 14:14
Der Code ist von mir. Im Prinzip braust du nur diesen Teil. Wenn du weniger als 1000 Umdrehungen messen willst mußt du noch den Überlauf des Timers berücksichtigen.



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)
Loop
End


Du hast zwei Möglichkeiten die Drehzahl zu messen. Einmal zählst du die Impulse über eine bestimmte Zeit, oder die Umlaufgeschwindigkeit messen. Ich benutze hier die Umlaufgeschwindigkeit.

Das Prinzip ist folgendes. Ich warte auf eine steigende Flanke, dann auf eine fallende Flanke, und wenn dann wieder eine steigende Flanke kommt habe ich eine Umdrehung, und aus der gemessenen Zeit rechne ich die Drehzahl.

Wenn du die Impulse zählst wird das nicht so genau, sagen wir mal du zählst die Impulse währen einer Hundertstelsekunde. In dieser Zeit kann deine Drehzahl sich viel verändern und dein Ergebnis ist falsch.

TobiasBlome
11.08.2007, 00:18
Hallo,
ist schon etwas her das hier geschrieben wurde...

kann mir jemand den Code erklären? Hab´da ein paar Fragen:
------
was passiert hier? Portb = 64 ? Ich kenne es so, dass damit ein Pin vom µC auf 1 oder 0 gesetzt wird aber den Pin 64 gibt es beim 2313 nicht....
------

Freq = 0
Y = Str(freq)
Z(1) = 0
Z(2) = 0
Z(3) = 0
Z(4) = 0
Z(5) = 48

Y ist der Strin mit 5 "Ziffern" aber wofür stehen die 0 und 48?

-----

For Test2 = 1 To 400 '..... und 400 mal Anzeigen
For Zaehler = 1 To 5
Test = X(zaehler)
Select Case Test
Case 48 : Portb = 63
Case 49 : Portb = 6
Case 50 : Portb = 91
Case 51 : Portb = 79
Case 52 : Portb = 102
Case 53 : Portb = 109
Case 54 : Portb = 125
Case 55 : Portb = 39
Case 56 : Portb = 127
Case 57 : Portb = 111
Case Else : Portb = 0
End Select
Portd.zaehler = 1
Waitus 100 'Zeit für jede Anzeige
Portd.zaehler = 0
Next Zaehler
Next Test2

400 mal anzeigen? oder hat das etwas damit zu tun, wie lange jede Anzeige leuchtet?
CASE 48-57?

freue mich auf ganz viele Antworten...

Tobias

PS. eigendlich wollte ich nur eine Variableauf der LED-Anzeige anzeigen aber wenn ich den Wert in die Variable Freq schreibe passiert nichts....

Windi
11.08.2007, 10:10
was passiert hier? Portb = 64 ? Ich kenne es so, dass damit ein Pin vom µC auf 1 oder 0 gesetzt wird aber den Pin 64 gibt es beim 2313 nicht....

Damit sprichst Du ja auch nicht einen einzelnen Pin sondern alle Pins (einen Port) an.
Wandel 64 mal in Binärdaten um dann erhältst Du 0000001. Damit wird PB6 auf 1 gesetzt, alle anderen auf 0.

TobiasBlome
11.08.2007, 10:17
ach so - also steckt dahinter die "codierung" der einzelnen Zahlen auf der 7-Segmentanzeige - oder?

Windi
11.08.2007, 10:39
ach so - also steckt dahinter die "codierung" der einzelnen Zahlen auf der 7-Segmentanzeige - oder?

Genau so ist es.

Case 56 : Portb = 127 z.B. stellt die Zahl "8" dar. 127 ist 1111111, es werden hier also alle 7 Segmenta aktiviert.
Case 49 : Portb = 6 z.B. stellt die Zahl "1" dar. 6 ist binär 0110000, es werden hier nur die 2 Segmente angesteuert die für eine "1" nötig sind.

Genau so funktioniert es mit den anderen Zahlen.

TobiasBlome
11.08.2007, 11:18
und wofür steht Case? warum wird nicht mit CASE 1 angefangen sondern mit CASE 48?

TobiasBlome
11.08.2007, 15:34
Ich wollte mal das Programm testen - aber meine Hardware spielt nicht mit... Ich weiß falsche Forum aber vielleicht ist das ja nur ein kleiner Fehler...hoffentlich.

Also wenn ich den Basiswiderstand von der gemeinsamen Anode von der 7-Segmentanzeige ansteuere leuchtet die Anzeige... egal ob der µC 0 oder 5V am Ausgang hat. Wenn ich den µC aus der Fassung nehme ist die Anzeige dunkel! hab das ganze ohne µC mit zwei Netzteilen getestet - selber effekt sobald die Basiswiderstände Masse oder 5V haben schaltet der Transistor...definitiv! Das Problem ist, das der µC 5V und die Anzeigen 8V benötigen! Wenn ich nur mit 5V arbeite schalten die Transistoren richtig! (Masse habe ich jeweils verbunden)
Was muss ich ändern?

Tobias

TobiasBlome
11.08.2007, 15:35
ups was vergessen -> der kleine Kasten auf dem Bild ist eine Treiberendstufe

Windi
11.08.2007, 22:50
und wofür steht Case? warum wird nicht mit CASE 1 angefangen sondern mit CASE 48?
Weil das Programm mit dem ASCII-Code (http://de.wikipedia.org/wiki/Ascii) arbeitet.
48 entspricht "0", 49 entspricht "1" usw.

TobiasBlome
12.08.2007, 18:16
Hallo, da bin ich wieder ;-) Die Hardware hab´ ich geändert und nun kann ich jedes Segment auf jeder Anzeige einzeld ansteuern :-)


leider musste ich die Ausgänge etwas anders belegen und nun flimmern alle Anzeigen wild durcheinander.

im Original wurden alle 5 anzeigen nacheinander durchgewechselt bzw. die Variable hochgezählt: For Zaehler = 1 To 5 ABER ich musste PD0,PD4,PD5,PD6 belegen - also eine große Lücke - kann mir jemand helfen wie ich den Zähler auch so zählen lassen kann? Also 0-6 aber ohne 1, 2 und 3 jemand eine Idee?

Tobias



'Drehzahlmesser für 4-Zylinder Motoren
' (c) formtapez (Oktober 2003)
' 5-stellige Version (ungetestet)

' Hardware:
' ---------
' PD0: gelbe LED (ab 6250 Umdr./min.)
' PD6: Signaleingang
' PB0-PB6: 7-segment - Segment A bis G
' PD1-PD5: 7-segment - Ziffer - Select
'ICH Led1=PD0, L2=PD4, L3=PD5, L4=PD6

$regfile = "ATtiny2313.dat" 'AT90S2313
$crystal = 20000000 '8MHz Quarz
Ddrb = &B11111111 'PortB = Ausgang
Ddrd = &B1110011 'PortD = Ausgang bis auf PD3+2


Dim Icount As Long At &H60
Dim Wcountlo As Word At &H60 Overlay
Dim Wcounthi As Word At &H62 Overlay
Dim Temp As Integer At &H80
Dim Temp2 As Integer At &H80 Overlay
Dim Y As String * 5 At &H70
Dim Z(5) As Byte At &H70 Overlay
Dim Frequenz As Long
Dim Freq As Word
Dim Freq1 As Word
Dim Freq2 As Word
Dim Timeout As Byte
Dim Impulse As Byte
Dim X(5) As Byte
Dim Test As Integer
Dim Test2 As Integer
Dim Zaehler As Byte 'für LED Anzeige wählen...
Timeout = 0

On Icp1 Oncapture
On Ovf1 Onoverflow
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
Enable Icp1
Enable Ovf1
Enable Interrupts


'*******************
'* Start-Animation *
'*******************

' Do
' Portb = 1
' Portd = 2
' Waitms 50
' Portd = 4
' Waitms 50
' Portd = 8
' Waitms 50
' Portd = 16
' Waitms 50
' Portb = 2
' Waitms 50
' Portb = 64
' Waitms 50
' Portd = 8
' Waitms 50
' Portd = 4
' Waitms 50
' Portd = 2
' Waitms 50
' Portb = 16
' Waitms 50
' Portb = 8
' Waitms 50
' Portd = 4
' Waitms 50
' Portd = 8
' Waitms 50
' Portd = 16
' Waitms 50
' Portb = 4
' Waitms 50
' Portb = 64
' Waitms 50
' Portd = 8
' Waitms 50
' Portd = 4
' Waitms 50
' Portd = 2
' Waitms 50
' Portb = 32
' Waitms 50
' Loop Until Portb = 32 'läuft nur 1x durch 'Temp2 = 1 'Bis zum 1. Impuls




'******************************************
'* Hauptschleife - LED-Anzeigen ansteuern *
'******************************************

Main:
Incr Timeout 'Bei Timeout: 0 U/min.
If Timeout = 10 Then
Timeout = 10
Freq = 0
Y = Str(freq)
Z(1) = 0
Z(2) = 0
Z(3) = 0
Z(4) = 0
Z(5) = 48
End If

For Test2 = 1 To 5 'Wert sichern .....
X(test2) = Z(test2)
Next Test2

For Test2 = 1 To 400 '..... und 400 mal Anzeigen

For Zaehler = 0 To 6
Test = X(zaehler)
Select Case Test

Case 48 : Portb = 63
Case 49 : Portb = 6
Case 50 : Portb = 91
Case 51 : Portb = 79
Case 52 : Portb = 102
Case 53 : Portb = 109
Case 54 : Portb = 125
Case 55 : Portb = 39
Case 56 : Portb = 127
Case 57 : Portb = 111
Case Else : Portb = 0
End Select

'Anzeige auswählen???
Portd.zaehler = 1
Waitus 100 'Zeit für jede Anzeige
Portd.zaehler = 0
Next Zaehler
Next Test2

Goto Main




'*************************************
'* Interrupt-Routine (Zeiten messen) *
'* (wird bei jedem Impuls ausgelöst) *
'*************************************

Oncapture:
Disable Icp1
Incr Impulse
If Impulse = 8 Then
Impulse = 0
Timeout = 0
Wcountlo = Timer1
Timer1 = 46000
'Frequenz = 240000000 / Icount 'Umrechnung für 4-Zylinder
Wcounthi = 0

Freq2 = Freq1
Freq1 = Frequenz
Frequenz = Freq1 + Freq2
Frequenz = Frequenz / 2
Freq = Frequenz

'If Freq > 5999 Then Portd.0 = 1 Else Portd.0 = 0 ' gelbe LED ab 6000 U/min
If Freq < 150 Then
Freq = 0
Y = Str(freq)
Z(1) = 0
Z(2) = 0
Z(3) = 0
Z(4) = 0
Z(5) = 48

Else

Y = Str(freq)
If Z(4) = 0 Then 'Führende Nullen eliminieren
Do
Z(5) = Z(4)
Z(4) = Z(3)
Z(3) = Z(2)
Z(2) = Z(1)
Z(1) = 0
Loop Until Z(5) > 0
End If
End If
End If

Temp = 1
Enable Icp1
Return

Onoverflow:
Incr Wcounthi
Return

TobiasBlome
12.08.2007, 20:02
also ich habe die zeit mal ganz langsam laufen lassen und festgestellt, das alle LED-Anzeigen 1mal angesteuert werden aber dann nicht mehr....
als wenn ein Return oder ähnliches fehlt...

TobiasBlome
12.08.2007, 20:26
kann mir einer sagen wofür Test2 ist 1 bis 400???

TobiasBlome
12.08.2007, 20:32
Mal zum allgemeinen Verständniss >Programmablauf< bitte korregiert mich:

1. Stelle der Zahl aus Variable wird gesendet
Anzeige wird ausgewählt
Anzeige wird ausgeschaltet
2. Stelle der Zahl aus Variable wird gesendet
Anzeige wird ausgewählt
Anzeige wird ausgeschaltet

oder hab ich etwas vergessen mehr wird doch nicht gemacht oder?