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.
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.
Machs mal so: unsigned long tmp = PWM_PERIOD - ((intensity*PWM_PERIOD) / 100); Stimmt zwar auch nicht ganz, sollte aber besser treffen ...
Hihih ja stimmt! Da würde er ja nie etwas anderes raus bekommen! Ich war zwar auf der richtigen Spur, jedoch habe ich den Fehler einfach nicht gesehen!!! Danke für eure Hilfe!!!
Besser du castest intensity als unsigned long.
1 | unsigned long tmp = PWM_PERIOD - ((unsigned long)intensity*PWM_PERIOD) / 100); |
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.
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.