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
Du hast die Software gekauft ( hoffentlich) und bekommst daher Support von Marc Selec, dem Entwickler.
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.
"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?
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
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
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. ;-)
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 ?
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 ;-)
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.
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.
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
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.
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
Nicht wirklich ! die Brownout muss passend gesetzt sein. Aber Du weißt ja schon alles.
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
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.
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.