Hi,
I'm trying to receive midi input using the pic18f452.
I guess I would use HSERIN. Are there any examples? Has anyone here done this?
Thanks for any info.
Tony
Hi,
I'm trying to receive midi input using the pic18f452.
I guess I would use HSERIN. Are there any examples? Has anyone here done this?
Thanks for any info.
Tony
Here's an example using serin2, you have to use a 20MHz crystal:
It reads in MIDI data and sends it out to a serial port, worked fine for me.
@ device pic16F628A, pwrt_on, mclr_on, protect_off, wdt_on, HS_OSC
INCLUDE "modedefs.bas"
DEFINE OSC 20
CMCON = 7 ' PortA = digital I/O
PORTA = %00000001
TRISA = %00000000
PORTB = %00000000
TRISB = %00000000
test1 VAR BYTE
test2 VAR BYTE
mdata VAR BYTE
loop:
SerIn2 PORTA.0,12,[test1,test2,mdata]
SerOut PORTB.7,N9600,[" midi : ",#test1," ",#test2," ",#mdata,10,13]
GoTo loop
end
Last edited by Kees Reedijk; - 13th July 2006 at 22:48.
do a google search and you'll find, at least the right baudrate
Search with MIDI in the forum search tool and you'll find some info
Same for HSERIN
It can definately be done using a PIC and PBP, some homework have to be done first.
If your PIC have a USART, there's no reason to use SERIN or else software solution.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
Thanks. Why not use HSERIN? Isn't that more appropriate?
Yes, the google search will only yield midi output examples, nothing on midi input for picbasic pro (unless I'm overlooking something).
Thanks again for the help, I appreciate it very much.
Tony
Sorry if it wasn't really clear, Sure HSERIn is appropriate where SERIN it's not really to reach the baudrate you want @4MHZ.
The internal USART also offer you the Interrupts where the software SERIN,DEBUG don't
Usefull when your software have to do something else than wait... Even the Timeout of SERINx may be used but with the MIDI baudrate i can't say you'll never miss any character.
HSERIN within a ISR is the way to go.
The Kees Reedijk example is something to play 'round.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
Thanks. Yes, I'm going to need 20 Mhz osc. for midi.
Any examples on how to set up hserin code?
Thanks again, I appreciate.
Tony
use the calc i did few month/years ago.. FREEBIES
http://www.picbasic.co.uk/forum/atta...6&d=1118138371
click on the button at the right twice and you're in business.
Now using the USART and this calc, you may discover that it will be possible to acheive a nice error % even with a 4MHZ clock.
HTH
Last edited by mister_e; - 14th July 2006 at 17:35.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
That's cool. Thank you.
I'm wondering if anyone could refer me to examples of HSERIN code.
I'm sending midi out like this:
hserout [$90, note, Velocity] 'send midi note & velocity out on channel 1
And with another pic18f452 I would just like to receive those transmitted variables; "note" and "Velocity".
Any ideas how I can proceed?
Thanks again,
Tony
Last edited by TonyA; - 14th July 2006 at 19:18.
I think everyone's avoiding the original question because it just seems too obvious.
If you're sending it with
hserout [$90, note, Velocity]
then you'd receive it with
hserin [wait($90), note, Velocity]
<br>
DT
Yes, that's what I needed. Thanks.
What is the "wait", a variable?
When I try to compile it in micro code studio I get an error for
HSerIn [wait($90), note, Velocity]
it says "expected ']'.
Thanks,
Tony
Last edited by TonyA; - 14th July 2006 at 20:46.
Hi Sorry, that works. I had to fix my code.Originally Posted by TonyA
I'm sure the hserin will work, but I like to read the port directly. Here is a
program that I wrote 3 years ago for a 909 kick drum copy that I built. It worked
great. It only responded to one MIDI channel and one note, but I think you will
be able to see what's happening and figure out how to implement your design.
That's cool, thank you. I'll let you know how it works out. Thanks again.
Tony
Yeah, this should work. I don't think I ever built the circuit though. I was thinking about making a midi receiver but I never did.
Let us know if you try it.
Well, I'm working on a MIDID receiver based on HSERIN but not sure of a few things.
1. MIDI seems to be active low so when no data= +5V. Data = 0V
So I'm not sure if USART (16F88) if compatible or do I have to invert polarity.
2. MIDI seems to come from the legacy of Motorola based arquitectured (Big endian) Pics are Little endian ( I think this is true) so ata has to be inverted.
So any info would help!
Someone else would probably be able to help you more with this.
I believe you don't have to invert the data. (I know that you don't have to invert the data when sending midi out from a pic, so I'm assuming you don't have to invert the data when receiving as well.)
(There are some old diagrams on the web that show the need for using a 7404 hex inverter chip to properly send midi data out of the pic. It was later found that the PIC does not need this extra inverter chip to send midi out. Because it can send non-inverted serial data. I've never inverted the signal when making midi controllers (sending midi)).
Bookmarks