www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Overflow : "Grundlagenfragen"


Autor: HArdware'Ling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich arbeite mit einem 32 bit TriCore von Infineon und habe mal eine 
Frage über dessen Timer/Counter Register(mit der name: System Timer 
STM):

der STM von Infineon ist ein 56 bit Timer, besteht aus 7 REGISTER 
(TIM_T0 bis TIMER_T6) jeweils 32 bits groß

der TIMER_T6: hat eine Auflösung von 2,863 min und bei 25Mhz eine RANGE 
von 91,6 Jahr.

mein Problem:
ich will eine Routine schreiben, mit der ich auch secunden darstellen 
kann, aber nur mit TIMER_6 weil 91,6 Jahr bis zum Overflow!!!

--> geht doch wenn ich wenn ich einfach den Inhalt von
    ([TIMER_6*Auflösung]*60)%60 hinschreibe oder?

--> nun sag mir mein betreuer: mit der gleichung hätte ich nicht ein
    kleinere Overflow als 91,6 Jahr!!!

Frage:
kann mir jemand das erklären? (der betreuer weiß auch nicht viel!!!)


MfG

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie du genau auf die Minuten und Jahres-Angabe kommst, kann ich mir so 
auf die schnell inicht erklären, aber allgemein gilt:

Du kannst 32 bit in deinem Timer darstellen. Um es mal einfacher zu 
machen, nehmen wir an, du kannst nur 4 bit darstelle. Wenn du deinen 
Timer jetzt mit 1 Hz taktest, beträgt deine Auflösung 1 s, ein Überlauf 
tritt nach 16 s auf. Wenn du denn Takt auf 2 Hz erhöhst, hast du eine 
Auflösung von 0,5 s, ein Überlauf tritt aber schon nach 8 s auf.

Wird dir das Prinzip klar? Du kannst mit deinem Timer nur bis 2^32 
zählen, danach tritt ein Überlauf auf. Der Timer fängt wiedr von 0 an.

Viele Grüße
Michael

Autor: HArdware'Ling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Auflösung und RANGE bekommst du mit DaVe(Infineon Software) brauchst nur 
ablesen!
trotzdem gibst du mir immer keine Antwort auf meine Frage!

Noch mal: ich habe ein 32 Bit Timer: Auflösung 2,863min Overflow nach 
91,6 Jahr!

ich will eine Routine schreiben um auch secunden darstellen zu können!

geht (dachte ich) mit: (((Inhalt des Timers)*auflösung)*60s)%60

Aber mir wurde gesagt ===> dadurch wird ein Overflow schneller 
auftretten!!!

und ich weiß nicht warum?

MfG

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal was heißt hier immer und überall keine Antwort auf deine Frage. 
Ich denke ich habe dir grade zum ersten Mal geantwortet!

Aber ich glaube ich verstehe jetzt, was du meinst: Du möchtest einfach 
die Anzeige auf Sekunden erweitern. Grundsätzlich ist das mit deiner 
obigen Formel möglich, wobei das natürlich wenig sinnvoll ist, da sich 
dein Timerwert und damit auch deine Sekundenanzeige nur alle 2,863 
Minuten ändern wird.

IMHO wenig sinnvoll.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da dein vorgeschlagener Weg wenig sinnvoll ist, müsstest du eigentlich 
deine Auflösung erhöhen (beispielsweise 10 s). Damit reduziert sich dann 
natürlich auch dein darstellbarer Zeitbereich. Wobei das in der Regel 
kein Problem ist, bei einem Overflow einen Zähler in Software 
mitzuzählen. Dadurch kannst du deinen Timer erweitern.

Autor: HArdware'Ling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
du verstehst mich einfach nicht!
trotzdem danke!

Autor: J. J. (j_j)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein du verstehst Zähler nicht.

Autor: Supa Micha (supa_micha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann noch mal ganz langsam für mich:

Wie möchtest du bei einer Timer-Auflösung von 2,863 Minuten eine 
Auflösung von Sekunden erreichen?

Autor: Supa Micha (supa_micha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huch...

anderer Rechner, bin jetzt übrigens angemeldet :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann natürlich alles ganz kompliziert machen.

Oder einfach so, wie man es auf anderen MCs macht:

Man nehme einen Timercompareinterrupt alle Sekunde, das sind dann bei 
25MHz genau 25000000 Zyklen.

Und in dem Timerinterrupt zählt man dann einfach in einer Variablen die 
Sekunden weiter.

Mit einer 32Bit-Variable kann man dann bis 136 Jahre zählen, sollte ja 
reichen.


Peter

Autor: HArdware'Ling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

anders gesagt mein Timer ist 56 bit lang! bestehend aus aus 2 
Register_Timer
TIMER_T0 & TIMER_T6

TIMER_T0 (bit 0-->31) : auflösung 40ns Overflow nach 2,863 min
TIMER_T6 (bit 31-->55): auflösung 2,863 min Overflow 91,6 Jahr!

wie kann ich den Inhalt der 56bit TIMER lesen?

MfG

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Iterativ. T6 lesen, T0 lesen, T6 nochmal lesen und mit vorigem Wert 
vergleichen. Wenn verschieden => nochmal das Ganze.

Autor: Supa Micha (supa_micha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag das doch gleich :-)Das hört sich ja schon ganz anders an.

Timerwert = Timer_T0 + Timer_T6*2^31

Dieser Wert ist dann deine Zeit als Vielfaches von 40ns.

Viele Grüße
Michael

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Timerwert = Timer_T0 + Timer_T6*2^31

2^31?

Autor: Supa Micha (supa_micha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe es so verstanden, dass sein Timer 56 bit breit ist und aus 
zwei Registern besteht, die nur einzeln ausgelesen werden können. 
Entsprechend meiner Formel oben setzt man sich dann den gesamten 
Timerwert aus den beiden einzelnen Registern wieder zusammen.

Autor: PAT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Langsam!

TIMER_T0 wie schon oben gesagtt! 32 Bit breit!
TIMER_T6 auch 32 bit breit wobei (bit an der stellen 2^25 --> 2^32 0 
sind)

mit deinem Compiler kannst nur bis unsigned long Typen handlen!

Nun sag mir konkret! wie du dir dass vorstellst?


MfG

Autor: Supa Micha (supa_micha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise gibt es beim Compiler auch den Datentyp unsigned long 
long, dieser ist entsprechend 64 bit breit.

Autor: HArdware'Ling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gib's keinen anderen Weg?

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.