PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mal kein Bot - Meine "Dream Machine"



PICBeginner
10.04.2009, 17:32
Liebe Freunde des PIC,

ich möchte mal mein erstes PIC-Projekt vorstellen. Ich hoffe, ich habe dafür die richtige Stelle hier im Forum erwischt. Für Lob bin ich immer empfänglich, Kritik bitte an meinen Stellvertreter (e-mail-Adresse suche ich noch raus) ;-).

Vorspann

Also, ich bastle schon seit Ewigkeiten elektronische Schaltungen, bis jetzt habe ich aber alles rein durch Hardware realisiert. Die PICs haben mich aber schon seit einiger Zeit interessiert, weil man eine Menge an Peripheriebauteilen einsparen, recht einfach Korrekturen an den Funktionen vornehmen und somit auch relativ komplexe Funktionalitäten mit überschaubarem Aufwand realisieren kann. Abgeschreckt hat mich aber, dass man sich doch ein bisschen tiefer in die Programmierung einarbeiten muss. Mit Assembler hatte ich noch nie was zu tun und mit dem MPLAB C-Compiler bin ich nicht klar gekommen. Trotzdem kann ich nur jedem raten, der sich für die Materie interessiert und bereit ist, etwas Zeit zu investieren, sich einzuarbeiten. Ich habe mich auf Assembler festgelegt und die wirklich sehr guten Seiten von sprut (www.sprut.de) als Anleitung genutzt. Man findet dort auch einfache Beispiele, mit denen man beginnen kann. Ich bin blutiger PIC-Anfänger und hab's auch so gemacht – und es hat wirklich funktioniert.

Das Projekt

Meine Freundin wünschte sich ein Wecker, der durch langsam
- heller werdendes Licht
- lauter werdende Naturgeräusche (Wasserplätschern, Vogelgezwitscher, was weiß ich)
wecken soll.

Klar gibt es solche Wecker schon zu kaufen, aber entweder sind die abartig teuer oder so miserabel entstört, dass man alleine schon durch das Netzbrummen aus dem Lautsprecher schlagartig wach wurde. Das Exemplar ging sofort zum Discounter zurück.

Mir war wichtig, dass der neue Wecker
- funkgesteuert ist
- mindestens 2 Weckzeiten hat
- bei den Weckzeiten Wochentag und Wochenende unterscheiden kann
Aber so einen Wecker, der ALLES kann, gibt es nicht zu kaufen, zumindest habe ich keinen gefunden. Also musste ich selber anfangen.

Der Wecker

Herzstück ist natürlich der eigentliche Funkwecker. Da ich nicht alles selber bauen wollte, habe ich mir den ELTA 4514 ausgeguckt, der erfüllt meine drei Ansprüche schon von Hause aus. Radio hat er auch. Außerdem habe ich einen seit Jahren schon in Betrieb. Man bekommt ihn bei Amazon oder beim großen Elektronikhändler mit dem C.

Das Licht

Nächster Punkt: die Lampe. Ich habe mich für eine CREE MC-E LED entschieden. Hat übrigens gar nichts mit einer Media-Center-Edition zu tun, aber das nur am Rande ;-). Der Kühlstern hat die Maße der bekannten Luxeons, aber in der LED sind 4 einzelne Chips integriert, deren Anschlüsse einzeln herausgeführt sind. Jeder der 4 Chips verträgt 700mA und braucht typisch 3,2V. Die Frage war nun, wie die Chips nun am besten zu verschalten sind. Ich habe je 2 in Serie und die beiden Doppel-LEDs dann, jeweils mit einem Vorwiderstand versehen, parallel verknüppert. Die gesamte LED braucht so 2x3,2V=6,4V bei 2x0,7A=1,4A.
Welches Netzteil leistet das? Der Elektronikversand mit dem C hilft. Da gibt es ein Festspannungs-Schaltnetzteil mit 7,5V und 18W Ausgangsleistung, d.h. 2,4A Ausgangsstrom. Jetzt wird, glaube ich, auch klar, warum ich 2 LED-Chips in Serie geschaltet habe: Jede Doppel-LED bekommt einen Vorwiderstand mit (7,5-2x3,2)V/0,7A=1,5Ohm (gerundet) und (7,5-2x3,2)V*0,7A=0,77Watt Leistung, d.h. so verbrate ich wenig Leistung in Wärme. Ich will ja Licht, keine Heizung! Trotzdem habe ich 5W-Widerstände gewählt: einerseits zur Sicherheit, andererseits konnte ich die prima mit Wärmeleitkleber zwischen 2 Rippen des Kühlkörpers, auf dem die LED sitzt, befestigen.
Die Helligkeitssteuerung wird über PWM und einen Logic-Level-MOSFET IRLZ34N realisiert.

Der Ton

Die Tonsteuerung, genauer das fade-in des Audio-Signals, lässt sich mit entsprechend programmiertem PIC und einem EE-Poti-Schaltkreis X9C (ich wählte den X9C103 mit 10kOhm Gesamtwiderstand) sehr einfach aufbauen. Viel schwieriger war die Wahl des Audio-Wiedergabegerätes. Zuerst wollte ich Sprachspeicher-Module verwenden, genau, die Dinger mit 20s Aufzeichnungsdauer. Klar ist der Verstärker im ELTA-Wecker jetzt nicht HI-FI-fähig, aber was aus diesen Modulen an Ton herauskam, war grausig. Nächste Überlegung war, einen einfachen MP3-Chip mit SD-Karte zu verwenden. Aber die Chips sind schwer zu bekommen für einen Privatnutzer und darüber hinaus unverschämt teuer. Dann entdeckte ich aber einen kleinen MP3-Player von Hama, der keine 4EUR kostet. Ideal für den Zweck sage ich nur! SD-Karte rein, mit einem BC635 den Ein/Aus-Taster überbrückt und schon kann der PIC mit einem 3-sekündigem High-Signal den Player an- und ausschalten! Spannung bekommt der Player vom genannten Netzteil und einem 78L02-Regler mit nachgeschalteter SB140-Schottky-Diode (der Player erwartet um die 1,5V, der Regler gibt aber etwas über 2V aus) und Kondensator-Siebung mit 100nF und 220µF parallel. Der Audio-Ausgang geht dann über den X9C zum Verstärker des ELTA.

Der PIC

Ja, gibt es nicht so viel zu sagen, habe den 16F876 gewählt: hat mehrere ADC-Eingänge, kann eine ordentliche Anzahl von digitalen Signalen parallel ausgeben und hat PWM. Damit war er qualifiziert. Seine 5V bekommt er auch aus dem 7,5V-Netzteil, aber über einen LDO-Spannungsregler L4940. Den habe ich genommen, da ich denke, dass ein normaler 78(L)05 mit (7,5-5)V=2,5V Regelbereich schon recht wenig Regelspielraum hat.

Erste Versuche

Zunächst habe ich mir einen Brenner besorgt. Bauanleitungen gibt es viele im Netz. Da ich aber keine Leiterplatte Ätzen wollte, habe ich mir den K8076 von Velleman besorgt und zusammengelötet. Es kam, wie es kommen musste: er hat natürlich nicht auf Anhieb funktioniert. Aber ich habe ihn dann doch überreden können, siehe: https://www.roboternetz.de/phpBB2/viewtopic.php?p=433975#433975.
Dann habe ich mehrere Beispiele von sprut programmiert und zum Testen auf einem Steckboard nachgebaut. In verschiedenen Foren liest man immer wieder, dass die Boards nicht gut seien – ich finde sie für solche Testzwecke ideal und kann sie nur empfehlen. Beim Elektronik-Versender mit dem R sind sie auch recht preiswert zu bekommen.

Das Assembler-Programm

Irgendwann bin ich beim Beispiel „Messen einer Spannung“ angekommen und habe dieses Lernbeispiel immer mehr erweitert und auf mein Projekt angepasst. Zunächst mehr ADC-Eingänge aktiviert und eingelesen, kleinere Probleme bekommen und gelöst (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=46800&highlight=), PWM eingebaut, Warteschleifen programmiert usw.
Am Ende macht der PIC folgendes:
Zunächst fragt er ständig 4 ADC-Eingänge ab. Am 1. ADC-Eingang hängt nur ein Taster nach Masse mit einem pull-up-Widerstand nach 5V. Unterschreitet die Spannung einen Schwellwert (nämlich beim Tasten), wird der am 2. ADC-Eingang gemessene Spannungswert (1. Poti an Masse und 5V) an den PWM-Ausgang durchgegeben. So kann ich bequem die maximale Helligkeit beim Wecken einstellen. Der 3. ADC-Eingang (2. Poti an Masse und 5V) bestimmt die Zeit zwischen Weckbeginn und Erreichen der maximalen Helligkeit der LED. Mit dem 4. ADC-Eingang wird der Weckvorgang eingeleitet. Das Signal kommt aus dem ELTA-Wecker, genauer: der Audio-Verstärker des ELTA wird beim Wekchen mit Spannung versorgt. Das Signal nehme ich, zum invertieren über einen BC635 und 10kOhm-Widerstand eingekoppelt. Wenn's losgeht mit dem Wecken, verlässt der PIC die geschilderte Schleife (Helligkeit und Verzögerung können jetzt nicht mehr geändert werden), schaltet den MP3-Player ein und zählt eine Variable hoch, die er an den PWM-Ausgang mit MOSFET und LED weiter gibt. Bei jedem Weiterzählen wartet er ein bisschen, je nach dem, wie hoch der eingestellte Wert am 3. ADC war, und inkrementiert auch den X9C, damit der Ton langsam lauter wird. Hat die Zählvariable den Endwert erreicht (also den eingestellten Wert am 2. ADC), behält der PIC alle Ausgangssignale so lange bei, bis das Wecksignal aus dem ELTA verschwindet (also 0V ist). Das passiert, wenn ich den Alarm am ELTA ausschalte oder den ELTA mindestens 36Minuten wecken lasse. Die LED wird abgeschaltet, der X9C heruntergezählt und der PIC geht wieder in die Warteschleife, wo er die ADCs ausliest.

Ja, das war's auch schon fast. Für die Schaltung habe ich ein Gehäuse aus PVC-Platten gebastelt, so dass der ELTA oben drauf sitzen kann. Die LED sitzt auf einem großen (passiven) Kühlkörper und hat ein kleines „Häubchen“: das stammt von einer 24-LED-Lampe von einem bekannten Elektro-Ramsch-Versender mit einem P im Namen. Die Lampe hat nicht, wie versprochen, 50.000h gehalten, sondern nur knapp ein Jahre (mit wenigen Stunden An-Zeit pro Tag)! Oberteil der Lampe vorsichtig abschrauben (Achtung, die ist zusätzlich noch mit so einem dauerelastischen Kleber fixiert), fertig.
Mit je einem Schiebeschaltern kann ich noch zwischen Wecken per MP3-Player und Radio (aus dem ELTA) wählen bzw. meine „Höllenmaschine“ abschalten (Aktivierungs-ADC permanent auf Masse gelegt).
Zwar läuft alles ohne Windows, aber trotzdem könnte man mal ein Reset benötigen, daher habe ich noch einen Reset-Taster nach außen geführt. Das war's.
Ich versuche noch ein paar Fotos hier anzuhängen, dann wird’s vielleicht etwas plastischer.

Vielleicht konnte ich ja einige mit der PIC-Geschichte begeistern. Ich habe wirklich mit Null Ahnung gestartet und habe den gesamten Wecker nach 4 Wochen fertig gehabt – wohl gemerkt konnte ich mich aber immer erst nach der Arbeit mit dem Projekt beschäftigen!
Falls sich jemand inspiriert fühlt und etwas Ähnliches plant, würde mich das auch freuen. Helfe auch gern, falls ich kann.

Ich wünsche jedenfalls allen viel Spaß und Erfolg bei den Projekten und bedanke mich bei den Betreibern und Usern des RoboterNETZ.

TomEdl
10.04.2009, 17:44
Hallo!

Ich komme zwar eher aus der Richtung AVR, aber antworte mal trotzdem. ;)

Wahnsinn, was du da als Anfänger zusammengebaut hast, ich bin regelrecht begeistert! Meine Anfangsprojekte waren nie so umfangreich und ich hätte es auch nicht zusammengebracht, solch "große" Dinge zu vollbringen!

Solltest du PICs brauchen: Ich hätte einige unbenutzte auf Lager und würde die günstig hergeben. Bei Interesse meld dich einfach mal bei mir.

Grüße
Thomas
:)

thewulf00
10.04.2009, 19:41
Also ich bin wirklich baff. Dein Durchhaltevermögen muss ja irre ausgeprägt sein. Ich hätte bestimmt mehrfach aufgegeben.

Dein Gehäuse ist der Wahnsinn - Super Projekt!

Grüße!

PICBeginner
12.04.2009, 10:12
Hallo,
freut mich, dass Euch mein Projekt gefallen hat.

@TomEdl: Danke für Dein Angebot, hätte ich früher wissen sollen. Leider habe ich mich in meiner Experimentierphase reichlich mit verschiedenen PICs eingedeckt (und auch einen kaputt bekommen, weiß bis heute nicht, warum es ihn erwischt hat), so dass ich für's erste versorgt bin. Würde mich aber gern bei Dir melden, wenn ich Nachschub brauche!

@thewulf00: Meine Freundin meinte, wir hätten beide ziemliches Durchhaltevermögen gehabt. Ich denke, Du weißt, was ich meine ;-)
Beim Gehäuse hat mir geholfen, dass ich früher Flugmodelle gebaut habe. Naja, immerhin wäre dann, wenn der Wecker nicht funktioniert hätte, das ganze Ding nicht bloß in die Ecke geflogen, sondern gesegelt! :cheesy:

Gruß Dirk.

TomEdl
12.04.2009, 13:05
@TomEdl: Danke für Dein Angebot, hätte ich früher wissen sollen. Leider habe ich mich in meiner Experimentierphase reichlich mit verschiedenen PICs eingedeckt (und auch einen kaputt bekommen, weiß bis heute nicht, warum es ihn erwischt hat), so dass ich für's erste versorgt bin. Würde mich aber gern bei Dir melden, wenn ich Nachschub brauche!

Selbstverständlich kannst du dich auch später mal melden. Meine Mailadresse: te[at]hiway.at

Grüße
Thomas