Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: mehrere Frequenzen messen/zählen Kategorie: Programmierung Basic (von ManfredP - 30.12.2010 13:09)
Als Antwort auf Re: mehrere Frequenzen messen/zählen von Michi - 29.12.2010 17:51

> > > > > > Hallo,
> > > > > >
> > > > > > Kann der Pro32 eigendlich mehrere Frequenzen messen als ĂĽber die 2 Timer?
> > > > > >
> > > > > > Ich mĂĽsste Frequenzen von 1 bis ca 400HZ messen und frage mich ob ich das nicht auch ĂĽber
> > > > > > die normalen Ports kann.
> > > > > >
> > > > > > Mein Gedankengang (umbau der FRQ Messungs Demo):
> > > > > >
> > > > > > Sub FRQ_Messung()
> > > > > >
> > > > > >     Dim irqcnt As Integer
> > > > > >     Dim isit As Byte
> > > > > >                        
> > > > > >     If FRQ_Mode=0 Then
> > > > > >         If cnt1=0 Then
> > > > > >             FRQ_Werta=0
> > > > > >             isit=0
> > > > > >             Timer_T1CNT()                      
> > > > > >         End If
> > > > > >         If cnt1=100 Then  
> > > > > >
> > > > > >             FRQ_Wert=Timer_T1GetCNT()
> > > > > >
> > > > > >             FRQ_Mode=1                        
> > > > > >         End If
> > > > > >     End If
> > > > > >     cnt1=cnt1+1
> > > > > >
> > > > > >     If Port_ReadBit(16) <> isit Then 'flanke prĂĽfen
> > > > > >         FRQ_Werta= FRQ_Werta+1 'wenn flanke da war dann zählen (das wird dann warscheinlich f x2
> > > > > >                                                   'ergeben)
> > > > > >         isit = Port_ReadBit(16)         'merken wo das Signal war
> > > > > >     End If  
> > > > > >  
                         
> > > > > >     irqcnt=Irq_GetCount(INT_TIM2COMP)          
> > > > > >
> > > > > >
> > > > > > End Sub
> > > > > >
> > > > > > geht das oder hab ich schon wieder einen Knopf drinnen.
> > > > > >
> > > > > > Danke fĂĽr eure Geduld.
> > > > >
> > > > > Hallo Michi,
> > > > >
> > > > > bei 400Hz mĂĽĂ?te der Interrupt mindestens alle 2,5 ms aufgerufen
> > > > > werden. (1Sekunde / 400 Hz = 2.5)
> > > > >
> > > > > GruĂ? Torsten
> > > >
> > > > Danke Torsten,
> > > >  
> > > > Stimmt.
> > > > der Timer läuft ja im "Hintergrund" weiter.... bis eben cnt=100 (10ms x 100)
> > > >
> > > > Gibts eine andere Möglichkeit wie ich einen Eingang zählen lassen kann?
> > > >
> > > > Kann ich in der  "Do While FRQ_Mode=0" Schleife zählen?
> > > >
> > > > Die sollte doch 1 Sekunde aktiv sein.
> > > >
> > > > Meine Haupftfrage währe aber ob ein Eingang überhaupt schnell genug ist um bis 400HZ gezählt zu werden.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > > Hallo Miche,
> > >
> > > die Frage ist nicht ob der Port schnell genug ist, sondern
> > > ob du den Port schnell genug abfragen kannst ohne einen
> > > Flankenwechsel zu verpassen. Wenn das ganze Programm
> > > nur aus der Portabfrage in der Hauptschleife besteht sollte
> > > es noch schnell genug gehen. Aber ... ???
> > > Wie viele Frequenzen sollen gleichzeitig gemessen werden?
> > > Können die Frequenzen nicht auch nacheinander gemessen werden?
> > > Wie werden die ermittelten Werte weiterverarbeitet?
> > >
> > > GruĂ? Torsten
> >
> >
> > Ich müsste max. 4 Frequenzen zählen
> > alle unter 400HZ
> > Wenn ich die Demo richtig verstehe dann bleibt sie in einer Do While hängen bis
> > die Torzeit zuende ist.
> > Wenn ich nun vergleichbar mit den Frequenz-messdemo mittels Interrupt INT_TIM2COMP
> > eine Torzeit von 500 bis 1000ms erzwinge und dann in der Schleife die Eingänge zähle
> > sollte ich doch schnell genug sein.?
> >
> > technisch mĂĽsste ja:
> >
> > If Port_ReadBit(16) <> isit Then
> >     ++FRQ_Werta
> >     isit = Port_ReadBit(16)
> > End If
> >
> > reichen. 4 x eben, fĂĽr jeden Eingang extra.
> >
> > Ansonsten müsste ich den Timer Eingang multiplexen und hätte dann mindestens 4x500ms
> > +Schaltzeit "Pause" bis ich auswerten kann.
> >
> > Code:
> > Sub FRQ_Messung()
> >
> >    If FRQ_Mode=0 Then
> >         If cnt1=0 Then
> >             FRQ_Werta=0
> >             isit=0
> >         End If
> >         If cnt1=50 Then
> >             FRQ_Mode=1                        
> >         End If
> >     End If
> >     ++cnt1
> >     Irq_GetCount(INT_TIM2COMP)          
> > End Sub
> >
> > Sub counter()
> >
> > Do While FRQ_Mode=0
> >
> > If Port_ReadBit(16) <> isit Then
> >    ++FRQ_Werta
> >    isit = Port_ReadBit(16)
> > End If
> > If Port_ReadBit(17) <> isit Then
> >    ++FRQ_Werta
> >    isit = Port_ReadBit(17)
> > End If
> > If Port_ReadBit(18) <> isit Then
> >    ++FRQ_Werta
> >    isit = Port_ReadBit(18)
> > End If
> > If Port_ReadBit(19) <> isit Then
> >    ++FRQ_Werta
> >    isit = Port_ReadBit(19)
> > End If
> > End Sub
> >
> > Sub main()
> > Do While True
> >    cnt1=0
> >    
> >    FRQ_Mode=1
> >    Irq_SetVect(11,FRQ_Messung)    
> >    FRQ_Mode=0
> >    counter() 'Torzeit routine
> >    .
> >    .
> >    .
> >    ... ' "langsame" Programmteile
> >    
> >    
> > End Sub
> >
> > Ob nun im Counter Sub eine For Next oder 4x if schneller ist weis ich nicht.
> > Die Weiterverarbeitung ist dann nicht so kritisch da ich ja bei so niedrigen Frequenzen sowieso
> > Torzeitbedingt nur alle 0,5s Daten bekomme.
>
> Nachtrag:
>
> Die Variablen "FRQ_Werta" und "isit" ändern sich natürlich.
> End While hab ich auch vergessen :-(

Hallo Michi,

zwei kleine Anmerkungen:
Du liest zweimal den Port zu unterschiedlichen Zeiten!
Erst vergleichst du und nach dem zweiten lesen speicherst du den Wert des Portes.
1. da das Zweite lesen später erfolgt kann der Port schon einen anderen Wert angenommen
haben als zuvor bei der Abrage!
2. Ich könnte mir vorstellen, dass es zeitkritisch künstiger ist erst den Wert des Portes zu speichern
   und dann zu vergleichen mit der Variablen.
Zum Laufzeittest hat ErnstH ein kleines Messprogramm vorgestellt das hier hilfreich sein kann.

Viel Spass noch und einen guten Rutsch.....
Manfred



    Antwort schreiben


Antworten:

Re: mehrere Frequenzen messen/zählen (von Michi - 30.12.2010 14:17)
    Re: mehrere Frequenzen messen/zählen (von Michi - 30.12.2010 17:55)
        Re: mehrere Frequenzen messen/zählen (von Michi - 30.12.2010 17:59)
            Re: mehrere Frequenzen messen/zählen (von ManfredP - 30.12.2010 20:27)
                Re: mehrere Frequenzen messen/zählen (von Michi - 31.12.2010 10:38)
                    Re: mehrere Frequenzen messen/zählen (von ManfredP - 31.12.2010 13:30)
                       Re: mehrere Frequenzen messen/zählen (von Torsten - 1.01.2011 12:33)