-
        

Ergebnis 1 bis 5 von 5

Thema: Drehzahlmesser mit Mega32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2005
    Beiträge
    10

    Drehzahlmesser mit Mega32

    Anzeige

    Hallo.

    Bin dabei mir einen Drehzahlmesser zu bauen.
    Die Hardware hab ich schon fertig (Mega32, 4mal 7-Segmentanzeige).
    Hab mich mal im Forum belesen und folgenden Code geschrieben.
    Ich zähle damit die eingehenden Impulse von der Zündspule meines Motors über dem externen Interrupt. Als Zeitbasis nehme ich eine Sekunde (8MHz, Prescale=256, und 34285 als Zähleranfang). Das müsste dann ungefähr eine Sekunde ergeben.

    Nun mein Problem:

    Hab am Anfang meiner Test´s mit dem Programm nicht gemerkt, dass ich das Fusebit für den internen Takt nicht ausgeschaltet hatte. Ich bekam nur falsche Werte.
    Also hab ich mit nem anderem Programm und ner Stoppuhr rumprobiert bis ich auf vernünftige Timer-Einstellungen kam.

    Jetzt hab ich aber das Fusebit geändert. Arbeite also mit 8 MHz und die ausgegebene Drehzahl passt wieder überhaupt nicht.
    Also hab ich wieder die Stoppuhr genommen. Diesmal passen aber die Timerwerte.
    Ein Zählerüberlauf mit 8MHz, Prescale=256, und 34285 als Zähleranfang dauert genau eine Sekunde im Testprogramm, aber mein Drehzahlmesser geht voll daneben. Er zeigt ca. das Doppelte an oder sogar etwas mehr.
    Braucht der Mega32 mit externem Quarz mehr als einen Takt um den Timer um eins zu erhöhen?
    Wer kann mir sagen was ich falsch mache?


    Code:
    $regfile = "m32def.dat"
    $framesize = 128
    $swstack = 128
    $hwstack = 128
    $crystal = 8000000
    $baud = 9600
    
    
    Config Int0 = Falling
    Config Timer1 = Timer , Prescale = 256
    Config Portb = Output
    Config Porta = Output
    
    Enable Interrupts
    
    Portd.2 = 1
    Const Zaehleranfang = 34285
    Timer1 = Zaehleranfang
    
    Dim Ups As Integer
    Dim Upm As Integer
    Dim Einer As Integer
    Dim Zehner As Integer
    Dim Hunderter As Integer
    Dim Tausender As Integer
    
    Porta = &B00000000
    Portb = &B00000000
    Ups = 0
    
    On Int0 Interruptroutine
    Enable Int0
    On Timer1 Timerueberlauf
    Enable Timer1
    
    Do
    
    
    Einer = Upm Mod 10
    Zehner = Upm Mod 100
    Zehner = Zehner / 10
    Hunderter = Upm Mod 1000
    Hunderter = Hunderter / 100
    Tausender = Upm Mod 10000
    Tausender = Tausender / 1000
    
    
    Portb = &B00000001
    Porta = Einer
    Waitus 100
    
    If Zehner > 0 Or Hunderter > 0 Or Tausender > 0 Then
    Portb = &B00000010
    Porta = Zehner
    End If
    Waitus 500
    
    If Hunderter > 0 Or Tausender > 0 Then
    Portb = &B00000100
    Porta = Hunderter
    End If
    Waitus 500
    
    If Tausender > 0 Then
    Portb = &B00001000
    Porta = Tausender
    End If
    Waitus 500
    
    
    
    Loop
    
    Interruptroutine:
    Incr Ups
    Return
    
    Timerueberlauf:
    Upm = Ups * 60
    Timer1 = Zaehleranfang
    Ups = 0
    Return
    
    
    
    End

    Danke für eure Hilfe

  2. #2
    Hallo
    deine Timervorgabe ist falsch, bei deiner Timervorgabe kommt
    alle 1,09712s ein Interrupt, du musst ihn mit 34286 vorladen
    das sollte eine Sekunde sein.
    Zu der Drehzahl, was für ein Motor ist das, du musst bedenken das
    z.B ein 4Takt Motor mit 2 Zylindern bei einer Zündung 2 Kurbelwellen Umdrehungen macht.
    Dein Motor müsste ja dann bei einer Zündung eine halbe Kurbelwellenumdrehungen machen.
    Da hätte ich noch eine frage wie greifst du das Zündspulen signal ab
    Induktiv oder direkt, könntest du den Schaltplan posten.

    MfG
    Sandor

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2005
    Beiträge
    10
    Ist ein Einzylinder, Zweitakter. also pro Zündimpuls eine Umdrehung.
    Ich nehme das Zündsignal über einen Spannungsteiler an der Zündspule ab.
    Dann entprelle ich über einen 74122. Das 5V Rechtecksignal gebe ich dann auf den exteren Interrupt am Mega32.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von Schorschi
    Ist ein Einzylinder, Zweitakter. also pro Zündimpuls eine Umdrehung.
    Hmm, Hatte ein Zweitakter nicht jede zweite Umdrehung einen Zündimpuls oder hab ich da jetzt nen Denkfehler ?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2005
    Beiträge
    10
    Ein Zweitakter zündet bei jeder Umdrehung.
    1.Takt: Kolben bewegt sich nach unten und verrichtet Arbeit. Luft-Kraftstoffgemisch wird über die Überströmkanäle aus dem Kurbelwellenraum in den Brennraum gedrückt.
    2.Takt: Kolben bewegt sich nach oben und saugt Gemisch in den Kurbelwellenraum. Gleichzeitig wird verdichtet und am OT gezündet

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •