www.mikrocontroller.net

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


Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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


Mfg

Dirk

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bill Gates (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
datt iss ja schlimmer als windoof-programmierung.....

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt nicht mehr, Problem behoben mit FUSING...

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du das bitte mal genauer erklären? besten dank!

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.