www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt nach 5 min Timer1?


Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe mit meinem Pic 16F877 folgendes Problem.

Ich sollte mittels Timer1 einen Interrupt nach 5 min auslösen.

Timer1 16 bit von 0000 bis FFFF    (65535)

Ich habe einen 4 MHz Quarz, interner Takt daher 1 Mhz

prescale = 1:8 (T1Con)

==> 1MHz / 8 = 125 kHz

Periodendauer bei 125 kHz = 0,008 ms

0,008 ms * 65535 =  0,5.. sek.

Wie komme ich jezt auf meine 5 min ohne weitere externe Beschaltung?

bzw. wo liegt mein Fehler?

Bitte helft mir

Mfg Bernhard

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun du hast einen µC. Die nobelste Aufgabe eines µC ist zu rechnen.
Und die einfachste Rechnung ist immer noch das Erhöhen einer
Variablen um 1 und vergleichen ob eine bestimmte Zahl erreicht
wurde.

Dazu noch folgender Hinweis: Wenn du 6 mal 10 Sekunden abwartest,
dann hast du in Summe auch 1 Minute gewartet, obwohl du immer
nur 10 Sekunden abgewartet hast.

Wenn du also 600 mal 0.5 Sekunden wartest, hast du in Summe
5 Minuten gewartet.

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Karl Heinz

Natürlich könnte ich jetzt 5oo interrupts ignorieren und dann auf denn 
501 sten reagieren aber ich suche nach einer schöneren Methode, dieses 
Problem zu lösen. Weiters hat der Pic wärend dieser Zeit andere, sehr 
sensible Aufgaben (AD wandlungen) zu erledigen, bei denen er nicht 
gestört werden sollte.

Trotzdem Danke für deine Antwort.

Autor: Andreas Denk (dandy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich kenne mich jetzt mit pics nicht so aus, aber wenn der interne takt 
nur 125 KHz beträgt und du damit den 16 bit timer taktest, also alle 
0,008 sek ( nicht ms ) dann ergibt das mal 65535 sage und schreibe 
524,28 Sekunden.  Da 5 Minuten 300 Sekunden sind, also viieeell zu lang. 
Dein Fehler liegt erst mal in der Berechnung. Nun Setze den Timerwert 
entsprechend dass du auf 300 sek kommst ;)

Andy

Autor: Der Techniker (_techniker_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Praxis wird es Softwaremässig so gehandhabt, wie es Karl Heinz 
schon erklärte. Wenn du das nicht möchtest, bleibt dir nur noch eine 
Hardwarelösung..

Autor: Der Techniker (_techniker_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas:
125kHz => 0,000008s = 0,008ms

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard wrote:

> Natürlich könnte ich jetzt 5oo interrupts ignorieren und dann auf denn
> 501 sten reagieren aber ich suche nach einer schöneren Methode [...]

Du gewöhnst es dir besser ab, nullen mit 'o' zu schreiben. Das bringt 
dich beim Coden irgendwann zu diversen ärgernissen :)

Das ist bereits die "schöne" Methode. Alles andere wäre hässlich. Die 
Timer eines Kontrollers sind in der Regel nicht dazu ausgelegt, solche 
Zeitspannen zu überbrücken.

> Problem zu lösen. Weiters hat der Pic wärend dieser Zeit andere, sehr
> sensible Aufgaben (AD wandlungen) zu erledigen, bei denen er nicht
> gestört werden sollte.

Alle 0,5sek unterbrochen zu werden, um ein SRAM-Register hochzuzählen, 
ist auch für einen mikrocontroller keine grosse Sache. Je nach 
Taktfrequenz sind das nur wenige usekunden, die dafür draufgehen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard (Gast)

>Natürlich könnte ich jetzt 5oo interrupts ignorieren und dann auf denn
>501 sten reagieren aber ich suche nach einer schöneren Methode, dieses

Diese Methode ist schön und weit verbreitet.

>Problem zu lösen. Weiters hat der Pic wärend dieser Zeit andere, sehr
>sensible Aufgaben (AD wandlungen) zu erledigen, bei denen er nicht
>gestört werden sollte.

Ach, das Sensibelchen ;-)
Wenn die Programmierung halbwegs was taugt, dann spielen die 500 
Interrupts KEINE Rolle. Siehe Sleep Mode.

MFG
Falk

Autor: Andreas Denk (dandy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah sorry, die doofen nullen. hab durch 125 statt 125000 geteilt. nehm 
alles zurück und behaupte das gegenteil gg

Autor: 2923 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der ADC ja schon arbeitet, kann der doch noch nebenher eine 
Variable incrementieren und vergleichen.

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für euere Antworten.

Diese 500 Interrupts zu ignorieren gefällt mir irgendwie nicht ganz.

aber über einen zusätzlichen Quarz ( ca 50 Hz) müsste is doch ebenfalls 
zu realisieren sein oder?

mfg Bernhard Schwärzler

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein 50Hz Quarz?!?

Sag mir bescheid, wenn du einen Gefunden hast.

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...damit musst Du auch "Interrupts ignorieren", was hast Du denn davon ?

Frank

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard (Gast)

>Diese 500 Interrupts zu ignorieren gefällt mir irgendwie nicht ganz.

Dann denk nochmal drüber nach. Und rechne mal aus wie lange dein PIC mit 
dem Interrupt "beschäftigt" ist.

>aber über einen zusätzlichen Quarz ( ca 50 Hz) müsste is doch ebenfalls
>zu realisieren sein oder?

AUA!

MFG
Falk

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...mal ehrlich: es ist quatsch. Zwei interrupts pro Sekunde steckt der 
Mikrocontroller ganz locker weg. Die dürften überhaupt nicht zu spüren 
sein, selbst wenn der Kontroller unter volllast steht würde.

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok LC Oszillator*gg*

Autor: Wiesi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du Timer mit Ausgang und Eingang hast, dann könntest du die beiden 
durch eine externe Drahtbrücke kaskadieren. Allerdings halte ich das für 
eine wirklich hässliche Lösung.
   Wiesi

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder paar 74HC93 Zählerbausteine um den externen Takt runterzuteilen und 
dann auf´n ext. Int

duck und wech

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard wrote:
> ok LC Oszillator*gg*

Nimm doch gleich eine Astabile Kippstufe mitm TimerIC (z.B. NE555), 
dessen ausgang du einfach auf einen INTx-Eingang legst.  Wenn du die 
Stufe so dimensionierst, daß sie nur alle 2,5min den Zustand wechselt, 
brauchst du garnicht mehr zu zählen.

Autor: Maximilian K. (laplace)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einem Großteil aller µProzessor-Systeme ist es üblich ein Timermodul 
zu realisieren. Das ist dann nichts anderes als ein Timer-Interrupt, der 
eine Varialble hochzählt und anschließend vergleicht, ob beim aktuellen 
Wert eine Funktion ausgeführt werden soll. Auf diese Weise kannst du dir 
beliebig viele Timer realisieren.

Wenn du also einen 10 ms Timer-Interrupt hast und eine 16Bit-Variable 
kannst du dir Timer mit einer Dauer von fast 11 Minuten (65536 * 10ms) 
mit einer Genauigkeit von 10ms realisieren. So ungefähr machen das auch 
die meisten Betriebssysteme.

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.