mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit EMV


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich verwende einen ATMEGA32 und habe an dem Pin PD3 ein ca. 3m 
langes Kabel angeschlossen. Vorher hatte ich zu testzwecken den Interupt 
immer durch einen unmittelbar an der Platine angeschlossenen Taster 
ausgelöst.
Nun habe ich das Problem das der Interupt durch andere Geräte ausgelöst 
wird. z.B. durch das Einschalten oder Abschalten des Lötkolbens. Das 
Kabel ist extra schon geschirmt...
Kann ich den Fehler irgendwie durch eine Zeile Code ausbügeln ?! Bin 
ziehmlicher Programmieranfänger.
Bisher hatte ich als Code:

SIGNAL(SIG_INTERRUPT0)
{
  alarm = 1;

}



Vielen Dank schonmal !

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-> Tutorial, Tastenentprellung.

Zusätzlich "kann" ein Kerko helfen.

Klaus.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe zunächst an folgenden Code gedacht...


SIGNAL(SIG_INTERRUPT0)
{
  timer_wait(1000);
  if(PD2==0)
  alarm = 1;

}


da der Kontakt am anderen ende des Kabels ohnehin mehrere sec. 
geschlossen wird.
Aber das dann bekomm ich komischerweise gar keinen Interupt mehr?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SIGNAL(SIG_INTERRUPT0)
{
  timer_wait(1000);
Mit einem Interrupt hat man schnellstmöglich fertig zu sein.
Irgendwelche Sleeps und Waits haben da nichts zu suchen.

Du hast auf der Hardwareseite ein Problem. Willst du jetzt rumwürgen und 
das mit Software glattbügeln? Mach den Eingang niederohmig und ein 
RC-Glied davor, dann brauchst du das Softwaregebastel nicht.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du hast auf der Hardwareseite ein Problem

Falsch. Das Problem ist hier die Software, bzw. dessen Konzept.


>angeschlossenen Taster
>SIGNAL(SIG_INTERRUPT0)

Das ist Murks.

Ein Taster selbs, fragt man nie als externen Interrupt ab!
Das macht man in einem Timerinterrupt. DOrt muss dann eine 
Entprellroutine ablaufen.

Siehe COdesammlung:
http://www.mikrocontroller.net/forum/codesammlung?...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Hauptprogramm macht zu der Zeit eh nichts anders als den Taster 
abzufragen...aber das wird wohl trotzdemd die beste Lösung sein.

Aber woher weiß ich die Dimensionierung von RC? weiß ja nicht aus 
welchen Frequenzen die Störung besteht?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias

Warum macht man sowas nicht über einen externen Interrupt...?
Das ganze schickt bei Tastendruck eine SMS raus....dann kann ich den 
Taster doch über einen externen Interrupt abfragen?

...aber ich könnte doch von diesem Interrupt auf eine Entprellfunktion 
übergeben oder?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum man das nicht so macht, hast du doch eben gemerkt...

Taster fragt man regelmäßig alle 1 oder 10 Millisekunden ab, wird der 
dabei als gedrückt erkannt, so wird eine Varaible erhöht. Ist der Taster 
nicht gedrückt, so wird die Variable genullt.
Wenn die Varaible einen Grenzwert überschreitet (also eine Zeit x 
permanent gedrückt ist), dann wird ein Flag (bei dir alarm=1) gesetzt 
und in main irgendwas damit gemacht.

Siehe die von mir geposteten Links. Dort gibts weitere Erklärungen

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles klar Vielen Dank!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Falsch. Das Problem ist hier die Software, bzw. dessen Konzept.
Irgendwie hört sich die Hardware für mich trotzdem auch falsch an:
>> habe an dem Pin PD3 ein ca. 3m langes Kabel angeschlossen
;-)

> Aber woher weiß ich die Dimensionierung von RC?
> weiß ja nicht aus welchen Frequenzen die Störung besteht?
Irgendwas ist besser als gar nichts.
Geh davon aus, dass die Störung aus allem bestehen kann,
und schirm dich so gut es geht dagegen ab.

      +5V         +5V
       o           o
       |           |
  .----o---.      .-.
  |        |      | |
  | uC     |      | | 1k
  |        |      '-'
  |        |       |
  |        |       |     ___
  |    In  o-------o----|___|-----------------------------------.
  |        |       |        47R                                 |
  |        |       |                                            o
  |        |      ---                                           '\
  '----o---'      --- 100n                   lange Leitung        \
       |           |                                            o  \
       |           |                                            |
       o-----------o--------------------------------------------'
       |
      ---

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe das Problem jetzt auf eine andere art und weise gelöst:
und zwar mit einer einfachen Diode. nun kann ich beispielsweise den 
nebenstehenden Lötkolben so oft an und ausschalten wie ich will und es 
passiert nichts.

      +5V
       o
       |
  .----o---.
  |        |
  | uC     |
  |        |
  |        |            |   |
  |        |            ||. |
  |    In  o-------o-------.|-----------------------------------.
  |        |            ||. |                                   |
  |        |            |   |                                   o
  |        |                                                    '\
  '----o---'                                 lange Leitung        \
       |                                                        o  \
       |                                                        |
       o--------------------------------------------------------'
       |
      ---

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösung ist trotzdem nicht sauber. Aber lass es ruhig so (mit 
Interupt).

Irgendwann wirst du es verstehen.

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.