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:51)
Als Antwort auf Re: mehrere Frequenzen messen/zählen von Michi - 29.12.2010 17:40
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.

Nachtrag:

Die Variablen "FRQ_Werta" und "isit" ändern sich natürlich.
End While hab ich auch vergessen :-(


    Antwort schreiben


Antworten:

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)