mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Typumwandlung long nach int


Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.