-         

Ergebnis 1 bis 8 von 8

Thema: Problem mit Z-Pointer nach Spannungsunterbrechung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.07.2006
    Beiträge
    20

    Problem mit Z-Pointer nach Spannungsunterbrechung

    Anzeige

    hallo,

    ich möchte eine 7-Segment-Anzeige ansteuern. Dazu habe ich am Ende des Programmes mit Hilfe von ".db" die Daten geschrieben, welches Segment bei welcher Zahl aufleuten soll. Diese lade ich dann mit dem lpm-Befehl und dem Z-Pointer, in dem die Adresse der Daten steht.
    Das Programm arbeitet auch wunderbar.

    Nun zu meinem Problem:
    Wenn ich das Programm mit dem ISP-Kabel rein gespielt habe, funktioniert es, ich kann auch einen Reset ausführen oder die Spannung unterbrechen, ohne das Fehler auftreten.

    Aber nur solange bis ich das ISP-Kabel getrennt habe. Und sobald ich dann die Spannung kurz unterbreche funktioniert es nicht mehr.
    Es wird dann nur noch "8" angezeigt, was bedeutet, dass mit lpm eine "FF" geladen wird, also der Z-Pointer nicht auf die Daten zeigt, sondern irgendwo ins nirvana.

    Wie kann das sein?
    Solange das ISP-Kabel noch dran ist, geht das Programm ja, auch nach Spannungsunterbrechungen.
    Und wenn das Kabel ab ist (bzw. der Rechner ausgeschaltet), funktioniert es nicht mehr.
    Das Programm arbeitet aber weiter, nur das Laden der Daten fuktioniert nicht mehr.

    Nach dem Einschalten führe ich ja auch im Programm eine Reset-Routine aus, in der auch der Z-Pointer wieder mit der richtigen Adresse geladen wird.


    Das klingt zwar vlt jetzt alles etwas durcheinander, aber ich hoffe es ist halbwegs verständlich.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Das klingt danach, dass Dein ISP Teile der Schaltung mit Spannung versorgt, die ansonsten keine Spannung (oder Masse) bekommen.

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Und ein flatternder Reset-Pin kann auch für Spaß sorgen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Wenn du keine Spannung am µC hast verlierst du all deine nichtflüchtigen Daten. Möglicherweise hilft es, den BOD (Brown-Out-Detector) zu aktivieren, weil bei nicht komplettem Spannungsverlust der µC anfängt rumzuspinnen und kein richtigen RESET macht, woduch undefinierte Zustände entstehen.

    Nach Spannungseinbruch solltest du einen Power-On-Reset bekommen. Ein Reset per ISP ist ein external Reset. Bei einem BO bekommst du einen Brown-Out-Reset. Die Reset-Quelle kannst du dem MCUSCR entnehmen.

    Mit gestöpseltem ISP versorgst du deinen µC über den ISP und die Clamp-Diodenn der Ports mit Saft. Ausserdem hast du mit ISP möglicherweise geerdet, was manche Störungen beseitigt.
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.07.2006
    Beiträge
    20
    Danke für euere Antworten.

    Das mit dem Brown Out werd ich mal ausprobieren.
    Es ist aber so, dass ich ja die Spannung komplett trenne und dann wieder anschließe, also ist das ja ein "kompletter" Spannungsverlust und nicht nur eine Unterspannung.
    Wenn ich die Spannung unterbreche, wenn das ISP noch dran hängt, tritt dieses Problem ja komischerweise nicht auf. Das ist ja das, was mich so verwundert.
    Und die Daten sind ja direkt mit im Flash gespeichert, also nicht flüchtig.
    Das restliche Programm läuft ja trotzdem normal.

    Aber ich werd den Brown Out Reset erst mal ausprobieren. Vlt erledigt sich dann das Problem von selbst.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    24.07.2006
    Beiträge
    20
    Nach stundenlangen Rumprobieren hab ich den Fehler endlich entdeckt.

    Und zwar hatte ich zum Berechnen der Adresse der Daten für den HIGH Teil des Z-Registers einfach eine NULL gebraucht. Dazu hab ich einfach ein freies Register genommen und da ja dort anfangs sowieso ne NULL drin steht, hab ich an diesem Register auch nichts geändert.
    Genau da war der Fehler.

    Denn nach dem Abziehen des ISP-Kabels und anschließender Spannungsunterbrechung war eben in diesem Register keine NULL mehr drin, sodass der Z-Pointer nach der Berechnug ins Nirvana gezeigt hat.

    Jetzt lösche ich dieses Register in meiner Reset-Routine am Anfang des Programms und es funktioniert. \/


    Nochmal danke für die Antworten, auch wenn sie in meinem Fall leider nichts genützt haben.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von bombatz
    [...] Dazu hab ich einfach ein freies Register genommen und da ja dort anfangs sowieso ne NULL drin steht, [...]
    [-X Wo hast du denn das her???

    Register und RAM werden beim Reset *nicht* initialisiert! Es stehen undefinierte Inhalte drinne! Kann man prima benutzen, um ne Seed für nen Zufallsgenerator zu bekommen
    Disclaimer: none. Sue me.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    24.07.2006
    Beiträge
    20
    naja ich war der Annahme, dass in den Registern, wenn vorher nichts rein geschrieben wurde, nach einem Reset auch nichts drin steht .... aber jetzt weiß ich das fürs nächste Mal... wieder was neues gelernt...

Berechtigungen

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