PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche schnelle hilfe mit IF-THEN-ELSE Anweisung



MrQu
24.11.2005, 12:21
Ein Hallo an Euch *:-)*,

ich stehe gerade auf dem "Schlauch"!!!

Ich suche für eine Inputabfrage mit einer IF-THEN Anweisung das Symbol
für das "Ungleich"

= - ist
< - kleiner
> - größer
---
<> - ungleich ??? - beim compilieren bekomme ich einen Fehler.

wie schreibt man "ungleich" richtig???


Danke Gruß
Manuel

PicNick
24.11.2005, 12:22
IF seppel <> karl then unterschiedlich


EDIT: zeig mal den Fehler Vielleicht hast du verschieden Datentypen, die man nicht vergleichen kann ?

tobimc
24.11.2005, 12:22
Hi!

Ja, <> ist ungleich.
Poste mal bitte deinen Code, könnte ein Synthaxproblem sein.

VLG Tobi

MrQu
24.11.2005, 13:36
Buuuh, habe den Fehler gefunden.

War tatzächlich ein Syntaxprob.

Habe vor lauter Code eine if vor der anderen über kreuz geschlossen.

danke an euch

gruß

MrQu
24.11.2005, 16:29
Upppsss,

noch ne Frage.

Ich messe mit ADC0 eine Spannung pro programmdurchgang einmal.

jetzt suche ich einen Befehl oder Anweisung um festzustellen ob die Differenz aus der "Alten"-Messung zur "Neuen"-Messung größer als 5% ist.

Ich speichere das Ergebnis der "Alten"-Messung in einer Var zwischen und möchte diese messung mit der Neuen vergleichen.


Gruß Manuel

PicNick
24.11.2005, 17:55
klassisch wäre: prozent+/- = (Neu * 100 / alt ) - 100
wenn du aber in Word arbeitest, ist 100 * messwert zu viel (max 65535)
und wenn du eh' nur in 5% schritten werkst, kannst du auch kürzen und
diff = (Neu * 20 / alt ) - 20
dabei wäre "diff" die Differenz in 5%-Schritten plus/minus
dann mußt du aber mit integer arbeiten
willst du das auch nicht und bei word bleiben:
diff = Neu * 20 / alt
dabei wäre
"diff = 20 " Änderung kleiner als +/- 5%
"diff = 21 " Änderung +5%
"diff = 19 " Änderung -5%

MrQu
24.11.2005, 18:22
@PicNick

hmmm,

moment das heist.



' *** CPU Einstellungen ***
$regfile = "At26def.dat"
$crystal = 1000000
' *** CPU Einstellungen ***

' *** AD-Wandler ***
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
' *** AS-Wandler ***

Dim Spg_lade1 As Word
Dim Spg_lade2 As Word
Dim Merker As Integer

Spg_lade1 = Getadc(0)
Spg_lade2 = Spg_lade1

Do

Spg_lade1 = Getadc(0)

Merker = Spg_lade1 * 20
Merker = Merker / Spg_lade2
Merker = Merker - 20

If Merker < 6 Then
Gosub Ok
Else
Spg_lade2 = Spg_lade1
End If


Loop

End

Ok:

Return



kannst mal ankuken???

gruß manuel

PicNick
24.11.2005, 18:54
Vorsicht, da mußt du umdenken:
If Merker < 6 Then

' schon zu viel !!!

merker = 1 sind ja schon +5 Prozent



If Merker = 0 Then ' differenz ist kleiner als +/-5 Prozent
Gosub Ok
Else


Am besten denk ' dir Werte aus und rechne mit Excel oder Taschenrechner nach !

MrQu
24.11.2005, 19:02
hi,

mir ist der genaue wert eigendlich "wurst".

mir gehts nur darum, wenn die abweichung grösser als 5% ist dann soll der AD so lange messen bis die Spannung wieder stimmt.

liegt die abweichung innerhalb der 5% soll das unterprogramm "OK" ausgeführt werden.

Stimmt das dann so???


Merker = Spg_lade1 * 100
Merker = Merker / Spg_lade2
Merker = Merker - 100

und langt "integer" für den merker?


gruß Manuel

MrQu
24.11.2005, 19:06
@PicNick

kannst dir bitte mal im oberen listing die konfiguration des ADs ansehen.

ich wollte eigendlich nicht im "single"-mode betreiben sondern im "free"-mode.

das klappt aber nicht.

Muß ich sonst noch etwas ändern ausser "single" durch "free" ersetzen???


Gruß manuel

PicNick
24.11.2005, 19:08
In dem fall nicht, integer geht ja nur bis +32767 , deswegen hab ich ja gemeint, du nimmst "20", dann ist im Ergebnis unten alles = 0, was innerhalb +/- 5% liegt. Is doch einfacher ?
Und mit dem Integer kommst du auch aus.

MrQu
24.11.2005, 19:22
d.h.
wenn ich mit 20 Rechne dann ist immer wenn das ergebnis ungleich 0 ist die abweichung zu groß - richtig so???

hast noch nen tipp mit dem single und free problem??

gruß

PicNick
24.11.2005, 19:25
? welches Problem ?

EDIT: Ich nehm' immer single , nullo problemo

MrQu
24.11.2005, 19:28
ja aber für was gibts dann dieses "free"Ding??? - wenns keiner braucht

ich dachte das ist schneller???

MrQu
24.11.2005, 19:31
Sorry @PicNick,

ich muß kurz mit dem "Hundi" gassie gehen - bin in ca. 30 Min wieder da

Ist n echter Hundi kein robohundi - sonst hab ich pipi alarm!!! *grins*

hof ich erwisch dich dann wieder

gruß Manuel

PicNick
24.11.2005, 19:32
Free triggert er sich selber, da mußt du aber einen Interrupt machen oder auf das Bit lauern.
Die ADC-Geschichte selber is aber auch nicht schneller.
Du hast außerdem nix davon, wenn du mehrere Känäle verwendest und umschalten mußt.

So: PicNick gibt's erst morgen wieder. :-)

Hellmut
25.11.2005, 11:53
Hallo Manuel

Ich schalte mich da spät ein, doch trotzdem mein Vorschlag. Solltest du nicht gar zu knapp an RAM-Speicher sein, würde ich von jedem "alten Wert" den +5% und -5% berechnen als Variable ablegen und den neuen prüfen ob er größer als var_plus_5% oder kleiner als var_minus_5% ist.