mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Probleme beim LPC2148


Autor: GEO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, habe beim Arm LPC2148 Interrupt Probleme.
Ich benutze 5 verschiedene Interrupts.
2 zum Impulse zählen. Hier muss ich möglichst viele Impulse zählen
können.
Und dann noch 2 Timerinterrups alle 2 Sekunden und einen SPI Interrupt
der ab und zu zum auslesen eines Bausteins verwendet wird.

Programm ist wie folgt aufgebaut.
Es werden während der 2 Timer jeweils per Interrupt die aufgetretenen
Impulse gezählt.

Bei einer leeren while(1)-Schleife ohne kann ich Impulse mit einer sehr
hohen Frequenz zählen. (jeweils bis ca. 100 kHz)
Bei der fertigen while(1)-Schleife mit Displayausgabe und
Rechenoperationen habe ich jetzt mit den Interrupts Probleme und der
Kontroller hängt sich schon bei kleinen Impulsfrequenzen ( ca.20Hz)
komplett auf.

Sollte ich Priorisierte Interrupts verwenden?
Die Timer und SPI Interrups treten im Vergleich zu den EINT aber sehr
selten auf und sollte nicht das Problem sein.
Sollte der Stack vergrößert werden, weil vielleicht rücksprungadressen
nach dem Interrupt verloren gegangen sind?

An was kann es liegen dass sich der Kontroller mit den Interrupts
aufhängt? Ohne habe ich keine Probleme!

MfG
GEO

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage, warum die Pulse nicht mit einem Timer Eingang zaehlen? Die haben
einen Modus mit dem externe Pulse gezaehlt werden koennen. Das sollte
bis in den MHz Bereich moeglich sein.

Mal versuchen die Zaehlinterrupts im VIC auf hoehere Prioritaet zu
legen und die Application Note "Nested Interupts" zu Gemuete fuehren.

http://www.semiconductors.philips.com/acrobat_down...

hth (hope that helps) Robert

Autor: GEO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe auch überlegt die Impulse über den Timer zu zählen.
Problem ist aber, dass ich 2 verschiedene Impulsquellen habe, die
zeitgleich und getrennt gezählt werden müssen.
Mit deinem Vorschlag, den ich auch in Erwägung gezogen habe, fehlt mir
aber dann die Zeitreferenz. (oder täusche ich mich)
Werde es mal mit Prioritäten versuchen und die Application note lesen.
vielen Dank für die Tips.

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hab ich wohl was uebersehen / nicht richtig verstanden. Die Pulse
sollen nicht nur gezaehlt, sondern auch gemessen werde?  Dann brauchst
Du tatsaechlich den Interrupt. Also vermutlich nimmst Du die Capture
Eingaenge und der Timerstand wird bei der FLanke ins Capture Register
uebernommen, dann in der Interrupt Routine fuer Capture wird der
Timerstand ausgelesen?  Hab ich das jetzt in etwa verstanden?

Was passiert eigentlich in Deiner Anwednung wenn Du einen Puls nicht
mitbekommst? Einfach so aus Neugierde, was ist denn die Anwendung?

Robert

Autor: GEO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anwendung ist das Messen zweier Umdrehungen.(Motor, einmal bis ca
6000 RPM und einmal bis 1000RPM über Hallimpulse)
Wenn manche Impulse fehlen ist es nicht so schlimm.

Du hast gerade die andere Möglichkeit genannt, die ich nicht verwende.
Ich starte einen Timer (z.B.: 2 Sec) zähle in der Zwischenzeit alle
Interrupts und lese die gezählten Interrupts aus. So hab ich dann alle
Impulse während der 2 Sekunden.

Meine Möglichkeit habe ich genommen, um schon eine kleine Rundung der
Impulse über der Zeit zu haben.
Bei deiner habe ich ja bei jedem Impuls einen anderen Timerstand und
müsste hier dann einige mitteln.

Wäre die Frage, ob deine Möglichkeit stabiler wäre?
Anzahl der Auftretenden Interrups wäre in etwa ja gleich, da die 2
Timerinterrups ja nur alle 2 secunden auftreten.

Probiers heut oder morgen auf jeden Fall mal mit priorisierten
Interrups.

Nochmal Danke für die Hilfe.

Autor: GEO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Frage wg. Priorisierung und dem nested interrupt Problem.
Welche Interrups sollten die höchste Priorität bekommen, wenn jetzt,
wie hier es nicht so eintscheidend ist, wenn einer verloren geht.
Sollte dann der seltenste die höchste Prioritöt bekommen, weil dieser
ja sonst am öftesten unterbrochen würde (wg. nested Interrupt Problem).
Oder genau anders herum?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.