Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > 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 > > > > > <b> > > > > > 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 > > > > > </b> > > > > > 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.