- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: Programm und Timer vertragen sich nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    O-kay - durch DIESEN Code werde ich so schnell nicht durchsteigen....

    Macht aber fast nix. Du beschreibst ja zwei Dinge: Erstens steht und fällt das Problem mit dem Freigeben der Interrupts, und zweitens führt das Problem dazu, dass der Controller "stehenbleibt". Das ganze klingt ein bisschen nach einem Stack-Overflow, d.h. der Speicherbereich, in dem alle möglichen Register bei Interrupts, Subs und ähnlichem abgelegt werden, reicht nicht aus. Ist das der Fall, hängt sich der Controller auf.

    Um zu verifizieren ob es tatsächlich der Timer1-Interrupt ist, könntest Du ja mal das Enable Interrupts stehen lassen, und stattdessen "Enable Timer1" aus dem Code löschen. Wenn der Fehler sich dann genauso verhält, kann es eigentlich nur mit dem Timer1-Interrupt zu tun haben.

    Du könntest dann mal versuchen, den Hardware- und Software-Stack zu vergrößern. Wenn nichts anderes definiert wird, legt Bascom sie beim Mega8 m.W. mit je 32 Bytes an. Probier doch mal z.B. 40:

    $hwstack = 40
    $swstack = 40

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Zitat Zitat von sauerbruch Beitrag anzeigen
    o-kay - durch diesen code werde ich so schnell nicht durchsteigen....
    hatte ich schon fast geahnt. Deshalb war auch der code nicht im ersten beitrag. Ich will von niemandem verlangen, sich den code zu verinnerlichen. Ich musste auch ein paar kommentare löschen, damit es in den beitrag passt. Ich bin guter dinge, dass wir weiterhin nach dem ausschlussverfahren der sache auf dem grund kommen.


    Zitat Zitat von sauerbruch Beitrag anzeigen
    Um zu verifizieren ob es tatsächlich der timer1-interrupt ist, könntest du ja mal das enable interrupts stehen lassen, und stattdessen "enable timer1" aus dem code löschen. Wenn der fehler sich dann genauso verhält, kann es eigentlich nur mit dem timer1-interrupt zu tun haben.
    das hatte keinen Erfolg

    Zitat Zitat von sauerbruch Beitrag anzeigen
    Du könntest dann mal versuchen, den hardware- und software-stack zu vergrößern. Wenn nichts anderes definiert wird, legt Bascom sie beim mega8 m.w. Mit je 32 bytes an. Probier doch mal z.b. 40:

    $hwstack = 40
    $swstack = 40
    Ich hab's auch noch mal verdoppelt (ob auch immer das Sinn macht) es tat sich nichts.

    Ich hatte auch mal statt Timer1 den Timer0 verwendet. es war das gleiche Spiel.

    Es scheint als ob es etwas mit den Interrupts zu tun hat. Wenn ich nur die Interrups einschalte um sie im Timer zu verwenden muss ich doch nicht die Interrupts ausschalten die sonst durch PINs ausgelöst werden, oder? Es ist doch auch egal, ob solche PINs Ein- oder Ausgänge sind, oder?


    Eine Sache die ich beobachte habe und die vielleicht wichtig sein könnte:
    Wenn ich die Reset-Taste betätige (PIN1) und unmittelbar hinterher die anderen Tasten, dann funktioniert das Programm für eine Sekunde für 1 bis drei Schritte und bleibt dann erst stehen.
    Das Compiliern zeigt mir 67% Speicheauslastung (weis nicht ob diese Info gebraucht wird).

    Behri

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Wenn ich die Reset-Taste betätige (PIN1) und unmittelbar hinterher die anderen Tasten, dann funktioniert das Programm für eine Sekunde für 1 bis drei Schritte und bleibt dann erst stehen.
    Dann wäre doch mal interessant, ob diese Zeit sich deutlich verlängert, wenn Du den Timer ordentlich langsamer machst. Nimm doch mal einem Prescaler von 64 und keinen Timerstartwert, dann sollte Timer1 alle ca. 4 Sekunden überlaufen anstatt alle 125 ms wie bisher.

    (*im-trüben-rumstocher...)

    P.S.: Und es ist absolut richtig, dass man all die anderen Interrupts nicht extra "ausschalten" muss. Das sind sie ganz von alleine nach dem Power-On-Reset, und nur die explizit aktivierten Interrupts (enable...) werden ausgeführt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Danke für die Tips.
    Nun, solange man gerne fischen geht, hat das Fischen im trüben Wasser seinen besonderen Reiz. Denn man sieht den Fisch erst wenn man ihn gefangen hat und man hatte vorher nicht die geringste Ahnung wie das Prachtstück aussieht.
    Jedenfalls glaube ich, dass wir das Tierchen schon ein bischen in die Enge getrieben haben.
    folgende aktuelle Einstellungen:
    Code:
    $hwstack = 40
    $swstack = 40
    .
    .
    .
    prescale = 64
    Const Timer1startwert = 5
    folgende sonderbare Erscheinung:
    das Programm läuft erst mal und die LED blitzt kaum sichtbar aller 4 Sekunden.
    manchmal fängt sie auch an ordentlich zu zu toggeln und dann steht das Programm wieder wie angenagelt.

    Behri

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Ich hab gerade noch mal gelesen, Du meintest "keinen" Timerstartwert.
    Einstellung:
    Code:
    'Keinen Timerstartwert
    Prescale = 8
    die LED "blitzt" 8 mal (immer wenn das umschalten beim toggeln dran wäre). Dann Toggelt die LED (nach ca. 4 Sekunden, ca im Sekunden-Takt).
    Wenn die LED dann das erste mal geleuchtet hat, steht das Programm. In der "Blitzphase" läuft das Programm. Wenn ich in dieser Phase schnell und viele andere Tasten betätige, kann ich das Toggeln - und somit das Stoppen des Programmes um ein paar Sekunden rausgezögert werden. ???

    Behri

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Also, ob Du nun gar keinen Timer-Vorladewert nimmst oder ihn aber von 5 starten lässt, dürfte beim 16-Bit-Timer absolut keinen Unterschied machen. Er zählt ja immerhin bis 65535... Dass die LED "blitzt" und nicht blinkt, ist ja aber schon mal sehr suspekt, da Du sie in der Timer-ISR ja toggelst.

    Und wenn der Timer1-Interrupt nicht aktiviert ist, läuft das Programm ordnungsgemäß - habe ich das richtig verstanden?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Ja, richtig verstanden.
    oft steckt der Teufel ja im Detail. Deshalb noch mal von 5 auf nichts. Das war nun mein erster Versuch mit einem Timer zu arbeiten und lt. der Bücher die ich vorher studiert hatte schien es nicht so schwer zu sein. Das mit dem "Blitzen" erscheint mir auch suspekt. Aber ich mit meinen Kenntnissen kann nichts daraus schließen. Ich weiß nicht wie der Bascom-Code im µC so abläuft und wie das ist mit Registern, Speicherbereichen, Zeigern... . Vieleicht braucht das ein Timer um zu starten, sowas wie "Vorglühen" . (Nein, natürlich nicht, ich denke da collidiert irgendwo etwas)
    Was könnte ich noch so probieren?

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 17.02.2011, 16:30
  2. emc2 und Step3d vertragen sich nicht
    Von MisterMou im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 08.04.2010, 15:49
  3. Timer2 (Uhrenquarz) und Timer0 PWM vertragen sich nicht
    Von Marten83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.04.2009, 12:41
  4. dcf77 und ds1820 vertragen sich nicht...
    Von Mosi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 19
    Letzter Beitrag: 22.09.2007, 20:27
  5. AVR-DOS und LCD vertragen sich nicht - warum?
    Von vampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.08.2007, 21:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests