Hi,
ich habe da grad ein seltsames Problem entdeckt. Ich habe einen
Charlieplexer und noch 4 weitere LEDs dran hängen die ich als Lauflicht
betreiben möchte. Über den ADC stell ich die Lauflichtgeschwindigkeit
ein. Wenn ich bestimmte Werte einstelle kommt das irgendwie dem
Charlieplexingalgorithmus in die Quere und eine LED Gruppe flackert
dann.
Ich hab mich natürlich gefragt was das soll und den Fehler systematisch
eingegrenzt bis ich auf folgendes gestoßen bin:
vor der main-function:
1 | volatile uint8_t adc_lights;
|
in der main-function:
Nur durch das Belegen der Variable mit ADCH fängt das Programm an zu
spinnen. Ich hab keine Ahnung warum. Das Lauflicht funktioniert unter
diesen Umständen übrigens auch nicht.
Wenn ich die Variable nun überall in adc_light, also ohne das s am
ende, umbenenne, dann funktioniert alles prima.
Ist das ein Bug im Compiler? Die Codegröße verändert sich dabei auch
nicht.
Wenn ich mir das Assembler-file anschaue fällt an der stelle in der main
folgendes auf:
in der lights-version:
128: 80 93 9e 00 sts 0x009E, r24
in der light-version:
128: 80 93 9a 00 sts 0x009A, r24
wieso nimmt er hier denn eine andere speicherposition?
mit anderen optimierunggstufen gibt es den gleichen flacker-effekt.
lg PoWl