Ein Belichtungstimer für die Belichtung von Platinen
Dies ist eigentlich kein wirklicher Bauvorschlag, da die Qualität meines ersten SMD-Designs und meiner ersten zweiseitigen Platine nicht ganz meine eigenen Qualitätskriterien erfüllen. Dies hier ist also eher eine Dokumentation des Entwurfs, immerhin kam der Belichtungstimer ja zum Einsatz.
Designziele
Nach der Anfertigung eines Platinenbelichters aus einem alten Gesichtsbräuner und einem alten Scannergehäuse (beides bei ebay für ein paar Euro erstanden) habe ich zunächst per Hand die Belichtungszeit gestoppt. Trotzdem kam die Idee auf, einen Timer in das Gerät einzubauen, um die Belichtung automatisch zu beenden. Designziele waren:
- Zeit einstellbar von 0 bis einige Minuten mit Tastern
- Anzeige der Zeit
- Alles auf einer Platine (Netzteil mit Trafo, Anzeige, AVR, Taster, … eben alles)
- Akustisches Feedback für Belichtungsende
- Abschaltung des Belichters mittels Relais
Da ich auch mal den Umgang mit SMD-Bauteilen sowie mit 7-Segment-Anzeigen ausprobieren wollte, kamen noch hinzu :
- Einsatz von SMD-Bauteilen wo sinnvoll
- Nutzung von 7-Segment-LED Displays
Suche im Internet brachte ein paar Bauvorschläge. Ich habe mich auf ATmega Chips von AVR beschränkt und wollte unbedingt 7-Segment-LED-Anzeigen verwenden. Der Timer vom kreatives-chaos.com gefiel mir am besten und kam meiner Idee schon sehr nahe. Die Schaltung habe ich weitgehend übernommen mit folgenden wesentlichen Änderungen:
- Ein ATMega8 statt des ATtiny2313
- Verwendung von nur drei Anzeigen (statt 4)
- Unterbringung aller Bauteile auf einer Platine ca. 100x80
Theory of Operation
Der ATmega8 ist das wesentliche Bauteil dieser Schaltung. Ansteuerung LED Displays: Die 7 Segmente der drei LED-Displays sind alle parallel geschaltet und an Port C angeschlossen. Der COM-Anschluß der drei LED-Displays wird über einen Transistor getrieben, dies erfordert drei weitere Port-Pins des AVRs. Zwei Taster dienen der Einstellung der Belichtungszeit (Sekundenwert vergrößern/verkleinern), ein weiterer Taster dient dem Starten/Stoppen des Timers. Ein Summer ist ebenfalls an den AVR angeschlossen um akustisches Feedback zu geben. Schließlich ist auch das Lastrelais über einen Port angeschlossen. Die restliche Beschaltung des AVRs ist “Standard”, ISP-Anschluß und Quarz. Das Netzteil ist ebenfalls völlig trivial aufgebaut. RxD und TxD wurden auf einen Jumper gelegt, um evtl. eine RS232 Schnittstelle zum Testen anzubinden.
Hardware
Die Platine wurde zweiseitig entworfen und für den AVR und einige andere Bauteile (Widerstände, Kondensatoren, …) wurden SMD-Bauteile verwendet. Alle SMD-Bauteile liegen auf der Platinenoberseite, ebenso die Taster und die LCD-Anzeige. Alle “hohen” Bauteile wurden auf die Platinenunterseite verbannt ( Trafo, Relais, etc.) Die Vias wurden als normale Drähte per Hand eingelötet.
Während der Tests wurden verschiedene Designschwächen festgestellt und korrigiert:
- Der ursprünglich genommene 78L05 in SMD war zu leistungsschwach, die ganze Schaltung braucht bei eingeschaltetem Relais ~190mA, zu viel für den 78L05 ( der nur 100mA abgeben mag). Daher wurde im Nachhinein ein 7805 eingelötet.
- Versuch der Nutzung von Eingangsports (ADC6 und ADC7) als Ausgabeports
- Blockkondensatoren sind zu weit vom ATmega8 weg
- Die Nutzung des Autorouters war im Nachhinein betrachtet nicht sinnvoll, sehr viel musste per Hand nachgearbeitet werden. Alle Leiterbahnen zu den LED-Displays wurden per Hand neu gemacht, da der Autorouter dort völlig chaotische Verläufe produziert hatte
Schaltplan
Bestückung Unterseite
Bestückung Oberseite mit SMD-Bauteilen
Wie bereits erwähnt ist die Platine nicht gerade eine Schönheit. Ich musste einige Leiterbahnen kappen und mit Draht nachverdrahten, außerdem ist dies meine erste SMD-Platine…
Die Oberseite mit den SMD-Bauteilen. Schwarz abgeklebt der Trafo wegen der 230V. Die roten Drähte sind Korrekturen von Designfehlern :-(
Die Unterseite. Hier sind die “hohen” Bauteile untergebracht, die bei einer Montage auf der anderen Seite der Anbringung im Gehäuse im Weg wären.
Software
Während die Hardware überschaubar und einfach ist, muss bei der Software schon einiges gemacht werden:
- Sekundengenauer Timer. Als Quarz wurde ein 3,2768 Mhz Quarz verwendet.
- Ansteuerung des Beepers/Summers. Es gibt zwei Summertypen. Die einen Summen solange man +5V anlegt, die anderen klicken dann nur 1x leise. Letztere muss man mit einem Signal von z.B. 2Khz ansteuern, dann erhält man das gewünschte Summen. Leider habe ich ganz viele von diesen Summern, so dass im Timer-Interrupt auch dieser Beeper mit der Summfrequenz versorgt werden muss
- Der AVR steuert die drei LED-Displays hintereinander an, d.h. es wird immer nur auf einem der drei Displays eine Zahl ausgegeben. Diese Ansteuerung erfolgt so schnell, dass das Auge den Wechsel nicht feststellen kann und alle drei Ziffern sieht. Auch diese Ansteuerung des Displays muss implementiert werden.
- Die Abfrage der Tasten wird ebenfalls im Timer-Interrupt durchgeführt
Die Ansteuerung der LED-Displays erfolgt so, dass die 7 Segmente und der Dezimalpunkt -also 8 Pins- an ein Port des AVRs angebunden werden. Ich habe ungeschickterweise PortC gewählt, bei dem Pin 6 und Pin 7 beim gewählten AVR ATmega8 nicht zur Verfügung stehen. Daher musste ich mir so behelfen, dass ein Segment an einem anderen Port angesteuert wird (PD7) und der Dezimalpunkt nicht angesteuert werden kann. Da ich ohnehin nur ganzzahlige Sekundenwerte erlaube, war dies kein Problem. Interessant ist dann die Tabelle der Ausgabewerte für die einzelnen Ziffern, d.h. welches Byte muss man ausgeben, um die passenden Segmente der Ziffer zur Anzeige zu bringen. Im folgenden sind die Segmente eines LED-Displays mit Buchstaben A..G benannt, die dargestellte Zuordnung ist quasi " standardisiert". “DP” steht für Dezimalpunkt.
Zahl | A | B | C | D | E | F | G | hex-Wert bei meiner Beschaltung |
---|---|---|---|---|---|---|---|---|
1 | x | x | 0x06 | |||||
2 | x | x | x | x | x | 0x56 und PD7 | ||
3 | x | x | x | x | x | 0x4e und PD7 | ||
4 | x | x | x | x | 0x66 und PD7 | |||
5 | x | x | x | x | x | 0x6c und PD7 | ||
6 | x | x | x | x | x | x | 0x7c und PD7 | |
7 | x | x | x | 0x07 | ||||
8 | x | x | x | x | x | x | x | 0x7e und PD7 |
9 | x | x | x | x | x | x | 0x6e und PD7 | |
0 | x | x | x | x | x | x | 0x2f |
Nutzung
Nach Einschalten des Timers wird die defaultmässig eingestellte Belichtungszeit angezeigt. Mit den “PLUS” und “MINUS” Tasten kann dieser Sekundenwert verändert werden. Die START/STOP-Taste startet den Belichtungspozess. Der AVR schaltet dann den Belichter via Relais ein. Am Ende der Belichtung wird das Relais wieder abgeschaltet und die Anwendung geht in den Ursprungszustand zurück. Wird die START/STOP-Taste gedrückt während der Timer läuft, wird der Prozess sofort abgebrochen und das Relais schaltet den Belichter aus. Mit den drei Anzeigen lassen sich Sekundenwerte zwischen 0..999 einstellen. Der Summer quittiert jeden Tastendruck mit einem kurzen Piepen, sowie die Übergänge START, STOP und ABBRUCH und auch das Einschalten.
Der Timer im Belichter. In die kleine Plexiglasplatte sind die drei Taster integriert. Dazu waren kleine Aufsätze (als Verlängerungen) auf die Taster nötig, die aus einer Plastikstange gedreht wurden.
Sonstiges
Der Belichtungstimer wurde ins Gehäuse des Belichters eingebaut. Dazu musste ein Ausschnitt ins Plastikgehäuse gesägt werden. Um Interferenzen zu minimieren, soweit weg von den Vorschaltgeräten der UV-Röhren wie möglich. Testbelichtungen zeigen, dass keine Interferenzen auftreten, der Timer versieht zuverlässig seinen Dienst.
Weiterführende Links
- Die Vorlage für meinen Timer, der Timer vom kreatives-chaos.com