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
Hi, erhoehe mal unter Compiler den HW- und SW Stack und Framesize. Mfg Dirk
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.