Touch Sensing Library - STM8S Discovery - LED dimming

Gast #1772042
Lesenswert?

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

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