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?
Man sollte mal unter die Lötkleckse gugen, ob das auch richtig gelötet is! Und dann a bisserl mehr Mühe geben, damit sowas nich wieder passiert.
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 ;-)
Stell mal was anderes drauf, vielleicht isses ja bloß ein Wackelkontakt oder kalte Lötstelle?!
die oe leitung ist unterbrochen oder wird von der software nicht angesteuert.
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.
oder strobe oder beide. Initialisierung von port b?
Versehentlich die QTouch Library eingebunden? * duckundweg * :D
Wenn ich was anderes außer meinen Finger drauflege passiert nichts. Nur mit dem Finger gehen die LEDs an. Tja die Lötklekse sollten nun bald Geschichte sein, habe mir zu Weihnachten einen ERSA Feinlötkolben gegönnt.
Ich habe nun noch einen Test gemacht. Wenn ich mit dem Schraubendreher auf PB0 vom 328p ankomme, dann gehen auch wieder die Lichter an.
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)
|
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.
Kannst du denn mal ein Bild von der Oberseite zeigen? Kann ja sein, dass der Mega nicht richtig in der Fassung steckt (bzw. Beinchen daneben) und du per Fingerdruck Kontakt herstellst?
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.
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.
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?
Nino K. schrieb: > einen 0,1µF Kondensator > für den 328p Hat der 328P nur einen Versorgungsspannunganschluß? Dann fehlen immer noch die 7 Kondensatoren für die anderen ICs.
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.
Da fehlen jede Menge Abblockkondensatoren. Ein Oszi hast Du nicht? Grüsse, René PS: der Quarz schwingt auch ohne Finger?
Nino K. schrieb: > Ich habe es nun mit einem Erdungskabel versucht und siehe da es > funktioniert. Ich würde das nicht Erdungskabel nennen, dass ist eher eine Antenne, die jegliche Störungen einfängt.
Rene H. schrieb: > Da fehlen jede Menge Abblockkondensatoren. stört mich auch gewaltig, nicht mal einer am AVR, von den 40xx ganz zu schweigen, wäre echt Zufall wenn das so läuft
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.
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.
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?
Nino K. schrieb: > Soll ich noch einen Kondensator setzen wo ich den Stromstecker anstecke? Hängt davon ab, wie lang die Leitung vom Netzteil ist. Bei der aber nicht ganz unwesentlichen Anzahl LEDs würd ich mal 1000µF o.ä. als 6,3V Standardelko vorsehen.
Habe mir mal die Datenblätter von dem 4094 und ULN2003 angeschaut. Beim 4094 finde ich VCC und GND. Somit ein leichtes dort den Kondensator einzulöten. Ein Bein an Plus, Ein Bein an Minus. Beim ULN2003 finde ich aber nur GND. Wie soll ich da einen Kondensator einlöten?
Nino K. schrieb: > Beim ULN2003 finde ich aber nur GND. > Wie soll ich da einen Kondensator einlöten? Es gibt z.B. noch den Pin 9, an dem normalerweise die positive Schaltspannung liegt.
Beim ULN auch nicht nötig, das sind einfach 7 Transistoren in einem Gehäuse.
Datenblattfinder schrieb: > Es gibt z.B. noch den Pin 9, an dem normalerweise die positive > Schaltspannung liegt. Oh, an diesem Pin hängt in dieser Schaltung rein gar nichts. :-)
qwertzuiopü+ schrieb: > Beim ULN auch nicht nötig, das sind einfach 7 Transistoren in einem > Gehäuse. Okay, dann fasse ich mal zusammen: + 1 Kondensator an jeden 4094. (0,1µF) + 1 Kondensator an den Mega. (0,1µF) + 1 Kondensator zum Pin vom Stromstecker. (1000µF) Dann sollte eigentlich alles schön schwingen. Stimmt das so?
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.
Nino K. schrieb: > Datenblattfinder schrieb: >> Es gibt z.B. noch den Pin 9, an dem normalerweise die positive >> Schaltspannung liegt. > > Oh, an diesem Pin hängt in dieser Schaltung rein gar nichts. :-) Ist in dieser Anwendung nicht notwendig, also OK
Piepe mal die Leitung von PB1 von IC-Pin zu IC-Pin durch, vielleicht hat die Leiterbahn einen Haarriss?
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.
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.
Nino K. schrieb: > Zuvor habe ich noch die 100N Kondensatoren reingelötet. > Dies hat aber leider nichts gebracht. doch auf jeden Fall mehr Betriebssicherheit!
Nino K. schrieb: > 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. > ..... > Was könnte ich hier falsch gemacht haben? Weiss ich nicht, aber mit Sekundenkleber könntest du den Finger dort dauerhaft fest machen.
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...
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.