Forum: PC-Programmierung Taster als Schalter programmieren


von Mehdi S. (snoor)


Lesenswert?

Hallo ,

wie kann ich einen Taster als Schalter mit C programmieren

einmal nach loslassen wird dann den Taster False , von daher wollte ich 
halt dass das LED nachdem loslassen trotzdem leuchtet wird

mein Code sieht momentan so aus

ST1,ST2,ST3 sind Schalter
L1,L2 sind LED
L3,L4 sind LEDs für Zustände


#include <bur/plctypes.h>

#ifdef _DEFAULT_INCLUDES
  #include <AsDefault.h>
#endif

void _INIT ProgramInit(void)
{
  Z =1000;
}

void _CYCLIC ProgramCyclic(void)
{

  counter++;
  counter2++;
  counter3++;
  counter4++;

 if(ST1 == 1 && counter < Z ){
    ST1 = !ST1
    L1 = 1 ;
    L2 = 0;
    L4=0;
  }

  else if ( counter3 > Z+1){
    L3 =1;
    L4 =0;
  }

  else {
    L1 = 0;
    L3= 0;

  }


  if(ST1 == 0 && counter > Z){
    L1=0;
    counter=0;
    counter3=0;

  }

 /*********************************************************************** 
************************************************************************ 
**********/


  if(ST2 == 1 && counter2 < Z ){
       L2 = 1 ;
    L1 = 0 ;
    L3=0;

  }
  else if ( counter4 > Z+1 ){
    L4 =1;
    L3=0;

  }
  else {
    L2 = 0 ;
    L4=0;

  }


  if(ST2 == 0 && counter2 > Z){
    L2=0;
    counter2=0;
    counter4=0;

  }

/*********************************************************************** 
************************************************************************ 
**********/


  if(ST3 == 1 ){
    counter2 = Z+1;
    counter = Z+1;
    L3 = 0;
    L4=0;
  }

}


void _EXIT ProgramExit(void)
{


}

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Geil, welche Programmierumgebung soll das sein ?

Und warum nicht einfach mal Z auf 999 setzen ?

Taster heisst entprellen, das geht so:

https://www.mikrocontroller.net/articles/Entprellung

Dann hätte man erst mal eine Grundlage.

von Mehdi S. (snoor)


Lesenswert?

B&R Automation Studio

Danke dir

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Michael B. schrieb:
> Geil, welche Programmierumgebung soll das sein ?

Ist irgendwas mit SPS. Da müsste man erst mal wissen ob es da ein OS 
gibt oder ob das eine Freestanding-Umgebung ist. Dann noch welche 
Bibliotheken es gibt.

von PittyJ (Gast)


Lesenswert?

Wenn ich etwas nicht verstehe, versuche ich das Problem zu reduzieren.
Also statt 3 Schalter nur einen. Und statt 4 LEDs nur eine.
Dann wird der Code übersichtlicher, und man kann evtl verstehen, was da 
passiert (bzw nicht).

Erst wenn das läuft wird der Schritt von 1 auf N gemacht.
Das könnte man dann auch in Funktionen abstrahieren, so mit Parametern 
und so.

von Mehdi S. (snoor)


Lesenswert?

Ja ich versuche erstmal nur bei einer LED
Danke

von Manfred (Gast)


Lesenswert?

Mehdi S. schrieb:
> wie kann ich einen Taster als Schalter mit C programmieren

Das Zauberwort heiß "Merker" oder "Flag".

Wenn Merker = 0 und Taster = 1 dann
  setze Merker auf 1
  mache LED an

Wenn Merker = 1 und Taster = 1 dann
  setze Merker auf 0
  mache LED aus

Und das im Dauerlauf immer im Kreis. Damit der µC nicht unnötig glüht, 
noch 100 oder 200 ms Pause dazwischen.

Und, natürlich, wie  Michael B. schrieb, die Tasterabfrage entprellen, 
sonst gibt das Zufallsergebnisse.

von Rolf M. (rmagnus)


Lesenswert?

Manfred schrieb:
> Wenn Merker = 0 und Taster = 1 dann
>   setze Merker auf 1
>   mache LED an
>
> Wenn Merker = 1 und Taster = 1 dann
>   setze Merker auf 0
>   mache LED aus
>
> Und das im Dauerlauf immer im Kreis.

Dann wechselt die LED ständig zwischen an und aus, solange man auf dem 
Taster ist. So etwas hat man früher als Zufallsgenerator genutzt.
Man muss beim Taster auf die Flanke reagieren, also den Wechsel von 0 
nach 1. Das macht man, indem man sich den vorherigen Stand des Tasters 
merkt und nur reagiert, wenn der 0 und der neue Zustand 1 ist.

von Martin V. (oldmax)


Lesenswert?

Hi
Rolf M. schrieb:
> Dann wechselt die LED ständig zwischen an und aus, solange man auf dem
> Taster ist. So etwas hat man früher als Zufallsgenerator genutzt.
> Man muss beim Taster auf die Flanke reagieren, also den Wechsel von 0
> nach 1. Das macht man, indem man sich den vorherigen Stand des Tasters
> merkt und nur reagiert, wenn der 0 und der neue Zustand 1 ist.
Richtig.
Allerdings kann ich das nicht in C erklären, aber mal versuchen, zu 
beschreiben. Da ich mit Assembler arbeite, kann das etwas Assembler 
lastig sein.
Zuerst entprellen. Dazu brauchst du einen Zähler, der von X nach Null 
zählt, eine Variable "Alt-In" und eine "Neu-In". "Alt-In" setzt du auf 
0, in "Neu-In" schreibst du den eingelesen Port. Danach ein 
Exclusiv-Oder auf die beiden Variablen. Bekommst du als Ergebnis eine 1, 
dann sind beide unterschiedlich und du setzt den Zähler wieder auf einen 
Startwert, z.B. auf 15 und überträgst den neuen Zustand in die Variable 
"Alt-In". Bekommst du eine 0, also beide Variablen sind gleich, 
decrementierst du den Zähler und wenn du bei 0 bist, erklärst du den 
Eingangszustand für gültig. Dazu  brauchst du wieder eine Variable, z.B. 
"Status-Neu". Für die Flankenerfassung brauchst du auch einen alten 
Zustand und dafür eine Variable, z.B. "Status-Alt". "Status-Alt" wird am 
Anfang ebenfalls mit 0 initialisiert.
Die Flankenauswertung wird nun auch mit einer Exclusiv-Oder Verknüpfung 
der beiden Variablen durchgeführt. Erhälst du eine 1 hat sich der 
Zustand geändert. Eine Und-Verknüpfung von Ergebnis und "Status-Neu" 
ergibt eine steigende Flanke, von Ergebnis und "Status-Alt" eine 
fallende Flanke. Das Ergebnis schreibst du in entsprechende 
Flankenmerker, z. B. "Flanke_0" oder "Flanke_1". Anschließend überträgt 
du "Status-Neu" nach "Status-Alt". Nun kannst du in deinem Programm auf 
die Flankenmerker zugreifen und wenn einer gesetzt ist, die Bearbeitung 
ausführen und den Merker löschen.
Ich hoffe, das ist verständlich.
Gruß oldmax

: Bearbeitet durch User
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Manfred schrieb:
> Und, natürlich, wie  Michael B. schrieb, die Tasterabfrage entprellen,
> sonst gibt das Zufallsergebnisse.

Woher willst du wissen ob nicht schon die Hardware oder die 
Laufzeitumgebung (OS oder Bibliothek) dieser SPS das erledigt? Ohne 
Details was es bereits auf dem Hobel gibt ist das alles Spekulation.

von MaWin (Gast)


Lesenswert?

Im AutomationStudio kann man ds Entprwllen in der Hw config einstellen.
Flankenmerker und Xor verwenden.

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.