- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Grundlegendes Problem mit Port-Zugriff und Timer-Interrupts

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16

    Grundlegendes Problem mit Port-Zugriff und Timer-Interrupts

    Hallo,

    verwende zur Zeit nen PIC18F2550 und Piklab + SDCC.
    Ich verwende auch den USB-Bootloader von Sprut.

    LEDs hängen an RC0, RC1 und RC2.
    Quarz ist 4 MHz, Fosc ist 48 Mhz (wegen PLL).

    In Grunde funktioniert das schon.

    Jetzt hab ich aber ein seltsames Problem.

    Ich habe zuerst ein Programm geschrieben, daß in main() in einer Endlos-While-Schleife die LEDs nacheinander ein und ausschaltet und dazwischen Zeit vergeudet in dem es drei geschachtelte for-Schleifen durchläuft.

    Danach wollte ich das selbe mit Timer-Interrupts machen. Ich lasse den Timer alle 1500 Schritte mit dem 1/8 Prescaler überlaufen, d.h. der Interrupt tritt alle 1 ms auf.
    Ich zähle die Interrupts mit, und alle 500 mal, toggle ich die 2. LED.

    Das funktioniert, alle 500ms ändert die 2. LED ihren Zusand.

    Jetzt das Problem: Wenn ich beide Varianten zusammen betreiben möchte, also LED 1 und 3 in der main() und LED2 in der isr ansteruen, dann funktioniert das nicht wie gewünscht.

    Die LED2 blinkt dann korrekt, währen die LED1 und 3 flackern.

    Woran könnte das liegen?

    MIr ist irgendwie sowas in den Sinn gekommen wie: beim Einsprung in die ISR werden die Ports gesichert und danach wieder hergestellt. Aber ich weiß nicht wonach ich da genau suchen kann.

    Evtl. liegt es ja auch an was ganz anderem?

    Anbei der Quellcode.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo stefan-tiger!

    Ich kann Dir leider nicht helfen, weil ich C nicht kenne. Ich glaube aber, dass nach dem download Deines Quellcodes wird auch keiner Lust haben das zu formatieren. Schau Dir mal das, bitte, an. Normaleweise postet man sowas mit Code, was die Formatierung nicht vernichtet.

    MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Was meinst du? Der Quellcode ist jednefalls lesbar eingerückt.
    Wenn ich es von hier herunterlade und in kwrite aufmache kann ich es wunderbar lesen.
    Ich kann aber auch Assemblercode anhängen.

    Ich habe das Problem glaub ich gelöst, bin dann aber auf ein anderes gestoßen, was ich mir nicht erlären kann.

    Zuerstmal die Lösung: Es wurde nichts gerettet, hatte das Schlüsselwort "interrupt" für den SDCC nicht richtig eingesetzt.
    Im Anhang die neue Version wo man es sieht.

    Das andere Problem: Wenn ich ohne Interrupts arbeite, also ein Delay mit geschachtelten for-Schleifen benutzte, dann sind bei Fosc=48 MHz drei geschachtelte for-Schleifen die von 0 bis 80 laufen grob ne halbe Sekunde lang. (Es sind dann ca. 80^3 * 10 Maschinen-Befehle. läßt sich gut nachrechnen)

    Wenn ich den Timer benutz, wie im Anhang zu sehen, dann wird der PIC aufeinmal sauschnell. Ich muss dann diedrei geschachtelten for-Schleifen von 0 bis 700 oder so laufen lassen um grob ne halbe Sekunde zu überbrücken.
    Das verstehe ich nicht. Ich weiss auch nicht wie ich es besser erklären soll. (siehe "#define DELAY" im C-Code)
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Ich klicke nur eifach auf "Download" und was dann kommt, ist für mich unbrauchbar. Ich bin zu faul um nachzudenken mit welchem Programm wird es vielleicht richtig formatiert.

    MfG

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Zitat Zitat von PICture
    Ich klicke nur eifach auf "Download" und was dann kommt, ist für mich unbrauchbar. Ich bin zu faul um nachzudenken mit welchem Programm wird es vielleicht richtig formatiert.

    MfG
    Das hat doch nichts mit dem Programm zu tun. Das sind ASCII-Dateien.

    Das einzige Problem könnte sein, wenn du es mit einem Editor anguckst, der Windows-Zeilenumbrüche erwartet.
    Dann sieht du alles in einer Zeile mit lauter Kästchen drin und man kann es nur schwer lesen.
    Das kommt vor wenn man z.B. den Editor/Notepad von Windows verwendet.
    Wordpad macht es glaube richtig.
    Mit welchem Programm hast du versucht es zu öffnen?

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Das weiss ich nicht, wie gesagt nur auf "Download" geklickt. Ich weiss wirklich nicht (wozu sollte ich eigentlich wissen) was der Windows XP dafür nimmt. Warum erwartest Du von Forum-Benutzer, dass sie sich bemühen werden um Deine Dateien versuchen zu öffnen?

    MfG

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Zitat Zitat von PICture
    Das weiss ich nicht, wie gesagt nur auf "Download" geklickt. Ich weiss wirklich nicht (wozu sollte ich eigentlich wissen) was der Windows XP dafür nimmt. Warum erwartest Du von Forum-Benutzer, dass sie sich bemühen werden um Deine Dateien versuchen zu öffnen?

    MfG
    Also wenn du mir wirklich helfen wolltest, dann dürftest du nicht wegen an so etwas Unbedeutendem scheitern.
    Demnächst willst du auch noch daß meine Tabs nicht 8 sondern 4 Leerzeichen groß sind, wie?

    Ich werde keine Änderungen an den Dateien vornehmen, denn diese sind technisch in Ordnung.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Dieses Problem ist nun auch gelöst: Ich habe den SDCC auf Version 2.7.0 geupdated.

    Nun gehts mit Interrupt und DELAY 80 und damit ist alles plausibel

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo stefan-tiger!

    Das freut mich sehr, das Du es allein geschafft hast. Manchmal ändert sich etwas, was eigentlich schwer logisch zum Erklären ist, so wie diesmal bei Dir. Auf sowas würde ich wachrscheinlich gar nicht denken.

    Wünsche Dir noch viel Spass und Erfolg mit PICs !

    MfG

Berechtigungen

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

12V Akku bauen