Hallo zusammen,
ich habe ein riesieges Problem.
Ich habe einen Code bei dem über den Int0 die Impulse eines Durchflussmessers kontinuierlich gezählt werden. Wichtig ist das kein Impuls verloren geht. Gleichzeitig soll aber der Gesamtwert der Impulszählung über RS232 jede Sekunde ausgegeben werden.
Das Problem das ich jetzt habe ist, das zwar die Impulse gezählt werden aber bei höherer Frequenz die Daten nicht gesendet werden, da ja ständig der Interrupt des Impulszählers "aktiv" ist. Erst wenn keine Impulse mehr kommen bzw. die Impulsrate wieder sehr niedrig ist werden die Daten ausgegeben.
Die max. Impulszahl die kommen kann ist je nach Durchflussmengenmesser um die 30.000 Impulse/Min.
Wie kann ich das Problem lösen?
Hier der Code:
Code:$regfile = "m8def.dat" $crystal = 3686400 $baud = 9600 Dim Eu As Word Dim Dfmimpulse As Long Dim Tv As Integer Dim Ti As Byte Dim Tb As Byte Dim Tank As Integer Config Timer1 = Timer , Prescale = 64 Timer1 = 7936 Config Int0 = Falling Config Pind.2 = Input 'Int0 bei Mega8 Portd.2 = 1 Config Adc = Single , Prescaler = Auto Config Pinc.0 = Input 'ADC0 ein Config Pinc.1 = Output 'Status LED Setup Config Pinc.2 = Output 'Status LED Datensenden Config Pinc.3 = Output 'Status LED impulse Declare Sub Irq0 Declare Sub Datensenden On Timer1 Datensenden Enable Timer1 On Int0 Irq0 Enable Int0 Enable Interrupts '------------------- 'Main '------------------- Portc.1 = 1 Portc.2 = 0 Portc.3 = 1 Dfmimpulse = 0 Tv = 5000 Ti = 0 Tb = 20 Tank = 0 Do Portc.2 = 1 Portc.3 = 1 Start Adc 'Messung Akkuspannung Eu = Getadc(0) Stop Adc '***Hier stehen noch ein paar interne Berechnungen Portc.2 = 1 Loop '------------------- 'Sub IrQ '------------------- Irq0: Portc.3 = 0 Decr Tv 'für weitere interne Berechnungen Incr Ti 'für weitere interne Berechnungen If Ti = Tb Then 'für weitere interne Berechnungen Ti = 0 'für weitere interne Berechnungen Incr Tank 'Für weitere interne Berechnungen End If 'für weitere interne Berechnungen Incr Dfmimpulse 'Der ist wichtig und muss über RS232 raus Return '-------------------- 'Sub RS232 '-------------------- Datensenden: Portc.2 = 0 Print Dfmimpulse Return
Und nu???????? Datensenden nicht über Timer? Oder geht es irgendwie das über den Timer die Daten gesendet werden und die Zählung der Impulse trotzdem weiterläuft?
Wie gesagt zwei Sachen sind wichtig: 1. Kein einziger Impuls darf verloren (nicht gezählt) werden. 2. Die Daten müssen alle 1 Sekunde gesandt werden.
Stehe jetzt voll auf dem Schlauch
Gruß
Markus







Zitieren

Lesezeichen