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: