PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechnung mit Bascom



Spurius
16.12.2004, 18:14
Hallo,
warum geht folgender Code nicht?


$regfile = "m8def.dat"
$crystal = 1000000
$baud = 1200
Enable Interrupts

Config Adc = Single , Prescaler = Auto

Start Adc

Dim Count As Integer , X As Integer , Y As Single , Z As Integer
Do
X = Getadc(5)
Y = 2700 *(5 / 1024 * X) /(5 -(5 / 1024 * X))
Print Y
Wait 1
Loop
End

Ich bekomme dann folgende Fehlermeldung:
Source variable does not match the target variable[0]

Hoffe ihr könnt mir helfen
Gruß
Spurius

x-ryder
16.12.2004, 18:39
bascom kann leider keine mehrfachrechnungen...

deshalb musst du jeden schritt einzeln rechnen und dann alles am schluss wieder zusammenführen

Martin

Spurius
17.12.2004, 14:09
Hallo,
danke, habs jetzt in mehrere Schritte aufgeteilt, sehr unelegant :(
Kannst du mir noch sagen wie ich eine Zahl vom Typ Single auf 1 oder 2 Stellen hinter dem Komma runden kann?
Gruß
Spurius

31.01.2005, 01:30
Hallo,

ich habe da mal eine Frage und zwar wurde hier gesagt das Bascom keine mehrfachrechnungen mag. Aber was bedeutet das denn speziell bei diesem code?


If Portb.0 = 0 Then Merker1 = 1 End If

Also bei meckert der immer in dieser Zeile mit dem Fehlercode
"Source variable does not match the target variable[0]"
Wäre nett wenn mir jemand helfen könnte, denn ich bin am verzweifeln

oe9vfj
31.01.2005, 07:01
Hallo,

Dein Beispiel hat mit einer Mehrfachrechnung eigentlich nichts zu tun.

Für die IF ... THEN Anweisung gibt es zwei Schreibweisen.

IF Bedingung THEN Anweisung [ELSE andere Anweisung]


oder


IF Bedingung THEN

Anweisung

[ELSE]

andere Anweisung

ENDIF


Du kannst entweder EINE Anweisung direkt hinter dem THEN schreiben allenfalls auch ein ELSE Zweig (aber keine ENDIF)

oder die normale Schreibweise bei der hinter THEN nichts mehr sein darf und die Anweisungen bei zutreffen der Bedingung in den nächsten Zeilen folgen, allenfalls ein alternativer Verzweigungszweig mit ELSE und am Schluss ein ENDIF ebenfalls in einer eigenen Zeile.

Oder kurz gesagt, sofern alles in einer Zeile erledigt werden soll, darf kein ENDIF mehr kommen.


SINGLE auf ein oder zwei Kommastellen Runden:

Für den Ausdruck (PRINT oder LCD) mit der Anweisung FUSING. Schau mal in der Hilfe unter diesem Stichwort nach.
Soll mit einem solchen gerundeten Wert weitergerechnet werden geht das nur wenn man z. B. bei 2 Dezimalstellen so vorgeht:


Dim S1 as Single
S1 = 123.456789
S1 = S1 * 100
S1 = FIX(S1)
S1 = S1 / 100

Hier wird aber bei einem nachfolgenden Ausdruck kein entsprechend exakt gerundeter Wert erscheinen, da sich viele Dezimalzahlen nicht exakt mit dem binären Fließkommaformat darstellen lassen.
Eine nachfolgende PRINT oder LCD Anweisung wird daher den Wert bringen, dem die binär gespeicherte Zahl wirklich entspricht und den gewünschten Wert am ehesten repräsentiert.

Auch hier gibt es in der BASCOM-Hilfe unter
BASCOM language fundamentals / Language Fundamentals beim Absatz:
Decimal and Binary Number Systems
entsprechende Erläuterungen.


Viele Grüße
Josef