Hallo liebes Forum,
ich stehe vor einem Problem und kann mir keine Lösung zusammenreimen:
Ich habe auf Lochraster eine kleine Schaltung aufgebaut, wird über
Batterie versorgt. Über einen Pushbutton werden einfach ein paar LEDS
geschaltet, nix aufregendes. Als Gehäuse für mein Gerät habe ich ein
32mm PP-Abflußrohr genommen. Und ab hier wird es kurios: Packe ich die
Schaltung in das Rohr, spinnt die Schaltung, nehme ich sie aus dem Rohr
raus, läuft alles so, wie es soll. Die Schaltung spinnt auch nicht
komplett, sondern interpretiert dann ein Tastendruck anscheinend als
zwei, als wäre der Taster nicht entprellt, was ich aber softwaremäßig
mache; habe jetzt eine Entprellzeit von ca. 60ms, aber es hilft nicht.
Nehme ich das Rohr (welches die Platine auch nirgends berührt!) wieder
weg, läuft alles so, wie es soll, also meine Billo-Entprellroutine
funktioniert da einwandfrei.
Kann irgendwer mit mir rumrätseln, was da los ist..?
Leider ist die Kamera von meinem Telefon kaputt und ich kann euch keine
Fotos schicken...
Bin ratlos und über jeden Tip dankbar...
Claudia k. schrieb:> Leider ist die Kamera von meinem Telefon kaputt und ich kann euch keine> Fotos schicken...
Wichtiger wäre wahrscheinlich der Schaltplan und die Software ...
Hallo,
solche Abflussrohre laden sich gerne Mal statisch auf. Das hat
sicherlich Auswirkungen auf deine Schaltung. Probiere Mal ein anderes
Gehäuse oder das Rohr zu "entladen". Reicht evtl. schon es an ein
Heizungsrohr zu halten.
Florian mutmaßte:
> solche Abflussrohre laden sich gerne Mal statisch auf.
Naja, die Ladung fließt aber ganz schnell wieder ab, denn es handelt
sich ja schließlich um ein Abflußrohr.
Florian S. schrieb:> Probiere Mal ein anderes> Gehäuse oder das Rohr zu "entladen".
Einen NICHTleiter???
Lieber die eine Hand an die Heizung und mit der Andren über die
Plasteoberfläche streichen.
Kleb Alufolie innen drüber o.ä.
Oh, danke für die schnellen Antworten, es wird wohl die statische
Aufladung sein. Alle Pins sind belegt, ein Eingang mit internen Pullups
(Attiny45). Kann ich das Rohr einfach mit meinem Ground verbinden?
(Nichtlackiertes) Heizungsrohr hat nicht geholfen... Sonst wohl den
Eingang extern beschalten...
Muss kurz weg, bin in halber Stunde wieder da.
Bis gleich und DANKE!
Claudia k. schrieb:> Kann irgendwer mit mir rumrätseln, was da los ist..?
Nimm mal versuchsweise ein Katzenfell (o.ä.) und reibe kräftig
über das PP-Rohr. Dies könnte die Probleme beheben oder zumindest
signifikant verringern.
So: 1k als externen Pullup an den Eingang und alles läuft, wie es soll!
Auf die statische Aufladung bin ich nicht gekommen...
R1 ist 22k, hab noch einen 47n als Reset-Beschaltung hinzugefügt.
Danke für die schnelle und erfolgreiche Hilfe!
Schönen Abend euch allen!
Hat leider nur bei den ersten zwei Tests geholfen, jetzt wieder das
gleiche Problem. Mist. Naja, probier ichs mal mit nem kleineren
Widerstand und sonst Alufolie, wobei das auch nervt...
Falls irgendwer noch ne andere Idee hat, i'm very open minded...
Peter K. schrieb:> Nimm mal versuchsweise ein Katzenfell (o.ä.) und reibe kräftig> über das PP-Rohr. Dies könnte die Probleme beheben oder zumindest> signifikant verringern.
Habe gerade die Katzenfalle aufgestellt. Wenn Nachbars Katze heute nacht
reintappt, probier ich das morgen.
Hallo Claudia,
ich würde am Taster 10kOhm nach Plus und 10nF nach Masse schalten.
Außerdem 100 Ohm in Reihe zum Eingang. Den internen Pull Up ausschalten.
Der Microcontroller ist CMOS, deshalb braucht er 10nF Ceramic zwischen
VDD und GND. Das liegt am komplementär MOS. Bei einer Push/Pull
Schaltung wird theoretisch immer nur eine FET leitend. In der Praxis
schalten für einen kurzen Augenblick beide gleichzeitig durch. Um die
dadurch entstehende Stromspitzen auf der Versorgungsspannung zu
vermeiden, muss der Kondensator so nahe wie möglich an die Pins.
Vergisst man das, gibt das die ulkigsten Effekte ;-)
Grüße,
Andreas
Claudia k. schrieb:> Hat leider nur bei den ersten zwei Tests geholfen, jetzt wieder das> gleiche Problem. Mist. Naja, probier ichs mal mit nem kleineren> Widerstand und sonst Alufolie, wobei das auch nervt...> Falls irgendwer noch ne andere Idee hat, i'm very open minded...
kalte Lötstelle?
es scheint mir komisch das es im ausgebuten Zustandfunktioniert,
Verspannung beim Einbau?
Ich hatte das in meiner Industriezeit mit DIP Switches, auf dem ICT
unter Vakuum mit Verbiegung arbeitete der Switch perfekt, in der
Klimakammer fiel er aus, die Gehäuseschalen vom switch waren nicht
passgenau zusammengefügt.
Joachim B. schrieb:> kalte Lötstelle?> es scheint mir komisch das es im ausgebuten Zustandfunktioniert,> Verspannung beim Einbau?
Da hatte ich auch daran gedacht. Wie wird die Platine im Rohr mechanisch
gehalten? Wird sie verklemmt oder verbogen?
Claudia k. schrieb:> Leider ist die Kamera von meinem Telefon kaputt
Keine richtige Kamera? Dann das Handy des Freunds / Kumpel /Partners?
Bitte Bildformate beachten.
Joachim B. schrieb:> kalte Lötstelle?
soetwas würde ich auch eher vermuten, oder einen Haarriss in einer
Leiterbahn, ist das eine selbstgefertigte Platine?
Eine statische Aufladung ist nach kurzer Zeit weg, die hat keinen
dauerhaften, immer gleichen Einfluss auf die Funktion.
@ Johannes S. (jojos)
>Leiterbahn, ist das eine selbstgefertigte Platine?
Claudia k. (Gast) schrieb:
>Ich habe auf Lochraster eine kleine Schaltung aufgebaut, wird über
also: ja, ist auf Lochraster aufgebaut. Habe allerdings drei Sück
aufgebaut und durchprobiert, bei allen tritt das Problem auf. Auch nie
direkt nachm Einbau sondern erst etwas später; Erst dachte ich auch, es
wäre meine Entprellroutine, hab da alles mögliche durchprobiert und hat
auch keine Abhilfe geschaffen. Dann dachte ich an die Befestigung und
quasi das "Biegen" der Platine beim drücken des Tasters (denn sie "hing"
quasi nur an der 5-poligen Stiftleiste, siehe Board oben). Hab dann
Platine gegen das Biegen gesichert, auch keine Abhilfe. Gestern dann
noch den Tip von Andreas B. ausprobiert (siehe Schaltplan). Auch da
nochmal etwas mit Werten rumgespielt und C3 auch mal direkt an PB2
gesetzt, hat alles nicht geholfen. Katze war auch keine in der Falle.
Hatte gestern Abend keine Alufolie (ist bei meiner Kamera), aber jetzt
welche. Dann etwas Zeitungspapier um die Platine und dreimal Alufolie
drum, et voila: läuft!
Ich hab die statische Aufladung in drei Versuchsrohren nicht
wegbekommen. Ich hatte auch schonmal ein identisches Rohr als Gehäuse
genommen, da wurde ein Taster und zwei Potis ausgelesen, ohne
großartige Sicherheitsmaßnahmen, das Gerät läuft bis heute ohne Probleme
(ist aber auch von außen quasi von einem großen Schrumpfschlauch
eingeschweißt).
Tatsächlich trat das Problem immer erst nach einer kurzen Weile auf. Und
alle Jubeljahre hat es dann mal richtig funktioniert.
Also zumindest bei mir verschwand die statische Aufladung irgendwie
nicht, oder kam vielleicht immer sehr schnell wieder, weil manchmal hat
es ja funktioniert.
Vielen lieben Dank für das rege Interesse und auch für die teilweise
weiterführenden Hinweise! Jetzt weiß ich endlich was CMOS wirklich
bedeutet! Danke und schönen Tag euch allen!
Schon wieder denkste: hab jetzt nochmal ne ganze Weile rumgespielt, das
Problem trat immer noch auf, aber eher 1 von 10mal (und auch erst nach
einer Menge guten Versuchen). Jetzt von außen Alufolie um das Rohr um
neue Aufladung zu verhindern, bisher klappten 20 Versuche. Setze
Versuchsreihe fort und berichte...
Ich würd mal testen ob der Fehler nicht vielleicht doch auch ausserhalb
des Rohres auftritt. Denn das ganze klingt doch sehr nach Magie, die es
bekanntlich nicht gibt.
Noch während der Testreihe schonmal die Frage: Alufolie um die Platine
wickeln hat ja schon recht ordentlich geholfen; Gilt da wohl eigentlich
auch die "Viel hilft viel"-Devise? Denn hatte jetzt auch wieder einmal
das gleiche Fehlerbild. Also mit Alufolie von außen um Rohr und dreifach
um Platine ca.1 von 30 Versuchen schlecht...
Claudia k. schrieb:> sondern interpretiert dann ein Tastendruck anscheinend als> zwei, als wäre der Taster nicht entprellt
Exakt so isses, ein Delay ist eben noch lange kein Entprellen.
Du nimmst zum Einlesen den externen Interrupt und das ist der Fehler.
Wenn Du nach dem Delay den Interrupt wieder freigibst, hat der Preller
schon lange das Interruptflag gesetzt und der nächste Interrupt wird
ausgeführt. Daher erkennst Du immer 2 Tastendrücke.
Eine saubere Entprellung mit Timerinterrupt und Mehrfachabfrage macht
diesen Fehler nicht.
Wirklich: habs hundertmal ohne Rohr probiert, NIE ein Fehler. Sobald das
Rohr drum ist (ohne Berührung der Platine) tritt das Problem sofort auf
(ohne Alufolie). Ist mir tatsächlich ein Rätsel, weil wie gesagt, hatte
schonmal einen ähnlichen Aufbau, ging reibungslos.
Wie gesagt, verschiedene Platinen, verschiedene Rohre, verschiedene
Led-Stränge. In allen Kombinationen: ohne Rohr bisher NIE einen Fehler,
mit Rohr sehr häufig. Aber ich wills auch nicht auschließen, dass der
Fehler woanders liegen könnte, hab da aber irgendwie schon alles, was
mir einfällt, woran es noch liegen könnte, probiert. Probiere aber auch
alle anderen erdenklichen Tips aus, bin auf gar keinen Fall
beratungsresistent. Code jedoch würde ich tatsächlich ausschließen.
Ich mach mal Mittagspause und hol ne Kamera und schick dann endlich mal
Fotos!
Hi,
ich würde gerne mal wissen wie denn die tasten gedrückt werden, wenn die
Schaltung im Rohr steckt.
Sprich: Wie und wo gehen denn die Taster nach "außen"?
habs hundertmal ohne Rohr probiert,
Glaub ich gerne. Ich habe mal einen Fehler in einem Messgerät gehabt,
der nur alle 500000 Versuche auftrat. Das war Ätzend.
Vielleicht spielt das Biegen von Kabeln eine Rolle? Evtl dadurch
veranlasste Kurzschlüsse/Unterbrechungen?
Peter D. schrieb:> Eine saubere Entprellung mit Timerinterrupt und Mehrfachabfrage macht> diesen Fehler nicht.
Entprellung läuft ohne Delay über Timer, NICHT über Tastengesteuertes
Interrupt sondern über Abfrage ca. alle 20 ms (auch da schon diverse
Werte ausprobiert.) Wird momentan dreifach abgefragt. Hab auch schon
fünfach abgefragt und was weiß ich ausprobiert, es ist nicht die
Entprellroutine. Wie gesagt, ich mach mal Pause, ich kann dann auch
meinen Code posten, aber da wird der Fehler nicht liegen. Weil eben eine
mehr als signifikante Verbesserung nach der Alufolie auftrat. Und NIE
ein Fehler ausserhalb des Rohres, mit allen möglichen Versuchen, blöde
zu drücken.
Essen, Fotos, Code. Und danke für eure Mithilfe.
Ich würde die Alufolie innen vollflächig aufs Rohr kleben. Dann kann
sich innen schon mal überhaupt keine Ladung aufbauen. Außen angebracht,
könnten sich innen immer noch unterschiedliche Ladungsbereiche auf der
Plaste bilden.
Ich glaue aber auch nicht mehr dran, das es daran liegt. Nicht nach all
deinen Verbesserungen.
Irgendetwas übersiehst du sicher, die Ladung müsste mittlerweile so hoch
sein, um noch für die Störungen verantwortlich zu sein, das es den µC
zerstörten würde.
Hallo,
claudia k. schrieb:> meine Entprellroutine,
Was ist denn deine "Entprellroutine"?
Die R6, R7, C3 an PB2 ist auch nicht korrekt!
An PB2 ist dadurch kein RC-Tiefpass geschaltet, der HF Filter.
Der Taster schliesst beim Betätigen C3 kurz, das führt zu einem hohen
Strom und defekte Kontakte!
Also hier jetzt mal Fotos, ich denke, alles wichtige ist darauf zu
erkennen. Vor allem: bei meinen Versuchsreihen ändere ich quasi
tatsächlich nur die Position des Rohres, welches weder die Platine
berührt. Auch habe ich das Batteriepack nicht reingepackt, also die
Kabel sind nicht geknickt, sieht man auch auf den Fotos. Außerdem
nochmal die Unterseite der Platine, ist jetzt etwas unsauber weil an der
gestern noch viel Rumprobiergelöte, aber alles durchgefiept, nirgendwo
Kontakt.
So und jetzt ist es (endlich!) mal passiert: Ich sitz ja hier nebenbei
rum und teste die ganze zeit, grad ohne Rohr drum, der Fehler ist jetzt
auch so einmal aufgetreten. Also bei einem von ca. 50 Versuchen in
dieser Reihe. Vorher ca. 100 Versuche ohne diesen Fehler. Vielleicht
liegts doch an der Entprellung, dann Asche auf mein Haupt. Schicke
gleich nen Post zu Code und Programmablauf...
Hallo,
Ich habe diese Rohre auch im Einsatz und verbaue hier HF-Schaltungen,
Antennen Anpassungen, Schrauben V2A, V4A und Stecker PTFE und für die
Aussenmontage spezifiziert. Somit alles Wasserdicht.
Nein das ist kein Leiter, sonst wäre auch die Annahme der
Elektronenaufladung unsinnig.
oh oh... Hab grad was gesehen, nämlich dass da ein Aufruf meiner
Entprellung (quasi als delay) auskommentiert war... oh oh. An einer
recht relevanten Stelle, gleich nachm Aufwachen... Heiei... Was einiges
erklären würde, zwar nicht warum es vor allem im Rohr auftritt, aber
sonst... Das wäre jetzt peinlich...
Hallo,
ein kleiner Formalismus:
In einer ISR löscht nicht und gibt das globale Interrupt Flag nicht
frei, wenn man nicht weiss, was man tut!
1
ISR(TIMER0_COMPA_vect)
2
{
3
cli();
4
:
5
sei();
6
}
Man frage sich bitte, was passiert, wenn eine Interrupt Anforderung
erfolgt und der Interrupt Vektor angesprungen wird.
Was passiert dann auf dem Stack?
Hallo,
es sieht so aus als würdest du den externen Interrupt nicht disable,
nachdem du die Taste erkannt hast.
Ich würde folgendes vorschlagen:
Timer aus
Flankeninterrupt auf fallende Flanke aktivieren
Wenn Taste gedrückt wird, kommt der Flankeninterrupt.
In der Isr Flankeninterrupt disable und Timer starten
Nach 20ms Timer stop. Portlevel checken, wenn Port low, dann Taste
gedrückt, Flankeninterrupt auf steigende Flanke programmieren.
Wenn Port high war, war Taste nicht lange genug gedrückt -
Flankeninterrupt auf fallende Flanke programmieren.
Wenn Taste losgelassen wurde kommt der Interrupt für steigende Flanke -
key release
Anschließend wieder auf fallende Flanke programmieren.
Anmerkung:
20ms reichen normalerweise zur Entprellung
Die Taste prellt nur beim Drücken, nicht beim Loslassen.
Normalerweise wacht die CPU selbst auf bei einem Interrupt.
Grüße
Andreas
Ich glaube nicht, dass das dein Code ist. Da wird nirgends die Funktion
"button_entprellen" aufgreufen, ausser im Main. Und dort ist es
auskommentiert!
Zudem macht die Funktion wenig sinn... nachfolgend habe ich nur die
Variablen angepasst. Aber da man nicht erkennt wie die Funktion
aufgerufen wird, ist das nur eine Vermutung für eine Verbesserung!
1
uint8_tbutton_entprellt()
2
{
3
/* timer0 als zeitquelle;
4
mit prescaler 1024 taktfrequenz von ca. 1/1000s;
5
mit OCR0A = 20 ca. 20ms entprellzeit pro vollem durchlauf;
6
*/
7
//uint8_t counter_intern = 0; //<= WIRD NICHT VERWENDET
8
uint8_tcounter_entprellt=0;
9
constuint8_tentprellrunden=3;//<= KONSTANT
10
counter_timer0_flag=0;
11
12
for(uint8_ti=0;i<entprellrunden;i++)
13
{
14
while(counter_timer0_flag!=1)
15
{
16
}
17
18
counter_timer0_flag=0;
19
if(button_down)
20
{
21
counter_entprellt++;
22
}
23
else//<= PRELLEN MUSS COUNTER AUF 0 SETZEN
24
{
25
counter_entprellt=0;
26
}
27
}
28
29
if(counter_entprellt==entprellrunden)
30
{
31
return1;
32
}
33
else
34
{
35
return0;
36
}
37
}
Und die Funktion ist blockierend. Soll das so sein?
Mir scheint, nach einer kurzen Testreihe, dass dieses kurze
auskommentierte quasi-delay der Fehler war. Ich versinke vor Scham im
Boden... Ich bin für alle Hinweise zu meiner Programmierung dankbar,
weil da geht noch einiges besser...
Muß jetzt aber erstmal zur Arbeit, nehme das Gerät mit und teste und
schau heute Nacht hier nochmal vorbei...
danke an alle!
claudia k. schrieb:> Habe allerdings drei Sück aufgebaut und durchprobiert, bei allen tritt> das Problem auf
Dann kann man einen Wackelkontakt der beim Drücken des Tasters
mechanisch auf die Platine übertragen wird zumindest ausschliessen, das
wäre nämlich mein erster Gedanke gewesen.
Ganz kurz noch:
Patrick B. schrieb:> Ich glaube nicht, dass das dein Code ist. Da wird nirgends die Funktion> "button_entprellen" aufgreufen, ausser im Main. Und dort ist es> auskommentiert!
Habe ein paar unwichtige Codeteile weggelassen (void orakel..., void
lampen...) da wird die Entprellung öfter aufgerufen, in dem Stil hier:
void lampe_02_modus()
{
uint8_t go_sleep = 0;
PORTB |= (1 << kerze_1) | (1 << kerze_2) | (1 << orakel_1) | (1 <<
orakel_2);
time_counter_minute = 0;
while ((go_sleep == 0) && (time_counter_minute < ABSCHALTZEIT))
{
if (button_down)
{
if (button_entprellt())
{
go_sleep = 1;
}
}
}
}
Hier quasi als Ausschalter, an anderer Stelle als Stop-Schalter (für das
das Münzspiel)
Patrick B. schrieb:> Und die Funktion ist blockierend. Soll das so sein?
Ist in der Anwendung gerade etwas egal, weil es passiert ja nichts außer
LED-Geflacker, und das läuft über Timer1 und wird somit ja nicht
blockiert. Ich bring mir gerade die Nutzung der Timer bei, würde mich
auch freuen, es bald nicht-blockierend zu lösen, aber eins nach dem
anderen... Offensichtlich haperts bei mir ja noch an grundlegenderen
Dingen.
Jetzt muss ich wirklich los, danke und ich nehm mir heute nacht alle
anderen Anregungen zu Herzen...
Andreas B. schrieb:> Die Taste prellt nur beim Drücken, nicht beim Loslassen.
Das würde ich nicht unterstreichen!
Außer du hast eine Taste mit Hg-benetzten Kontakten, die prellt dann
aber auch beim Drücken nicht.
HildeK schrieb:> Andreas B. schrieb:>> Die Taste prellt nur beim Drücken, nicht beim Loslassen.>> Das würde ich nicht unterstreichen!> Außer du hast eine Taste mit Hg-benetzten Kontakten, die prellt dann> aber auch beim Drücken nicht.
Normalerweise prellt die Taste beim Loslasen nicht, problematisch sind
höchsten Schiebeschalter. Das ist auch klar, wenn man sich die Mechanik
anschaut. Da werden die zwei Kontakte mit Federkraft, ausgelöst durch
den Tastendruck, aufeinandergepresst. Man kann das auch sehr schön mit
einem Speicherscope anschauen.
Zur zusätzlichen Sicherung habe ich ja den Kondensator gegen Masse
empfohlen. Mit dem Widerstand bildet das einen Tiefpass.
@Andreas B.
Du schreibst "Die Taste ...". Das kann man nicht unkommentiert stehen
lassen, oder gibt es nur die eine? :-) Ich kenne viele und auch sehr
schlechte darunter.
Ich würde allgemein einfach nicht darauf bauen ...