Falsches Ergebnis!

#2115653
Lesenswert?

Hallo Leute,

ich komme hier nicht ganz drauf warum das nicht funktioniert!!!

#define PWM_PERIOD 100
unsigned char intensity = 100; // Change 0 - 100

unsigned long tmp = PWM_PERIOD - ((intensity / 100)*PWM_PERIOD);


Warum kommt bei mir immer 0 oder 100 als Ergebnis raus? So wie ich die 
variable intensity auf 99 stelle liefert er mir das Ergebnis 100!


Anwendung findet das ganze bei der PWM Berechnung für das Dimmen einer 
LED. Schreibe ich die Werte 0-100 in das entsprechende register 
funktioniert das ganze toll. Jedoch nicht mit der oben gezeigten 
berechnung.
Gast #2115679
Lesenswert?

Florian Müller schrieb:
> Hallo Leute,
>
> ich komme hier nicht ganz drauf warum das nicht funktioniert!!!
>
> #define PWM_PERIOD 100
> unsigned char intensity = 100; // Change 0 - 100
>
> unsigned long tmp = PWM_PERIOD - ((intensity / 100)*PWM_PERIOD);
>
>
> Warum kommt bei mir immer 0 oder 100 als Ergebnis raus?

Was erwartest du denn für ein Ergebnis, wenn intensity z.B. 50 ist? Was 
ist 50/100? Beachte: Das Ergebnis muß eine ganze Zahl sein.
Gast #2115968
Lesenswert?

Solange intensity immer im Bereich 0 bis 100 bleibt und PWM_PERIOD nicht 
signifikant größer wird, ist das schon ok. Man muß nur bedenken, daß die 
Berechnung mit int durchgeführt wird, also je nach Prozessortyp evtl. 
nur mit 16 Bit.

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