Overflow : "Grundlagenfragen"

Gast #685960
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
Gast #685977
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
Gast #685986
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
Gast #685993
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.
Gast #685997
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.
#686050
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
Gast #686501
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
Gast #686533
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren