Forum: Mikrocontroller und Digitale Elektronik ATMega16, Bascom Variablen spinnen !


von Oliver (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit Bascom 1.11.7.4 und einem ATMega16.

Eine Funktion meines Programms ist, die Betriebstunden
zu zählen.
Um das EEPROM zu schonen, wird alle 10 der Wert im EEPROM mit 1
addiert.
Leider steht für die Variable irgend welche Zahlen als Wert,
auch wenn ich zb Stunde = 0 sage, erhalte ich beim auslesen
was mit 13109 etc.
Bei jedem Aufruf der Betriebsstundenanzeige ändertn sich diese Werte
auch obwohl im Programm selbst nichts verändert werden kann.

Wenn ich aber mein Programm nun auf NUR DIESE Funktion zusammen kürze,
geht es 100 % !! Kann es sein, dass Bascom mit meiner doch hohen
Anzahl von Variablen etwas durcheinander kommt ?

Kann man erkennen, ob es am RAM mangelt etc ??
Mein Programm ist schon 63% groß, brauche aber viele WORD-Variblen (25)
und SINGLE (14).

Für Hinweise besten Dank !!

mfg
Oliver

von Dirk (Gast)


Lesenswert?

Hi,

erhoehe mal unter Compiler den HW- und SW Stack und Framesize.


Mfg

Dirk

von Oliver (Gast)


Lesenswert?

hmm, leider ohne Erfolg, selbst mit HW-Stack 512 gehts nicht.
Bei jedem Aufruf von diesem Untermenü sind auch immer andere
Zahlenwerte enthalten, bewegen sich immer um 12500 etc ..
Ich habe aber zum testen 100 vorgegeben ..
Bascom meckert ja auch nicht, dass was nicht stimmt.
Die Timer1 Funktion inkl Int habe ich auch zum testen deaktiviert !

Bald weiß ich nicht mehr weiter ...

mfg
Oliver

von Oliver (Gast)


Lesenswert?

soo, ich konnte den Fehler etwas einkreisen:

Ich erhalte ein Zahlenwert Single, der auch Negativ sein kann(muss).
Ich will aber nicht alle 32bit Zeichen im LCD haben, daher
wandel ichs in ein String und zeige nur die ersten 4 Zahlen an (mit
Punkt) :

Dim Swr6 As Single
Dim Swr7 As String * 5


Swr7 = Str(swr6)
Swr7 = Left(swr7 , 4)

Wenn ich das alles weg lasse (Bildung des Strings) und statt dessen nur
swr6 anzeige als Single-Zahl,
ist auch meine Betriebsstundenanzeige 100% ok !!

Könnte das was mit den Stack´s etc zu tun haben ??
Habe aber schon zig Werte getestet...?!

mfg
Oliver

von Bill Gates (Gast)


Lesenswert?

datt iss ja schlimmer als windoof-programmierung.....

von Oliver (Gast)


Lesenswert?

jetzt nicht mehr, Problem behoben mit FUSING...

von Michael (Gast)


Lesenswert?

kannst du das bitte mal genauer erklären? besten dank!

von Christof Krüger (Gast)


Lesenswert?

Kenne mich zwar nicht mit Basic aus, aber:

Dim Swr7 As String * 5    <--- das ist doch ein String der Länge 5,
oder?

Swr7 = Str(swr6)  <--- kann Str() nicht was längeres als 5 Zeichen
zurückgeben oder sorgt da Basic schon für, dass da nix überläuft?


Ansonsten würde ich auch gerne wissen, was du mit FUSING meinst.

von Oliver (Gast)


Lesenswert?

Moin Moin,
mit String wollte ich erreichen, dass das Ergebnis
nicht länger als 5 Zeichen sein soll, wie 4.765 zB.
Warum auch immer Bascom damit andere Variablen verschluckt hat weis
ich auch nicht, aber mit Fusing gehts so:

swr6 = 5.876444 (Ergebis in einer Single-Variable)
LCD Fusing(swr6, "#.##") (Ergebnis formartiert ausgeben)
Ausgabe im LCD: 5.88 (wird aufgerundet)

Somit war mein Problem mit der LCD Ausgabe gelöst und ich brauchte
kein String mehr.
Seit dem werden auch die Betriebstunden richtig gezählt und
im EEPROM abgespeichert.
Könnte evt auch ein BUG in Bascom sein ?

 @Christof:
Nee, Bascom beachtet dann eben nur die ersten 5 oder 4 Zeichen,
der Rest wird weg gelassen, denke ich...

mfg
Oliver

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.