Forum: Mikrocontroller und Digitale Elektronik Kommastellen in BASCOM


von thomas (Gast)


Lesenswert?

Hi User

Ich hab ein Programm in Bascom geschrieben, welches die Spannung an 
einem AD- Kanal über die RS232 Schnittstelle ausgibt. Das Problem ist, 
dass das Ergebnis neun Nachkommastellen hat, mir aber eine reichen 
würde.

Der ROUND Befehl in Bascom bringt das nicht, der rundet auf die nächste 
ganze Zahl, was ich ja nicht will. Aus einem Basic Tutorial hab ich den 
Befehl ROUND(Zahl,1) gefunden. Dieser soll eigentlich den Wert Zahl auf 
eine Nachkommastelle runden. In Bascom funktioniert das aber nicht--> 
Fehlermeldung.

Wer kann helfen? Allzu schwer kann es ja nicht sein.

Gruss Thomas

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>Wer kann helfen?

Das Bascom-Manual.

>Allzu schwer kann es ja nicht sein.

Der Meinung sind viele, die mit Bascom programmieren.
(Kritik meinerseits an der Arbeitsweise von Bascom-"Programmierern".)


http://avrhelp.mcselec.com/bascom-avr.html

Notfalls kannst du die Zahl auch mit 10 multiplizieren, dann runden und 
wieder durch 10 teilen:

x = ROUND(n*10)/10

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

Ich gehe mal davon aus, dass du die Zahl irgendwie ausgeben willst.
Mit FORMAT o.dergl. (siehe avrhelp-link ein Post weiter oben von mir) 
kann man die Zahlenausgabe formatieren.

von olafk (Gast)


Lesenswert?

Der Befehl zur Formatierung heisst bei BASCOM FUSING (gibt einen 
formatierten String eines Singles zurück).

Gruß Olaf

von thomas (Gast)


Lesenswert?

Hallo Olaf

Die Variante mit FUSING hat zum Erfolg geführt. Das bisherige Ergebnis 
war vom Typ Single. Wandlung in String und dann Fusing bringts. Besten 
Dank.

An fieser, klugscheissender Rahul

Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für 
Spezialisten ist, aber das Programm ist ein kleiner Teil meiner 
Diplomarbeit. Zur Einarbeitung habe ich keine Zeit, und in Bascom hats 
nur 2 Tage gebraucht, bis das Programm lief (bis auf die Kommastellen 
halt). Ich finde das so voll korrekt, aber wenn man kompliziertere 
Sachen machen will sollte man lieber ein anderes Programm nehmen.

Also besten Dank an alle!
Thomas

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für
>Spezialisten ist

Hab ich nie behauptet.

>Ich finde das so voll korrekt, aber wenn man kompliziertere
>Sachen machen will sollte man lieber ein anderes Programm nehmen.

Muß man aber nicht.

Es ist bloß inzwischen hinlänglich "bekannt", dass Leute, die mit BASCOM 
programmieren, meinen, dass das der einfachste Weg sei, und dann bei 
jedem kleineren Problem um Hilfe schreien.
Deswegen auch der etwas "unfreundliche" Hinweis auf das Datenblatt.
Es geht also nicht um Bascom, sondern um den "NDBU" (normal dummer 
Bascom User), der Bascom-Benutzer in ein etwas schlechtes Licht gerückt 
hat.
Dass diesen "Zorn" auch gerne mal die falschen abbekommen, ist 
vielleicht verständlich, aber nicht entschuldbar. Und das, wo ich mir 
eigentlich vorgenommen hatte, mich nicht mehr darüber aufzuregen.

von Karl heinz B. (kbucheg)


Lesenswert?

> Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für
> Spezialisten ist,

Es geht ja nicht um BASCOM an sich.
Es geht darum, dass viele BASCOM Programmierer, die hierher
kommen, sowas wie Doku bzw. Online-Hilfe durchblättern oder,
Gott bewahre, Lesen für überflüssigen Luxus halten. Die Online-
Hilfe von BASCOM ist sehr gut. Nur reinschauen müsste man halt
mal.

von Jürgen E. (joe73)


Lesenswert?

Hallo,


auch ich habe mich etliche Stunden mit dem Runden auf eine bestimmte 
Anzahl von Kommastellen beschäftigt. Nun hoffe ich, dass ich mit Fusing
zum Ziel komme. Werde es gleich testen, aber lt. der Hilfe von BASCOM 
wird es wohl mein Problem lösen.
Ich bin bislang immer so vorgegangen:

var= 12,845999
var = var * 100       ' ich wollte auf 2 Kommastellen runden
var = Round(var)
var = var/100

Das klappte aber nie, warum weiss ich nicht. Die gerundete var war
1285 und nach dem Teilen durch 100 gab es wieder etliche Kommastellen!
Ich bin davon ausgegangen, dass ich dann 12,85 als Ergebnis bekomme.

Vielen Dank für Eure Anregungen, fals noch jemand schreiben könnte, 
warum
meine Methode nicht zum Erfolg führte, wäre prima...

mfg Jürgen

von Fjodor (Gast)


Lesenswert?

Jürgen E. schrieb:
> Vielen Dank für Eure Anregungen, fals noch jemand schreiben könnte,
> warum
> meine Methode nicht zum Erfolg führte, wäre prima...

http://de.wikipedia.org/wiki/Gleitkommazahl#Einschr.C3.A4nkungen_und_deren_mathematische_Grundlagen

von Wolfgang S. (wsm)


Lesenswert?

@Jürgen E. (joe73)

BASCOM rundet intern nach einer Division nicht!

Also entstehen beim binären Rechnen automatisch "binäre" 
Nachkommastellen, d.h. eine Binärzahl mit ggf. maximaler Länge.

Beim Konvertieren ins Dezimalsystem sind immer noch Stellenwerte mit 
1/2, 1/4, 1/8, 1/16 u.s.w. vorhanden, so dass bei der Ausgabe der 
Dezimalzahl diese Werte als Nachkommastellen entstehen.

Noch eine Anmerkung zum Streit um C++ contra BASCOM.

Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht!

Dabei ist PASCAL doch auch noch eine interessante Alternative.



W.

von Jürgen E. (joe73)


Lesenswert?

Hallo,
vielen Dank für die schnellen Antworten.
Ist mir zwar alles etwas zu "mathematisch" aber nun weis ich
wenigstens woran es gelegen hatte bei meiner Vorgehensweise.

Auf jeden Fall funktioniert es nun mit Fusing. Hatte es gerade getestet.


mfg Jürgen

von Sam .. (sam1994)


Lesenswert?

Wolfgang Schmidt schrieb:
> Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht!

Wenn etwas sehr schnell oder klein sein soll, muss man C oder noch 
besser Assembler nehmen.
Bei komplexen Sachen dann doch lieber C, da hier die Übersicht bewahrt 
wird. Schreib doch mal einen Webserver mit Bascom und vergleiche die 
Geschwindigkeit mit einem C-Webserver. Bascom pfuscht zu viel im Code 
herum.


Das Argument Bascom wäre einfacher zählt nicht: Ich wollte mal Basic 
ausprobieren, nachdem ich jahrelang c++ programmiert habe. Ich komme 
damit überhaupt nicht zurecht. Ich persönlich finde C(++) eine deutlich 
einfachere Sprache als Basic.

von Oh ja (Gast)


Lesenswert?

ich (Bascom- Programmierer), wäre auch gerne einer von diesen 
wunderbaren C -und/ oder Assembler  - Programmierern. Sobald ich in 
Rente bin und viel Zeit habe , werde ich das auch werden, aber vorher 
möchte ich schon mal ein paar Schaltungen zum Laufen bringen...
Seit Jahren verwende ich Tranistoren, ohne vorher Halbleiterphysik 
studiert zu haben und das klappt auch ganz prima.

von Wolfgang S. (wsm)


Lesenswert?

Nach Fortran, Algol, Macros für Telefunkengroßrechner, Assembler für 
schnelle Messwerterfassung, Basic für Wang Tischrechner, PASCAL und 
Assembler für Apple II, C in der Firma, Assembler für 68000, ein wenig 
Forth u.s.w. bevorzuge ich ganz klar BASCOM und PASCAL.

In PASCAL kann ich arithmetische Ausdrücke ganz schreiben, in BASCOM 
muss ich diese zerlegen. Wenn's schnell werden muss, dann wird 
Assemblercode eingefügt.

Aus meiner sich gibt's nicht unschöneres als die Syntax von C++.

Es fehlt auch die Orientierung an der mathematisch logischen 
Schreibweise von Zuweisungen, Vergleichen, Indizierungen, so dass C++ 
für Nichtmathematiker ohne eine derartige "Vorbelastung" wahrscheinlich 
einfacher zu lesen ist.

W.

von Klaus D. (kolisson)


Lesenswert?

Vielleicht hilft auch das weiter:

Config Single = Scientific , Digits = 2


Gruss Klaus

von Mr. K. (kaktus-)


Lesenswert?

This makes my day

Config Single = Scientific , Digits = 2

Danke

von ggg (Gast)


Lesenswert?

Klaus De lisson schrieb:
> Vielleicht hilft auch das weiter:
>
> Config Single = Scientific , Digits = 2
>
> Gruss Klaus

Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes 
Gelabber wer welche Programmiersprache vorzieht usw.

von Homeworld (Gast)


Lesenswert?

ggg schrieb:
> Klaus De lisson schrieb:
>> Vielleicht hilft auch das weiter:
>>
>> Config Single = Scientific , Digits = 2
>>
>> Gruss Klaus
>
> Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes
> Gelabber wer welche Programmiersprache vorzieht usw.

und warum und wie entstanden? richtig, ein hochqualifizierter 
BASCOM-"Programmierer" bekommt es nicht hin die Dokumentation zu lesen 
und zu verstehen. Es ist immer dasselbe und überheblich dazu "zeig mir 
was man in C machen kann was in Bascom nicht geht".....Junge, wenn du 
auch nur ansatzweise was davon verstehen würdest, müsste man nicht solch 
eine Grütze lesen!

von Lui (Gast)


Lesenswert?

ggg schrieb:
> Klaus De lisson schrieb:
>> Vielleicht hilft auch das weiter:
>>
>> Config Single = Scientific , Digits = 2
>>
>> Gruss Klaus
>
> Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes
> Gelabber wer welche Programmiersprache vorzieht usw.

Viele der Leute mit ansatzweise Ahnung schaffen es nicht auf eine 
einfach zu beantwortende Frage eine einfache Antwort zu geben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.