Grüßt euch und willkommen beim nächsten Weckerprojekt.
Das ist nach einem klassischen 3x3x3 LED Würfel mein erstes wirkliches Arduinoprojekt und ich werkle jetzt seit etwa einem Jahr daran herum. Alles hat mit einem 20x2 VFD Display von Ebay begonnen (Samsung 20L201DA3). Drumherum sollte ein Wecker entstehen, mit folgenden Eigenschaften:
-Funkgesteuerter Zeitempfang
-Plexiglasgehäuse
-Sonnenaufgangssimulation durch interne LED (3x Cree XP-G R4, insg. max 1000 Lumen)
-Weckton durch eine Klangschale die mittels Zugmagnet angeschlagen wird
-Bedienung durch einen einzigen Drehencoder mit Taster
Das Gehäuse ist inzwischen fast fertig, die Hardware läuft auch soweit. Was noch fehlt ist die Klangschale inkl. Schlagmechanismus. Leider stört das VFD den Empfang des Zeitsignals komplett, so dass ich es per Mosfet kurzzeitig abschaltbar machen musste. Mit diesem wird dann ein DS1307 gestellt, der im Normalbetrieb die Zeit liefert. Die letzten Tage habe ich mit Eagle verbracht, um die Schaltung demnächst auch ätzen zu können. Herausgekommen ist dabei dieser Schaltplan:
Für jeden Hinweis auf Fehler und Unklarheiten in dem Plan wäre ich mehr als dankbar, möchte ungern Platinen verschwenden. Hier noch zwei Bilder vom aktuellen Stand des Gehäuses und des Displays:
Besten Dank bereits an dieser Stelle, werde mich in den kommenden Tagen auch in Sachen Code noch an euch wenden.
Der Schaltplan sagt nicht alles. Wenn Du Deine Platine beurteilt haben willst solltest Du vieleicht besser gleich die vollständigen Eagle Files einstellen.
Was mir auffällt: Dein Controller läuft mit 16 MHz. Wenn die Zeit eh per RTC / DCF77 erfasst wird kannst Du eigentlich auch mit internem 8MHz Oszillator arbeiten --> 3 Teile gespart.
Weiterhin könnte man auch auf die Idee kommen den RTC per Kondensator zu puffern und damit die Batterie überflüssig zu machen.
Weiterhin würde ich VCC analog mit VCC verbinden. Damit könntest Du ggf. die Betriebsspannung zur Laufzeit überwachen. Brauchst Du mit Wahrscheinlichkeit 99% nicht, schadet aber auch nicht.
Falls Du eine induktive Last schalten willst ist eine Freilaufdiode bei den Transitoren vieleicht nicht schlecht.
Was Deine Transistoren angeht: was willst Du denn damit schalten? Sind Deine Leiterbahnen für den Strom ausgelegt oder sollen die als Sicherung fungieren
Besten Dank, das bringt mich schon viel weiter.
Hab die Schaltung mal auf 8Mhz Betrieb gekürzt und VCC analog mit VCC verbunden. Außerdem sind die Drain-Anschlüsse der Mosfets jetzt mit 1mm Leiterbahnen an die Anschlussklemme geführt. Eine Freilaufdiode ist vorgesehen, die will ich aber direkt an der Magnetspule verbauen, um nicht noch die von dieser benötigten 12V auf die Platine führen zu müssen. Die Batterielösung bevorzuge ich gegenüber einem Kondensator aus dem einfachen Grund, dass ich schon Batterien und Halter hier habe. Weiter finde ich es ganz nett, den Wecker auch mal eine ganze Weile abgesteckt lagern bzw. transportieren zu können und sofort wieder die passende Zeit zu haben.
Habe mal die .sch und .brd Dateien angehängt, hoffe das reicht um nachzuvollziehen was ich meine.
N$18 und N$16 sind unnötig eng zusammen. Wenn Du die Platine ätzen lässt kein Problem, wenn Du sie selber machst kommt es darauf an wie gut Du den Prozess unter Kontrolle hast.
Die Batterie kann man auch platzsparender platzieren
Du hast keine Montagelöcher vorgesehen
Du machst scharfe Knicke und Abzweigungen und 10er Leiterbahnen. Solange Du so viel Platz hast kannst Du doch auch 16er nehmen. Das gibt mehr Spielraum für Schwächen in der Produktion. Man geht nicht ohne Not auf dünne Leiterbahnen. Ja, 10er ist heute kein Problem mehr. Wenn Du selber ätzt kannst Du Dir aber in Eagle auch mehr Spielraum designen.
N$18 und n$16 führen zu Kurzschlüssen --> lass mal ERC und DRC laufen
C1 ist als Stützkondensator zu weit weg von beiden Chips, ansonsten ist er nutzlos
--> Du brauchst 3 Kondensatoren und diese müssen so nahe wie nur möglich an die Chips dran. Oder Du kannst sie gleich weglassen. Die korrekte Vorgehensweise ist jeden digitalen IC mit einem ~100nF Kondensator NAHE an VCC/GND zu stützen.
Du hast unheimlich viel Platz und machst dann trotzdem sehr kleine Vias, warum?
Hm, alles sehr gute Punkte, werde mich nochmal dransetzen und deine Hinweise einarbeiten. Bisher ist das Board hauptsächlich ein Produkt des Autorouters und dessen Standardeinstellungen. Ich will die Platine selbst ätzen und gehe nicht davon aus, da zunächst irgendwas unter Kontrolle zu haben. Die Kreise unter den ICs kommen vom Script "drill-aid", das die Mittelpunkte der Pads fürs spätere Bohren markiert. Spielerei meinerseits.
The DS32kHz is a temperature-compensated crystal oscillator (TCXO) with an output frequency of 32.768kHz. This device addresses applications requiring better timekeeping accuracy, and can be used to drive the X1 input of most Dallas Semiconductor real-time clocks (RTCs), chipsets, and other ICs containing RTCs. This device is available in commercial (DS32kHz) and industrial (DS32kHz-N) temperature versions.
Und der DS 1307 braucht die gar nicht. Beide ICs haben nix mit 'ner Funk-Uhr ( DCF 77 ) zu tuen.
Das sind RTC's ( Real Time Clock ) 's. !!! i.E. Echtzeit-Uhren. Aber niemals "Funk-Uhren" !
RTCs sind schon viel besser als Timer-programmierte Uhren, weil sie unabhängig vom Controller laufen, und die Temperatur-Abhängigkeit wurde vermindert.
Aber zum DCF 77 - gehört auch ein Empfänger + Decoder.
Orang hat nicht die ganze Schaltung offengelegt. So wie er das geschrieben hat will er per DCF77 die RTC einstellen. Davon abgesehen: wer schon den Schlaumeier raushängt macht sich voher hier schlau: http://www.apostrophitis.de/
Mir ging es hier vor allem um die Platine und ein brauchbares Layout zum anschließenden Ätzen. Wie Udo schon geschrieben hat, ist in meinem ersten Post nicht die ganze Schaltung zu sehen, da einiges extern über die Anschlussklemme angebunden wird.
Mein DCF77 Empfänger von Conrad hängt an Analogpin 1. Über diesen wird das Zeitsignal empfangen, der RTC Chip gestellt und im Anschluss daran das VFD Display über einen der beiden Mosfets eingeschaltet. Ich kann nicht durchgehend die Zeit per Funk empfangen, da das Display den Empfang komplett stört. Mit der Kombination aus temperaturstabilisiertem Quarz und DS1307, bleibt die Abweichung in der Zwischenzeit auf einem für mich sehr vertretbaren Niveau. Vertretbar in dem Sinne, dass ich einfach Freude an möglichst genau laufenden Uhren habe.
Wo ich schon dabei bin, kann ich ja noch schnell aufklären was noch wo angeschlossen ist:
Analog 1: DCF77 Empfänger
Digital 1: VFD
Digital 4: Encodertaster
Digital 6: LED
Digital 9 und 10: Encoder
Digital 12: VFD-Mosfet
Digital 13: Elektromagnet-Mosfet
Hoffe das bringt etwas mehr Klarheit in mein Vorhaben.
Schönen Sonntag noch!
So, hab mich an eine neue Version der Platine gemacht.
Statt der Klemmleiste setze ich jetzt auf 3 Buchsenleisten mit je 4 Polen, sollte für meine Zwecke reichen. Damit hat sich auch das Routing drastisch vereinfacht. Sonstige Änderungen:
Montagelöcher hinzugefügt
Leiterbahnen auf 16er Breite vergrößert
Kondensatoren hinzugefügt und näher an die ICs gebracht
Vias vergrößert
@Gurkengraeber:
Die DCF77-Dekodierung überlasse ich dieser Library. Angefangen habe ich mit einem Link aus dem Playground, der zu dieser Seite führt, dort ist ebenfalls Code und ein paar Erklärungen zu finden. Die erstgenannte Library funktioniert für meine Zwecke jedoch besser. Muss meinen Code die nächsten Tage noch etwas aufräumen, dann poste ich ihn ebenfalls hier.
kann ich dich um ein paar Infos zu deinem VFD-Display bitten? Ich habe das gleiche Samsung 20L201DA3, habe aber noch Probleme das ganze mit dem Arduino zu verheiraten:
So viel ich verstanden habe, benötigt das Display eine externe Spannungsquelle da I > 800mA
Das Display erwartet auf RX 12V? Wie hast du das Display mit dem Arduino-Board verbunden? Das Board liefert doch nur 5V an den Outputs?
Wie sendest du Daten zu Display? Kann das über die NewSoftSerial-Library erfolgen? Also eine ganze normale Serielle Verbindung mit z.B. dem Befehl Display.print("Hallo");?
Tarabas:
... kann ich dich um ein paar Infos zu deinem VFD-Display bitten? Ich habe das gleiche Samsung 20L201DA3, habe aber noch Probleme das ganze mit dem Arduino zu verheiraten:
So viel ich verstanden habe, benötigt das Display eine externe Spannungsquelle da I > 800mA
Das Display erwartet auf RX 12V? Wie hast du das Display mit dem Arduino-Board verbunden? Das Board liefert doch nur 5V an den Outputs?
Wie sendest du Daten zu Display? Kann das über die NewSoftSerial-Library erfolgen? Also eine ganze normale Serielle Verbindung mit z.B. dem Befehl Display.print("Hallo");?
...
Hallo Tarabas
die VFD displays brauchen viel Strom, leuchten aber dann schön selbständig. Du brauchst umbedingt eine externe Stromquelle, ein Netzteil 5V 1,5A.
Die Signalpegel auf RX sind -12V und +12V ( H und L Pegel, genaugesagt zuwishen -3 und -25V für H und +3 bis 25V für L) um von 0V - 5V die aus dem Arduino kommen auf -10/+10V zu kommen gibt es zb den MAX232. Der hat einen Spannungswandler ( mit 4 Kondensatoren) und Treiber um von 0/5V auf -12/12V zu kommen und umgehehrt.
Auf dem Bild links unten ist ein 14 poliges IC. Das könnte ein MAX232 oder ähnliches sein, der das RS232 Signal auf Mikroprozessortauglice 0/5V bringt. Schau dir mal das Datenblatt Deines ICs an. Wenn es wirklich ein RS232 Pegelwandler ist, dann kannst Du den Auslöten und das 0/5V signal vom Arduino direkt dort einspeisen.
Senden überNewSoftSerial-Library geht gut, es gibt aber sicher einige Steuerzeichen mit denen Du zB die Cursorposition bestimmst usw. Mit der Funktion Display.print("Hallo"); bekommst Du zwar das "Hallo" drauf aber wie schreibst Du dann etwas anderes drauf?
Ich hab auch einige Zeit mit dem Display verbracht, bis ich endlich verstanden habe was es alles zu beachten gilt:
Wie schon richtig angemerkt wurde, brauchst du auf jeden Fall eine externe Spannungsversorgung die laut Datenblatt bis zu 1,2 A liefert. Ich hab meines bisher an 2 kleinen Schaltnetzteilen betrieben die auf der 5V Leitung >2 A liefern. Sofern die Stromversorgung nicht zu knapp bemessen ist scheint mir die aber recht unkritisch zu sein.
Es läuft problemlos mit Signalen auf 5V, ABER die müssen invertiert werden. Also 0V = HIGH, 5V = LOW. Habe einige Zeit versucht den seriellen Output am Arduino per Software zu invertieren, hat aber nie funktioniert. Daher eine sehr simple Hardwarelösung mittels NPN Transistor und einem Pull Up Widerstand gebastelt:
Zum Upload von Sketchen muss die Schaltung aber vom Arduino getrennt werden, sonst gibt dir die IDE eine Fehlermeldung aus.
Wie schon erwähnt, lässt es sich wunderbar seriell ansteuern, im angehängten Datenblatt finden sich auch etliche Steuerbefehle. Die habe ich wie folgt im Einsatz, wobei Ausgaben einfach mit Serial.print aufs Display geschrieben werden:
Insgesamt muss man es etwas anders ansprechen als LCDs, da es bei zu schnellen Schreibintervallen unangenehm zu Flackern anfängt. Ich schreibe generell nur auf das Display, wenn sich sein Inhalt ändert. Auf diese Weise flackert nichts und man kann sich durchgehend am schönen grünen Leuchten erfreuen. 8)
Vielen Dank euch beiden für die aufschlussreichen Antworten.
Display ist soweit angeschlossen...So richtig klappen tut die Ausgabe aber noch nicht. Es wird zwar was ausgegeben (Durcheinander) aber nicht das was ich will.
Angeschlossen ist TX vom Arduino und das Display über ein NPN-Transistor und zwei Widerstände, gemäß Startseite - Universität Regensburg.
Kann man das so machen oder ist die Lösung von Orang mit einem Widerstand @ 8k notwendig?
Gemeinsame Masse bietet sich in dem Fall wohl an... Ja, solltest du auf jeden Fall machen.
Zum Widerstandswert: Das ist völlig unkritisch, ob 1k oder 8k. Mit 8k sparst du etwas Strom, kannst auch 2k2, 4k7 oder 10k nehmen, was man eben zur Hand hat.