Unterschied zwischen Arduino Mega und Due im Bezug auf Bibliotheken

Hallo
Ich habe gestern und heute versucht meinen Due ein wenig zu entlasten und habe einige Sachen auf einen Atmega 2560 ausgelagert.

So weit auch alles kein Problem.
Aber die daly-bms-uart.h Bibliothek macht mir grade sorgen.
Auf einen Due und esp8266 (32 bit CPU) Läuft alles wie gewohnt.
Auf dem Mega 2560 (8Bit CPU) hingegen FAST alles.

Ok Genauer es läuft alles Bis auf das auslesen der Restkapazität dieser wert scheint zu gros Zusein.

Ich habe auch mal den "Originalen" Code von:

https://github.com/maland16/daly-bms-uart/blob/main/example-sketch/daly-bms-example/daly-bms-example.ino

Getestet Das Problem bleibt auf dem Due gehts auf dem mega 2560 nicht.
Ich bekomme auf dem mega nur große minuswerte ausgegeben. die zwischen 4 und 5 stellen haben.

Serial.println("Remaining Capacity mAh:      " + (String)bms.get.resCapacitymAh);

Ergibt:

Remaining Capacity mAh:      -26492

Rauskommen müsste aber irgendwas um 100 000 was bei due auch passiert.
Dabei ist es egal ob ich den wert Speicher oder den wert ohne speichern gleich seriell ausgeben lasse.

Jemand eine Idee ?

Vielen dank.

Datentypen!
z.B. int ist unterschiedlich groß

ich glaube du wärst gut beraten wenn du beschreibst, welches Problem du lösen möchtest.

Imho trägt die Verwendung von zwei Microcontrollern nicht wirklich zur Vereinfachung von Systemen bei.

Du könntest also beschreiben was du eigentlich erreichen willst.

Ok wieder selber ein ei gelegt in der Bibliothek werden die werte ja auch gespeichert da habe ich Int gegen float ersetzt und siehe da geht...

Vielen dank euch beiden.

Wenn Du weißt was Du tust... gut.

Ich würde - wenn ich überhaupt in Bibliotheken rumändern täte - bestenfalls versuchen, die "Breite" in Bits auf dem Mega an die im Due anzupassen.
In dem Fall die int (native Breite in Bit der Architektur: Due 32, Mega 16) durch int32_t ersetzen. Kostet aber Speicher.

1 Like

Auch nicht mehr, als ein float.

Gruß Tommy

Schlechte Idee.
float hat 6 bis 7 signifikante stellen.
unsigned long hat fast 10.
Wenn Du es mir nicht glaubst versuch mal zu 1 000 000 wiederholt 1 dazuzuzählen.

Grüße Uwe

Ich glaube dir / Euch schon keine frage.

Ich hatte es zuerst mit int32_t versucht das wollte er nicht ( weis jetzt nicht mehr genau) und mit float lief es dann Auf anhieb.

und mein maximal möglicher Wert kann 105 000 nicht überschreiten.

"Ich würde - wenn ich überhaupt in Bibliotheken rumändern täte........"

Ist ja auch eher eine Notlösung.
aber es geht nicht anderes. (für mich zumindest) ja könnte noch auf Long wechseln stimmt schon.

Danke für den Vorschlag.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.