PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 58 I/O Pins --> Porterweiterung --> welchen uC?



fred84b
14.03.2009, 20:06
Hallo Leute

Da ich noch nicht so viel Erfahrung habe in Sache Elektronik / Mikrocontroller, wollte ich hier kurz mein Projekt vorstellen und hören, was die Profis darüber denken.

Ich habe einen alten MIDI-Controller ausgegraben. Da ich keine Betriebsanleitung dafür habe und der Controller wirre (nicht nachvollzierbare) MIDI Messages ausspuckt, will ich die Elektronik ersetzen (-> neuer Mikrocontroller einbauen mit eigener Software). Das Gehäuse mit den Knöpfen, Potis soll natürlich bestehen bleiben.

Gegeben sind: 27 Druckknöpfe, 5 Drehregler, 15 LEDs und zwei 8-Segment Anzeigen. Ergibt 58 digitale I/O Pins und 5 analoge Eingänge. All das soll mit dem Mikrocontroller verbunden werden.

Nach einer Recherche habe ich bei mikrocontroller.net (http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister) gelesen, dass man mit Schieberegistern den Mikrocontroller mit weiteren Ausgangs- und Eingangspins erweitern kann.

Frage: welchen AVR Mikrocontroller würdet ihr nehmen? Ich habe bis jetzt nur mit dem ATmega32 Erfahrungen und würde auch gerne in dieser Produktlinie bleiben.

Ich dachte am Mega8 mit 4 Porterweiterungen für die Ausgänge (74HC595D) und 3 Porterweiterung für die Eingänge (74LS165D). Kann es zu Performanceproblemen kommen, wenn ich so viele Porterweiterungen habe?

Im Attachment ist noch ein Bild vom Gerät.

Danke für Rückmeldungen
Lieber Gruss Frédéric

Besserwessi
14.03.2009, 21:57
Die LEDs und 8 Segment Anzeigen könnte man wahrscheinlich als Matrix mit relativ wenigen Pins Betreiben. Als Matrix 8 x 4 bräuchte man da zum Beispiel 12 IO Pins und ggf. ein paar Treiber für mehr Strom.

Mit ein Paar Dioden (eine je Taster) kann man auch die Taster/Schalter als Matirx abfragen. Für die 27 taster würden da 5+6 IO Pins reichen. Man kann dabei sogar noch die Pins für die LEDs und Taster gemeinsam nutzen. Dann brächte man nur 4 extra Pins für die Taster.

Es könnte also sogar reichen alles direkt von einem Mega32 anzusteuern, ganz ohne Porterweiterung, oder einen 2 ten Controller. Von der Rechenzeit, sollte man mit vielleicht 1-5% der Rechenzeit fürs Abfragen der Eingänge und Steuern der LEDs auskommen.


Wenn man die Schieberegister am Hardware SPI Port hat, geht das ziehmlich schnell im Vergleich zu den nötigen eher geringen Geschwindigkeiten. Es ginge also auch mit den Porterweiterungen.

Neutro
14.03.2009, 22:03
Guten Abend,

ich selber würde dafür I2C Port expander wählen(PCF8574), zumindest für die digitalen Signale. Die 8(?) Segment Anzeigen kann man am einfachsten Multiplexen, z.B 4051. Die kann man auch zum Umschalten der Analogen Signale verwenden. Somit müsstest du also was die Port Pins betrifft mit einem MEGA8 hinkommen, was die Speicherkapazität angeht bin ich mir da nicht sicher, da ich nicht weis was der Controller zusätzlich noch machen muss.

MfG

Neutro

Besserwessi
14.03.2009, 22:41
Zum Multiplexen der LEDs / 7 Seg braucht man kein IC, das geht einfach als Diodenmatrix. Der 4051 würde einem da nur sehr wenig helfen (3 statt 4 Pins). Solange man mit den Pins am µC direkt auskommt, würde ich auf Portexpander wenn möglich verzichten, dafür ruhig einen größeren µC.

RP6conrad
14.03.2009, 22:41
Den mega32 hat sowohl SPI wie I2C. Beide moglichkeiten stehen offen. Bei SPI geht das auch sehr schnell : meine mega32 lauft an 16 MHz, den hardware SPI lauf an 8 MHz. Die porterweiterung 74HC595 (Ausgange !!)brauchen nur 3 Anschlusse : SCK, MOSI, STROBE. Diese konnen dan auch nochmal in serien gesetzt werden. Wie langer die serie, wie mehr bytes da jeden mal durch der SPI port mussen. Aber an 8 MHz geht das noch verdammt schnell !!!

BlueNature
15.03.2009, 04:42
So, hab nachdem der gesamte Threat den Gulli hinutengieng aufgrund mangelndem Login keine Lust mehr das ganze nocheinmal zu schreiben. Schreib mich einfach an, PN kennst ja, meine Mail ist ja auch nicht unbekannt.

Grüße Wolfgang

P.S. Bin auch ein Musikus der alten Schule, und kenne das MIDI-Protokoll in und auswendig. Denke ich kann dir da zu einem funktionellen Source unter die Arme greifen.

BlueNature
16.03.2009, 02:42
Servus,

...neuer Tag, neues Glück, hab die Schaltung noch einmal gezeichnet und als Grafik hinterlegt.

http://wiesolator.gotdns.org/rn/MidiController_Schaltung.PNG

So in der Art ist ein Anschaltung deiner MIDI-Controller-Einheit einfach an einem ATMEGA32 möglich mitsamt der MIDI-Schnittstellen und was man so in etwa noch dazu braucht. Prinzipiell besteht es aus 4 LED-Gruppen zu je acht LED's (zwei 7-Segment-Anzeigen und rote 15 LED's). Diese werden einfach reihum so schnell softseitig gemultiplext das nichts mehr flimmert.
Dann kommen noch die Taster, diese sind als Matrix über den eh schon gemultiplexten Anzeigeteil gelegt. Damit kannst mit dem Anzeige ausgeben auch gleich auf einen Rutsch die Taster mitlesen.
Den ULN2803 habe ich genommen, weil er recht kompakt gleich 8 Transistoren in einem Gehäuse hat, das reicht genau die je 8 angesteuerten Segmente als Treiberbaustein. Kannst natürlich auch diskret mit einem 2k2-Widerstand und einem BC547C aufbauen.
Die UART brauchst für die spezielle Baudrate der MIDI-Schnittstelle, hoffe der Schaltungsteil funktioniert so, hatte es noch so im Kopf. Mußt du eben nochmal testen.

Die als "Reserve" gezeichneten Leitungen kannst du für weitere Controller-Kaskadierungen verwenden, oder wenn du sie nicht brauchst ist es ideal den MIDI-Kanal damit festzuelgen auf den der MIDI-Controller nacher horchen bzw. Senden soll (reichen 4-Bit als DIP-Schalter).

Hier noch ein Link zu Informationen für den MIDI-Standard (brauchst zum Protokoll coden nach deinen Wünschen)
http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface
http://www.midi.org/techspecs/midimessages.php

Grüße Wolfgang

fred84b
16.03.2009, 13:40
Wow, soviel Hilfe! Vielen vielen Dank Leute!!

Ich hatte bis jetzt noch nie was von Dioden-Matrizen gehört:). Ist aber hier wohl die einfachste Lösung.

Die Schaltung von BlueNature sieht ganz gut aus. Danke.

Ich habe aber noch ein paar Fragen:
1. Wie funktioniert genau der ULN2803?
2. Die BC327 verstärken nur das Signal, oder?
3. Ich habe irgendwo gelesen, dass externe Pullups Strom sparen. Ist das richtig?
4. Was für einen Quarz würdet ihr nehmen? Reichen 4Mhz? Die Software macht nichts anderes als Tasten abfragen und bei Tastendruck ein Paar Bytes durch den UART schicken.

Dann ist mir noch eine Idee in den Sinn gekommen. Ist es schwierig / aufwändig zusätzlich noch eine USB-Schnittstelle einzubauen, um die MIDI Messages direkt zum Computer zu schicken? Optimal müsste man mit USB auch Zugriff auf das EEProm des uC haben (für die Konfiguration der Knöpfe). Und dann eventuell sogar auch den nötigen Strom fürs Gerät liefern.
Die USB Schnittstelle würde ich aber erst in einem zweiten Schritt einbauen. Die Frage ist, ob ich jetzt schon Vorkehrungen treffen muss, damit ich später nicht alles wieder herauslöten muss. Im Prinzip sollte ich nach dem Schaltplan von BlueNature genügende Reseve Pins haben, oder?

@BlueNature
Ich habe an einem (selbstgebastelten) Controllerboard erfolgreich MIDI Befehle hin und her geschickt. Die Software ist recht primitiv, aber es funktioniert. Wenn es für dich OK ist, würde ich dir meinen Code schicken. Mit deiner Erfahrung kannst du vieleicht sagen, ob es was taugt oder nicht. Ich würde es aber erst dann schicken, wenn ich mich wieder mit der Software beschäftigen werde.

Gruss Frederic

Besserwessi
16.03.2009, 21:23
Die Schaltung von BlueNature sieht schon ganz gut aus. Die Spule bei AVCC sollte hier kaum nötig sein, das sollte auch ohne gehen, schaden tut sie aber kaum. Statt des 74ALS00 würde, glaube ich auch eine 74HC00 oder HCT00 reichen.

Der UL2803 ist ein recht einfaches Treiber IC für mehr Strom für die LEDs. Da sind 8 NPN Darlingtontransistoren mit Basiswiderständen drin.

Die BC327 dienen als Schalter für einen etwas höheren Strom, von bis zu 8 LEDs. Je nach Typ der 7 Segmentanzeigen, müßte man hier auch noch was ändern und andere Treiber wählen. Wenn die LEDs genügend hell sind, auch mit etwa 5 mA, könnte man auf einen Teil der Treiber sogar verzichten.

Den Quarz sollte man passend zur Baudrate bei Midi wählen, damit man auch die richtige Baudrate einstellen kann. Bei 4 Mhz muß das nicht unbedingt gehen. Sonst würden 4 MHz aber wohl ausreichen.

Externe Pullups sparen normalerweise keinen Strom, und wenn dann nur sehr wenig, wenn die externen pullups hochohmiger sind als die internen. Gegen den Strom der ganzen LEDs fällt das kaum ins Gewicht. Was man vermeiden sollte sind offene digitale Eigänge. Bei mittleren Spannungspegeln brauchen viele Ics (auch die µCs) etwas mehr Strom, als bei einem gut definierten H oder L Pegel.

BlueNature
17.03.2009, 03:15
Servus Frederic,

von einem USB-Treiber kann ich dir nur abraten. Das wird nicht so leicht. USB/MIDI-Adpater bekommst im China-Preissegment nachgeschmissen mitsamt Treibern.
Als Versorgung kannst es vieleicht nehmen. Die 5V werden aber auch nicht sauber sein, da die Schaltung auch schon etliches an Strom für die LED's aufnehmen wird, und die 5V nie saubere 5V in der Schaltung bringen werden. Wenn Du es aber trotzdem über USB versorgen willst, würde ich dir dringend raten die AREF auf eine kleinere Referenz zu legen, sowie auch die Potentiometer (zwischen AGND und AREF incl. interne AREF von ca. 2,5V).

@Besserwessi
Den ULN2803 (oder funktionsgleiches Teil) würde ich auf keinen Fall weglassen. Die Leitungen führen im schlechtesten Fall den Hauptstrom aller 4 Segmente über die gesamte Dauer und das packt der AVR nicht. Seine "Hardware" besteht ja bereits und ist sicher nicht Low-Current.
Die Spule kann man auf jeden Fall im Layout vorsehen, für den Fall das es zu Komplikationen (permanenten Wertesprüngen) kommt, hat das auf MIDI einen bösen Nebeneffekt. Es werden permanent Controller-Messages generiert, und die MIDI-Verbindung unsinnig mit irrelevanten Datenpacketen belastet.
Den LS-Typen der Treiberschaltung (für die MIDI-Stromschleife) und den Optokoppler würde ich nicht wild durch andere ersetzen versuchen. Ich hatte mit diesen Bausteinen die besten Resultate.
Zur Baudrate und den MHz... im Grunde sollen technisch um die MHz locker reichen bei sauberem Coding (meiner Ansicht sollte es sogar schon um die 1MHz locker machbar sein, aber was schadet es den AVR höher anzutakten, er kann ja bis 16MHz). Das ist etwas relativ einfaches. Das MIDI-Protokoll fährt keine hohen Baudraten. Der Standard stammt ursprüglich noch aus einem Normungs-Gremium das um 1981 entstand, und den Wildwuchs der Kommunikation einfach einmal auf einen klaren Nenner bringen sollte.

Grüße Wolfgang

Besserwessi
17.03.2009, 17:16
Die Baudrate von Midi 31,25 kBaud ist schon gar nicht so niedrig. Die paßt gerade zu den ganzen MHz zahlen. Demnach sollten 4 Mhz für den Quarz kein Problem sein.

fred84b
19.03.2009, 12:40
Hi

Also, auf USB werde ich ganz verzichten. Das Nutzen-Aufwand-Verhältnis ist nicht optimal.

Ich habe bisher noch nie mit Spulen gearbeitet. Muss ich da auf etwas besonderes achten (z.B. Nennstrom)?

Als Mikrocontroller werde ich den Mega32 nehmen mit einem 4Mhz Quarz.
Die MIDI Schnittstelle mache ich, wie im Schaltplan, mit CNY17-2 und 74LS00.
LED/7-Segment auch wie im Plan mit vier BC327 und einem ULN2803.
Digitale Inputs mit einer 4x8 Diodenmatrix (1N4148).

Was ist denn der Vorteil von externen Pullups?

Bald können die Bauteile bestellt werden.
Gruss, frederic

BlueNature
19.03.2009, 14:04
Also, auf USB werde ich ganz verzichten. Das Nutzen-Aufwand-Verhältnis ist nicht optimal.

Ich rate dir persönlich davon ab außer als Supply (SMD/Coding/Treiber... never ending Story). Hier eine Lösung vom Warentisch der Musikindustrie:
http://www.thomann.de/de/swissonic_midiusb_1x1.htm


Ich habe bisher noch nie mit Spulen gearbeitet. Muss ich da auf etwas besonderes achten (z.B. Nennstrom)?

Spulen einfach axiale Bauform nehmen, die müssen keinen hohen Strom abkönnen, nur einige mA
Die hier geht z.b.:
SMCC 0,10µ (Drosselspule, Festinduktivität, axial, 0,10µ) bei Reichelt



Als Mikrocontroller werde ich den Mega32 nehmen mit einem 4Mhz Quarz.


Passt, Prescaler der UART mit 128 nehmen



Die MIDI Schnittstelle mache ich, wie im Schaltplan, mit CNY17-2 und 74LS00.


Schau nocheinmal ob die "Phasenlage" des Signals passt, die RXD und TXD am MEGA ist positiv, MIDI auch (Strom = eine '1')



LED/7-Segment auch wie im Plan mit vier BC327 und einem ULN2803.
Digitale Inputs mit einer 4x8 Diodenmatrix (1N4148).


ULN ist unkritisch, Freilaufdiode nicht nötig zu beschalten. Die 1N4148 sind billig und dafür absolut OK.



Was ist denn der Vorteil von externen Pullups?


Vorteil ist, das man bei flotterem Schalten der Signalleitungen das Signal sauber gegen +5V zieht, die internen sind sehr sennsibel (haben >> 20kOhm). Daher habe ich die externen gezeichnet. ein paar cm Leitung gehen schhon, wenn es länger ist, wird das meist ein Problem, also besser externe verwenden (z.b. Widerstands-Array im Bereich von 8x1k bis 8x3,3k).

Grüße Wolfgang

Besserwessi
19.03.2009, 20:57
Der CNY17 ist als Optokoppler nicht so gut. Die nötige Geschwindigkeit erreicht man nur gerade so, und wenn man ein schlechtes Exemplar hat eventuell auch gar nicht. In dem sonst guten Plan von BuleNature paßt das mit dem Widerstand am Optokopper auch nicht so ganz. Mit 220 Ohm könnte man zwar die nötige Geschwindigkeit erreichen, aber der Spannungshub sollte kaum reichen für ein TTL gatter, schon gar nicht mit dem Widerstand gegen Vcc.
Ich würde da auf nummer sicher gehen und einen 6N137 oder 6N138 als Optokopper nehmen auch wenn der etwa 30 Cent mehr kostet. Dafür hat man viel Reserve in der Geschwindigkeit und empfindlichkeit. Auf der Eingangsseite des Optokopplers eventuell noch ein Widerstand von z.B. 1 K parallel zur LED und statt 220 Ohm lieber 330.

fred84b
20.03.2009, 16:07
Ich habe nachgeschaut, das Originalgerät benutzt ein 6N138 allerdings mit 220 Ohm Widerständen. Die 30 Cents sind mir egal, sofern es wirklich sinnvoll ist.

Nun die nächsten Fragen: Ich programmiere den uC mit ISP. Kann es zu Problemen kommen, wenn ich den ULN2308 am selben Port wie die SCK, MISO, MOSI Pins (PortB) anschliesse? (ATmega32)
Reicht es wenn ich einfach schaue, dass die Knöpfe in dem Moment nicht gedrückt werden?

Wozu wird das Signal vom Optokopler zum RXD Pin mit dem NAND invertiert?
Ich kenne die MIDI Schaltung etwas anders (www.wira-electronic.de). Siehe Anhang.

Besserwessi
20.03.2009, 18:31
Die Polarität des signals an der UART ist vorgegeben. Die invertierung dient dazu das es paßt. Vermutlich war auch gedacht durch das Logicgatter ein saubere digitales Signal für den µC zu bekommen. Beim AVR kommen allerdings die Eingänge des µC besser mit nicht so eindeutigen Pegeln und langsamen Flanken klar als ein 74LS00 oder 74ALS00. Man könnte zwar auch den Optokopper (zuminedstens den CNY17) anders beschalten, aber das Logic gatter hat man ja sowieso noch über.