Hallo, Ihr habt mir vor Monaten mit meiner Schaltung (Überwachung offene Fenster / Türen auf einer Anzeigetafel) geholfen. Realisiert habe ich dies mit Reedkontakten, SPI zwischen Leitungseingang und der etwas entfernten Anzeigetafel (LEDs). Gesteuert wird das Ganze mit einem ATMEGA32. Funktioniert seither gut, jetzt das "Aber". Wenn im Gang das Licht mittels Taster und Eltako ein-/ausgeschaltet wird erhalte ich offenbar Prellspitzen, die totz gut gesiebterSpannung (nach Gleichrichtung 1000µF, vor und hinter dem 7805 100nF) bis in den ATMEGA32 durchschlagen. Einige LEDs gingen kurz an. Ich habe dies mit der Software weitestgehend über einen Signalvergleich mithilfe einer Zeitkonstanten (Schleife) beseitigt. Nun bin ich an einem Tiefpass direkt vor dem µC. der µC zieht im Normalbetrieb ca. 4,5 mA. Habt Ihr für diesen Anwendungsfall für das R-C-Glied Beispielwerte? Rechnen kann ich das nicht und mit dem Ausprobieren werde ich wohl nie fertig. Danke vorab für Eure Hilfe. Dietmar P.
Zeig mal die Schaltung wie du was verbunden hast. Solche Sachen muessen nicht ueber die Versorgungsspannung passieren sondern koennen auch ueber die Eingaenge in den uC reinkommen. Ein/Ausgangleitungen zum uC macht man nur so schnell wie noetig nicht so schnell wie moeglich.
Anbei mal meinen Schaltplan der µC-Platine. Die Versorgungsspannung kommmt über PortC "Verteiler" vom Netzteil. Der Takt für PL / ... und MISO beträgt ca. 500 Hz. Habe den Schaltplan aus Versehen zweimal angehängt.
:
Bearbeitet durch User
Dietmar P. schrieb: > Ich habe dies mit der Software weitestgehend über einen Signalvergleich > mithilfe einer Zeitkonstanten (Schleife) beseitigt. Zeig mal deine Software. Das müsste schon mit dem Teufel zugehen, wenn du durch die PeDa Entprellung irgendwelche Prellspitzen durchbringst. Das wäre das erste mal, dass ich von der ein 'Versagen' hören würde. So schliessig konnten bisher Taster gar nicht sein und die konnten so viel prellen wie sie wollen, bisher kam diese Entprellung immer wunderbar damit klar. Deine Verwendung des Wortes 'Schleife' macht mich allerdings hellhörig.
:
Bearbeitet durch User
Anbei einmal das Pgroamm mit der Schleife. LV1 und LV2 deshalb, weil ich 32 Leitungen habe. Also, bei jedem 70.ten Durchlauf bei gleichen Ergebnis wie bei erstem Durchlauf erfolgt der Parallelshift für das SPI. Das sollte meine Dämpfung sein und bewirkt eine Verzögerung von ca. 0,5 Sekunden. Gesteuert wird das Programm von main.c
Dietmar P. schrieb: > Anbei mal meinen Schaltplan der µC-Platine. Und wo hängen jetzt die Reed-Kontakte dran und wie sind sie verschaltet? Wie lang ist die Leitung? Wenn es PB0...PB4 ist, die Reedkontakte nach GND schalten, Du die internen Pullups benutzt und die Leitungen > 20..50cm lang sind, sind Störungen über die Eingänge vermutlich die Ursache. Dann brauchst Du eine Schutzbeschaltung / ein Eingangsfilter. Einfachversion:
1 | Vcc |
2 | | |
3 | R1 (z.B. 2,2kOhm) |
4 | | |
5 | +--R2-- (z.B. 10kOhm) --> Port-Pin |
6 | | |
7 | Reed |
8 | | |
9 | GND |
Luxusversion (mit Tiefpass):
1 | Vcc |
2 | | |
3 | R1 (z.B. 2,2kOhm) |
4 | | |
5 | +--R2--+--R3-- (beide z.B. 10kOhm) --> Port-Pin |
6 | | | |
7 | Reed C (z.B. 100nF) |
8 | | | |
9 | GND GND |
Gruß Dietrich
Als erstes würde ich mal einen 100 nF an die Vcc des Atmels hängen. Fehlt zumindest im Schaltplan. Da die Störung vom Eltako kommt, wird ein VDR parallel zu den Schaltkontakten und der Spule Wunder bewirken. Das unterdrückt Dir die Spannungsspitzen im 230V Netz während des Schaltens. Entsprechendes würde ich auch am Netzteileingang Deiner Schaltung machen und noch ein ein XY-Filter einbauen. Dann ist von der Seite schon mal Ruhe. Wie ist denn Deine Anzeigetafel angebunden? D.h., ist das Verbindungskabel geschirmt? Wahrscheinlich nicht(!)?
Hier jetzt den Leitungseingang und den "Sender". Die Reedkontakte liegen auf GND. Ist ein Kontakt offen so wird der Eingang über den 10k auf high gezogen.
:
Bearbeitet durch User
Dietmar P. schrieb: > Anbei einmal das Pgroamm mit der Schleife. > > LV1 und LV2 deshalb, weil ich 32 Leitungen habe. > Also, bei jedem 70.ten Durchlauf bei gleichen Ergebnis wie bei erstem > Durchlauf ... wie bei der letzten Veränderung. Zmindest ist es so programmiert. Solle aber keine Auswirkungen haben > erfolgt der Parallelshift für das SPI. ? Den Teil versteh ich nicht. Zeig mal den Teil, wie du diese Funktion benutzt. > Gesteuert wird das Programm von main.c die sehe ich aber nicht. > Das sollte meine Dämpfung sein und bewirkt eine Verzögerung von ca. 0,5 Sekunden. mit dem vorhandenen Code kann ich das nicht nachvollziehen. Aber 0.5 Sekunden sind schon ganz schön viel Holz. Da sollte eigentlich nichts mehr 'wackeln'. Ich muss den Code noch mal studieren. So recht bin ich mit dem noch nicht warm. Ich sehe auch noch nicht, wie man mit dieser Auswertefunktion ein Ergebnis bekommen würde. Oder besteht das Ergebnis nur in der Information: irgendwo ist noch was offen?
:
Bearbeitet durch User
So wie deine Schaltung aufgebaut ist must der uC sich fast bei jedem pips aus dem Tritt bringen lassen. 1. Keine Stuetzkondensatoren 2. Keine Eingangsfilter an den Inputs 3. Kein Filter in der Versorgungsleitung Dann noch die Frage vernueftige Platine mit GND Plane oder so auf Lochrasterkarte.
Karl Heinz schrieb: >> erfolgt der Parallelshift für das SPI. > > ? > Den Teil versteh ich nicht. > Zeig mal den Teil, wie du diese Funktion benutzt. Auf jeden Fall klingt es nicht logisch. Der Ablauf müsste sein
1 | ...
|
2 | |
3 | while( 1 ) { |
4 | Parallelshift geben |
5 | Schieberegister einlesen |
6 | auswerten, wobei 70 mal hintereinander das gleiche |
7 | Ergebnis kommen muss, damit die Auswertung loslegt |
8 | |
9 | entsprechende Verzögerung |
10 | }
|
d.h. das Einlesen der Schieberegister erfolgt im ständigen Wechsel mit der Entprellung und nicht erst nachdem die Auswertung ihr ok gegeben hat. Denn wenn du 70 mal dieselben Werte prüfst, ist klar dass da irgendwann mal die 70 erreicht werden. Die 70 werden erreicht, weil die übergeordnete Schleife bei 70 jeweils neuen Abfragen der Schieberegister jedesmal dasselbe Ergebnis gebracht hat und nicht weil 70 überprüfungen einer einmaligen Abfrage ergeben hat, dass sich nichts verändert. Aber zeig am besten mal mehr Code. So ist das für mich noch nicht nachvollziehbar, was du da programmiert hast.
:
Bearbeitet durch User
OK, erst mal danke für Eure Informationen. @helmi1: Nein, nein, keine Lochrasterplatine, ist 'ne gedruckte Schaltung. 1. ok, sollte ich nachholen 2. Was für ein Filter? 3. dto. Versorgungsleitung? @ kbuchegg: Kurz zur Funktion. Die Leitungseingänge liegen am 74HC165 an. Die Information ob offen / geschlossen wird als 1 / 0 als MISO per Leitung an den 74HC595 und an den Prozessor gegeben. Im Prozessor erfolgt der Vergleich des Leitungszustandes (für alle 32 Objekte) zum Zeitpunkt 1 und Zeitpunkt 70. Nur bei gleicher Information wird das Ergebnis per Parallelshift angezeigt. Die Schaltung und das gesamte Programm ist recht komplex, des kann ich nicht alles hier zeigen.
:
Bearbeitet durch User
Dietmar P. schrieb: > Die Schaltung und das gesamte Programm ist recht komplex, des kann ich > nicht alles hier zeigen. OK. Dann nicht. Abgesehen von deinen Hardware-Sünden denke ich aber trotzdem, dass du hier im Programm einen Bock geschossen hast. Deine Entprellung kommt mir erstens deutlich zu kompliziert vor und ob die zweitens tatsächlich entprellt, davon bin ich noch lange nicht überzeugt. Im Moment denke ich eher, du verzögerst da zwar etwas rum, aber im Grunde 'beisst' dein Code immer noch beim geringsten Puls. Etwas verzögert zwar, aber er beisst. > MISO per Leitung an den 74HC595 Wo kommt da jetzt auf einmal ein 595 ins Spiel?
:
Bearbeitet durch User
Dietmar P. schrieb: > Nein, nein, keine Lochrasterplatine, ist 'ne gedruckte Schaltung. > > 1. ok, sollte ich nachholen > 2. Was für ein Filter? So wie Dietrich dir das schon gezeigt hat. Beitrag "Re: ATMEGA32 Prellspitzen abfangen" Leitungen die nach draussen gehen macht man immer niederohmig damit die sich nichts einfangen. Die internen Pullup im Bereich von 50 .. 100K sind da viel zu hochohmig. > 3. dto. Versorgungsleitung? Kleine Drossel in Reihe und Kondensator nach GND.
@ helmi1: Danke, damit kann ich etwas anfangen. Werde mal die Überarbeitung der Schaltung ins Auge fassen. @kbuchegg: Leitungen geben Information in das Parallelregister des 165. Beim Parallelshift-Impuls werden alle Informationen zur Taktzeit 0 in das Schieberegister geladen. Taktzeit 1 bis 32 schiebt die Informationen (MISO) per Leitung an an den 595. Dort ebenfalls in das Schieberegister. Zur Taktzeit 0 werden die Informationen aus dem Schiebergister in das Parallelregister geladen an dem die LEDs hängen. Meine Dämpfung besteht nun darin, dass beim Zyklus 1 und Taktzeit 0 der Parallelshift beim 165 und 595 erfolgt. Der momentane Leitungszustand, den ich parallel zum Schieberegister im 595 auch im Prozessor in ein Register geladen habe wird dann bei der Taktzeit 70 mit dem Zustand Taktzeit 1 verglichen. Wenn das Ergebnis gleich ist, erfolgt der Parallelshfit für den 595 und die Auswertung wegen eines evtl. Alarms. Ändert sich der Leitungszustand zwischen Taktzeit 1 und 70 wird alles zurückgesetzt und wieder bei 1 begonnen. Ich habe das mit einem Durchlaufzähler gelöst, könnte man wahrscheinlich leichter (?) über eine Zeitkonstante lösen. Gruß
:
Bearbeitet durch User
Nach zwei Jahren und dem Horror vor dem Herstellen kompletter, neuer Platinen hatte ich eine Idee zur Lösung meines "Prellproblems" bei mechanischen Schaltspitzen (Kühlschran, Eltako, usw.) Habe direkt nebem dem Mega-32, so eng wie möglich, auf die Platine zwei Kondensatoren angebracht: 1. 10 µF (!) zwischen Versorgungsspannung VCC und GND 2. 10 nF zwischen PC4 (mein Info-/Miso-Eingang) und GND Das System läuft, ansonsten ungeändert, seit Wochen absolut stabil. Billig gelöst. Wollte das nur abschließend berichten. Gruß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.