Forum: Mikrocontroller und Digitale Elektronik Typumwandlung long nach int


von Tobias (Gast)


Lesenswert?

Halo habe eine Frage für das Programmieren von Mikrocontrollern in C.
Benutze einen 16bit Controller.
Habe einen Timerwert der 16bit breit ist.
Nun kommt es im programm vor das ich zwei Timerwerte addieren muß, diese 
können dann natürlich größer werden als int also habe ich ie vARIABLE 
in die addiert wird als long ausgelegt.
Nun muß ich diese Variable aber wieder als Integer haben wie stelle ich 
das an ?

von crazy horse (Gast)


Lesenswert?

das geht natürlich nicht ohne Informationsverlust.
Entweder benutzt du nur die unteren 16bit (dass passiert automatisch, 
wenn du die long-Variable in eine Int-Variable schreibst), oder du 
teilst vorher durch 2 (>>1).
Warum muss es denn wieder eine Int-Zahl sein?

von Tobias (Gast)


Lesenswert?

Also mein großes problem ich möchte eine frequenzmessung aufbauen. Nutze 
dazu die Input Capture Unit.
Bei jedem Interrupt soll der Aktuelle Timerwert in den Speicher 
geschrieben werden, welcher 5 Speicherplätze hat.
Dann bilde ich von diesen Werten differenzen und mittel anschließend.
Darauf folgt die übertragung per Can. das prozedere finktioniert schon 
für meine ADC Messwerte aber nicht bei der ICU. Gebe schon feste werte 
zum speicher an, wo ja eigentlich am Ende Null bei rumkommen müsste!
Aber es kommen ewig unheimlich große Zahlen dabei rum nur Schwachsinn 
und ich weiß nicht nmehr weiter.

von crazy horse (Gast)


Lesenswert?

na, das ist doch gar kein Problem:
Bei jeder Messung bildest du direkt die Differenz aktueller_Timerstand - 
letzter_Timerstand. Das ergibt in jedem Fall eine Int-Zahl, die auch 
dann richtig ist, wenn zwischenzeitlich der Timer einmal überläuft. Die 
Differenzen speicherst du in einem Int-Feld. Dann die letzten 5 als long 
addieren, anschliessend durch 5 teilen, dann hast du wieder eine Zahl, 
die nie grösser als 65535 ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.