Forum: Mikrocontroller und Digitale Elektronik MIDI-Switcher mit PIC


von Jens P. (Gast)


Angehängte Dateien:

Lesenswert?

Hi, bin noch ziemlich neu in der uC-Ecke. Mein erstes größeres Projekt 
soll eine Box werden, die mir MIDI-Programm-change- Befehle auf einem 
Einstellbaren Kanal entgegennimmt und daraus Schaltsignale für 16 Relais 
erzeugt. Die Presets dazu sollen im internen EEPROM abgelegt werden. Die 
254 Byte der "grossen" 16er Pics sollten dazu geradeso reichen.
Im Anhang hab ich einen Programmablaufplan dazu angefügt.

ACHTUNG: Ich bin Elektroniker, kein Programmierer, dementsprechend sieht 
mein Plan auch aus. Aber ich denke man kann dahintersteigen wie ich das 
ganze machen will. Meine grösste frage: Kann der PIC aus der 
Interruptroutine heraus wieder einen Interupt starten? Er hängt ja quasi 
fast nur in der Routine und wartet auf den nächsten Interupt.

Wäre um ein Paar anmerkungen dazu dankbar.

greets, Jens

von Markus C. (ljmarkus)


Lesenswert?

schau mal bei www.ucapps.de rein....

lg, markus

von Schoasch (Gast)


Lesenswert?

Hi

Zum einsteigen vl etwas übertrieben... aber man wächst mit der 
herausforderung ;-)

Welche Programmiersprache verwendest du? Willst du in C oder ASM 
programmieren? Ich empfehle dir, dass du gleich einen PIC18F nimmst. Da 
hast du etwas mehr Power und es gibt einen gratis C-Compiler dafür.

>>Meine grösste frage: Kann der PIC aus der
>>Interruptroutine heraus wieder einen Interupt starten? Er hängt ja quasi
>>fast nur in der Routine und wartet auf den nächsten Interupt.

Naja.. Vielleicht brauchst du ja keinen interrupt sondern kannst das 
ganze mit polling machen. Weil warten in eine ISR ist eigentlich nicht 
sinn und zweck der ganzen sache ;-)

von Jens P. (Gast)


Lesenswert?

hmmm, also gaaanz der einstieg isses ned, halt nur das erste etwas 
umfangreichere. wollte eigentlich bei den 16er pics bleiben und das in 
asm machen. wäre das mit der interruptroutine nur unorthodox oder würde 
es garnicht funktionieren? polling scheint mir da n bisserl ungeschickt.

wie würde das mit polling aussehen? alle paar zeilen ne abfrage und wenn 
ja, dann rüber zur routine?

greets, Jens

von Jens P. (Gast)


Lesenswert?

ps: uCapps kenn ich, aber da die ja ihr eigenes OS verwenden komm ich da 
so weit unten im Schlamm auch nich wirklich weiter damit. Oder hab ich 
was übersehen?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn Dein PIC-UART Interrupts bedient, wovon ich mal ausgehe (sorry, bin 
AVR-ler), dann nutz diese auch! Warten, daß was passiert, ist zu schade 
für einen µC - der kann weitaus mehr (z.B. Displayausgabe und noch ein 
bisserl MIDI-Routing und so lustige Sachen). Schade daß Du keinen AVR 
nimmst, dann hätte ich Dir mehr Unterstützung geben können...

von gravewarrior (Gast)


Lesenswert?

ich wollts mir eigentlich einfacher machen und mit nem kleinen slave-pic 
das ausgesendete datenwort multiplexen, ich hab nämlich bammel dass mir 
durch die ganze abfragerei der programmspeicher zu knapp wird um noch ne 
anzeige zu multiplexen. Anonsten kann ich uart als interupt nehmen. Ich 
glaub das geht sogar mit jedem pin. Muss ich nochmal schauen, sollte es 
nicht gehen, muss ich halt nach ausführung der sachen den empfangspin 
pollen. mal schaun. Da es sich bei mir um eine gitarrenanlage handelt, 
ist alles was über programm-change befehle hinausgeht überflüssig, also 
auch midi-routing usw.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn der Speicher vermutlich knapp wird, nimm gleich einen größeren µC 
oder rechne alles nochmal genau durch. Mit einem ATMEGA16 AVR wäre Dein 
Projekt überhaupt kein Problem. Da hättest Du die MIDI-Anbindung über 
das UART komplett in Hardware, minimal alle 300 µs würde dann mal ein 
Interrupt kommen, in dem Du die Daten abspeicherst und in jedem 3. die 
Berechnungen machst und dann hast Du noch mindestens 200 Befehle über, 
bis der nächste Interrupt kommt, das laaaaangt aber dicke! Und genügend 
Pins für Deine Relais hast Du auch und noch ´nen A/D-Konverter und 512 
EEPROM und 1024 SRAM Bytes... für 2,75 EUR!

von gravewarrior (Gast)


Lesenswert?

Jetzt bin ich schon drin in den pics, hab da kein bock umzusteigen. Der 
Speicher wird KNAPP aber nicht zu klein. UART ist so ne sache. Man hat 
ja normal nur die RS232-baudraten zur Auswahl. die für MIDI is ja aber 
krumm. deswegen bin ich mir nicht sicher ob das über die UART geht. Hat 
jemand vl schon erfahrungen in die ecke? MIDI baudrate liegt eben leider 
bei 31250 bit/s. Wenns natürlich auch so geht, dass ich die UART auf 
diesen Wert trimmen kann, erleichtert mir das die arbeit ganz erheblich. 
IS ja doch ne ecke leichter zu handlen als einzelne Spannungen in 
Bitabstand manuell abzutasten.

Gehts sowas?

Bisher habe ich nur projekte gesehen, die mit controllern ohne UART 
waren. Da  hat sich mir die frage garnet gestellt. Aber wenn ich auf 
sprut bei der tabelle mit den baudwerten und deren einstellung über die 
2 register schau, dann komm ich ja nur auf rs232-werte. Oder kann man 
irgendwie auch "ganz eigene" baudraten definieren?


Vielen dank für eure hilfe soweit schonmal.

von gravewarrior (Gast)


Lesenswert?

achso: da ich ja nur umschaltereien in der effektkette meines
gitarrensetups vornehme, ist nur der empfang zeitkritisch. der rest is
wurschd. es kommt ja kein konstanter datenstrom an.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Mit einem geraden Quarz als Taktgeber, also mit 1Mhz, 2Mhz, 4Mhz oder 
8Mhz geht Dein UART mit entsprechendem Vorteiler im Baudratenregister 
(selbst definierbar!) ganz alleine genau auf 31250 Baud! Ein externer 
Quarz oder Keramikresonator ist bei UART-Benutzung Pflicht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>... ist nur der empfang zeitkritisch...

Genau deshalb in einen Interrupt packen! Der kommt immer geschwind wie 
der Wind!

von gravewarrior (Gast)


Lesenswert?

warum ist da externe oszillator pflicht? sind die internen dazu zu 
ungenau?
Das mit dem vorteiler muss ich mir nochmal genau anschauen, da war ich 
bislang der meinung dass ich nicht auf diese baudrate kommen kann..... 
naja, ich gugg nomma beim sprut.

Achso: weiss jemand ob ein externer takt am pic auch geteilt wird, oder 
ob der voll rein geht? (also 1MHz-Quarz = 1MHz oder 4MHz Quartz = 1MHz)? 
hatte bisher nur den internen oszillator im gebrauch.

toaaa, an solche projekten wächst man, aber irgendwie fehlt mir total 
die motivatioin mich mit irgendwelchen LED-Schaltungen aufm Starterboard 
rumzuschlagen, da fehlt die motivation. Wenn was "gscheits" bei 
rumkommt, klemm ich mich immer viel mehr dahinter ;-)

ausserdem lern ich bei diesem projekt viel auf einmal ;-)

Ihr meint also ich soll alles in ner Main-funktion schleifen und den 
interupt nur zum reinen empfang nehmen? oder würde mein Flussdiagramm 
auch funktionieren? In nem Main-Loop könnt ich ja höchstens dauernd 
vergleichen... mhmmmm, oder vielleicht doch noch multiplexen, aber ich 
glaub das wird dem speicher echt zu viel.... wobei ich durch UART 
anstatt software-schnittstelle ja auch wieder n guten happen code 
einspar.....

Ihr seht: ahnung hab ich nich, aber gedanken mach ich mir gern ;-)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>warum ist da externe oszillator pflicht? sind die internen dazu zu
>ungenau?

Yep, und temperatur-/spannungsabhängig.

>Ihr meint also ich soll alles in ner Main-funktion schleifen und den
>interupt nur zum reinen empfang nehmen?

Ja, macht insofern Sinn, daß zeitunkritische Sachen von den 
zeitkritischen unterbrochen werden dürfen und nicht erst abgearbeitet 
werden. Ein Byteverlust ist somit nahezu unmöglich und der Controller 
hat massig Zeit für andere Aufgaben.

>oder vielleicht doch noch multiplexen, aber ich
>glaub das wird dem speicher echt zu viel

Was meinst Du mit Multiplexen? Du hast doch nur einen MIDI-Eingang, 
oder?

von gravewarrior (Gast)


Lesenswert?

damit hab ich jetzt die drei 7-segmentanzeigen für die programmnummer 
gemeint.

Gibt es irgendwo eine ausführliche beschreibung der pic-UART? sprut geht 
leider nur auf den RS232-Modus ein, und so hat sich mir die sache mit 
vorteiler und Oszillator noch nicht ganz erklärt. Ne ausführliche (vl. 
sogar deutsche) beschreibung der UARt wär gold wert.

von gravewarrior (Gast)


Lesenswert?

keiner mehr ne idee dazu?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Gibt es irgendwo eine ausführliche beschreibung der pic-UART? sprut geht
>leider nur auf den RS232-Modus ein, und so hat sich mir die sache mit
>vorteiler und Oszillator noch nicht ganz erklärt. Ne ausführliche (vl.
>sogar deutsche) beschreibung der UARt wär gold wert.

Datenblatt des PIC sagt nichts darüber?

>damit hab ich jetzt die drei 7-segmentanzeigen für die programmnummer
>gemeint.

Schafft der Controller locker, bei LEDs muß allerdings ein mehr oder 
weniger genaues Timing beim Durchschieben der Ziffern eingehalten 
werden, sonst flimmert oder ruckelt es. Bei einem LC-Display mit 
Controller entfällt das. Für das LCD braucht man auch weniger Pins als 
für multiplexte LED-Segmentanzeigen. Und es sieht schicker aus :-)

von Jens P. (Gast)


Lesenswert?

Hi, doch gestern abend hab ich mich damit befasst und festgestellt wie 
mächtig eigentlich die dokumentation ist. da steht echt viel drinne. hab 
mir mal das komplette manual und das passende datenblatt gezogen. echt 
gut die doku.

zu den anzeigen: also 7-segment oder Dot-Matrix solls schon werden, das 
ganze ding muss rauhen Bühnenalltag überleben und auch in ner dunklen 
oder grell beleuchteten Umgebeung und bei Stroboskopgewitter noch 
ablesbar sein. Dafür muss ich nur drei zahlen drauf ausgeben 
(programmnummer)

von David P. (chavotronic)


Lesenswert?

Ich würde dir auch Ucapps empfehlen da es Newbie freundlich ist. Was 
spricht dagegen?

von Jens P. (Gast)


Lesenswert?

Bei uCapps haben se ihr eigenes OS drauf laufen und befassen sich mit 
allem möglichen MIDI-Krempel den ich garnet brauch. Bei mir gehts ja nur 
ums reine schalten. Und ne midi-box mit was weiss ich wie vielen 
parametern, wandlern und schlagmichtot juckt mich garnicht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

7-Segmentanzeigen sind robust. Besser für Bühne geeignet, als Dotties, 
es sei denn, Du packst ´ne dicke Scheibe davor. Für die LEDs brauchst Du 
7 Datenpins, 3 Steuerpins, 3 pnp Transistoren (oder npn bei gemeinsamen 
Kathoden der LED-Anzeigen) und 7 Vorwiderstände. Die Datenaufbrereitung, 
daß aus Werten richtige Zahlen werden, kannst Du im Controller machen, 
externe Decoder kannnst Du dann weglassen.

von Jens P. (Gast)


Lesenswert?

die segmenter sollen nicht so das prob sein. multiplexen oder bcd ausm 
uC is ja echt kein ding. Mit denen kenn ich mich ausnahmsweise schon 
ganz gut aus. anders siehts da scho beim multiplexen programmieren aus, 
aber das kriegt ma auch inne griff. oder eben wirklich bcd, bräucht ja 
dann 9 pins, müsst mal schauen ob ich noch 9 ausgäng frei hätt....

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
Noch kein Account? Hier anmelden.