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.
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.
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:
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.
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?
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
Parallelshiftgeben
5
Schieberegistereinlesen
6
auswerten,wobei70malhintereinanderdasgleiche
7
Ergebniskommenmuss,damitdieAuswertungloslegt
8
9
entsprechendeVerzö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.
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.
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?
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ß
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ß