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
Lesezeichen