Impressum | Datenschutz | Shop | DIY | TT @ Twitter | TT-Cabs
Anzeigen der neuesten Beiträge

Entwicklung eines Midi-Switching-Systems auf Arduino-Basis

  • 145 Antworten
  • 72466 Aufrufe

0 Mitglieder und 1 Gast betrachten dieses Thema.

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Moin,

I2C I/O - Expander : PCF8574

guter Hinweis. Gibt's bei ---- für kleines Geld.


Schonmal an z8encore gedacht ?
In-Cicuit-Programmierung, On-Chip-Debugger, priorisierbare Interrupts,
Flashen über serielle Schnittstelle und vor allem kein Fuse-Bit-Gequarke.
Kost´ 6-7 Eu bei R&S.

mhhhh.... werde ich gerade nicht so richtig warm mit. Schnelles googlen brachte mir gerade wenig Erkenntnis über den Einstieg in die Programmierung. Das ist der Punkt, der mir bisher ganz gut an Arduino gefällt, dass es durch die gute Dokumentation und hohe Verbreitung einsteigerfreundlich ist und die Programmierung auf einer einigermaßen abstrakten Ebene stattfindet.


ich habe hier

http://www.tube-town.de/ttforum/index.php/topic,14548.0.html

vor einer Weile schon mal ein Switching System für einen Amp eingestellt, daß auf dem Arduino Pro Mini basiert. Die Ausgangspins habe ich dort auch mit dem 74HC595 vervielfältigt, dabei mußt du aber darauf achten, daß der nur 35mA treiben kann, was für Relais nicht reicht. Abhilfe schafft ein nachgeschalteter ULN2803, da bist du mit 500mA pro Pin auf der sicheren Seite.

Ja, habe ich damals gesehen. In dem Thread ist ja auch anderweitig ein paar Mal die Empfehlung Arduino gefallen. Dass irgend eine Treiberschaltung benötigt wird, egal ob ULN2803 oder per diskreten Transistoren, ist mir klar.


Um eingangsseitig Pins am Arduino zu sparen habe ich 74HC147 verwendet, mit dem Ding kann man neun Eingänge auf vier Bit codieren.

An der Stelle wäre es vielleicht mal ganz sinnvoll zusammen zu tragen, welche Art der Ein- und Ausgangsvervielfältigung besser oder schlechter ist. Oder ist es am Ende bei so einer Anwendung egal?

Für die Erweiterungen von Eingängen gäbe es ja die Möglichkeiten
  • Taster als Matrix verschalten
  • Taster über unterschiedliche Spannungsteiler über analoge Eingänge auswerten
  • i²C Port Expander (PCF8574)
  • Priority Encoder (74HC147)
Bei den Ausgängen wären das
  • Schieberegister
  • ebenfalls I²C Port Expander
Hab ich was vergessen?

Gefühlsmäßig am nächsten steht mir im Moment, für den Floorcontroller einen großen µC zu nehmen, der bringt fast alles mit, was ich brauche, und ich muss nur die Taster als Matrix verschalten. In der Rackeinheit dann einen "kleinen" ATmega, Outputs per Shift Register (3 Pins), 21 Inputs ebenfalls als Matrix (10 Pins), 2 Pins Midi I/O. Ich hab da jetzt keine richtigen Argumente für, aber der flüchtige Blick über die Dokumentation brachte bei mir bei Schieberegistern und Matrixschaltung den sympatischsten Eindruck.

Der Vorteil, alles / vieles per I²C-Port-Expander zu machen, wäre vermutlich eine vereinheitlichte Programmierung über alle I/Os.

Gruß, Nils

*

Offline SvR

  • YaBB God
  • *****
  • 2.384
Salü,
Port-Expander hat halt den Vorteil, dass man sie als Ausgang und Eingang verwenden kann (auch gemischt, also einen Teil des Ports als Ein- und den anderen als Ausgang). Außerdem können sie einen Pegelwechsel per Interrupt an den µC weiterreichen (wenn dieser noch Pins für externe Interrupts frei hat), sodass man nicht pollen muss, wenn man auf Daten wartet. Praktisch ist auch, dass man einzelne Schaltungsmodule mit ner 4-Drahtleitung verbinden kann, anstatt einer 8-Poligen Flachbandleitung (z.B. kann man dann die LEDs und dem LCD an der Frontplatte ne eigene Platine spendieren und alles per I2C mit der Hauptplatine verbinden). Außerdem wird beim Port-Expander das Byte "in einem Zug" auf die Ausgänge gelegt. Beim Schieberegister wird es "durch geschoben". Bei LEDs stört das nicht, bloss bei Relais bin ich mir nicht sicher ob das Störungen geben könnte oder ob die träge genug sind.
Bissel Lesestoff: http://www.mikrocontroller.net/articles/Port-Expander_PCF8574
mfg sven
Rettet den Wald, esst mehr Biber!
PIC32-Tutorial

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Moin Sven,

danke für den Link.

Wenn ich das richtig verstanden habe, stellt sich das von Dir geschilderte Problem nicht, wenn man ein "latching" Register benutzt. Da werden die Ausgänge erst gesetzt, wenn man das Byte komplett in den IC geschoben und freigegeben hat.

Gruß, Nils

*

Offline Firebird

  • Sr. Member
  • ****
  • 183
Hallo,

zu den Vorteilen der Port-Expander hat SvR ja schon geschrieben.
Ich bin kein Freund davon, Taster als Matrix zu verschalten, weil es einfach vom Aufbau her oft umständlich ist. Deswegen habe ich den 74HC147 verwendet. Das ist zusagen die Variante, wenn man a) kein Matrix zurechtfummeln und b) kein Bussystem wie I2C einsetzen will.

@SvR: Beim 74HC595 Schieberegister werden die Ausgänge auch "in einem Zug" geschaltet. Deswegen braucht das Ding auch drei Steuer-Leitungen: An einer liegt das zu übernehmende Bit an, mit einem Impuls an der Zweiten wird das Bit übernommen und ein internes Register weiter-geshiftet (das kann man dann beliebig oft wiederholen). Erst mit einem Impuls an der dritten Leitung wird der aktuelle Zustand des internen Registers auf die Ausgänge geschaltet. Durch dieses Verfahren kann man die Bausteine auch schön kaskadieren, damit bekommt mit drei Pins am µC beliebig viele Ausgänge hin.

Eine Sache noch zu den Interrupts, normalerweise hast du recht, man sollte stupides Pollen vermeiden, aber in dieser konkreten Anwendung ist das wurscht, der Prozessor hat ja sonst nichts zu tun, außer auf Eingabe zu warten, d.h. für die Hardwareauswahl braucht man das hier nicht zu beachten.

Edit: Nils war schneller mit dem Schieberegister...

*

Offline SvR

  • YaBB God
  • *****
  • 2.384
Salü,
Ich würde der Einfachheit halber nur ein System einsetzen. Port-Expander haben halt den Vorteil, dass sie über einen Bus angesteuert werden. Mit bis zu 8 Bausteinen an einem Bus bist du auch später noch flexibel, wenn du noch en paar Looper/Schaltausgänge willst oder doch noch ein EEPROM brauchst.
Taster zu ner Matrix löten is ja jetzt kein Hexenwerk. Da würde ich nicht extra ein IC für her nehmen. Einfach in Zeilen und Spalten aufteilen. Das ist doch nix im Vergleich zu nem Röhrenradio in ptp ;) :devil:

mfg sven
« Letzte Änderung: 28.08.2011 17:45 von SvR »
Rettet den Wald, esst mehr Biber!
PIC32-Tutorial

*

Offline Firebird

  • Sr. Member
  • ****
  • 183
Sag mal ist das eigentlich was persönliches, daß du ständig versuchst, meine Antworten zu widerlegen und alle von der grenzenlosen Überlegenheit des I2C-Busses zu überzeugen? Das war schon in dem anderen Thread so (universeller Fußschalter), wußte gar nicht, daß wir Streit haben  ???. Der Vergleich zum ptp-Röhrenradio ist doch albern...

*

Offline SvR

  • YaBB God
  • *****
  • 2.384
Salü,
Ich hab sicher nichts gegen dich persönlich ???
Nils hat nach Vor- und Nachteilen zum Thema Schieberegister und I2C-Portexpander gesucht und ich hab einige Argumente geliefert um ihm bei der Meinungsbildung zu helfen.
Klar ist der Vergleich zum ptp-Röhrenradio albern, deshalb war auch ein zwinkerndes Smily dahinter.
mfg sven
Rettet den Wald, esst mehr Biber!
PIC32-Tutorial

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Kinder! Nicht streiten, sonst kommt Ihr auf die stille Treppe! :devil: . Ist doch normal... ich bin von meinen vertrauten und bewährten Lösungen auch immer überzeugter als von anderen  ;) .

Ehrlich gesagt finde ich an der Matrix-verschaltung auch nix übles... außer vielleicht, dass es schwierig ist, mal eben mehr Taster hinzuzufügen, sofern die Matrix voll belegt ist. Ich hätte an der Rackeinheit 21 Taster (12 Loops, 8 Schaltausgänge, einen "Store" zum speichern von Presets), da ist aber in einer 6x4- oder 5x5-Matrix noch Raum für weitere Taster.

Letzlich muss ich wahrscheinlich mal die verschiedenen Varianten aufmalen und schauen, was übersichtlicher zu verdrahten ist. Gerade im Floorboard ist ja alles räumlich großzügig verteilt.

Unterm Strich bleibt, dass es genug Varianten gibt, um Ein- und Ausgänge zu erweitern. Die I²C-Variante hätte den unschlagbaren Vorteil, dass auch das Erweitern des EEPROM kein Problem wäre - im Moment, neben dem Komfort der großzügigen I/O-Ausstattung, das Killerargument für ein großes Board für den Floorcontroller.

Naja. Ich denke, ich werde wie gesagt alle Szenarios mal grob durchspielen.

Gruß, Nils

*

Offline Firebird

  • Sr. Member
  • ****
  • 183
Salü,
Ich hab sicher nichts gegen dich persönlich ???
Nils hat nach Vor- und Nachteilen zum Thema Schieberegister und I2C-Portexpander gesucht und ich hab einige Argumente geliefert um ihm bei der Meinungsbildung zu helfen.
Klar ist der Vergleich zum ptp-Röhrenradio albern, deshalb war auch ein zwinkerndes Smily dahinter.
mfg sven

Na dann ist es ja gut  :bier:

Hatte nur irgendwie das Gefühl, daß jedesmal wenn ich etwas poste sofort eine Gegenrede kam...

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Moin,

ich will auch mal ein paar Worte zur Hardware verlieren, auch wenn das eher unspektakulär und fast selbstverständlich ist.

Gehäuse für den Looper / Switcher
Der Looper Switcher wird in einem 19“-Gehäuse mit 1-2HE aufgebaut. Eine Ventilierung dürfte nicht nötig sein, kostet aber keinen oder kaum Aufpreis. Gute Gehäuse von Adam Hall sind bei TT für etwa €50,- erhältlich, günstigere Gehäuse liegen bei etwa €40,- (Musikding) bis €32,- (Pollin). Inwieweit da relevante Qualitiätsunterschiede bestehen, kann ich nicht sagen. Für die Urversion hatte ich damals *irgendwo* im Internet ein 2HE-Gehäuse gekauft, das war unproblematisch. Schließlich soll hier ja auch keine 10kg-Endstufe verbaut werden.

Wenn, wie oben geschrieben, alle 12 Loops diskret ausgeführt werden sollen, geht das nur auf 2HE. Will man mit 1HE auskommen, muss man ein paar Kompromisse eingehen.

Zunächst mal gilt es zu entscheiden, welche Buchsen benutzt werden sollen. Ich würde da ganz gerne die Neutrik Amp-Style Buchsen nehmen. Leider benötigen die etwas Platz, horizontal 20 mm, vertikal wegen der nach unten heraus stehenden Lötösen 22 mm, und dann muss man sehr genau aufpassen, dass kein Lot unten heraussteht und irgendwo kurzschließend anliegt. Beim Musikding gibt's noch diese geschlossenen Buchsen, die die Lötfahnen nach hinten raus haben, aber ich hab keine von denen zu Hause, und ein Datenblatt / Zeichnung gibt's auch nicht.

In einem 1HE-Gehäuse müssen die Neutrik-Buchsen einmal um 90° gedreht werden, so dass die Lötösen zur Seite stehen. Auf diese Weise lassen sich neben den Midi-Buchsen und dem Netzteilanschluss maximal 34 Buchsen unterbringen, weswegen dann auf die komplette Trennung aller Loops verzichtet werden muss. Die Loops 1-4 und 5-8 würden dann (wie beim alten System) fest in Reihe verschaltet und mit einem Input und Output versehen. Für so eine "Chain" braucht man dann 6 Buchsen. Die Loops 9-12 können dann diskret mit 3 Buchsen für Input, Insert und Output ausgeführt werden. Das sind zusammen dann 24 Buchsen, bleiben noch genau 8 Buchsen für die Schaltausgänge und 2 Buchsen für den einschleifbaren Buffer.

Auf 2HE wäre natürlich alles einfacher unter zu bringen, man hätte dann maximale Flexibilität zum Preis einer weiteren HE (und viel umbauter Luft), und die Verdrahtung der Buchsen wäre deutlich weniger Fummelei. Ich neige aber im Moment eher zur 1HE-Variante.

Beim alten System hatte ich die Buchsen in Print-Ausführung gewählt und die Lochrasterplatten über die Buchsen montiert. Ich denke aber, hier möchte ich Buchsen und Platinen trennen und die Buchsen frei verdrahten - anders ginge es auf 1HE eh nicht.

Auf der Frontseite sollen, wie bereits erwähnt, für jede Loop und jeden Schaltausgang ein Taster und eine LED untergebracht werden, dazu ein Taster für "Store", sowie eine 7-Segment-Anzeige für die Anzeige des Presets. Schön wären Taster mit integrierter LED, aber nach dem was ich bisher gefunden habe ist das preislich indiskutabel.

Ich hab die 1HE-Variante mal skizziert und angehängt. Ich hab jetzt mal mit 440mm Gehäusebreite gerechnet.

Gruß, Nils
« Letzte Änderung: 28.08.2011 21:57 von Nils H. »

*

Offline kugelblitz

  • YaBB God
  • *****
  • 1.724
  • be seeing you...
Hallo Nils,

um das unterbringen der Buchsen zu erleichtern, wäre vielleicht eine Breakoutbox zur rückseitigen Montage im Rack eine Alternative. Alle Buchsen kommen in die Breakoutbox und werden dort auf eine platzsparendere Buchsenart übersetzen, den Controller, das Interface und die Anzeige kann man dann in einem kurzem 1HE Gehäuse unterbringen und zB per Multicore verbinden.

Bin gespannt auf das Ergebnis,

Gruß,
Sepp

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Salü,
Port-Expander hat halt den Vorteil, dass man sie als Ausgang und Eingang verwenden kann (auch gemischt, also einen Teil des Ports als Ein- und den anderen als Ausgang). Außerdem können sie einen Pegelwechsel per Interrupt an den µC weiterreichen (wenn dieser noch Pins für externe Interrupts frei hat), sodass man nicht pollen muss, wenn man auf Daten wartet. Praktisch ist auch, dass man einzelne Schaltungsmodule mit ner 4-Drahtleitung verbinden kann, anstatt einer 8-Poligen Flachbandleitung (z.B. kann man dann die LEDs und dem LCD an der Frontplatte ne eigene Platine spendieren und alles per I2C mit der Hauptplatine verbinden). Außerdem wird beim Port-Expander das Byte "in einem Zug" auf die Ausgänge gelegt. Beim Schieberegister wird es "durch geschoben". Bei LEDs stört das nicht, bloss bei Relais bin ich mir nicht sicher ob das Störungen geben könnte oder ob die träge genug sind.
Bissel Lesestoff: http://www.mikrocontroller.net/articles/Port-Expander_PCF8574
mfg sven

Moin,

ich hab mich ein wenig mit der Port Expander Lösung beschäftigt, und ich sehe zwei Probleme.

Erstens: Treiben der Relays. Das ist ein grundsätzliches Problem und hat nix mit dem PCF8574 zu tun; wenn ich die Relais über Transistoren oder einen Darlington-Array treibe, reicht bei 9V Versorgung die Spannung nicht mehr aus, um die Relais zu schalten. Ich verwende ganz gerne die blauen Takamisawa-12V-Relais, weil die erstens bei 9V sehr zuverlässig arbeiten und zweitens einen Spulenwiderstand von 960 Ohm haben, so dass sie bei 9V nur knapp 10mA verbraten.

Über einen Transistor oder Treiber-IC bleiben mir aber nur 8,2V bis 8,3V, und da flattern die Relais. Jetzt habe ich das Datenblatt studiert, und dort steht, dass jeder der Ports des PCF8674 max. 25mA aufnehmen kann, im verlinkten Artikel steht, dass man in Summe 200mA nicht überschreiten sollte. Strommäßig sollte ich mit dem 8574 also locker 8 Relais mit zugehöriger LED (~2mA) ansteuern können - kann man das bringen, die Relais direkt zu treiben, oder sind da Probleme vorprogrammiert?

Die Alternative wäre, dass ich doch mit 12V DC in das Gerät reingehen muss, dort die Relaisversorgung abzweige und dann noch mal einen Regler nachschalten muss, der die Spannung auf 9V runterholt, damit ich über den DC out die Pedale versorgen kann - das geht zwar, ist aber irgendwie auch doof.

Zweitens: Laut Datenblatt sind die Ports des 8574 nach dem Einschalten erstmal auf HIGH, bis der IC einen anderen Zustandsbefehl bekommt. Werden die Relais über einen 2804 getrieben, heisst dass, sie sind alle erstmal durchgeschaltet, bis das Programm im µC sie auf LOW setzt. Eigentlich hab ich keine Lust, da noch einen Inverter zwischen zu basteln; jemand Ideen für eine andere Lösung?

Gruß, Nils

*

Offline SvR

  • YaBB God
  • *****
  • 2.384
Salü,
Erstens: Treiben der Relays. Das ist ein grundsätzliches Problem und hat nix mit dem PCF8574 zu tun; wenn ich die Relais über Transistoren oder einen Darlington-Array treibe, reicht bei 9V Versorgung die Spannung nicht mehr aus, um die Relais zu schalten. Ich verwende ganz gerne die blauen Takamisawa-12V-Relais, weil die erstens bei 9V sehr zuverlässig arbeiten und zweitens einen Spulenwiderstand von 960 Ohm haben, so dass sie bei 9V nur knapp 10mA verbraten.

Über einen Transistor oder Treiber-IC bleiben mir aber nur 8,2V bis 8,3V, und da flattern die Relais. Jetzt habe ich das Datenblatt studiert, und dort steht, dass jeder der Ports des PCF8674 max. 25mA aufnehmen kann, im verlinkten Artikel steht, dass man in Summe 200mA nicht überschreiten sollte. Strommäßig sollte ich mit dem 8574 also locker 8 Relais mit zugehöriger LED (~2mA) ansteuern können - kann man das bringen, die Relais direkt zu treiben, oder sind da Probleme vorprogrammiert?
Der PCF8574 könnte das zwar strommässig mit machen, allerdings kann er nur mit maximal +7V versorgt werden. Also wird sein High-Pegel deutlich unter den 8,2V liegen -> also flattert es auch.
Oder hab ich dich falsch verstanden?
Wenn du nicht zusätzlich eine 12V-Versorgung einbauen willst, warum nimmst du dann keine 9V-Relais. Oder hast du die Relais schon gekauft?
mfg sven
Rettet den Wald, esst mehr Biber!
PIC32-Tutorial

*

Offline Nils H.

  • YaBB God
  • *****
  • 3.067
Salü,Der PCF8574 könnte das zwar strommässig mit machen, allerdings kann er nur mit maximal +7V versorgt werden. Also wird sein High-Pegel deutlich unter den 8,2V liegen -> also flattert es auch.
Oder hab ich dich falsch verstanden?
Wenn du nicht zusätzlich eine 12V-Versorgung einbauen willst, warum nimmst du dann keine 9V-Relais. Oder hast du die Relais schon gekauft?
mfg sven

Arrrgh Denkfehler. Der High-Pegel ist zwar hoch genug, um die Relais abzuschalten (Masseschaltung an den Relais - über den Relais lägen dann nur noch 4V, wenn der 8574 vom Arduino mit 5V versorgt wird), aber der Strom ist dann trotzdem zu hoch. Mist.

Edit: oder hab ich das falsch verstanden, kann der 8574 bei HIGH zwar nur 100µA sourcen, aber mehr sinken? /Edit

9V-Relais sind aber immer selten, und wenn dann teuer; und die meisten Relais ziehen auch zu viel Strom. Die 12V-Takas sind mit 12,5mA bei 12V halt echt der Knaller, finde ich. Mir wird wohl nix anderes bleiben, als 12V und 9V in der Kiste bereit zu stellen.

Haste 'ne Meinung zu der Einschalt-Geschichte?

Gruß, Nils
« Letzte Änderung: 30.08.2011 16:30 von Nils H. »

*

Offline SvR

  • YaBB God
  • *****
  • 2.384
Salü,
Haste 'ne Meinung zu der Einschalt-Geschichte?
Wie sieht den die Verschaltung rund um die Schaltkontakte der Relais aus? Wenn die Relais Umschalter sind, könnte man sie ja einfach passend verkabeln oder?
Kenn mich mit Loopern und dem Kram allerdings nicht so aus (mir reicht en Wah und en 2-Kanal-Amp ;) ). Weiß deshalb nicht warum es stört, wenn die Ausgänge High sind. Evtl. könnte man auch die Betriebsspannung der Relais schaltbar machen, sodass man erst den Portexpander initialisiert und dann vom µC die Betriebsspannung für die Relais frei gibt.
mfg sven
Rettet den Wald, esst mehr Biber!
PIC32-Tutorial