Hallo,
ich probiere gerade die Touch Sensing Library von st mit dem STM8S
Discovery Board aus.
Leider habe ich ein Problem und hoffe nun, dass mir hier jemand helfen
kann.
Ich möchte eine LED dimmen, also solange der Finger den Key berührt,
soll die LED dunkler werden und wenn man den Finger wegnimmt soll die
Lichtstärke dann so bleiben.
Aber wenn man das Touch Pad berührt, fängt die LED zwar an zu Dimmen,
aber wenn man den Finger weg nimmt, wird weiter gedimmt.
Ich denke dass der Programmcode in einer Endlosschleife landet (die
Zeile habe ich mit einem Pfeil markiert) und dass es wahrscheinlich an
dem
TSL_GlobalSetting.b.CHANGED-Flag liegt.
Benutze ich ein falsches Flag oder wird das Flag erst an einer späteren
Stelle aktualisiert? Oder ist irgendetwas anderes im Code falsch? Oder
gibt es eine andere Möglichkeit mit TSL und dem Discovery board LED
dimming zu implementieren?
Hier sind die Funktionen:
1 | void ExtraCode_StateMachine(void)
|
2 | {
|
3 | if (TSL_GlobalSetting.b.CHANGED)
|
4 | {
|
5 | TSL_GlobalSetting.b.CHANGED = 0;
|
6 |
|
7 | if (sSCKeyInfo[0].Setting.b.DETECTED)
|
8 | {
|
9 | GPIO_WriteHigh(GPIOD, GPIO_PIN_0);
|
10 | TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 999, TIM3_OCPOLARITY_HIGH);
|
11 | while(TSL_GlobalSetting.b.CHANGED==0)<---------
|
12 | {
|
13 | if (TSL_Tick_Flags.b.User_Flag_100ms == 1)
|
14 | {
|
15 | Delay(&Dim, 1*MilliSec);
|
16 | }
|
17 | }
|
18 | }
|
19 | else
|
20 | {
|
21 | GPIO_WriteLow(GPIOD, GPIO_PIN_0);
|
22 | }
|
23 | }
|
24 | }
|
25 |
|
26 | void Delay(void action(void), int NumberofTIMCycles)
|
27 | {
|
28 | if ((CheckFlag) != 0)
|
29 | NumberOfStart = NumberofTIMCycles;
|
30 | if (NumberOfStart != 0)
|
31 | {
|
32 | TSL_Tick_Flags.b.User_Start_100ms = 1;
|
33 | CheckFlag = 0;
|
34 | }
|
35 | if (TSL_Tick_Flags.b.User_Flag_100ms)
|
36 | {
|
37 | TSL_Tick_Flags.b.User_Flag_100ms = 0;
|
38 | NumberOfStart--;
|
39 | }
|
40 | if (NumberOfStart == 0)
|
41 | {
|
42 | action();
|
43 | CheckFlag = 1;
|
44 | }
|
45 | }
|
46 |
|
47 | void Dim (void)
|
48 | {
|
49 | u16 pwm=0;
|
50 | if (dimming>20)
|
51 | {
|
52 | pwm=dimming-20;
|
53 | dimming=pwm;
|
54 | }
|
55 | TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, dimming, TIM3_OCPOLARITY_HIGH);
|
56 | }
|
Lg,
rem