PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage Counter mit ext. Interrupt



m@rkus33
22.12.2005, 18:34
Hallo Zusammen,

ich habe mal eine generelle Verstänisfrage.

Ich habe einen Durchflussmesser der 10.000 Impulse/Liter abgibt.
Einen Tank mit Inhalt X (ist variabel) Liter => eine Gesamtimpulszahl z.B 55.000 I/Liter.

Ich möchte nun einen Counter gestalten der die Impulse zählt, der eine definierte Obergrenze hat (gesamte Menge z.B. 5,5 Liter = 55.000 Impulse) der dann auch noch nach jedem 20isten Teil der Gesamtimpulszahl einen zweiten Wert um eins erhöht. Das Ergebnis des 2. Wertes wird dann über RS232 und Funkstrecke an einen zweiten Mega8-Slave AVR gegeben der dann damit weiterarbeitet.

Ich habe mir das so vorgestellt.


Counter läuft von 0 - 55.000 getaktet durch Interrupt. Bei jedem Vielfachen von (55.000/20) 2750 muss Varable A=0 mit INCR um eins erhöt werden und akteller Wert über Rx gesandt werden.

Der Counter muss aber weiterlaufen. Der Gesamtwert soll mit den gezählten Intervallen am Ende verglichen werden ob auch die Werte des Durchflussmessers stimmig waren.

Nur wie realisiere ich das mit der definierten Zwischenabfrage bei jedem xten Zwanstigstel? Also erste Abfrage bei 2750, zweite bei 5500, dritte bei 8250 usw.

Stehe hier voll auf dem Schlauch.


Gruß
Markus

PicNick
22.12.2005, 19:07
Eine Möglichkeit sind 2 Zähler und ein schalter


dim Gesamt as long
dim Vielfache as word
dim A as word
dim sw as byte

Anfang:
Gesamt = 0
Vielfache = 0
A = 0
sw = 0

do
if sw = 1 then
print str(a)
sw = 0
end if
loop
'---------------------------------------
Interrupt:
incr Gesamt
incr Vielfache
if Vielfache = 2750 then
Vielfache = 0
incr A
sw = 1
end if
return


Was da fehlt, ist CONFIG INT0 etc.
UND
Eine Endebedingung.

m@rkus33
22.12.2005, 20:44
Hallo PicNick,

erstmal vielen Dank für deinen Tip. Ich glaub der SW bei mir im Kopf ist endlich auch auf 1 :-)

Das hilft mir schon einiges weiter.
Eine Frage noch: Warum die Vari. "vielfache" und "a" als Word? Kann ich "vielfache" als LONG und "a" als Byte definieren? Ich bin in der Proggerei noch gar net lang dabei. Da ist mir der Unterschied noch nicht ganz klar geworden.

Zumal ich die Werte noch zus. in einem ext. EEprom speichern möchte. So wie ich es aus der Bascom Help Datei rauslese geht das aber nicht mit den "normalen" Variablen, oder verstehe ich das falsch?

Gruß
Markus

PicNick
23.12.2005, 09:13
Das sind Schätzungen von mir
Gesamt: monstermäßig, also long 32 Bit 0 - 4294967295
bei 10000 I/L reicht das für ~429496 Liter
vielfache: 0-2750 reicht immer ein word 16 Bit
a mußt ich schätzen, wieviel es denn überhaupt werden könnrn.
bei 16 Bit könnten dann ~18000 Liter gemessen werden
bei mehr müßte man für a halt auch ein long nehmen

EEPROM daten

DIM epromval as ERAM long ' das genügt, normale behandlung.
es sollte halt nicht utopisch oft geschrieben werden (< 100000 mal)