Forum: Mikrocontroller und Digitale Elektronik Lichtschranke an Atmega. Ich versteh's nicht.


von Cube_S (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde.

Ich benutze die angehängte Schaltung um eine Gabel-Lichtschranke per 
Interrupt auszulösen. Leider "prellt" die Angelegenheit. D.h. es kommen 
zu viele Interrupts und auch welche an der falsche Flanke.

Was ich nicht verstehe ist, dass die Flanken immer so wie im Screenshot 
aussehen, also eigentlich ganz sauber. Was übersehe ich da.

Danke schon mal für Antworten

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> Hallo liebe Gemeinde.
>
> Ich benutze die angehängte Schaltung um eine Gabel-Lichtschranke per
> Interrupt auszulösen. Leider "prellt" die Angelegenheit. D.h. es kommen
> zu viele Interrupts und auch welche an der falsche Flanke.
>
> Was ich nicht verstehe ist, dass die Flanken immer so wie im Screenshot
> aussehen, also eigentlich ganz sauber. Was übersehe ich da.

Deine Zeitbasis ist viel zu groß, da übersieht dein Billigoszi mal 
schnell eine paar schnelle Flankenwechsel. Zoom da mal rein, so auf 
1us/DIV und weniger.

von Cube_S (Gast)


Lesenswert?

Das habe ich natürlich versucht aber ich sehe da nichts. Wenn ich zu 
weit reinzoome sehe ich natürlich nicht mehr die ganze Kurve.

von Martin (Gast)


Lesenswert?

Cube_S schrieb:

> Das habe ich natürlich versucht aber ich sehe da nichts. Wenn ich zu
> weit reinzoome sehe ich natürlich nicht mehr die ganze Kurve.

Das ist Falk, den brauchst du nicht zu beachten, der will nur spielen.

Wie sieht deine Interruptroutine aus?

von MaWin (Gast)


Lesenswert?

Nun ja, daher wertet man Taster nicht per Interrupt aus, bei 
Lichtschranken die z.B. von Energiesparlampen oder LED-Lampen Licht 
beeinflusst werden sieht es ähnlich aus.

Ein kleiner Kondensator am uC Eingang, ein kleinerer Widerstandswert 
wären Krücken, also keine wirkliche Lösung.

Wenn man auch die LED von uC ein und ausschalten lässt, kann man a) nur 
Wechselspannungen durchlassen und b) Synchrongleichrichtung treiben und 
c) lock in Verstärker bauen und damit eine gegen Fremdlicht störsichere 
Lichtschranke bauen.

Das haben ja schon alte Rollkugelmäuse geschafft.

von Tom B. (botas)


Lesenswert?

Sieht die Spannungsversorgung des Atmega sauber aus? Hat er die 
empfohlen Kondensatoren? Sind die Massen gut verbunden?

von Theor (Gast)


Lesenswert?

Hm. Ich würde mal die Anstiegszeit überprüfen und das mit den Angaben im 
Datenblatt vergleichen. Möglich, dass der Pegel den verbotenen Bereich 
nicht schnell genug durchfährt. 20ms kommen mir lang vor, aber ich kann 
mich irren.

Ausserdem wäre noch interessant, wie lang die Leitungen sind.
Am besten minimalen Code und Schaltung posten um Rückfragen zu ersparen.

von Wolfgang (Gast)


Lesenswert?

Cube_S schrieb:
> Wenn ich zu weit reinzoome sehe ich natürlich nicht mehr die ganze Kurve.
Die interessiert deinen µC auch nicht. Der guckt nur bei der (realen) 
Schaltschwelle. Was bei flachen Flanken allerdings intern passiert, 
siehst du mit dem Oszi sowieso nicht.
Einen Schmitt-Trigger hat dein Interrupteingang wohl nicht?

von Einer K. (Gast)


Lesenswert?

Warum darf ich nicht wissen, welcher µC verwendet wird?
Warum ist der Code der ISR und das drumrum geheim?

Da diese Information nicht freiwillig geliefert wird, gehe ich nach 
sorgfältiger Prüfung davon aus, dass der TO (Cube_S (Gast)) nicht an 
konstruktiven Lösungsfindung interessiert ist.

von The Weasel (Gast)


Lesenswert?

Pack ein paar Kondensatoren davor und gut is....

von Axel S. (a-za-z0-9)


Lesenswert?

Cube_S schrieb:

> Ich benutze die angehängte Schaltung um eine Gabel-Lichtschranke per
> Interrupt auszulösen.

Ähhm. Das nennst du eine Schaltung?

Und dann löst du nicht die Lichtschranke per Interrupt aus, sondern du 
läßt die Lichtschranke (genauer gesagt: den Fototransistor deines 
Gabelkopplers) einen Interrupt auslösen. Subjekt und Objekt. Ursache und 
Wirkung. Sollte man nicht vertauschen.

> Leider "prellt" die Angelegenheit. D.h. es kommen
> zu viele Interrupts und auch welche an der falsche Flanke.

Zum Glück hast du "prellt" in Anführungszeichen gesetzt. Denn 
tatsächlich prellt da nichts. Das tun nur mechanische Kontakte. Aber 
natürlich kommt aus so einem Fototransistor kein Rechtecksignal raus. 
Noch dazu bei einer offenen Anordnung, wo Störlicht aus allen möglichen 
Quellen (z.B. gepulste Leuchtstoffröhren) drauf fallen kann.

> Was ich nicht verstehe ist, dass die Flanken immer so wie im Screenshot
> aussehen, also eigentlich ganz sauber.

Das bezweifle ich. Insbesondere das "immer" in diesem Satz. Alein schon 
durch das Anklemmen deines Oszis veränderst du das System.

> Was übersehe ich da.

Ich nehme an, du wolltest fragen: "Was mache ich falsch?"

Nun, man hängt so einen Fototransistor nicht direkt an den 
Interrupteingang eines µC. Zuerst mal würde man das Signal etwas 
aufbereiten wollen. Sagen wir mal als Anfang mit einem RC-Filter gegen 
AC Störungen. Und dann einem Schmitt-Trigger mit ausgeprägter Hysterese. 
So einfach geht das aber nur, wenn das ganze optisch einigermaßen 
abgeschirmt ist, so daß man Fremdlicht ausschließen kann.

Aber auch dann würde man es sich dreimal überlegen, ob man das Signal 
direkt einen Interrupt auslösen lassen wollen würde. Das braucht man 
eigentlich nur, wenn man sehr kurze Reaktionszeiten will. Um mal eine 
Zahl zu nennen: schneller als 1ms. Alles, was langsamer sein darf, fragt 
man besser in einem Timer-Interrupt ab.

von Falk B. (falk)


Lesenswert?

Arduino Fanboy D. schrieb:
> Warum darf ich nicht wissen, welcher µC verwendet wird?

Überschrift gelesen? Brille geputzt?

AVRs haben an allen Eingängen Schmitt-Trigger, die vermeiden viele 
Probleme, wenn gleich nicht alle.

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> Das habe ich natürlich versucht aber ich sehe da nichts. Wenn ich zu
> weit reinzoome sehe ich natürlich nicht mehr die ganze Kurve.

Mensch Meier, man kann die Kurve

a) so weit aufzoomen, bis sie den ganzen Bildschirm füllt (und dem Rest 
der Welt einen Screenshot zeigen)
b) weiter reinzoomen und das Signal stückweise betrachten.

von Cube_S (Gast)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> Das bezweifle ich. Insbesondere das "immer" in diesem Satz. Alein schon
> durch das Anklemmen deines Oszis veränderst du das System.

Das ist klar, die Kurve stammt aber aus diesem System. Und das verhalten 
(die gezählten Interrupts) ändert sich auch nicht durch abklemmen.

Axel S. schrieb:
> sondern du
> läßt die Lichtschranke

Grammatikalisch nicht gelungen, gebe ich zu, aber alle haben es 
verstanden und das auch noch richtig.

Falk B. schrieb:
> a) so weit aufzoomen, bis sie den ganzen Bildschirm füllt (und dem Rest
> der Welt einen Screenshot zeigen)

Ist angehängt. Das hat mir übrigens 4 Interrupts beschert.

Der Aufbau ist noch auf einem Breadboard. Mir stellt sich halt die 
Frage: Warum löst ein so harmlos aussehendes Signal 4 Interrupts aus.

von Einer K. (Gast)


Lesenswert?

Falk B. schrieb:
> Überschrift gelesen? Brille geputzt?

Die AVR unterscheiden sich erheblich, was die Schaltschwelle angeht, und 
auch in der Hysterese.
Kann sein, dass dir das am Arsch vorbei geht.
Aber mit meiner Brille hat sicher das nichts zu tun.

von Cube_S (Gast)


Lesenswert?

Axel S. schrieb:
> Das bezweifle ich. Insbesondere das "immer" in diesem Satz. Alein schon
> durch das Anklemmen deines Oszis veränderst du das System.

Das ist klar, die Kurve stammt aber aus diesem System. Und das verhalten 
(die gezählten Interrupts) ändert sich auch nicht durch abklemmen.

Axel S. schrieb:
> sondern du
> läßt die Lichtschranke

Grammatikalisch nicht gelungen, gebe ich zu, aber alle haben es 
verstanden und das auch noch richtig.

Falk B. schrieb:
> a) so weit aufzoomen, bis sie den ganzen Bildschirm füllt (und dem Rest
> der Welt einen Screenshot zeigen)

Ist angehängt. Das hat mir übrigens 4 Interrupts beschert.

von Cube_S (Gast)


Angehängte Dateien:

Lesenswert?

Da hat der Anhang gefehlt.

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> Axel S. schrieb:
>> Das bezweifle ich. Insbesondere das "immer" in diesem Satz. Alein schon
>> durch das Anklemmen deines Oszis veränderst du das System.
>
> Das ist klar, die Kurve stammt aber aus diesem System. Und das verhalten
> (die gezählten Interrupts) ändert sich auch nicht durch abklemmen.

In deinem Screenshot steht Flt: 50kHz. Kann es sein, daß dein 
Oszi-Eingang einen 50kHz Filter aktiviert hat? Dann kann man keine 
schnellen Störsignale sehen ;-)

> Falk B. schrieb:
>> a) so weit aufzoomen, bis sie den ganzen Bildschirm füllt (und dem Rest
>> der Welt einen Screenshot zeigen)
>
> Ist angehängt. Das hat mir übrigens 4 Interrupts beschert.

Siehe oben.

> Der Aufbau ist noch auf einem Breadboard. Mir stellt sich halt die
> Frage: Warum löst ein so harmlos aussehendes Signal 4 Interrupts aus.

Weil du nicht das siehst, was wirklich da ist. Zeig mal ein Bild von 
deinem Aufbau.

von Falk B. (falk)


Lesenswert?

Und wie sieht die andere Flanke aus?

von Wolfgang (Gast)


Lesenswert?

Cube_S schrieb:
> SCR02.PNG
Dann blende doch mal ein, an welcher Stelle genau der µC jeweils in die 
ISR springt. Wenn die vier Interrupts wirklich von dieser einen Flanke 
ausgelöst werden, solltest du deine Zeitskala mal ein bisschen 
Aufreißen. Der µC "denkt" da eher in Mikrosekunden. Wie sieht deine ISR 
überhaupt aus?

von Falk B. (falk)


Lesenswert?

Wolfgang schrieb:
>> SCR02.PNG
> Dann blende doch mal ein, an welcher Stelle genau der µC jeweils in die
> ISR springt.

Gute Idee. Dazu sollte man dem OP aber sagen, daß er in der ISR ein 
Test-Pin auf HIGH setzen soll und am Ende der ISR wieder auf LOW. Dann 
sieht man, wann er die 4 Interrupts erkennt.

von Cube_S (Gast)


Angehängte Dateien:

Lesenswert?

Das ist der Aufbau. Ich bin der Sache jetzt ein Stück näher. Das 
LCD-Modul wurde in einer Endlosschleife beschrieben. D.h. ständig 
Betrieb auf den Steuer- und Datenleitungen. Die Steuerleitungen liegen 
genau neben dem Interrupt-Pin. Ich habe das LCD-Display nun nur noch 
alle 100ms mit Daten gefüttert und siehe da, die Probleme sind weg.

von Einer K. (Gast)


Lesenswert?

Ich sehe da keine Abblockkondensatoren.

von Cube_S (Gast)


Lesenswert?

Liegt am Foto, es gibt deren zwei.

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> Das ist der Aufbau.

Ufff! Wenn da mal nicht ein paar nette Wackelkontakte drinstecken.

> Ich bin der Sache jetzt ein Stück näher. Das
> LCD-Modul wurde in einer Endlosschleife beschrieben. D.h. ständig
> Betrieb auf den Steuer- und Datenleitungen. Die Steuerleitungen liegen
> genau neben dem Interrupt-Pin. Ich habe das LCD-Display nun nur noch
> alle 100ms mit Daten gefüttert und siehe da, die Probleme sind weg.

Schon mal ein Anfang. Das sollte aber nicht das Problem sein. Mach mal 
probehalber einen kleinen Kondensator an das INT-Pin gegen Masse, so 
1-10nF. Dann sollte es auch mit Dauerbetrieb auf deinem LCD 
funktionieren.

von Tester (Gast)


Angehängte Dateien:

Lesenswert?

Hab das grad mal nachgebaut.
Das Steckbrett liegt ca. in der Mitte etwas von den Leitungen verdeckt.

Bei mir läufts sauber

von Falk B. (falk)


Lesenswert?

Man kann noch was testen. Der Phototransistor mit 10k Pull-Up Widerstand 
ist sehr unsymmetrisch. Wenn er durchschaltet, liegt relativ niederohmig 
LOW am INT-PIN an. Wenn er sperrt hat man nur relativ hochohmige 10k 
Pull-Up Widerstand. Wenn also eine Verkopplung der LCD-Ansteuerung mit 
dem INT-Pin vorliegt, dann sollte deine Schaltung Interrupts erkennen, 
wenn deine Lichtschranke dauerhaft unterbrochen ist.

von Cube_S (Gast)


Lesenswert?

Falk B. schrieb:
> Wenn also eine Verkopplung der LCD-Ansteuerung mit
> dem INT-Pin vorliegt, dann sollte deine Schaltung Interrupts erkennen,
> wenn deine Lichtschranke dauerhaft unterbrochen ist.

Das ist nicht der Fall. Da kommen keine Interrupts.

von HildeK (Gast)


Lesenswert?

Cube_S schrieb:
> Ich bin der Sache jetzt ein Stück näher.

Ja, du hast eine Einstreuung und weißt jetzt woher sie kommt. Aber du 
siehst es auf dem Signal nicht.
Also, wie schon gesagt: 50kHz-Filter ist hier fehl am Platz.
Mach mal ein Bild von einer gestörten Flanke ohne das Filter.

Ebenso schlecht ist der langsame Signalanstieg, der lädt gerade dazu 
ein, dass Störungen genügend Zeit haben, mehrfach zu wirken. Die 
störenden Signale haben Anstiegszeiten im Bereich um die 10ns - das 
koppelt leicht über - und deine Flanke liegt bei 5ms. Genügend Zeit als, 
um mehrfach zu schalten, bis der Übergangsbereich verlassen wird.
Helfen kann ein niederohmiger Arbeitswiderstand am Phototransistor 
(s.o.) oder ein einfacher Schmitt-Trigger (HC14) nahe am Phototransistor 
und natürlich ein ordentlicher Aufbau.

Kleine Story aus der Praxis am Rande:
Sproadische Fehler in einem DDR-Interface. Die Signale gemessen mit dem 
Laborskope 1GHz BB, natürlich mit dem (langsamen) Standard-Tastkopf. Sah 
alles schön aus - bis auf eine kaum wahrnehmbare, leichte Verformung 
mitten in der Flanke. Der Verlauf war aber noch immer stetig.
Glücklicherweise darauf geschlossen, dass uns Skope+Tastkopf wohl 
anlügen. Vom Skope-Vertriebsmenschen ein Leihgerät besorgt mit 5GHz BB 
und schnellen Tastköpfen. Und siehe da, schon zeigte das Signal sein 
wahres Gesicht, einen Zacken in der Flanke.
So kam ich damals zu dem lange gewünschten, aber immer als viel zu teuer 
empfundenen schnellen Skope mit 10GHz BB.

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> Falk B. schrieb:
>> Wenn also eine Verkopplung der LCD-Ansteuerung mit
>> dem INT-Pin vorliegt, dann sollte deine Schaltung Interrupts erkennen,
>> wenn deine Lichtschranke dauerhaft unterbrochen ist.
>
> Das ist nicht der Fall. Da kommen keine Interrupts.

Dann ist es keine Kopplung über das Pin. Vermutlich hat du eher ein 
Problem in deiner Software, Stichwort voilatile und atomarer Zugriff.

Siehe Interrupt

von HildeK (Gast)


Lesenswert?

Falk B. schrieb:
> Cube_S schrieb:
>> Falk B. schrieb:
>>> Wenn also eine Verkopplung der LCD-Ansteuerung mit
>>> dem INT-Pin vorliegt, dann sollte deine Schaltung Interrupts erkennen,
>>> wenn deine Lichtschranke dauerhaft unterbrochen ist.
>>
>> Das ist nicht der Fall. Da kommen keine Interrupts.
>
> Dann ist es keine Kopplung über das Pin.

Das würde ich so nicht bestätigen.
Der Kopplungspegel muss nicht so groß sein, dass er den 10k vom 
Optotransistor überschreibt. Es reicht, wenn er während der langsamen 
5ms-Flanke zum richtigen Zeitpunkt mehrere steile Flanken vom 
Nebensprechen sieht. Wenn der Pegel mitten im aktiven Bereich liegt, 
braucht's nur wenig Störpegel, um einen Eingang zu triggern.

von Cube_S (Gast)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> Problem in deiner Software, Stichwort voilatile und atomarer Zugriff

Möglich ist alles aber ich glaub's nicht: die relevanten Stellen sehen 
so aus (will niemanden mit vollständigem Code belästigen):
1
static volatile uint32_t count2;
2
3
ISR(INT0_vect)
4
{
5
  PORTB |= 1;
6
  count2++;
7
  PORTB &= ~1;
8
}
9
10
int main(void)
11
{
12
  EICRA = 1<<ISC01 | 1<<ISC00;
13
  EIMSK = 1<<INT0;
14
15
  while(1)
16
  {
17
    uint32_t val1, val2;
18
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
19
    {
20
      val1 = count1;
21
      val2 = count2;
22
    }
23
24
//.. ausgabe an LCD Modul
25
  }
26
}

PORTB0 in der Interrupt-Routine ist der Trigger für's Osci, der 
Screenshot dazu ist angehängt. val1 und count1 ist eine andere 
Lichtschranke, die hier nicht aktiv ist.

von Falk B. (falk)


Lesenswert?

Cube_S schrieb:
> PORTB0 in der Interrupt-Routine ist der Trigger für's Osci, der
> Screenshot dazu ist angehängt.

Na das ist doch schon mal was! Die Interrupts kommen verdammt schnell 
nacheinander! Fast so, als ob dort ein Dauerfeuer am Pin anliegt. Kann 
da was falsch konfiguriert sein? Eigentlich nicht.

"Observe that, if
enabled, the interrupts will trigger even if the INT0..2 pins are 
configured as outputs."

Wenn deine andere Software durch einen Fehler auf den Port schreibt, 
und. z.B. den Pull-Up ein- und aus schaltet, könnte sowas passieren. 
Oder das Pin wird kurzzeitig als Ausgang konfiguriert und per Software 
gewackelt. Jaja, ist weit hergeholt.
Oder fälschlicherweise auf LOW level statt Flanke konfiguriert?

HildeK schrieb:
> 5ms-Flanke zum richtigen Zeitpunkt mehrere steile Flanken vom
> Nebensprechen sieht. Wenn der Pegel mitten im aktiven Bereich liegt,
> braucht's nur wenig Störpegel, um einen Eingang zu triggern.

Mag sein, aber der AVR hat an alle IOs Schmitt-Trigger, da sollte sowas 
nicht so leicht passieren.

I/O Pin Input Hysteresis vs. VCC

Beim ATmega32 (hab ich einfach mal so genommen) sind das 0,5V bei 5V 
VCC. Das ist schon ne Menge.

Man könnte ein absolut minimales Programm schreiben, das nur die ISR 
konfiguriert und sonst nix macht. Dann sieht man, ob das Testpin auch 
mehrfach zuckt. Wenn ja, ist was anderes faul. Wenn nein, liegt der 
Fehler in der kompletten Software.

von Achim S. (Gast)


Lesenswert?

Falk B. schrieb:
> HildeK schrieb:
>> 5ms-Flanke zum richtigen Zeitpunkt mehrere steile Flanken vom
>> Nebensprechen sieht. Wenn der Pegel mitten im aktiven Bereich liegt,
>> braucht's nur wenig Störpegel, um einen Eingang zu triggern.
>
> Mag sein, aber der AVR hat an alle IOs Schmitt-Trigger, da sollte sowas
> nicht so leicht passieren.

0,5V Hysterese sind schon mal ein ordentlicher Schutz gegen 
"mehrfach-Triggerung" der ISR bei langsamen Flanken. Aber der Aufbau ist 
auch ein ziemliches Gewirr von Drähten mit schwer abschätzbaren 
parasitären Eigenschaften. Evtl. sieht die Rampe vom Optokoppler in der 
Messung noch schön glatt aus. Aber direkt am µC-Pin gemessen (mit 
Referenz auf die µC Masse) kann sie schon nicht mehr so glatt wirken.

@TO: ich gestehe, dass ich nicht jeden einzelnen Beitrag gelesen habe. 
Hast du es schon mal mit einem deutlich kleineren Arbeitswiderstand am 
Fototransistor probiert (1k statt 10k). Wenn die Flanke deutlich steiler 
wird, verbringst du deutlich weniger Zeit im Umschaltbereich des INT0. 
Der Widerstand ist schnell ausgetauscht. Wiederhole vielleicht nochmal 
damit deine Messung von 20:03 und schau, ob das die Mehrfachtriggerungen 
verbessert.

Achte bei der Messung bitte auch darauf, dass der Tastkopf sicher in der 
x10-Einstellung ist. Sonst verschleift auch die Tastkopfkapazität 
unnötig stark die Flanke des Optokopplers.

von HildeK (Gast)


Lesenswert?

Falk B. schrieb:
> Mag sein, aber der AVR hat an alle IOs Schmitt-Trigger, da sollte sowas
> nicht so leicht passieren.

Es hieß ja, dass es keinen Trigger gibt, wenn der OK abgedeckt ist; das 
Signal also über 10k statisch an 'H' liegt und du deshalb die HW-Seite 
ausgeschlossen hast.
Ich wollte nur ein Szenario aufzeigen, bei dem jedenfalls der Abstand 
für eine Reaktion auf Störungen kleiner ist: der Weg von 2.5V zu 2.75V 
oder zu 2.25V ist eben deutlich geringer als von 5V auf 2.25V (wenn die 
Schwellen bei 2.25V und 2.75V liegen).

Achim S. schrieb:
> Evtl. sieht die Rampe vom Optokoppler in der
> Messung noch schön glatt aus. Aber direkt am µC-Pin gemessen (mit
> Referenz auf die µC Masse) kann sie schon nicht mehr so glatt wirken.

Daran dachte ich auch schon. Wo und mit welchem Tastkopf hat der TO 
gemessen?

von Peter D. (peda)


Lesenswert?

Cube_S schrieb:
> die relevanten Stellen sehen
> so aus

Also die Stellen, wo der Fehler wahrscheinlich nicht liegt.

Cube_S schrieb:
> will niemanden mit vollständigem Code belästigen

Man kann Code einfach anhängen, dann stört das den Beitrag nicht.
Code einfügen ist eh blöd, man kann dann nicht auf Zeilennummern Bezug 
nehmen.

Ich vermute mal, Deine LCD-Routine schreibt auf den Eingang der 
Lichtschranke.

von Dietrich L. (dietrichl)


Lesenswert?

Peter D. schrieb:
> Ich vermute mal, Deine LCD-Routine schreibt auf den Eingang der
> Lichtschranke.

Aber dann müsste man auf dem Eingang auch was sehen, und der sieht auf 
dem Bild sauber aus...

von max123 (Gast)


Lesenswert?

Hallo,
Ich leide, wenn ich das Dauerthema "Entprellen" immer wieder lesen muss.

Vorschlag:
Der Taster soll keinen Interrupt auslösen, sondern wird periodisch
abgefragt. z.B. Timerinterrupt alle 1 ms.

1. In der ISR soll bei gedrückter Taste eine Variable hochgezählt 
werden,
   bei losgelassenem Taster wird die Variable Dekrementiert werden.
   z.B.
   if(PINB.3 )
       zaehler ++;
   else
       zaehler --;

2. Wert von der Variablen begrenzen.
   z.B  Obergrenze/Untergrenze einführen
   const int OBERG 0 = 10, UNTERG = 0;
   if(z > OBEERG)
      z= OBERG;
   if( z < UNTERG)
      z = UNTERG;

3.  schwelle einführen.
    if(z < 2)
        Schwelle = 0;
    if ( z > 7)
       Schwelle = 1;     //Jetzt ist die Variable Schwelle entprellt.

von Gnorm (Gast)


Lesenswert?

Wo kommt jetzt der Taster her? War der bei Maria Cron mit dabei?

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> Sah alles schön aus - bis auf eine kaum wahrnehmbare, leichte Verformung
> mitten in der Flanke. Der Verlauf war aber noch immer stetig.

Wie soll eine Flanke unstetig sein?
Meinst du vielleicht streng monoton?

von Falk B. (falk)


Lesenswert?

Wolfgang schrieb:
> Wie soll eine Flanke unstetig sein?

Wenn ein eingekoppelter Störpuls drauf ist, vulgo "Delle".

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.