Probleme mit EMV

Gast #1061988
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 !
Gast #1062004
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?
Moderator (Firma: Titel) Persönliche Seite #1062009
Lesenswert?

1
SIGNAL(SIG_INTERRUPT0)
2
{
3
  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.
Gast #1062021
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?filter=Taste+entprellen
Gast #1062022
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?
Gast #1062025
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?
Gast #1062028
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
Moderator (Firma: Titel) Persönliche Seite #1062032
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.
1
      +5V         +5V
2
       o           o
3
       |           |
4
  .----o---.      .-.
5
  |        |      | |
6
  | uC     |      | | 1k
7
  |        |      '-'
8
  |        |       |
9
  |        |       |     ___
10
  |    In  o-------o----|___|-----------------------------------.
11
  |        |       |        47R                                 |
12
  |        |       |                                            o
13
  |        |      ---                                           '\
14
  '----o---'      --- 100n                   lange Leitung        \
15
       |           |                                            o  \
16
       |           |                                            |
17
       o-----------o--------------------------------------------'
18
       |
19
      ---
Gast #1062267
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--------------------------------------------------------'
       |
      ---

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