Moin, Derzeit macht mir folgendes Problem Kopfzerbrechen: Ein Wert soll mit einer Auflösung von 16bit von 0..Max eingestellt werden. Leider scheint der übliche Weg über Multiplikation und anschließendes Schieben hier zu hakeln: uint32_t tmp= (MulH<<8) +MulL; //bilde 16bit Multiplikator X.Soll= (tmp * Max)>>16; X.Soll und Max sind uint16_t. Schon das Bilden des Multiplikators scheint zu mislingen, da MulH= 0xFF und MulL= 0xFF bereits tmp= 0xFFFFFFFF ergibt... Für eine Idee wäre ich echt dankbar. Viele Grüße, Hendrik
Überlauf! Du musst MulH und MulL als uint32_t deklarieren
1 | uint32_t tmp= ( (uint32_t)MulH<<8) + (uint32_t)MulL; //bilde 16bit Multiplikator |
was für ein Typ ist MulH? uint8? dann gäbe (MulH<<8) für beliebige Werte immer 0x00, oder?
Henne wrote:
> MulL und MulH sind uint8.
Autsch! Dann siehe Matthias' Posting...
Danke, Mathias. Das hatte ich wirklch verpeilt... Der 2-Achsen DMX-Stepper läuft jetzt schon mal - fehlt noch Mikroschritt :-) Hendrik
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.