Forum: Mikrocontroller und Digitale Elektronik Touch Sensing Library - STM8S Discovery - LED dimming


von rem (Gast)


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

von rem (Gast)


Lesenswert?

Habe das Problem nun anders gelöst!

Gruß,
rem

von A. M. (am85)


Lesenswert?

Auch, wenn der Thread jetzt schon über nen Monat alt ist, aber magst du 
deine Lösung bitte hier rein stellen? Das wird anderen mit dem gleichen 
Problem bestimmt helfen.

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
Noch kein Account? Hier anmelden.