Hallo, ich bin ein Schüler und versuche mich gerade in die große weite Welt der µC einzuarbeiten. Dank diesem Forum und den Tutorials habe ich schon sehr viel gelernt, ohne dass mir jemand persönlich helfen musste. Nun stehe ich aber vor einem Problem das meine Elektronik- und µC-Kenntnisse übersteigt: Ich habe mir bei ELV ein MP3 Soundmodul gekauft (MSM2). http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=30546 Dies musste nur ein wenig zusammenglötet werden und das war's auch schon. Elektronikkenntnisse waren eigentlich nicht erforderlich um auf Tastendruck eine MP3 abzuspielen. Es gibt 10 Anschlüsse für Taster die je 10 MP3 zugeordnet sind. Das war alles kein Problem. Den Microcontroller so zu programmieren und zu beschalten, dass ich per Tastendruck eine LED anschalte war auch kein Problem. Ich habe einfach den internen Pull-Up Widerstand benutzt. Naja ganz so einfach war es nicht aber dank dieses Forums habe ich's geschafft. Nun wollte ich die einzelnen Taster zum Abspielen der MP3 durch den µC ersetzen und so die MP3 direkt aus meinem µC-Programm abspielen. Da habe ich aber festgestellt, dass die Entwickler des MP3 Moduls sich ein paar µC-Pins eingespart haben und eine Tastermatrix aufgebaut haben. Somit kann ich z. B. nicht PINB1 (mein µC)direkt mit PINX1 (MP3-Steuerung) verbinden. Ich bin also gezwungen irgendwie die Kontakte von Taster1 - Taster10 physikalisch zu verbinden oder zumindest so zu beschalten, dass das MP3 Modul denkt sie wären verbunden. Ich dachte zuerst an Relais. Aber das ist irgendwie uncool (Stromverbrauch, Größe, außerdem habe ich keine) Ich hatte noch einen Optokoppler aus einer alten Lehraufgabe und habe es damit probiert, aber irgendwie war das auch nicht zielführend. Prinzipiell hat der funktioniert (habe mal Testweise eine LED an- und wieder ausgeschaltet), das Signal wurde allerdings nichts als "gedrückter Taster" interpretiert. Hat jemand eine Idee wie ich das halbwegs elegant hinbekomme?
Ich habe noch ein wenig weiter gerätselt. Ich habe es nun hinbekommen EINIGE Dateien abzuspielen. Bei einigen Tastern funktioniert es, dass ich nicht Taster-Pin-1a mit Taster-Pin-1b sondern z. B. Taster-Pin-1a mit Masse verbinde. Es gibt aber auch, z. B. Taster-10, wenn ich da versuche Taster-Pin-10a mit Masse zu verbinden dies als "Taster 1" interpretiert wird. Ganz so einfach ist es also nicht. Wenn ich das aber so recht durchgemessen habe schaffe ich es nicht den Optokoppler mit 0 Ohm zu schließen. Oder bekommt man dies mit einer externen Schaltung irgendwie hin?
Also ich habe sowas bisher immer mit Optokoppler gemacht. Nur einmal nicht, weil mir diese Schaltungsvariante zu primitiv erschien, da war ich besonders ehrgeizig. Da hat mein Mikrocontroller nachgeschaut, weile Tasten-Reihe das Gerät gerade abfragt und dann im richtigen Moment (quasi synchron) die entsprechende Spalte auf Low gezogen. Ich würd's aber nicht nochmal so machen. Bis das Programm fertig war, hätte ich Optokoppler Variante nämlich mindestens 10 mal gebaut. Bist Du sicher, daß der Spannungsabfall am Optokoppler deine Problemursache ist? Wie hoch ist der der LED Strom?
Also ich stehe immer noch auf dem Schlauch, mit beiden Füßen. Und mein Kumpel steht daneben. Das übersteigt unsere Kenntnisse irgendwie, dabei kann es doch nicht so schwer sein. Ich habe mal die Schaltung der Tastermatrix angehängt. Die Leitunden KS[1] und CheckKS [1...4] gehen direkt auf die Eingänge eines Atmega328P-MU. Prinzipiell habe ich ja kapiert wie es funktioniert: Taster 1 KS1 + CKS1 Taster 2 KS1 + CKS2 Taster 3 KS1 + CKS3 Taster 4 KS1 + CKS4 Taster 5 KS2 + CKS1 Taster 6 KS2 + CKS2 Taster 7 KS2 + CKS3 Taster 8 KS3 + CKS1 Taster 9 KS3 + CKS2 Taster 10 KS3 + CKS3 Mein Plan war nun, die sieben Leitungen KS1...CKS4 mit meinem µC nachzubilden und dann, wenn ich z. B. die Taste 6 per Software simulieren möchte die Leitungen KS2 und CKS2 per Optokoppler zu verbinden. Ich bräuchte dann für die gesamte Schaltung 10 Optokoppler. Aber genau dies funktioniert nicht. Habe ich einen Fehler in meiner Software?:
1 | // Hier werden die Leitungen aus der Matrixschaltung mit dem gleichen Namen wie
|
2 | |
3 | //PORTC
|
4 | #define KS1 0b00000001
|
5 | #define KS2 0b00000010
|
6 | #define KS3 0b00000100
|
7 | |
8 | //PORTB
|
9 | #define KCS1 0b00000010
|
10 | #define KCS2 0b00000100
|
11 | #define KCS3 0b00001000
|
12 | #define KCS4 0b00010000
|
13 | |
14 | int i = 0; |
15 | int j = 0; |
16 | int l = 20000; |
17 | |
18 | //Nur eine doofe Delay-Schleife
|
19 | void delay (int k) |
20 | {
|
21 | j = k*10; |
22 | |
23 | while (j > 0) |
24 | {
|
25 | while (l > 0) |
26 | {
|
27 | l--; |
28 | }
|
29 | l = 20000; |
30 | j--; |
31 | }
|
32 | }
|
33 | |
34 | |
35 | //Entsprechend der Tastermatrix aus dem Schaltplan wurden folgende 10 Kombinationen identifiziert.
|
36 | |
37 | void Taster1 (int time) //Falls jemand den Taster 1 drückt... |
38 | {
|
39 | PORTC = KS1; //...wird damit die Leitung KS1... |
40 | PORTB = KCS1; //...und KCS1 verbunden. |
41 | delay (time); //Und zwar für die übergebene Zeit |
42 | PORTC = 0; //Danach bitte... |
43 | PORTB = 0; //...alles wieder aus schalten. |
44 | } //Diese Information wird dann von dem µC auf dem MSM2 Board als "Taste 1" identifiziert. |
45 | |
46 | void Taster2 (int time) |
47 | {
|
48 | PORTC = KS1; |
49 | PORTB = KCS2; |
50 | delay (time); |
51 | PORTC = 0; |
52 | PORTB = 0; |
53 | }
|
54 | |
55 | void Taster3 (int time) |
56 | {
|
57 | PORTC = KS1; |
58 | PORTB = KCS3; |
59 | delay (time); |
60 | PORTC = 0; |
61 | PORTB = 0; |
62 | }
|
63 | |
64 | void Taster4 (int time) |
65 | {
|
66 | PORTC = KS1; |
67 | PORTB = KCS4; |
68 | delay (time); |
69 | PORTC = 0; |
70 | PORTB = 0; |
71 | }
|
72 | |
73 | void Taster5 (int time) |
74 | {
|
75 | PORTC = KS2; |
76 | PORTB = KCS1; |
77 | delay (time); |
78 | PORTC = 0; |
79 | PORTB = 0; |
80 | }
|
81 | |
82 | void Taster6 (int time) |
83 | {
|
84 | PORTC = KS2; |
85 | PORTB = KCS2; |
86 | delay (time); |
87 | PORTC = 0; |
88 | PORTB = 0; |
89 | }
|
90 | |
91 | void Taster7 (int time) |
92 | {
|
93 | PORTC = KS2; |
94 | PORTB = KCS3; |
95 | delay (time); |
96 | PORTC = 0; |
97 | PORTB = 0; |
98 | }
|
99 | |
100 | void Taster8 (int time) |
101 | {
|
102 | PORTC = KS3; |
103 | PORTB = KCS1; |
104 | delay (time); |
105 | PORTC = 0; |
106 | PORTB = 0; |
107 | }
|
108 | |
109 | void Taster9 (int time) |
110 | {
|
111 | PORTC = KS3; |
112 | PORTB = KCS2; |
113 | delay (time); |
114 | PORTC = 0; |
115 | PORTB = 0; |
116 | }
|
117 | |
118 | void Taster10 (int time) |
119 | {
|
120 | PORTC = KS3; |
121 | PORTB = KCS3; |
122 | delay (time); |
123 | PORTC = 0; |
124 | PORTB = 0; |
125 | }
|
126 | |
127 | |
128 | |
129 | |
130 | int main(void) |
131 | {
|
132 | DDRC = 0xFF; // PORTC0 bis PORTC2 und ... |
133 | DDRB = 0xFF; // ... PORTB1 bis PORTB4 als Ausgang definieren. |
134 | |
135 | PORTC = 0x00; //Zur Sicherheit mal ... |
136 | PORTB = 0x00; //... definiert ausschalten. |
137 | |
138 | |
139 | while (1) //Kleiner Taster Test |
140 | {
|
141 | PORTC=0xFF; |
142 | delay(5); |
143 | PORTC=0x00; |
144 | delay(5); |
145 | }
|
146 | }
|
Das ist nur der "erste Schuss", das gleichzeitige Drücken von Tastern wird (noch) nicht gebraucht und es hängt auch sonst nichts an den Ports, so dass man getrosst direkt die kompletten Ports setzten und rücksetzen kann. Hat jemand eine Idee? Ich sehe mein Osterferienprojekt schon scheitern.
Wenn die Leitungen auf einen anderen Atmel gehenn, könnte ich doch auch direkt die 7 PINS verbinden, oder? Ganz ohne Optokoppler oder andere Bauteile. Kann jemand aus der obigen Schaltung erkennen welche Konfiguration meine PINS dazu haben müssten? Also ich meine ob ich Ausgänge mit Pull-Up oder ohne oder gar mit extra Pull-Downs brauche.
Hi >möchte die Leitungen KS2 und CKS2 per Optokoppler zu >verbinden. Ich bräuchte dann für die gesamte Schaltung 10 Optokoppler. Hast du schon überprüft, welcher von beiden Eingang und welcher Ausgang ist? Danach richtet sich der Anschluss am Optokoppler. MfG Spess
Hallo, nein das habe ich noch nicht herausgefunden, wie mache ich das denn? Ich habe auch einfach mal die Leitungen beim Optokoppler vertauscht, ohne Erfolg. Oder könnte es sein, dass ich damit den Optokoppler kaputt gemacht habe?
Boah ey, ich bin echt am verzweifeln. Kann mir bitte mal jemand eine korrekte Schaltung vom µC-Pin, über den Optokoppler zu einer beliebigen Tasterkombination aufzeichnen? Ich brauch bisschen Starthilfe, nicht dass meine Osterferien vorbei sind und ich es nur schaffe ein paar LED zum leuchten zu bringen ;o)
Hallo Christian, Habe auch msm2-Module bestellt und möchte sie mit einem Microprozessor (C-Control) ansteuern. Dachte auch ich müsste die Pins nur gegen Masse ziehen bis ich deinen Eintrag gelesen habe (Wie gesagt, bestellt aber noch nicht erhalten). Habe mir jetzt Gedanken über eine mögliche Lösung gemacht: Wenn diese Matrix so funktioniert wie du es beschreibst, würde ich es mit UND-Gatter versuchen (ev. 3 Stk. 7408). Dein Vorhaben ist ja ziemlich zeitkritisch. 1. Eingang ==> 1. Tasteraanschluß vom MP3-Player 2. Eingang ==> Ausgangsport von deinem Steuer-Prozessor Ausgang von UND-Gatter ==> 2. Tasteraanschluß vom MP3-Player Daer Ausgang des Und-Gatter schaltet nur auf high (5V), wenn an beiden Eingängen 5V (min. 3,5V) anliegen (Vom Player und vom Prozessor). D.h. das Gatter würde nur durchschalten wenn die Tastenreihe gerade getaktet wird. Somit erhält die richtige Kolonne nur Spannung wenn die gewünschte "Taste" gedrückt wird. Diese Schaltung mus für jede Taste, also 10 mal ausgeführt werden. Ein Eingang des Gatters erhält jedoch eine niedrigere Spannung (Spannungsabfall an der Matrix-Diode). Das sollte aber kein Problem für das Gatter sein. Ich habe das zwar noch nicht getestet, aber ich denke es funktioniert. Sicherheitshalber eine Testschaltung mit einem Gatter machen. Teil mir deine Fortschritte mit, ich werde es testen wenn ich das Modul habe. Viel Glück bei deinem Projekt!
Deine Optokoppler hast Du wohl falsch beschaltet. Verbinde doch mal den Collector mit Pin 3 der Stiftleiste, und den Emitter mit Pin 4. Lass den ganzen Ballast der µC-Ansteuerung weg und schalte den Optokoppler mit einem gewöhnlichen Taster. Wenn das geht (und es sollte gehen bei genug LED-Strom), dann mach erst den nächsten Schritt und häng den µC dran. Step by Step, sonst wirds nix.
Oftmals wird eine Matrix in 2 Phasen eingelesen, einmal die Spalten und einmal die Zeilen. D.h. Dein Optokoppler muß beide Richtungen durchlassen (z.B. Opto-MOS). Oder nimm Analogschalter CD4066. Peter
Mit 2 Multiplexern CD4051 kann man sogar eine 8*8-Matrix (64 Tasten) simulieren. Peter
Cool, den CD4066 / HEF4066B kannte ich noch garnicht. Damit probiere ich es mal. Vielen lieben Dank!
Hallo Hati, ja das MSM2 MP3 Modul hat so seine Tücken. Bei eBay gibt's eine Menge besserer MP3 Module, meistens aus China mit entsprechender Lieferzeit. Schönen Gruß Chris
Hallo Chris, Habe das Modul am Freitag noch bekommen. Perfekte Beschreibung, Stereo-Ausgang auf Pins geführt, Einziger Nagel im Brett ist die Tastatur. (zumindest auf dem ersten Blick). Laut Schaltplan arbeitet die Matrix-Tastatur nur in eine Richtung. Geht nicht anders aufgrund der drei Dioden. Ich versuche es mit den UND-Gattern. Ich denke, das ist die einfachtse Lösung ohne Eingriff in das Modul und ohne 10 Optokoppler. Ich melde mich wieder, Bei Erfolg ev. mit Schaltplan.
Hallo Chris, Funktioniert genau umgekehrt als ich dachte. Sorry, mein Schaltungsvorschlag funktioniert daher nicht. Nach mißlungenen Testaufbau habe ich mit dem Oszilloskop festgestellt: Die Ausgänge des µP sind diodenseitig. Die 4 Eingänge des µP dürften mit Pullup-Wstd. gegen 3,3V gezogen werden. An den Eingängen misst man daher ca. 3V. Durch takten der Ausgänge gegen Masse werden bei gedrückter Taste die Eingänge kurz über die Dioden gegen Masse gezogen. Ist keine Taste gedrückt, bleiben die Eingänge auf high. Andere Lösung muss ich erst überlegen und testen. Bist du schon weitergekommen?
Ja, bin ich ;o) Ich habe mir ein billiges Chinamodul bei eBay gekauft wo ich per µC 256 Dateien abspielen kann. Dazu muss ich nur ein paar PIN binär ansteuern. So schön einfach sollte das MSM aus sein, kann ja nicht so schwer sein sich vorher mal Gedanken zu machen wie die Leute damit höchstwahrscheinlich umgehen möchten, oder?
Hallo Habt Ihr eine Lösung gefunde? Bin auch gerade an dem Teil dran. a.
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.