-         
+ Antworten
Ergebnis 1 bis 5 von 5

Thema: Rechnung mit Bascom

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2004
    Beiträge
    270

    Rechnung mit Bascom

    Hallo,
    warum geht folgender Code nicht?
    Code:
    $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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    28
    Beiträge
    1.614
    bascom kann leider keine mehrfachrechnungen...

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

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2004
    Beiträge
    270
    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

  4. #4
    Gast
    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

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    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:
    Code:
    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

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •