-         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 31 von 31

Thema: Unruhige Anzeige bei Drehzahlmesser für Zweitaktmotor

  1. #31
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.527
    Blog-Einträge
    127
    Anzeige

    Zitat Zitat von Ceos Beitrag anzeigen
    Overflow sollte einen eigenen interrupt haben
    Hat Timer1. Erklärung s.u.

    Zitat Zitat von Ceos Beitrag anzeigen
    kannst du mal ein paar bits opfern um den timerüberlauf mit zu erfassen wie ich es oben beschrieben habe?!
    Kannst du mir mal aufschlüsseln wie dein capture timer konfiguriert hast?! 8Mhz F_CPU sehe ich ja aber bei der timer init komm ich ins schleudern
    Die Programmteile stammen aus dem Simulator Programm.
    Code:
    On Timer1 Check_icp_alive                                   'on timer1 overflow -> ISR Check_icp_alive
    On Icp1 Isr_get_icr                                         'on icp1 interrupt -> ISR isr_get_isr
    
    
    Start_record:
      Tccr1a = 0                                                'init timer1
      Tcnt1 = 0
      Ignition_seq = 0
      Flag_rec_complete = 0
      Tifr1.tov1 = 1                                            'reset eventually set TOV1 Flag
      Enable Timer1                                             'enable timer1 overflow interrupt
      Icr_old = Icr1                                            'not nessecary. artifact ?
      Enable Icp1                                               'enable ICP1 Interrupt
      Tccr1b = Bits(cs11 , Ices1)                               'prescaler=8 timer1 clocked with 1MHz, ICP Interrupt on rising edge
      Portc.pc4 = 1                                             'rec LED on
    Return
    
    
    
    Isr_get_icr:
      Incr Ignition_seq
      Word_variable = Icr1 / 10
      Firing_interval(ignition_seq) = Word_variable * 10        'letzte Dezimalstelle auf Null
      If Ignition_seq >= Sample_count Then                      'array full, stop recording
        Disable Icp1                                            'disable ICP1
        Tccr1b = 0                                              'init, stop timer1
        Flag_rec_complete = 1
        Ignition_seq = 0
      End If
    Return
    
    
    
    Check_icp_alive:
      Firing_interval(ignition_seq) = Firing_interval(ignition_seq) + 1       'bei timer1 überlauf wird zum letzten gespeicherten ICR wert Eins addiert
      If Ignition_seq_old = Ignition_seq Then
          Flag_icp_dead = 1
        Else
          Ignition_seq_old = Ignition_seq
      End If
    Return
    Mit zB "on timer1 check_icp_alive" werden die Interrupt Vektoren initialisiert

    Die "Start_record" ist ein Unterprogramm und wird mit Drücken der Record Taste aufgerufen.
    Dort wird der Timer1 initialisiert und mit Vorteiler 8 gestartet. Läuft bei Systemtakt von 8MHz dann mit 1MHz, Periodendauer = 1µs. Vorteil: Den ausgelesenen Wert aus ICR1 kann man mit Einheit µs versehen. Hab noch ein paar Remarks im Code eingefügt. Mit den Interrupts scharf machen (enable) und Starten des Timers beginnt die Meßwertaufnahme.

    Die ISR_get_icr ist eine ISR und wird durch den ICP Interrupt aufgerufen. Dort wird jetzt die letzte Dezimalstelle auf Null gesetzt. Wenn 256 Werte aufgenommen sind wird Timer1 gestoppt mit tccr1b=0 und der ICP Interrupt wieder disabled.

    Die ISR Check_icp_alive wurde und wird bei Timer1 Überlauf aufgerufen und dient eigentlich dazu festzustellen, ob überhaupt ICP Interrupts (Zündimpulse) auftreten. Aussetzen kann passieren, wenn zB das Impulsabnehmerkabel nichts liefert. In dieser ISR wird jetzt zusätzlich dem letzten, vor dem Overflow gespeicherten ICR Wert, Eins aufaddiert. Falls sich da was verschluckt müßte an der letzten Stelle mal eine Zwei auftauchen. Eine Eins immer dann, wenn nach einer großen Zahl eine kleinere auftauscht.

    Im Anhang die Werte mit diesem Programm.

    Worum es mir geht ist eine inkonsistenz deiner werte alle ~10 messungen, irgendwas passiert da dass das timing durcheinanderbringt!
    Ich glaube, daß die Meßwerte stimmen. Die Ausreißer könnten von der Drehzahlregelung der Maschine kommen: Die Drehzahl sinkt langsam ab. Dann wird schnell auf höhere Drehzahl geregelt. Ein Ausreißer ist die Zündung auf dem Weg nach "oben". Dann sinkt die schnelle Drehzahl wieder langsam ab bis das Spiel von vorne beginnt.

    Gruß
    Searcher
    Angehängte Dateien Angehängte Dateien
    Geändert von Searcher (12.06.2019 um 16:24 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Seite 4 von 4 ErsteErste ... 234

Ähnliche Themen

  1. Drehzahlmesser
    Von -Hurricane- im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.08.2014, 22:33
  2. Drehzahlmesser
    Von highcom im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 05.05.2010, 10:58
  3. Drehzahlmesser
    Von vohopri im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 24
    Letzter Beitrag: 14.03.2010, 08:08
  4. Drehzahlmesser
    Von derdaswar im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 10
    Letzter Beitrag: 17.07.2009, 16:45
  5. Drehzahlmesser
    Von TheHawk im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 14.12.2007, 20:04

Berechtigungen

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