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 Michi - 29.12.2010 17:40)
Als Antwort auf Re: mehrere Frequenzen messen/zählen von Torsten - 29.12.2010 16:53
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
> > > > 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.


    Antwort schreiben


Antworten:

Re: mehrere Frequenzen messen/zählen (von Michi - 29.12.2010 17:51)
    Re: mehrere Frequenzen messen/zählen (von ManfredP - 30.12.2010 13:09)
        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)