www.mikrocontroller.net

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


Autor: rem (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
void ExtraCode_StateMachine(void)
{
  if (TSL_GlobalSetting.b.CHANGED)
  {
    TSL_GlobalSetting.b.CHANGED = 0;

    if (sSCKeyInfo[0].Setting.b.DETECTED)
    {
      GPIO_WriteHigh(GPIOD, GPIO_PIN_0); 
      TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 999, TIM3_OCPOLARITY_HIGH);
      while(TSL_GlobalSetting.b.CHANGED==0)<---------
      {
        if (TSL_Tick_Flags.b.User_Flag_100ms == 1)
         {
           Delay(&Dim, 1*MilliSec);
         }
      }
    }
  else
   {
   GPIO_WriteLow(GPIOD, GPIO_PIN_0);
  }
  }
}

void Delay(void action(void), int NumberofTIMCycles)
{
  if ((CheckFlag) != 0)
    NumberOfStart = NumberofTIMCycles;
  if (NumberOfStart != 0)
  {
    TSL_Tick_Flags.b.User_Start_100ms = 1;
    CheckFlag = 0;
  }
  if (TSL_Tick_Flags.b.User_Flag_100ms)
  {
    TSL_Tick_Flags.b.User_Flag_100ms = 0;
    NumberOfStart--;
  }
  if (NumberOfStart == 0)
  {
    action();
    CheckFlag = 1;
  }
}

void Dim (void)
{
 u16 pwm=0;
 if (dimming>20)
  {
    pwm=dimming-20;
    dimming=pwm;
  }
 TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, dimming, TIM3_OCPOLARITY_HIGH);
}


Lg,
rem

Autor: rem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Problem nun anders gelöst!

Gruß,
rem

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.