Schaltung spinnt nach Einbau in Gehäuse (PP-Rohr)

Gast #5588219
Lesenswert?

Hallo liebes Forum,

ich stehe vor einem Problem und kann mir keine Lösung zusammenreimen: 
Ich habe auf Lochraster eine kleine Schaltung aufgebaut, wird über 
Batterie versorgt. Über einen Pushbutton werden einfach ein paar LEDS 
geschaltet, nix aufregendes. Als Gehäuse für mein Gerät habe ich ein 
32mm PP-Abflußrohr genommen. Und ab hier wird es kurios: Packe ich die 
Schaltung in das Rohr, spinnt die Schaltung, nehme ich sie aus dem Rohr 
raus, läuft alles so, wie es soll. Die Schaltung spinnt auch nicht 
komplett, sondern interpretiert dann ein Tastendruck anscheinend als 
zwei, als wäre der Taster nicht entprellt, was ich aber softwaremäßig 
mache; habe jetzt eine Entprellzeit von ca. 60ms, aber es hilft nicht. 
Nehme ich das Rohr (welches die Platine auch nirgends berührt!) wieder 
weg, läuft alles so, wie es soll, also meine Billo-Entprellroutine 
funktioniert da einwandfrei.
Kann irgendwer mit mir rumrätseln, was da los ist..?
Leider ist die Kamera von meinem Telefon kaputt und ich kann euch keine 
Fotos schicken...
Bin ratlos und über jeden Tip dankbar...
Gast #5588249
Lesenswert?

Oh, danke für die schnellen Antworten, es wird wohl die statische 
Aufladung sein. Alle Pins sind belegt, ein Eingang mit internen Pullups 
(Attiny45). Kann ich das Rohr einfach mit meinem Ground verbinden? 
(Nichtlackiertes) Heizungsrohr hat nicht geholfen... Sonst wohl den 
Eingang extern beschalten...
Muss kurz weg, bin in halber Stunde wieder da.
Bis gleich und DANKE!
Angehängte Dateien:
#5588470
Lesenswert?

Hallo Claudia,

ich würde am Taster 10kOhm nach Plus und 10nF nach Masse schalten. 
Außerdem 100 Ohm in Reihe zum Eingang. Den internen Pull Up ausschalten.

Der Microcontroller ist CMOS, deshalb braucht er 10nF Ceramic zwischen 
VDD und GND. Das liegt am komplementär MOS. Bei einer Push/Pull 
Schaltung wird theoretisch immer nur eine FET leitend. In der Praxis 
schalten für einen kurzen Augenblick beide gleichzeitig durch. Um die 
dadurch entstehende Stromspitzen auf der Versorgungsspannung zu 
vermeiden, muss der Kondensator so nahe wie möglich an die Pins. 
Vergisst man das, gibt das die ulkigsten Effekte ;-)

Grüße,
Andreas
#5588816
Lesenswert?

Claudia k. schrieb:
> Hat leider nur bei den ersten zwei Tests geholfen, jetzt wieder das
> gleiche Problem. Mist. Naja, probier ichs mal mit nem kleineren
> Widerstand und sonst Alufolie, wobei das auch nervt...
> Falls irgendwer noch ne andere Idee hat, i'm very open minded...

kalte Lötstelle?
es scheint mir komisch das es im ausgebuten Zustandfunktioniert, 
Verspannung beim Einbau?

Ich hatte das in meiner Industriezeit mit DIP Switches, auf dem ICT 
unter Vakuum mit Verbiegung arbeitete der Switch perfekt, in der 
Klimakammer fiel er aus, die Gehäuseschalen vom switch waren nicht 
passgenau zusammengefügt.
#5588821
Lesenswert?

Joachim B. schrieb:
> kalte Lötstelle?
> es scheint mir komisch das es im ausgebuten Zustandfunktioniert,
> Verspannung beim Einbau?

Da hatte ich auch daran gedacht. Wie wird die Platine im Rohr mechanisch 
gehalten? Wird sie verklemmt oder verbogen?

Claudia k. schrieb:
> Leider ist die Kamera von meinem Telefon kaputt

Keine richtige Kamera? Dann das Handy des Freunds / Kumpel /Partners?
Bitte Bildformate beachten.
Gast #5588907
Lesenswert?

also: ja, ist auf Lochraster aufgebaut. Habe allerdings drei Sück 
aufgebaut und durchprobiert, bei allen tritt das Problem auf. Auch nie 
direkt nachm Einbau sondern erst etwas später; Erst dachte ich auch, es 
wäre meine Entprellroutine, hab da alles mögliche durchprobiert und hat 
auch keine Abhilfe geschaffen. Dann dachte ich an die Befestigung und 
quasi das "Biegen" der Platine beim drücken des Tasters (denn sie "hing" 
quasi nur an der 5-poligen Stiftleiste, siehe Board oben). Hab dann 
Platine gegen das Biegen gesichert, auch keine Abhilfe. Gestern dann 
noch den Tip von Andreas B. ausprobiert (siehe Schaltplan). Auch da 
nochmal etwas mit Werten rumgespielt und C3 auch mal direkt an PB2 
gesetzt, hat alles nicht geholfen. Katze war auch keine in der Falle.
Hatte gestern Abend keine Alufolie (ist bei meiner Kamera), aber jetzt 
welche. Dann etwas Zeitungspapier um die Platine und dreimal Alufolie 
drum, et voila: läuft!
Ich hab die statische Aufladung in drei Versuchsrohren nicht 
wegbekommen. Ich hatte auch schonmal ein identisches Rohr als Gehäuse 
genommen, da wurde ein Taster und zwei Potis  ausgelesen, ohne 
großartige Sicherheitsmaßnahmen, das Gerät läuft bis heute ohne Probleme 
(ist aber auch von außen quasi von einem großen Schrumpfschlauch 
eingeschweißt).
Tatsächlich trat das Problem immer erst nach einer kurzen Weile auf. Und 
alle Jubeljahre hat es dann mal richtig funktioniert.
Also zumindest bei mir verschwand die statische Aufladung irgendwie 
nicht, oder kam vielleicht immer sehr schnell wieder, weil manchmal hat 
es ja funktioniert.
Vielen lieben Dank für das rege Interesse und auch für die teilweise 
weiterführenden Hinweise! Jetzt weiß ich endlich was CMOS wirklich 
bedeutet! Danke und schönen Tag euch allen!
Angehängte Dateien:
Gast #5588969
Lesenswert?

Noch während der Testreihe schonmal die Frage: Alufolie um die Platine 
wickeln hat ja schon recht ordentlich geholfen; Gilt da wohl eigentlich 
auch die "Viel hilft viel"-Devise? Denn hatte jetzt auch wieder einmal 
das gleiche Fehlerbild. Also mit Alufolie von außen um Rohr und dreifach 
um Platine ca.1 von 30 Versuchen schlecht...
#5588977
Lesenswert?

Claudia k. schrieb:
> sondern interpretiert dann ein Tastendruck anscheinend als
> zwei, als wäre der Taster nicht entprellt

Exakt so isses, ein Delay ist eben noch lange kein Entprellen.
Du nimmst zum Einlesen den externen Interrupt und das ist der Fehler. 
Wenn Du nach dem Delay den Interrupt wieder freigibst, hat der Preller 
schon lange das Interruptflag gesetzt und der nächste Interrupt wird 
ausgeführt. Daher erkennst Du immer 2 Tastendrücke.
Eine saubere Entprellung mit Timerinterrupt und Mehrfachabfrage macht 
diesen Fehler nicht.
Gast #5588986
Lesenswert?

Wirklich: habs hundertmal ohne Rohr probiert, NIE ein Fehler. Sobald das 
Rohr drum ist (ohne Berührung der Platine) tritt das Problem sofort auf 
(ohne Alufolie). Ist mir tatsächlich ein Rätsel, weil wie gesagt, hatte 
schonmal einen ähnlichen Aufbau, ging reibungslos.
Wie gesagt, verschiedene Platinen, verschiedene Rohre, verschiedene 
Led-Stränge. In allen Kombinationen: ohne Rohr bisher NIE einen Fehler, 
mit Rohr sehr häufig. Aber ich wills auch nicht auschließen, dass der 
Fehler woanders liegen könnte, hab da aber irgendwie schon alles, was 
mir einfällt, woran es noch liegen könnte, probiert. Probiere aber auch 
alle anderen erdenklichen Tips aus, bin auf gar keinen Fall 
beratungsresistent. Code jedoch würde ich tatsächlich ausschließen.
Ich mach mal Mittagspause und hol ne Kamera und schick dann endlich mal 
Fotos!
Gast #5589004
Lesenswert?

Peter D. schrieb:
> Eine saubere Entprellung mit Timerinterrupt und Mehrfachabfrage macht
> diesen Fehler nicht.

Entprellung läuft ohne Delay über Timer, NICHT über Tastengesteuertes 
Interrupt sondern über Abfrage ca. alle 20 ms (auch da schon diverse 
Werte ausprobiert.) Wird momentan dreifach abgefragt. Hab auch schon 
fünfach abgefragt und was weiß ich ausprobiert, es ist nicht die 
Entprellroutine. Wie gesagt, ich mach mal Pause, ich kann dann auch 
meinen Code posten, aber da wird der Fehler nicht liegen. Weil eben eine 
mehr als signifikante Verbesserung nach der Alufolie auftrat. Und NIE 
ein Fehler ausserhalb des Rohres, mit allen möglichen Versuchen, blöde 
zu drücken.
Essen, Fotos, Code. Und danke für eure Mithilfe.
#5589044
Lesenswert?

Ich würde die Alufolie innen vollflächig aufs Rohr kleben. Dann kann 
sich innen schon mal überhaupt keine Ladung aufbauen. Außen angebracht, 
könnten sich innen immer noch unterschiedliche Ladungsbereiche auf der 
Plaste bilden.

Ich glaue aber auch nicht mehr dran, das es daran liegt. Nicht nach all 
deinen Verbesserungen.
Irgendetwas übersiehst du sicher, die Ladung müsste mittlerweile so hoch 
sein, um noch für die Störungen verantwortlich zu sein, das es den µC 
zerstörten würde.
Gast #5589117
Lesenswert?

Also hier jetzt mal Fotos, ich denke, alles wichtige ist darauf zu 
erkennen. Vor allem: bei meinen Versuchsreihen ändere ich quasi 
tatsächlich nur die Position des Rohres, welches weder die Platine 
berührt. Auch habe ich das Batteriepack nicht reingepackt, also die 
Kabel sind nicht geknickt, sieht man auch auf den Fotos. Außerdem 
nochmal die Unterseite der Platine, ist jetzt etwas unsauber weil an der 
gestern noch viel Rumprobiergelöte, aber alles durchgefiept, nirgendwo 
Kontakt.
So und jetzt ist es (endlich!) mal passiert: Ich sitz ja hier nebenbei 
rum und teste die ganze zeit, grad ohne Rohr drum, der Fehler ist jetzt 
auch so einmal aufgetreten. Also bei einem von ca. 50 Versuchen in 
dieser Reihe. Vorher ca. 100 Versuche ohne diesen Fehler. Vielleicht 
liegts doch an der Entprellung, dann Asche auf mein Haupt. Schicke 
gleich nen Post zu Code und Programmablauf...
Angehängte Dateien:
Gast #5589164
Lesenswert?

Unten gleich der relevante Code, zum Programmablauf:

Programm is schlafen, wird über PinChange Interrupt aufgeweckt. Über den 
Taster können quasi vier Programme aufgerufen werden: Wird der Taster 
nach dem Anschalten für Zeit a gedrückt, kommt Programm 1, für Zeit 2a, 
dann Programm 2 usw.
Der Fehler fällt auf, weil Programm 1 ein kleines Glücksspiel ist, quasi 
wie Münze werfen: es flackern immer abwechselnd 2 LEDS, Benutzer*in 
drückt irgendwann den Knopf, und das Programm pendelt quasi aus, also 
die Leds blinken abwechselnd immer langsamer, bis irgendwann das 
Ergebnis feststeht. Ich hoffe, ist einigermaßen verständlich. Der Fehler 
der nun die ganze Zeit auftrat: Direkt nach dem Anschalten springt das 
Programm quasi schon in den Pendelmodus, also als hätte jemand ganz 
schnell zweimal gedrückt (das vor allem im Rohr), obwohl ich sehr sicher 
bin, das eigentlich über entprellung zu unterbinden. Aber ich lass mich 
gerne eines besseren belehren... Und bitte nicht gleich schimpfen, wenn 
ihr den Code seht, ich bin noch sehr am üben und bring mir alles selber 
bei. Und weil jetzt das Problem auftrat hab ich den noch nicht hübsch 
gemacht...
Timer1 ist für das LED-Geflacker, habe ein paar Sachen gekürzt (...)

#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

#define F_CPU 1000000

#define button_down (!(PINB & (1 << PINB2)))
#define kerze_1 PB0
#define kerze_2  PB3
#define orakel_1 PB1
#define orakel_2 PB4
#define ORAKEL 0
#define LAMPE_01 1
#define LAMPE_02 2
#define LAMPE_03 3
#define ZUFALLSWERT_ORAKEL ((rand() % 25) + 7)
#define ABSCHALTZEIT 30


volatile uint8_t counter_timer0_flag = 0;
volatile uint8_t counter_timer1_flag = 0;

volatile uint8_t orakel_finale_flag = 0;
volatile uint8_t orakel_links_rechts = 0;

volatile uint8_t modus_counter = 0;
volatile uint8_t lampenmodus_flag = 0;
volatile uint8_t time_counter_bruchsekunde = 0;
volatile uint8_t time_counter_sekunde = 0;
volatile uint8_t time_counter_minute = 0;

void init_timer0()
{
  //timer_0
  TCCR0A |= (1 << WGM01); //clear timer on compare match
  TCCR0B |=  (1 << CS02) | (1 << CS00); // clock presscaler 1024
}

void init_timer_CTC()
{
  //timer_1
  TCCR1 |= (1 << CTC1);  // clear timer on compare match
  TCCR1 |= (1 << CS13) | (1 << CS12) | (1 << CS10); //clock prescaler 
4096
  OCR1C = 244; // compare match value
  TIMSK |= (1 << OCIE1A); // enable compare match interrupt
}


void stop_timer0()
{
  TCCR0A &= ~(1 << WGM01); //clear timer on compare match
  TCCR0B &= ~((1 << CS02) | (1 << CS00));
}


void initInterrupt(void)
{
  GIMSK |= (1 << PCIE);   // pin change interrupt enable
  PCMSK |= (1 << PCINT2); // pin change interrupt enabled for PCINT0
  TIMSK |= (1 << OCIE0A) | (1 << OCIE1A); // enable compare match 
interrupt
  sei();                  // enable interrupts
}

void sleep_now()
{
  cli();
  PCMSK |= (1 << PCINT2);

  PORTB &= ~((1 << orakel_1) | (1 << orakel_2) | (1 << kerze_1) | (1 << 
kerze_2));

  _delay_ms(500);
  //stop_timer0();
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sei();
  sleep_mode();
  sleep_disable();
  TIMSK |= (1 << OCIE1A);
  init_timer_CTC();
  init_timer0();

}

void awake_now()
{
  OCR0A = 20;
  PCMSK &= ~(1 << PCINT2);

  TIMSK |= (1 << OCIE1A);
  counter_timer0_flag = 0;
  counter_timer1_flag = 0;
  orakel_finale_flag = 0;
  orakel_links_rechts = 0;

  time_counter_sekunde = 0;
  time_counter_minute = 0;

}

uint8_t button_entprellt()
{
  /* timer0 als zeitquelle;
  mit prescaler 1024 taktfrequenz von ca. 1/1000s;
  mit OCR0A = 20 ca. 20ms entprellzeit pro vollem durchlauf;
  */
  uint8_t counter_intern = 0;
  uint8_t counter_entprellt = 0;
  uint8_t entprellrunden = 3; //je 20ms
  counter_timer0_flag = 0;

  for (uint8_t i = 0; i < entprellrunden; i++)
  {
  while (counter_timer0_flag != 1)
  {

  }
  counter_timer0_flag = 0;
  if (button_down)
  {
    counter_entprellt++;
  }
  }

  if (counter_entprellt == entprellrunden)
  {
    return 1;
  }

  else
  {
    return 0;
  }
}

uint8_t modus_choice()
{
  uint8_t durchlaeufe = 30;

  OCR1C = 25;
  uint8_t counter_intern = 0;
  uint8_t counter_intern_timer0 = 3;
  PORTB |= (1 << orakel_1);
  PORTB &= ~(1 << orakel_2);

  while ((button_down) && (counter_intern < 3 * durchlaeufe))
  {
    if (counter_timer0_flag == counter_intern_timer0)
    {
      counter_intern++;
      counter_timer0_flag = 0;
    }

    if ((counter_intern > durchlaeufe) && (counter_intern <= 2 * 
durchlaeufe))
    {
      TIMSK &= ~(1 << OCIE1A);
      PORTB &= ~((1 << orakel_1) | (1 << orakel_2));
      PORTB |= (1 << kerze_1) | (1 << kerze_2);
    }

    if ((counter_intern > 2 * durchlaeufe) && (counter_intern <= 3 * 
durchlaeufe))
    {
      PORTB |= (1 << orakel_1) | (1 << orakel_2);
    }
  }

  if (counter_intern < durchlaeufe)
  {
    return ORAKEL;
  }

  if ((counter_intern >= durchlaeufe) && (counter_intern < 2 * 
durchlaeufe))
  {
    return LAMPE_01;
  }

  if ((counter_intern >= 2 * durchlaeufe) && (counter_intern < 3 * 
durchlaeufe))
  {
    return LAMPE_02;
  }
  else
  {
    return LAMPE_03;
  }
}

void orakel_endspiel(uint8_t spielzeit)
{

  ...
}

void orakel_modus()
{
  ...
}

void lampe_01_modus()
{
  ...
}

void lampe_02_modus()
{
  ...
}

void lampe_03_modus()
{
  ...
}

int main(void)
{
  //Ausgänge
  DDRB |= (1 << kerze_1) | (1 << kerze_2) | (1 << orakel_1) | (1 << 
orakel_2);

  //Eingang
  DDRB &= ~(1 << PINB2);

  //interne Pullups hoch
  //PORTB |= (1 << PB2);


  //Timer initialisieren
  init_timer0;
  init_timer_CTC();

  //Interrupt initialisieren
  initInterrupt();

  OCR0A = 20;

  while(1)
  {
    sleep_now();
    awake_now();
    //button_entprellt();

    switch(modus_choice())
      {
        case ORAKEL:    orakel_modus(); break;
        case LAMPE_01:    lampe_01_modus(); break;
        case LAMPE_02:    lampe_02_modus(); break;
        case LAMPE_03:    lampe_03_modus(); break;
        default:      break;
      }


  }
}

ISR(TIMER0_COMPA_vect)
{
  cli();

  counter_timer0_flag++;
  time_counter_bruchsekunde++;
  if (time_counter_bruchsekunde == 50)
  {
    time_counter_bruchsekunde = 0;
    time_counter_sekunde++;

    if (time_counter_sekunde == 60)
    {
      time_counter_minute++;
      time_counter_sekunde = 0;
    }

  }
  sei();
}

ISR(TIMER1_COMPA_vect)
{
  ...
}

ISR(PCINT0_vect)
{

}
Gast #5589200
Lesenswert?

Hallo,

ein kleiner Formalismus:

In einer ISR löscht nicht und gibt das globale Interrupt Flag nicht 
frei, wenn man nicht weiss, was man tut!
1
ISR(TIMER0_COMPA_vect)
2
{
3
  cli();
4
:
5
  sei();
6
}

Man frage sich bitte, was passiert, wenn eine Interrupt Anforderung 
erfolgt und der Interrupt Vektor angesprungen wird.
Was passiert dann auf dem Stack?
Gast #5589201
Lesenswert?

Hallo,

es sieht so aus als würdest du den externen Interrupt nicht disable, 
nachdem du die Taste erkannt hast.

Ich würde folgendes vorschlagen:

Timer aus
Flankeninterrupt auf fallende Flanke aktivieren

Wenn Taste gedrückt wird, kommt der Flankeninterrupt.
In der Isr Flankeninterrupt disable und Timer starten
Nach 20ms Timer stop. Portlevel checken, wenn Port low, dann Taste 
gedrückt, Flankeninterrupt auf steigende Flanke programmieren.
Wenn Port high war, war Taste nicht lange genug gedrückt - 
Flankeninterrupt auf fallende Flanke programmieren.

Wenn Taste losgelassen wurde kommt der Interrupt für steigende Flanke - 
key release
Anschließend wieder auf fallende Flanke programmieren.

Anmerkung:
20ms reichen normalerweise zur Entprellung
Die Taste prellt nur beim Drücken, nicht beim Loslassen.
Normalerweise wacht die CPU selbst auf bei einem Interrupt.

Grüße
Andreas
#5589209
Lesenswert?

Ich glaube nicht, dass das dein Code ist. Da wird nirgends die Funktion 
"button_entprellen" aufgreufen, ausser im Main. Und dort ist es 
auskommentiert!


Zudem macht die Funktion wenig sinn... nachfolgend habe ich nur die 
Variablen angepasst. Aber da man nicht erkennt wie die Funktion 
aufgerufen wird, ist das nur eine Vermutung für eine Verbesserung!
1
uint8_t button_entprellt()
2
{
3
  /* timer0 als zeitquelle;
4
  mit prescaler 1024 taktfrequenz von ca. 1/1000s;
5
  mit OCR0A = 20 ca. 20ms entprellzeit pro vollem durchlauf;
6
  */
7
  //uint8_t counter_intern = 0;      //<= WIRD NICHT VERWENDET
8
  uint8_t counter_entprellt = 0;
9
  const uint8_t entprellrunden = 3;     //<= KONSTANT
10
  counter_timer0_flag = 0;
11

12
  for (uint8_t i = 0; i < entprellrunden; i++)
13
  {
14
    while (counter_timer0_flag != 1)
15
    {
16
    }
17
    
18
    counter_timer0_flag = 0;
19
    if (button_down)
20
    {
21
      counter_entprellt++;
22
    }
23
    else                //<= PRELLEN MUSS COUNTER AUF 0 SETZEN
24
    {
25
      counter_entprellt = 0;
26
    }
27
  }
28

29
  if (counter_entprellt == entprellrunden)
30
  {
31
    return 1;
32
  }
33
  else
34
  {
35
    return 0;
36
  }
37
}

Und die Funktion ist blockierend. Soll das so sein?
Gast #5589215
Lesenswert?

Mir scheint, nach einer kurzen Testreihe, dass dieses kurze 
auskommentierte quasi-delay der Fehler war. Ich versinke vor Scham im 
Boden... Ich bin für alle Hinweise zu meiner Programmierung dankbar, 
weil da geht noch einiges besser...
Muß jetzt aber erstmal zur Arbeit, nehme das Gerät mit und teste und 
schau heute Nacht hier nochmal vorbei...
danke an alle!
Gast #5589227
Lesenswert?

Ganz kurz noch:

Patrick B. schrieb:
> Ich glaube nicht, dass das dein Code ist. Da wird nirgends die Funktion
> "button_entprellen" aufgreufen, ausser im Main. Und dort ist es
> auskommentiert!

Habe ein paar unwichtige Codeteile weggelassen (void orakel..., void 
lampen...) da wird die Entprellung öfter aufgerufen, in dem Stil hier:

void lampe_02_modus()
{
  uint8_t go_sleep = 0;
  PORTB |= (1 << kerze_1) | (1 << kerze_2) | (1 << orakel_1) | (1 << 
orakel_2);

  time_counter_minute = 0;

  while ((go_sleep == 0) && (time_counter_minute < ABSCHALTZEIT))
  {
    if (button_down)
    {
      if (button_entprellt())
      {
        go_sleep = 1;
      }
    }
  }

}
Hier quasi als Ausschalter, an anderer Stelle als Stop-Schalter (für das 
das Münzspiel)

Patrick B. schrieb:
> Und die Funktion ist blockierend. Soll das so sein?

Ist in der Anwendung gerade etwas egal, weil es passiert ja nichts außer 
LED-Geflacker, und das läuft über Timer1 und wird somit ja nicht 
blockiert. Ich bring mir gerade die Nutzung der Timer bei, würde mich 
auch freuen, es bald nicht-blockierend zu lösen, aber eins nach dem 
anderen... Offensichtlich haperts bei mir ja noch an grundlegenderen 
Dingen.
Jetzt muss ich wirklich los, danke und ich nehm mir heute nacht alle 
anderen Anregungen zu Herzen...
#5589346
Lesenswert?

HildeK schrieb:
> Andreas B. schrieb:
>> Die Taste prellt nur beim Drücken, nicht beim Loslassen.
>
> Das würde ich nicht unterstreichen!
> Außer du hast eine Taste mit Hg-benetzten Kontakten, die prellt dann
> aber auch beim Drücken nicht.

Normalerweise prellt die Taste beim Loslasen nicht, problematisch sind 
höchsten Schiebeschalter. Das ist auch klar, wenn man sich die Mechanik 
anschaut. Da werden die zwei Kontakte mit Federkraft, ausgelöst durch 
den Tastendruck, aufeinandergepresst. Man kann das auch sehr schön mit 
einem Speicherscope anschauen.

Zur zusätzlichen Sicherung habe ich ja den Kondensator gegen Masse 
empfohlen. Mit dem Widerstand bildet das einen Tiefpass.

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