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