LEDs leuchten nur mit Finger am Controller (Word2Clock)

OP #4411321
Lesenswert?

Hallo an alle,

ich habe ein ziemlich seltsames Problem bei einer Word2Clock Variante.

http://kevinrye.net/files/word_clock.php

Die LEDs leuchten nur dann wenn ich mit meinem Finger auf den ATMega328p 
oder darüber bin. Das Programm an sich läuft aber weiter.

Hier ein Video dazu zur besseren Darstellung:

https://www.dropbox.com/s/j7z566uyh8vw5sg/video%2003.01.16%2019%2030%2046.mov?dl=0

Die LEDs haben eine gemeinsame Anode.

Die Platine und der Schaltplan sind im Anhang zu sehen.

Was könnte ich hier falsch gemacht haben?
Angehängte Dateien:
Gast #4411338
Lesenswert?

Hi,
mit deinen fetten Lötklecksen eine Lötbrücke gebildet,
die unter Druck von oben sich wieder öffnet?

Deshalb alle Lötstellen der Platine kontrollieren und wenn möglich etwas 
Lötzinn wegnehmen (Entlötlitze).

Ansonsten könnte es alles mögliche sein ;-)
#4411358
Lesenswert?

Meistens ist das ein Symtom eines offenen CMOS Eingang der da in der 
Region zwischen GND und VCC schwebt. Wenn Du Deine Hand in die Nähe 
bringst verschieben kapazitive oder elektrostatische potentiele den 
Logischen Pin Zustand.

Überprüfe Deinen Schaltplan, messe ob alle Eingänge anweisungsgemäß 
angeschloßen sind. Ungebrauchte Pins sollten immer irgendwie in default 
gebracht werden (Pullups aktivieren, oder pins auf Ausgang schalten) 
nicht aktivierte Pullups an vorgesehene Eingänge kann auch eine Ursache 
sein.

Der Reset Pin darf nicht versehentlich in der Luft hängen. Auch eine 
schlechte IC Fassung kann Probleme verursachen. Es kann auch passieren, 
dass ein nicht gesehener verbogener pin nicht im Fassungskontakt steckt.

Versuche in der Zukunft nur die Hälfte Lötzinn zu verwenden.
Gast #4411421
Lesenswert?

Theorie:
PB1 (Pin 9) geht an die output-enable-Eingänge der Schieberegister, wird 
aber soweit ich das erkennen konnte, nie konfiguriert oder gesetzt, 
müsste also (wenn das Arduino-Framework nicht die nicht verwendeten Pins 
im Hintergrund irgendwie setzt. Habe keine Ahnung von Arduino) in der 
Luft hängen. Mit deiner Hand (oder dem Schraubenzieher am Nachbarpin) 
koppelst du kapazitiv irgendwelchen Mist ein, der den Pegel an dieser 
Leitung gelegentlich hoch zieht und die Ausgänge enablet.

Übrigens ist megacleverer Code wie der von Herrn Rye der Grund, warum 
ich Anfängern von Makros abrate, wenn es irgendwie anders geht.
1
#define HTEN  Display3=Display3 | (1<<3)
OP #4412542
Lesenswert?

Ich habe nun mit der Entlötlitze jede einzelne Lötstelle entfernt und 
nochmal neu gemacht.

Leider ist das Problem noch immer das gleiche.
Nur mit meinem Finger in der Nähe oder auf dem 328p leuchten die LEDs.
Das Programm läuft aber normal weiter, nur die LEDs gehen aus.

Kann ich hier irgendwo eine Brücke oder ähnliches setzen, damit die LEDs 
auch ohne Finger leuchten?

Die Lötstellen können wir nun sicherlich ausschließen, diese sind nun 
sauber.

Bin um jeden Tipp dankbar.

Seltsam ist nur, dass die Uhr von Kevin Rye schon mehrere gemacht haben 
und keiner hatte ein ähnliches Problem. Selber Code, selbes Boardfile.
Angehängte Dateien:
Gast #4412565
Lesenswert?

Ich sehe überhaupt keinen Abblockkondensator, kann das sein?

Schaltungen funktionieren auch ohne eine übertriebene Anzahl von 
"Angstkondensatoren", aber überhaupt keiner kann auch nicht gut sein. 
Außerdem würde ich nochmal den Hinweis von Tom verfolgen, denn Arduino 
setzt im Framework IMHO keine Ports von alleine.
OP #4412593
Lesenswert?

Anbei ein Bild der Platine von oben. Sieht eigentlich ganz okay aus.

Ich habe 2x 22pF Kondensatoren für den Quarz und einen 0,1µF Kondensator 
für den 328p. Sollte das nicht reichen? Ich habe ein 5V 1A Netzteil und 
brauche somit auch keinen Spannungsregler.

Mit dem Hinweis von Tom kann ich aktuell nicht viel anfangen. Ist das so 
gemeint, dass PB1 im Code nirgends referenziert wird? Bin nämlich auch 
kein Arduino Spezialist.
Angehängte Dateien:
OP #4412625
Lesenswert?

Habe nun mal das Pinout vom Arduino gecheckt.

Meiner Meinung nach sollte das passen.
1
// hardware constants
2
int LEDClockPin = 6;
3
int LEDDataPin = 7;
4
int LEDStrobePin = 8;
5
int FWDButtonPin = 4;
6
int REVButtonPin = 5;
7
int EnablePin = 9;

9 bedeutet PB1 - welcher die Verbindung zu den Shift Registern ist.

Somit wird im Code darauf referenziert.

Laut dieser Tafel:
http://wwww.radikalblogger.de/wp-content/uploads/2015/09/uno.jpg

Sonst noch irgendwelche Ideen?

Wenn ich einfach eine Antenne wie beim Radio setze, oder ein 
Erdungskabel wie bei diversen elektronischen Geräten?
OP #4412680
Lesenswert?

Ich habe es nun mit einem Erdungskabel versucht und siehe da es 
funktioniert.

Wenn dieses Stück Kupferdraht am PB1 gelötet ist, welcher die Verbindung 
zu den Shift Registern ist, dann scheinen die LEDs wie sie sollen ohne, 
dass ich den Finger benutzen muss.

Naja ist ein Workaround, aber ich denke unbedenklich. Die Platine sollte 
nicht abbrennen. :-)

Zu den Kondensatoren:
Das könnte in der Tat eine logische Ursache sein.
Hatte ich nicht bedacht, dass nicht nur den 328p sondern auch jeder 
andere IC einen eigenen Kondensator benötigen könnte.
Angehängte Dateien:
#4412696
Lesenswert?

Derjenige der die Schaltung und Layout entworfen hat traut sich einiges.
Nur ein 1µ Kondensator zwischen VCC und GND in der ganzen Schaltung.
Mich würde es nicht wundern wenn da etwas ganz grauenhaft schwingt und 
du diese Schwingungen durch das Berühren unterdrückst.
Besorge dir ein paar SMD-Kondensatoren 0806 mit 100n. Die passen 
zwischen die Beine des Mega. An die VCC-Beine der 4094 sollten auch 
welche.

Wenn ich auf der Platine die herrlich dünnen VCC-Leitungen sehe, auch 
zum Display, da kommt richtig Freude auf.
OP #4412706
Lesenswert?

Rene H. schrieb:
> Ein Oszi hast Du nicht?

Nö Oszi habe ich leider keinen. Aber ich gehe mal davon aus, dass der 
Quarz normal schwingt. Programm läuft normal und die Uhrzeit stimmt 
exakt.

Wenn der Quarz nicht schwingen würde, dann würde er mit Standard 8Mhz 
schwingen und dann würde das Demo Programm wesentlich langsamer laufen.

Wo bekomme ich denn ein günstiges Oszi her? Brauche es ja nur alle 
heiligen Zeiten. Vielleicht kennt jemand einen guten und günstigen 
Anbieter.

Vermutlich werde ich in dem Eagle Board File noch die fehlenden 
Kondensatoren ergänzen und nochmal neu ätzen lassen.

Ich könnte aber auch versuchen auf die Unterseite der Platine die 
fehlenden Kondensatoren einzulöten, was aber ziemlich unschön wäre.

Oder doch mit dem Workaround der Antenne leben. Solang es funktioniert. 
:-)
Zumindest weiß ich nun, dass es mit ziemlicher Sicherheit an den 
Kondensatoren liegen wird.

Danke an alle für die Hilfe.
OP #4412720
Lesenswert?

Hubert G. schrieb:
> Derjenige der die Schaltung und Layout entworfen hat traut sich einiges.
> Nur ein 1µ Kondensator zwischen VCC und GND in der ganzen Schaltung.
> Mich würde es nicht wundern wenn da etwas ganz grauenhaft schwingt und
> du diese Schwingungen durch das Berühren unterdrückst.
> Besorge dir ein paar SMD-Kondensatoren 0806 mit 100n. Die passen
> zwischen die Beine des Mega. An die VCC-Beine der 4094 sollten auch
> welche.

Hat der Mega nicht schon einen Kondensator? Oder ist der zu weit weg?

Okay somit...

3 Kondensatoren an die 3 4094.
3 Kondensatoren an die 3 Driver.
1 Kondensator an den Mega.

Soll ich noch einen Kondensator setzen wo ich den Stromstecker anstecke?
Gast #4412765
Lesenswert?

Nino K. schrieb:
> Oh, an diesem Pin hängt in dieser Schaltung rein gar nichts. :-)

Normalerweise ist dieser Pin der gemeinsame Anschluß der eingebauten 
Freilaufdioden. Wenn Du keine Relais damit schaltest, ist der Pin nicht 
wichtig, dann braucht er auch keinen Kondensator.
Gast #4412776
Lesenswert?

Nino K. schrieb:
> int EnablePin = 9;
>
> 9 bedeutet PB1 - welcher die Verbindung zu den Shift Registern ist.
>
> Somit wird im Code darauf referenziert.

Nein. Es wird nur eine Variable mit 9 initialisiert. Die anderen 
Ausgänge sind alle als Ausgänge initialisiert
pinMode(LEDStrobePin, OUTPUT);
und werden im Code auch angesprochen:
digitalWrite(LEDStrobePin,HIGH);
Das sind die absoluten Arduino-Basics...

Ich wette, dass es funktioniert, wenn du in Init die Zeilen
1
pinMode(EnablePin, OUTPUT);
2
digitalWrite(EnablePin, HIGH);
ergänzt.
OP #4412846
Lesenswert?

Tom schrieb:
> Ich wette, dass es funktioniert, wenn du in Init die Zeilen
>
1
> pinMode(EnablePin, OUTPUT);
2
> digitalWrite(EnablePin, HIGH);
3
>
> ergänzt.

Danke Tom. Das war exakt das Problem.

Ich habe nun bei der Initialisierung folgendes drin stehen:
  // initialise the hardware
  // initialize the appropriate pins as outputs:
  pinMode(LEDClockPin, OUTPUT);
  pinMode(LEDDataPin, OUTPUT);
  pinMode(LEDStrobePin, OUTPUT);
  pinMode(FWDButtonPin, INPUT);
  pinMode(REVButtonPin, INPUT);
  pinMode(EnablePin, OUTPUT);
  digitalWrite(EnablePin, HIGH);

Und es läuft super.

Zuvor habe ich noch die 100N Kondensatoren reingelötet.
Dies hat aber leider nichts gebracht.

Erst als ich den Code wie Tom schrieb, angepasst hatte funktionierte 
alles.
Angehängte Dateien:
#4412958
Lesenswert?

Der Sicherheit halber schlage ich vor die Einstell Inputs 
vorsehungsweise so zu deklarieren:

pinMode(FWDButtonPin, INPUT_PULLUP);

Sind in Deiner Schaltung wirklich Pullups eingebaut?(Kann am iPad die 
Schaltbild Datei nicht öffnen)

Dadurch wird sicher gestellt dass Deine Inputs nicht im "Äther" 
schweben...

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