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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.