- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: alle 250 ms Interrupt mit Timer2 auslösen - geht das?

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379

    alle 250 ms Interrupt mit Timer2 auslösen - geht das?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich möchte alle 250 ms ein Unterprogramm ausführen. Dabei ist weniger entscheidend, dass es exakt alle 250 ms aufgerufen wird, wohl aber, dass die Intervalle zwischen den Aufrufen gleich groß sind.
    Leider steht mir - und da lässt sich nichts ändern - nur noch der Timer2 zur Verfügung. Da es sich um einen 8bit Timer handelt, dachte ich zunächst, ein so großes zeitl. Intervall lässt sich nicht erzielen (mein M32 läuft mit 16MHz). Jetzt habe ich aber gelesen, dass Bascom für seine Softclock auch über Timer2 (beim M32) alle Sekunde einen Interrupt auslöst. Geht es also doch irgendwie so große Intervalle hinzubekommen? So wie ich jetzt gerechnet habe, komme ich mit prescale=1024 bei 16MHz auf einen max. Abstand von ca. 16.4 ms.
    In der Interrupt-Routine zu zählen und nur z.b. jeden 15ten Aufruf auch wirklich was zu tun, geht übrigens nicht, weil das, was ich in der Routine machen will, länger dauern würde, als der Abstand zwischen zwei Interrupts.
    Danke für alle Tipps!

    Malthy

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    06.03.2007
    Beiträge
    7
    nimmst Du halt einen EingangsPin mit Interrupt-Fähigkeit und baust Dir aus nem ATTiny oder analog einen externen "250ms Timer"?

    Ich nehme an, die Programmteile in der ISR sind zeitkritisch..

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo,

    das ist aber sehr unelegant... Wie macht das denn die Softclock von Bascom, oder habe ich da einfach nur etwas falsch verstanden?

    Viele Grüße,
    Malthy

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.03.2007
    Beiträge
    7
    Lies mal die Bascom - Hilfe zu CONFIG CLOCK - entweder wird ein externer (i2C)-baustein benutzt oder die "Softclock" braucht genauso einen timer, der Interrupt-Routinen feuern wird - nix für zeitkritische Sachen wie RS232 oder so..

    so wahnsinnig ist ja der externe Aufwand nicht, ein NE555 + 2 Bauteile oder eben ein ATTiny, oder was Dir noch einfällt..

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo papa_of_t!

    Ich weiss nicht genau, ob ich dich richtig verstanden habe, aber mir ist schon klar, dass die "softclock" einen Timer braucht - beim M32 meines Wissens eben Timer2. Mich wundert nur, dass die Softclock es mit diesem 8bit-Timer(!) schafft, nur alle 1000 ms einen Interrupt auszulösen (nämlich alle Sekunde das Unterprogramm "sectic" anspringt). Wenn das irgendwie softwaretechnisch möglich ist, möchte ich natürlich auf zusätzliche Hardware verzichten (zumal tatsächlich alle Ports meines AvRs belegt sind).

    Gruß,
    malthy

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Okay, ich glaube ich habe da etwas überlesen. Sehe ich es richtig, dass die Softclock einen zusätzlichen externen 32768 Hz Quarz benötigt? Das würde meine Frage beantworten

    malthy

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von malthy
    Okay, ich glaube ich habe da etwas überlesen. Sehe ich es richtig, dass die Softclock einen zusätzlichen externen 32768 Hz Quarz benötigt? Das würde meine Frage beantworten
    malthy
    denke ich auch, ich grübel gerade am selben Problem

    32.768 256 128,0000
    32.768 1024 32,0000

    entweder Vorteiler auf 256 oder 1024 dann würde das compare register mit 8-bit passend bei 128 oder 32 geladen werden....

    alle sec ein IRQ

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    man kanns auch umständlich machen.
    Geh doch einfach hin und zähle mit der ISR von Timer2 ne
    Bytevariable hoch und wenn eben der x-te Durchlauf vollzogen
    ist, dann führe deine Funktion aus.
    Du brauchst keine zusätzliche Hardware (NE555 etc.) und von der
    Präzision her kommste auch noch gut hin.

    Die Softclock läuft im Übrigen tatsächlich mit 32768KHz Quarz.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo Vitis,

    das geht leider nicht, weil das, was ich ausführen will, länger dauert, als der maximal möglicher Abstand zwischen zwei 8bit-Timer-Interrupts. Das hatte ich oben schon versucht zu sagen, war wohl etwas verschwommen . Habe mich mittlerweile damit abgefunden, dass es nicht geht, versuche das Problem anders zu lösen - aber auch ohne zusätzliche Hardware.

    Gruß,
    malthy

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Also die Hauptanwendung ist länger als die Interruptroutine
    oder die Interruptroutine ist länger als der Überlauf von nem 8-Bit-Timer
    mit Prescaler? ... Wenn letzteres der Fall ist würd ich von nem
    Programmierfehler ausgehen.
    Das macht man nämlich nicht, den Controller in nem Interrupt
    gefangen halten. Schau mal State machine
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests