Hier stelle ich mein - aus einer Not heraus geborenes - Selbstbau-Projekt PICSEL vor:
für meinen alten Kenwood-Hifi-Verstärker KA-990V aus den 80ern. Eigentlich ein edles Teil, aber leider sind so ziemlich alle Schalter völlig verfrittet. Mal sind auf einem Kanal die Bässe weg, mal kratzt es, mal ist links leiser als rechts, mal....
Wenn man den Verstärker eh schon zerlegt, könnte man auch das Poti durch ein Motorpoti ersetzen und die ganze Sache fernsteuerbar machen... Das schreit nach einem PIC oder so, den man bequem zu Hause programmieren kann und der nicht viel Peripherie braucht. Die Software ist in C geschrieben und daher nach Anpassung der Hardwarebezüge auch auf ATMega usw. portierbar.
Wer mal in den Kenwood 'reinsehen will... siehe Projekt Verstärker-Tuning. Der Bauraum für das Motorpoti ist etwas Bastelei, auf die Loudness-Funktion werde ich verzichten müssen - aber ansonsten steht dem Umbau nichts im Wege. Wenn man den Verstärker geöffnet hat, kann man auch gleich ein paar weitere Verbesserungen einbringen.
Projektstatus:
Status: Fertiggestellt (Betrieb seit April 2006)
Letzte Änderung Hardware: 03.05.2006
Letzte Änderung Software: 25.05.2006
Letzte Änderung Dokumentation: 06.03.2007
Das "Quellenumschalter-Evaluation-Board" noch mit Mabuchi-Motor statt Motorpoti und cooler Tchibo-Fernbedienung
Features Picsel 1 (das "Original", abgeschlossen seit 25.05.06, zugeschnitten auf den KA-990V):
- Fernbedienung: IR-Decodierung Tasten 1-8 für die Quellen, Vol+ und Vol- (RC5-Code)
- Ansteuerung eines ALPS-Motorpotis als Lautsärkesteller
- Umschalten der Audiosignale mit Relais
- Zwei Gruppen mit 4 bzw. 3 Quellen mit gegenseitiger Auslösung: Tape A/B/C und Phono/CD/Tuner/Aux
- 1 Taste mit Rastfunktion: Tape/Monitor
- 8 LEDs für Anzeige des aktuellen Schaltzustandes
- Abspeichern/Restaurieren des letzten Schaltzustandes ins/aus EEPROM
- Tastenentprellzeit 30ms (Funktioniert sogar mit den Originaltasten einwandfrei!!!)
- Schaltzustand dreifach im EEPROM ablegen und fehlertolerant mit 2 aus 3 lesen
Teil 1: Schaltplan "Picsel 1" Microcontroller und Relais-Ansteuerung (Klicken für Großbild)
Teil 1: Die Steuerung
Zentrales Bauelement ist der PIC-Controller: Er liest die Taster ein, steuert die LEDs, Relais und das Motorpoti an und speichert die Einstellungen in seinem internem EEPROM. Der 16F628 ist so konfiguriert, dass er sich seinen 4MHz-Takt intern erzeugt, was für den Empfang der IR-Fernbedienung an Präzision ausreicht. Auch den Reset erzeugt sich der PIC selbst - damit sind volle 16 Pins für I/O nutzbar. :-)
Tricky ist das Einlesen der Taster (T1-T8) und Ansteuern der LEDs (D 1-8) über den gleichen Port: Der Controller (IC1) programmiert alle Ports auf Eingang, nur die aktuell gewählte Quelle als Ausgang und Low. Drückt man diese Taste nochmal passiert nichts, drückt man eine andere Taste, liest der Controller dort ein neues "Low", schaltet die "alte" LED aus, programmiert den neuen Port auf "Ausgang" und "Low" und den alten auf "Eingang". Einzige Ausnahme ist die Taste Tape/Monitor: sie hat eine "Rastfunktion", d.h. 1x drücken = ein, nochmal drücken = aus: hier muss auch bei eingeschalteter LED erkannt werden, dass die Taste betätigt wurde, daher sind LED und Taste einzeln angeschlossen. Da passt auch der Port RA5 gut ins Konzept, denn er kann nicht als Output geschaltet werden. Da der Port PA Schmitt-Trigger-Eingänge hat, muss man extern noch Pull-Ups (RN1) anflanschen, um ein sauberes "High" zu bekommen. Netter Nebeneffekt der Doppelnutzung der Taster: der LED-Strom "brennt" manche Kontaktbeläge weg.
Zur der Relais-Schaltung: Das Schieberegister (IC 2) sorgt dafür, daß wir nur 3 Pins des PIC für die acht Relais verbrauchen, die Relais-Platine mit einem 5-Adrigem Kabel anschließen und direkt an den Eingängen an der Gehäuserückwand anbringen könnten - und noch Reservepins für das Motorpoti und den IR-Empfänger übrig bleiben. Die Freilaufdioden (im IC 3, ULN2803) plus Zenerdiode (ZD 1) sorgen für kürzere Abfallzeiten als eine Freilaufdiode allein (siehe Linkliste). Die Relais sind übrigens keine Feld-Wald-und-Wiesen-Typen sondern aus der High-End-Szene bekannte Bauteile. Das RC-Glied an Pin 10 des Schieberegisters sorgt für eine Art PowerOn-Reset, ohne daß wir einen Controller-Pin dafür verbrauchen.
Der IR-Empfänger (IC 4) TSOP1736 von Vishay filtert das 36kHz-Trägersignal schon aus und liefert an seinem Ausgang das invertierte Datensignal fertig zum Decodieren (siehe Linkliste unten). Die Versorgungsspannung soll man laut Vishay-Datenblatt nochmal mit einem RC-Glied filtern (R5, C8). Sinnvoll ist es, IC4 mit dem RC-Glied auf einer separaten kleinen Leiterplatte anzubringen, die man irgendwo an der Gehäusefront nach draußen blicken lassen kann. Die Tchibo-Fernbedienung (TCM Artikel-Nr. 225926) habe ich mit dem Code 043 aus der Sparte "AUX" programmiert, sie liefert dann astreinen RC5-Code.
Die Ansteuerung des Motors aus dem ALPS-Motorpoti geschieht mit zwei der vier Halbbrücken im IC5. Der verwendete Typ hat L293D auch schon integrierte Freilaufdioden, man muss nur noch auf große Masseflächen achten, die der Kühlung dienen, wenn man das IC Dauerlastfest machen will: Der Motor des Potis zieht maximal 200mA, das IC kann 600mA dauerhaft (Kühlung!!!). Zur Erläuterung der Funktionsweise einfach mal nach "H-Brücke" googeln. Kurze Zusammenfassung: Erster Zweig auf L, der andere auf H = Motor dreht, Erster Zweig auf H, der andere auf L = Motor dreht anders herum, beide Zweige gleiches Signal = Motor steht/bremst. GANZ WICHTIG: C9 direkt in der Nähe des ICs, damit der Anlaufstrom niederohmig bezogen werden kann. Den Motor selber sollte man direkt an den Motoranschlüssen durch zwei Induktivitäten in Serie, einen Kondensator parallel und ggfs. je einen Kondensator zwischen Motorpol und Gehäuse entstören.
Aufgebaut habe ich die Schaltung komplett auf einer Lochrasterplatine (siehe Elektronik - Basteltips).
Entstörung des Motors direkt an den Anschlüssen
Stückliste Steuerung Picsel 1:
IC 1 PIC16F628(A) Microcontroller Microchip mit EEPROM IC 2 74HCT595 Schieberegister seriell in parallel out IC 3 ULN2803 8 x Lowside Switch als Relaistreiber IC 4 TSOP1736 Vishay IR-Empfänger (z.B. bei Reichelt) IC 5 L293D Vierfach-H-Brückentreiber (z.B. bei Reichelt) R 1-3 220R Widerstand 220 Ohm 1/4W R 4 4k7 Widerstand 4k7 1/8W R 5 100R Widerstand 100Ohm 1/4W RN 1 8x4k7 Widerstandsnetzwerk 8x4k7 C 1-6 100nF Block-Kondensatoren C 7 100µF/10V Elko C 8 4.7µF/10V Elko C 9 470µF/10V Elko D 1-5 LED rot 3mm rot LEDs (bei mir schon auf der Verstärker-LP) D 6-8 LED gruen 3mm gruene LEDs (bei mir schon auf der Verstärker-LP) ZD 1 ZPD4.7 Zener-Diode 4,7V T 1-8 Taster Einpolige Taster (Teilweise bereits im Verstärker vorhanden) Rel 1-8 Relais Relais 2xUm, 5V, Takamisawa RY05W-K, (z.B. bei Schuro Elektronik) M Motorpoti Motor des ALPS Potentiometers 4-6V, max. 200mA C1-3 100nF Entstörkondensatoren L1,L2 1µH Entstörinduktivitäten
Teil2: Schaltplan der Stromversorgung
Teil 2: Die Stromversorgung
Die Stromversorgung ist recht klassisch: Brückengleichrichter, Siebung, Längsregler. Wenn man einen eigenen Kleintrafo spendiert, sollte man 7V 400mA vorsehen. Ich habe einfach eine Hilfsspannung direkt im Verstärker angezapft, allerdings mit dem Nachteil, das man IC6 auf jeden Fall kühlen muss.
Stückliste Versorgung:
IC 6 7805 Spannungsregler 5V, 1A C 10 470µF/40V Siebelko C 11 22µF/10V Elkos GL1 B80C400 Brückengleichrichter
Software:
Hier die Picsel 1 - Quellen und Hexfile als ZIP. Version 1.5
...und die Picsel - C-Source zum Lesen
Funktionen:
init() Initialisierung von Hardware und Variablen write_eeprom(..) Schreiben eines Bytes ins interne EEPROM read_eeprom(.) Lesen eines Bytes aus dem internen EEPROM debounce() Einlesen der Taster, Entprellen und Änderungdetektion (Link dazu siehe unten) auswerten() Auswerten der Tasten, Setzen der LEDs collect() Zusammenfassen des aktuellen Schaltzustandes restore_state() Alten Status aus EEPROM lesen, Plausibilitätscheck, LEDs setzen set_relais() Ausgeben des Status ans serielle Schieberegister + die Relais (rd. 57kHz seriell per SW) do_remote() Auswertung des RC5-Fernbedienungscodes main() Hauptschleife int_server() Interruptroutine für IR-Decoder am INT-Pin tmr0wait() Warteschleife mit Stoppuhr ir_bogus() Fehlerbehandlungsroutine ir_philips_rc5() RC5-Decodierung über Impulsbreite des Manchester-Codes get_ir() Pulsbreitenkontrolle
Weitere Links:
- Hier gibt es noch ein recht ähnliches, gut dokumentiertes Projekt von Jos van Eijndhoven. Da habe ich auch die RC5-Routinen her: Bei den meisten RC5- Anwendungen wird das IR-Datenwort über Sampling des Pegels per Timer gelesen, Jos van Eijndhoven macht es über die Pulslängen. Cool!
- Das Datenblatt zu den Takamisawa-Relais
- Das Datenblatt von ALPS zu den Motorpotis.
- Datenblatt zu den TSOP17xx IR-Empfänger von Vishay - mittlerweile durch modernere Nachfolger TSOP31xx ersetzt
- Gute Anleitungsseite von Michael Dworkin zum Compiler CC5x von BKND.
- Unter www.dattalo.com/technical/software/pic/debounce.html gab es mal einen Artikel zu Debouncing von Tasten auf dem PIC, sowie die Posts von Peter Dannegger im mikrocontroller-forum
- Mein PIC-Programmer: PBrenner 5 von sprut. Auch der RC5-Code von IR-Fernbedienungen wird hier erläutert.
- Relais schnell schalten, Relaisbeschaltung, Freilaufdiode: Elesta Relais Whitepaper und Die Appnote von Tyco "13c3311.pdf" mit dem Titel "Coil Suppression"
Einbau siehe Artikel Verstärker-Tuning
Messungen:
Debouncing: gut 30ms zwischen fallender Flanke (TASTE) und Ausgabe ans Schieberegister (SRCLK)
IR-Empfang und Motorspannung (schön zu sehen: der Nachlauf nach dem letzen Fernbedienungscode)
Hier wird es bald den Schaltplan zu Picsel 2 geben (... so gross sind die Unterschiede zu Version 1 nicht)
...und die SW dazu natürlich auch!
Features Picsel 2 (- projektiert für einen Verstärker-Eigenbau -):
- Ein Umschalter von 6 Quellen mit gegenseitiger Auslösung: Quellen A...F
- 2 Tasten mit Rastfunktion: Mute und On/Standby
- Das On/Standby-Relais mit separatem Transistor geschaltet (zur Trennung von den Audiorelais)
- Alle LEDs werden ausgeschaltet, wenn Standby aktiv ist
- Auswertung der Tasten On/Off und Mute auf der Fernbedienung