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
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 ;-)
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
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?
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...
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.
Wenn der Speicher vermutlich knapp wird, nimm gleich einen größeren µC
oder rechne alles nochmal genau durch. Mit einem ATMEGA16AVR 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!
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.
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.
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.
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 ;-)
>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?
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.
>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 :-)
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)
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.
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.
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....