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 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!
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.
>... ist nur der empfang zeitkritisch...
Genau deshalb in einen Interrupt packen! Der kommt immer geschwind wie
der Wind!
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)
Ich würde dir auch Ucapps empfehlen da es Newbie freundlich ist. Was spricht dagegen?
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....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.