Ich arbeite seit einiger Zeit an einem MIDI-Cotroller, den ich mithilfe von Arduino realisieren möchte.
Zuerst hatte ich vor dazu einen Arduino Leonardo zu nutzen, nun habe ich mir aber zusätzlich einen Mega 2560 von SunFounder gekauft da ich hier mehr Platz für meine Sketch habe.
Ich habe also meine Sketch, die vorher beim Leonardo einwandfrei funktionierte auf den Mega 2560 geladen und alle PIN's an den Mega 2560 so angeschlossen wie beim Leonardo.
Allerdings funktionierte vieles auf einmal nichtmehr und mein MIDI-Controller tut nicht was er soll.
#Welche Hardware ich in der Schaltung verwende:
De-/Multiplexer IC's (4051)
Potentiometer
Tactical Switches (Push-Buttons)
#Genauere Problembeschreibung:
Beim Mega 2560 werden manche Push-Buttons (welche über Demultiplexer gelesen werden) nicht richtig gelesen, d.h. bei manchen Buttons denkt er ich würde 2 gleichzeitig drücken obwohl dies nicht der Fall ist und manche Buttons funktionieren garnicht mehr.
Das selbe Problem bei den Potis.
Wenn ich an die Adress PIN's für die De-/Multiplexer LED's anschliesse dann ist einer der 3 Adress-PIN's etwas dunkler. (Beim Leonardo sind alle gleich hell)
Aus der Problembeschreibung schliesse ich, dass es an den der Adressierung der De-/Multiplexern liegt.
Wie ich bereits erwähnt habe kann dies NICHT an der Sketch oder der Programmierung liegen, da die Sketch auf dem Leonardo einwandfrei funktioniert.
#Lösungsansätze:
Andere PIN's für die Adressierung der De-/Multiplexer verwendet = selbe Problem wie oben genannt.
PIN-Belegung doppelt und dreifach gecheckt = alles exakt wie beim Leonardo eingesteckt.
Habe ich etwas essenzielles übersehen? Gibt es evtl einen Unterschied zwischen dem Leonardo und den Mega, außer das ich in der Programmieroberfläche auf den Mega 2560 umstellen muss? Habe ich evtl ein defektes Gerät von SunFounder erhalten?
Ich bedanke mich für jeden Lösungsansatz und entschuldige mich für den langen Text!
Vielen Dank schonmal!
Hier der link zur Schaltplan Datei: MIDI-Controller 01.fzz
Wenn ihr die Datei bei Fritzing geöffnet habt müsst ihr auf oben auf Steckplatine klicken.
Wenn ich an die Adress PIN's für die De-/Multiplexer LED's anschliesse dann ist einer der 3 Adress-PIN's etwas dunkler. (Beim Leonardo sind alle gleich hell)
Wenn du da etwas weiter forschst... Andere Schaltzeiten, oder doch andere Hardware?
Auch wenn "der sketch" funktioniert, hilft es evtl., zum Test zusätzliche Debug-Ausgaben einzubauen und diese Test-Versionen mit beiden Controllern zu vergleichen.
Da auf den 3 besagten PIN's Adressen gesendet werden sollen z.B.: 0 0 1 oder 0 1 0 habe ich die variablen, welche direkt mit dem digital write Befehl gesendet werden z.B.: selectA selectB selectC bereits debugt.
Dabei kamen die selben korrekten Ergebnisse wie beim Leonardo raus. Allerdings leuchtet die LED am 3. Adress-Pin immer nur schwach, egal was bei dem 3. Pin gesendet werden soll (0 oder 1).
Ich habe die Adress-Pins wie gesagt auch schonmal gewechselt.. Ohne Erfolg.
Wenn ich eine Test Sketch hochlade funktionieren die Pins, die zuvor als Adress-Pins gedient haben anscheinend und alle LEDs leuchten normal.
Wie kann es also sein, dass ich digital write High oder low sende, dort die LED aber nur leuchtet als ob sie per PWM gedimmt würde?
Die maximale Leistung/Spannung des arduino werde ich wohl auch kaum überschritten haben, da der Leonardo und Mega sich da doch nicht unterscheiden oder? Außerdem würde sich das doch anders äußern?!
Das ist nicht nötig....
Allerdings würden "mir" Code und Schaltplan ungemein bei der Fehlersuche helfen.
Wie ich bereits erwähnt habe kann dies NICHT an der Sketch oder der Programmierung liegen,
Ich bewundere deine ausgeprägten diagnostischen Fähigkeiten.
Wundere mich dann aber auch, wieso du bei diesen Fähigkeiten den Fehler nicht selber findest....
Ich bedanke mich für jeden Lösungsansatz ...
Das ist fein!
Leider habe ich keinen...
Aber du darfst gerne noch etwas über dein Problem jammern, ich höre dir zu.
Sei mir bitte nicht böse wegen meiner Antwort, aber du hast wirklich wenig verwertbare Fakten geliefert.
Habe ich etwas essenzielles übersehen?
Durchaus möglich.
Da ich nicht weiß was du gesehen hast, kann ich dir auch leider nicht sagen, was du übersehen hast.
Gibt es evtl einen Unterschied zwischen dem Leonardo und den Mega,
Natürlich!
Erhebliche Unterschiede.
Schaltplan, Datenblatt zum Prozessor und Boardbeschreibungen geben gerne Auskunft.
Da gibts keine Geheimnisse.
Dabei kamen die selben korrekten Ergebnisse wie beim Leonardo raus. Allerdings leuchtet die LED am 3. Adress-Pin immer nur schwach, egal was bei dem 3. Pin gesendet werden soll (0 oder 1).
Ich habe die Adress-Pins wie gesagt auch schonmal gewechselt.. Ohne Erfolg.
Wenn ich eine Test Sketch hochlade funktionieren die Pins, die zuvor als Adress-Pins gedient haben anscheinend und alle LEDs leuchten normal.
Meine Logik sagt:
Ein Pin kann nicht gleichzeitig kaputt und heile sein.
Also hast du einen Bock im Programm.
(auch wenn du es nicht glaubst, es nicht hören willst und dich offensichtlich dieser Einsicht verweigern möchtest)
Werde die Sketch und den Schaltplan sofort hochladen wenn ich wieder Zuhause bin.
Ich finde es nur seltsam, dass die selbe Sketch bei 2 verschiedenen Arduinos einmal funktioniert und einmal eben nicht ich dachte bisher, dass es da keine Unterschiede in der Programmierung gibt.
Ich lasse mich aber gerne belehren!
Das es sonst viele Unterschiede gibt ist mir klar.
Habe auch schon die pinouts etc verglichen. Naja wie gesagt ich poste nachher Sketch und Schaltplan.
Meine Glaskugel sagt zu deinem Problem:
Wenn LEDs in Abhängigkeit vom Programm unterschiedlich hell leuchten, dann werden sie entweder gepulst, oder du hast vergessen den pinMode auf Output zu stellen und schaltest mit dem digitalWrite nur den Pullup ein und aus.
Vorsicht, das muss nicht stimmen, ist hat nur der Glaskugel Modus.
Anbei die Sketch.
Den Schaltplan kann ich zurzeit leider nicht anfertigen da ich heute meine Hand angebrochen habe und von daher die Maus nicht bedienen kann.
Mir ist klar, dass die Sketch nicht perfekt ist und die Variablen teilweise seltsam benannt sind.
Vielleicht findet ja trotzdem jemand den Fehler.
Der Leonardo hat serial auf USB (nicht auf pins) und serial1 auf den pins 0 und 1
Der Mega hat serial auf den Pins 0 und 1 und zusätzlich auf USB und serial1 auf den pins 18,19.
Da wie mir scheint Du weder Interruts noch Timer/Countr noch Bibliotheken verwendest können diese nicht das Problem sein.
Oh da hast du natürlich recht. Das kann aber nicht das Problem sein Ich hab lediglich vergessen alles wieder auf die serielle usb Schnittstelle umzustellen. Ich benutze im Moment wieder den Leonardo für die Sketch damit überhaupt was funktioniert..
Die hohe Baud rate und den serial1 TX pin benutze ich übrigens, da ich Midi-out über eine DIN Midi-Buchse übertrage.
Das oben beschriebene Problem habe ich beim Mega aber auch wenn ich die serielle usb Schnittstelle mit einer Baud rate von 9600 benutze.
So ich habe die Sketch nun angepasst (runterzuladen bei den selben Post's wie vorher). Nun läuft alles nurnoch über die standard Serielle USB-Schnittstelle. (Sorry dass ich vergessen hatte alles wieder umzustellen)
Es gibt nur eine einzige Sketch die ich auf beiden Arduinos benutze. Die PIN-Belegung ist beim Leonardo die selbe wie beim Mega 2560. Bis auf die Tx PIN's, die habe ich angepasst sodass bei beiden Geräten der Tx1 genutzt wird. Da ich allerdings nun die Sketch und den Schaltplan auf die USB-Schnittstelle angepasst habe ist dies aber sowieso nichtmehr von Bedeutung.
Desweiteren hab ich es mit meiner kaputten Hand jetzt doch noch hinbekommen eine Art Schaltplan in 'Fritzing' (hier Fritzing herunterladen) zu erstellen.
Ich hoffe ich kann weiter helfen.
Der Schaltplan in Fritzing ist wohl aufschlussreicher als ein Foto Auf dem würde man nur ein Kabelwirrwar sehen.
Hier der link zur Schaltplan Datei: MIDI-Controller 01.fzz
Wenn ihr die Datei bei Fritzing geöffnet habt müsst ihr auf oben auf Steckplatine klicken.
So ich hab jetzt noch einmal ein bisschen debugging betrieben.
Dabei ist mir aufgefallen, dass wenn ich nur bis zu 10 Potis und 10 Buttons einstellt die Sketch auch auf dem Mega funktioniert. Allerdings überträgt der Mega die Potibewegungen extrem langsam. Der 1. Poti im Array funktioniert garnicht. (Beim Leonardo schon) Außerdem fiel mir auf, dass wenn man eine LED an den 3. Adress-PIN für die De-/Multiplexer (über den hatte ich schon einmal berichtet) angeschlossen hat und nur 10 Potis und Buttons einstellt, dass diese LED beim Mega dann beim starten erst sehr langsam blinkt und dann immer schneller. (Beim Leonardo nicht)
So langsam glaube ich dass der Mega mit seinen 16hz nicht ganz mitkommt... Das würde mich zwar wundern, könnte aber auf einen kaputten Chip hindeuten.
Außerdem resetet er sich ständig selbst (je mehr ich an den Potis drehe desto höher die chance).
Das ganze ist mir trotzdem ein Rätzel... Ist der Chip (vllt auch der quarzer?) kaputt oder ist der Mega wirklich zu langsam für meine Sketch? (Falls er zu langsam ist sollte ich wohl auf den Teensy umsteigen)
Vielleicht kommt ihr ja zu einem anderen Schluss.
Ich warte jetzt nocheinmal 3 Tage ob jemand den Fehler findet ansonsten schick ich den Mega zurück.
Hoffentlich liegt es an meiner Sketch.. Ich hab wenig lust das Ding zurück zu schicken...
Es ist unwahrscheinlich daß der Quarz (genaugenommen ist es ein Resonator) mal geht und mal nicht. Ein Controller ohne funktionierenden Takt macht gar nichts.
Zum Ausschluß der Hardware würde ich mal einen anderen Mega versuchen.
Mach aus dem Fritzing ein PDF oder JPG und hänge das bitte an Deinen Post. Ich bekomme das File nicht heruntergeladen.
Du sprichst von viele Kabeln. Hast Du dort Wackelkontakte?
Schreib mal wo Du ca wohnst, vieleicht kann sich ein User mit Dir treffen und dir zwecks Fehlerdiagnose seinen MEGA leihen.
Hmm also einen Wackelkontakt halte ich für unwahrscheinlich, da die Probleme beim Leonardo überhaupt nicht auftreten und beim Mega sofort. Bzw beim Mega funktioniert es keine Sekunde lang.
Ich wohne in Köln auf der rechten Rheinseite. Das wäre natürlich super wenn jemand bereit wäre mir seinen Mega für ein paar Minuten zur Verfügung zu stellen Ich gebe auch gerne ein Bierchen oä aus
Das mit der Fritzing Datei ist blöd. Ich versuche mal ne jpg oder ähnliches draus zu machen wenn ich wieder Zuhause bin.
Bei 32 Potis wundert mich nix, nur eines: das läuft auch auf dem Leo nich mehr vernünftig.
Alleine um die Biester einzulesen, brauchts über 3ms...und dann willste die Werte noch mit Fliesskommaberechnung glätten?
Kann aber gehen (wenn man mit den Latenzen, die das verursacht, leben kann).
Aber wie versorgst du diese Menge an Potis mit Strom??
Jeder von denen verbraucht was- und zwar abhängig von seiner Stellung unterschiedlich viel. Wenn du Glück hast, funktioniert es, wenn alle in der richtigen Stellung sind....probier das mal.
Alle nach links (oder alle nach rechts).
Rabenauge:
Jeder von denen verbraucht was- und zwar abhängig von seiner Stellung unterschiedlich viel.
Wenn am Schleifer nur der Arduino-Analogeingang hängt und die beiden anderen Anschlüsse zu GND und 5V gehen,
ist der Stromverbrauch so gut wie unabhängig von der Stellung, dann bestimmt der Poti Wert den fließenden Strom.
Hab mir jetzt den teensy bestellt und werde bei den Potis auf ne externe Stromversorgung zurück greifen.
Aber beim Leonardo hat das bis jetzt eigentlich ganz gut funktioniert.. Klar waren da leichte Latenzen aber mit dem teensy erhoffe ich mir da mehr