Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Rechnen mit einer Quadratischen Gleichung in 32-Bit II Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 20.05.2022 15:57)
 Als Antwort auf Demoprogramm: Rechnen mit einer Quadratischen Gleichung in 32-Bit von Dietmar - 20.05.2022 15:54
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station


' ============================================================================
' Demoprogramm: Rechnen mit einer Quadratischen Gleichung in 32-Bit II
' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 20. Mai 2022
' ============================================================================

' Es wird eine Quadratische Gleichung mittels 32-Bit-Festkommaarithmetik
' berechnet. Dabei wird die Systemerweiterung "Komfortable 32-Bit-Arithmetik
' auf der Open-Maxi" verwendet. Dieses Programm ist gut kommentiert, so daß
' es keine Schwierigkeiten macht, eine ähnliche Rechnung in einem eigenen
' Programm umzusetzen. Es ist beschrieben, worauf man bei der Berechnung
' mittels 32-Bit-Festkommaarithmetik achten muß.

' Zum Rechnen unter Windows eignet sich gut das Computeralgebrasystem
' "MuPAD Light 2.5.3". Hier in unserem Forum gibt es folgenden Downloadlink:

' http://ccintern.dharlos.de/forum/lesen.php?eintrag=17192

' --- Definitionen für das System --------------------------------------------

INCLUDE "omax.def"         'Definitionen für die Open-Maxi

OPTION 32BIT               '32-Bit freischalten (ab OCBASIC Version 1.12)

' --- Definitionen des Anwenders ---------------------------------------------

DIM l LONG                 'Eine 32-Bit-LONG-Variable
DEFINE ll AS WORD[1] OF l  'LSW \ High- und Low-Word der
DEFINE lh AS WORD[2] OF l  'MSW /   32-Bit-LONG-Variable

DIM bitarray BYTE                'ein Bitarray
DIM debug    BIT[1] OF bitarray  'ist HIGH, wenn Debugging aktiv

DIM messung  WORD                'ein Meßwert vom AD-Wandler
DIM ergebnis WORD                'das Ergebnis der Berechnung

DEFINE adinput AD[1]             'Eingang des Analog-Digital-Wandlers

' --- System-Erweiterungen einbinden (müssen vor dem ersten Befehl stehen) ---

INCLUDE "omax32.iia"       '32-Bit-Erweiterung einbinden

' --- Das Hauptprogramm ------------------------------------------------------

#main

RunOnErr=ON                'Fehler-Handling aktivieren
End2Host=ON

IF ERR THEN                'Fehler-Handling (siehe Doku)
  WHILE TRUE
    ?"Fehler Nr. ";err
    PrintHex=ON
    ?"Adresse: $";erradr-UPROGBASE
    PrintHex=OFF
    PAUSE 25
  WEND
END IF

URTok=ON                   '32-Bit-Erweiterung aktivieren

' Titel:

PRINT
PRINT "Quadratische Gleichung II"
PRINT "========================="

' Initialisierungen:

debug=ON 'OFF 'ON   'Zwischenschritte anzeigen

' Die AD-Ports liefern standardmäßig gerundete 8-Bit-Werte zwischen 0 und 255
' zurück, was den Spannungswerten 0 Volt bis 5 Volt entspricht. Mit folgendem
' Befehl wird auf gerundete 10 Bit umgeschaltet.

ADC1CFG=&b01001000  'AD-Wandler auf gerundete 10 Bit

' Hauptschleife des Programms:

WHILE NOT RXD

  messung=adinput
  messung=1000 '1023   'Beispiel

  ?
  ?"messung="messung

  IF debug THEN
    ?
    ?"Zwischenschritte:"
  END IF

  ' Ab hier die Formel "32000-1.34*messung+0.000125*messung^2" mittels 32-Bit-Festkommaarithmetik berechnen

  'Der AD-Wandler liefert 10-Bit-Werte zurück. Sie liegen also im Wertebereich
  ' zwischen 0 und 2^10-1. Gehen also bis 1023. 1023^2 ist 1046529. Dieser Wert
  ' kann nicht in einer 16-Bit-Variable (Typ: WORD) gespeichert werden, denn er
  ' ist zu groß. Es würde ein Ãœberlauf auftreten.

  'Die Lösung ist 32-Bit-Arithmetik. Eine 32-Bit-Variable (Typ: LONG) kann
  ' Zahlen zwischen -2147483648 bis 2147483647 speichern. Demnach kann kein
  ' Ãœberlauf auftreten und es darf in 32-Bit gerechnet werden.

  'Die Multiplikation mit 1.34 wird durch 134/100 ersetzt. Es wird also mit
  ' der Zahl 100 skaliert, die Multiplikation durchgeführt und zum Schluß
  ' durch 100 dividiert, um das Ergebnis zu erhalten.

  'Die Multiplikation mit der Zahl 0.000125 kann einfacher durch eine Division
  ' mit dem Kehrwert 8000 durchgeführt werden.

  'Zu beachten ist, daß keine Ãœberläufe auftreten, und es muß beachtet werden,
  ' daß während der 32-Bit-Arithmetik nur vier Einträge auf dem Rechenstack
  ' verfügbar sind. Weiteres steht in der INFO.TXT-Datei der 32-Bit-Arithmetik.

  l=32000-134*messung/100+messung*messung/8000

  IF debug THEN
    ?"32000-1.34*messung+0.000125*messung^2=";l
    ?
  END IF

  'Das Ergebnis steht in der unteren WORD-Hälfte von der LONG-Variablen "l".

  ergebnis=ll
  ?"ergebnis="ergebnis

  PAUSE 50

WEND

?:?"Programmende."
END            'Zurück in den Hostmodus. Neustart mit RETURN-Taste.

' --- Programmende ----------------------------------------------------------


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: