Forum: Mikrocontroller und Digitale Elektronik [Bascom] unlogisches Verhalten - blind?


von Norbert S. (norberts)


Angehängte Dateien:

Lesenswert?

Hi,

wir haben hier einen kleinen Programmschnipsel, der sich sehr unlogisch 
verhält.
Das Ganze Drumherum ist etwas zu viel um alles zu erklären aber wir sind 
uns recht sicher, es auf ein paar Zeilen eingekreist zu haben.

Beide Codeschnipsel im Anhang verhalten sich exakt gleich.

Variablen:
Dim Startwait As Word
Dim Dm_sec As Byte
Dim Dm_sec_e As Eram Byte At 2
Dim Dm_status As Byte

Der Code wird einmal beim Programmstart ausgeführt und soll Folgendes 
machen:
Dm_status wird vor dem Schnipsel bestimmt. Wenn es 4 ist und Dm_sec_e 
nicht, soll Dm_sec_e 4 werden und weiter im Programm.
Wenn Dm_status <> 4 ist und Dm_sec_e = 4 ist, soll er in die 
Endlosschleife gehen.
Einfach ausgedrückt, wenn beim Start einmal Dm_status = 4 war (das ist 
eine Art Dongle der abgefragt wird), muß es immer = 4 sein, sonst 
Endlosschleife. Ist beides <> 4 einfach weiter im Programm.
Das Ganze soll durch den Dongle (Dm_status = 4 wenn Dongle dran) 
gesperrt werden. Einmal Dongle gesehen, muß der beim Start immer dran 
sein sonst Endlosschleife.

Das Verhalten ist nun so:
Startet man das erste Mal mit Dongle, geht er trotzdem in die 
Endlosschleife. Beim nächsten Programmstart funktioniert aber alles. 
Also läuft wenn Dongle dran und Endlosschleife wenn nicht.

Der Dongle wird nur beim Programmstart erkannt. Watchdog war also die 
Idee. Macht er beim Eeprom schreiben einen Reset, wird der Dongle danach 
nicht erkannt. Der WD wird aber erst später aktiviert und wird ja 
ausserdem immer wieder resettet.
Ist ein ATMega32, also nix mit WD per Fuse.

An der Stelle ist auch sonst noch kein Interrupt, Timer oder sonstwas 
aktiv.

Das kann eigentlich fast nur noch ein Reset beim Schreiben des Eeproms 
sein aber warum?

Bin für jede noch so vage Idee dankbar.

Gruß,
Norbert

von Hä? (Gast)


Lesenswert?

Du hast die Software gekauft ( hoffentlich) und bekommst daher Support 
von Marc Selec, dem Entwickler.

von Schwachkopf by Nature (Gast)


Lesenswert?

Hä schrieb:
>Du hast die Software gekauft ( hoffentlich) und bekommst daher Support
>von Marc Selec, dem Entwickler.

Der Mann heißt Mark Alberts. Ganz sicher wird der nicht auf jedes von
einem Nutzer geschriebene Programm eingehen können.

Deine "Weisheiten" nützen Niemandem.

von gonzales (Gast)


Lesenswert?

"Das Ganze Drumherum ist etwas zu viel um alles zu erklären aber wir 
sind
uns recht sicher, es auf ein paar Zeilen eingekreist zu haben."

Keine Programmschnipsel. Besser komplettes kompilierbares Programm 
posten. Hoffentlich auf die relevanten Teile schon so 
zusammengestrichen, daß das Problem aber gerade noch vorhanden ist. k.A. 
warum man das immer wieder wiederholen muß. Und vielleicht noch ein paar 
Worte zum "Dongle"


"Der Code wird einmal beim Programmstart ausgeführt..."

Wie wird der Programmstart initiiert? Versorgungsspannung aus- und 
einschalten, Resettaste, oder anders?

von Norbert S. (norberts)


Lesenswert?

gonzales schrieb:
> Keine Programmschnipsel. Besser komplettes kompilierbares Programm
> posten. Hoffentlich auf die relevanten Teile schon so
> zusammengestrichen, daß das Problem aber gerade noch vorhanden ist. k.A.
> warum man das immer wieder wiederholen muß. Und vielleicht noch ein paar
> Worte zum "Dongle"
>
> "Der Code wird einmal beim Programmstart ausgeführt..."
>
> Wie wird der Programmstart initiiert? Versorgungsspannung aus- und
> einschalten, Resettaste, oder anders?

Hi,

das sind knapp 2400 Zeilen Code und die kann ich hier nicht posten.

Der Programmstart ist per Versorgungsspannung aus und wieder an.
Keine Resettaste.

Der "Dongle" wartet beim Start auf ein Signal vom Controller und 
antwortet entsprechend. Dann ist Dm_status = 4.
Das funktioniert sicher.

Gruß,
Norbert

: Bearbeitet durch User
von Norbert S. (norberts)


Lesenswert?

Hi,

kurz die Lösung des Rätsels:
Der Watchdog kommt später im Code.
Bascom schreibt ins Eeprom und macht dann einfach weiter.
Später wird der Watchdog aktiviert (16ms), dann wird aus dem Eeprom 
gelesen.
Bis dahin ist nach dem Programmstart (und somit dem Schreiben des 
Eeprom) kaum Zeit vergangen, einige 100 Zeilen Code aber höchstens ein 
paar 100 Takte.
Da ist der Knackpunkt, Bascom wartet nicht nach dem Schreiben des Eeprom 
sondern erst beim nächsten Zugriff auf das Ready-Flag. Da vergehen also 
nahezu die ganzen 8,x ms bis gelesen wird und vor dem nächsten 
Watchdog-Reset kommt ein Waitms 10.

Bascom macht hier also eigentlich alles richtig, man kann ja nach dem 
Schreiben des Eeprom gerne weitermachen. Nur vor dem nächsten Zugriff 
auf das Eeprom muß das Flag abgewartet werden.
Wäre nur schön, wenn das in der Doku auch so beschrieben wäre...

Gruß,
Norbert

von shoot the crazy bird (Gast)


Lesenswert?

Hä? Das macht jeder so. Die Zeit bis zum nächsten Schreibvorgang wird 
sinnvoller genutzt, als auf der Stelle zu warten. Tritts  du dabei auf 
der Stelle? Das wäre Stümperhaft. ;-)

von Uwe (de0508)


Lesenswert?

Hallo,

um welchen AVR µC handelt es sich den und wie sehen FuseBits aus?

Hast Du die Application Note zur Nutzung des EEproms gelesen und 
umgesetzt ?

von Alex W. (a20q90)


Lesenswert?

Schwachkopf by Nature schrieb:
> Hä schrieb:
>>Du hast die Software gekauft ( hoffentlich) und bekommst daher Support
>>von Marc Selec, dem Entwickler.
>
> Ganz sicher wird der nicht auf jedes von
> einem Nutzer geschriebene Programm eingehen können.
>
> Deine "Weisheiten" nützen Niemandem.

Das ist falsch!

Ich habe mich auch an MCSelec gewendet und habe promt eine Antwort zu 
meinem Problem bekommen (damals war die Länge einer Variablenname 
auslöser eines Absturzes der binnen Stunden behoben wurde)

Aber ich zitiere einfach mal Deinen Nutzernamen ;-)

von C. W. (chefkoch)


Lesenswert?

Genau sowas hat mich dazu bewegt das Thema mit Bascom zu vergessen und C 
zu machen. Das weiß man, was man hat. Ohne jetzt wieder einen 
Glaubenskrieg anzetteln zu wollen.

von Immitsch Berater (Gast)


Lesenswert?

Alex W. schrieb:
>Ich habe mich auch an MCSelec gewendet und habe promt eine Antwort zu
>meinem Problem bekommen

Darum ging es nicht, wie Du hättest lesen können.
Es ging darum, daß der Name des Entwicklers nicht "Marc Selec" ist und
daß "HÄ" den TO provozieren wollte, in dem er unterstellte, eine
nicht bezahlte Version des Programmes zu nutzen.

von Norbert S. (norberts)


Lesenswert?

Hi,

au weia, selbst hier finden einige die Gelegenheit sich zu kloppen.

Ihr werdet es nicht glauben, wir haben sogar mehrere Lizenzen in der 
Firma (auch wenn das meiste jetzt in C gemacht wird) und meine private 
Lizenz ist auch separat gekauft.

crazy bird: Nicht ganz verkehrt Dein Einwand. Wir waren einfach 
betriebsblind und haben genau darüber nicht richtig nachgedacht.
Auf diesen Gedanken hätte vielleicht auch ein Anderer kommen können, da 
ich ja geschrieben hatte, daß der Watchdog später aktiviert wird.
Eine simple Nachfrage "Wird später nochmal auf das Eeprom zugegriffen?" 
und es hätte vermutlich früher "Klick" gemacht.
Kein Vorwurf an irgendwen, genau so klappt das hier ja nicht selten.

Aber daß daraus immer so ein Gezeter werden muß, Nachfragen nach Dingen 
die im Beitrag schon klar drin stehen (µC und Fusebits) und natürlich 
"Bascom ist doof" nervt schon etwas.

Gruß,
Norbert

von Uwe (de0508)


Lesenswert?

Norbert,

ich sehe meine Frage nach den Fusebits nicht beantwortet und genau das 
ist der Tipp, wenn man die Zeilen genau ließt.

Keine hetzt o.ä. - Hilfe zur Selbsthilfe.

von Norbert S. (norberts)


Lesenswert?

Hi,

die Frage ist im Ausgangspost beantwortet. Das ist ein Mega32 und der 
hat kein Fusebit für den Watchdog.
Ok, Brownout hätte noch in Frage kommen können, das hätte ich schreiben 
können, daß das auch ausgeschlossen ist.

Problem ist ja gelöst...

Trotzdem Danke für Deine Mühe.

Gruß,
Norbert

von Uwe (de0508)


Lesenswert?

Nicht wirklich !

die Brownout muss passend gesetzt sein.

Aber Du weißt ja schon alles.

von Norbert S. (norberts)


Lesenswert?

Hi,

ich sag doch, Brownout war ausgeschlossen.
Der Controller wird mit stabilen 5V versorgt, glaubst Du, da wären die 
Fusebits auf Brownout 7,9V eingestellt oder wie?
Ausserdem wäre dann eine Nachfrage "Vielleicht Brownout auf 4,3V 
gestellt und das ist nicht stabil?" angebrachter gewesen anstatt einer 
unspezifischen Frage nach den Fusebits.
Wenn ich da unsicher wäre, hätte ich das geschrieben und aus meiner 
Fragestellung geht doch auch keine Unsicherheit hervor, oder?

Gruß,
Norbert

von Immitsch Berater (Gast)


Lesenswert?

Laß gut sein, Norbert. Dein Programm läuft, Du hast die Erklärung für
den Fehler nachgereicht -das nützt dem Nächsten, der auf so ein Problem
trifft.

Was hier noch kommt, sind verbale Tritte in die Weichteile. Die kann man
sich gut ersparen.

von Alex W. (a20q90)


Lesenswert?

Norbert S. schrieb:
> Fusebits auf Brownout 7,9V eingestellt

Das ist serie :-)

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.