I didn't think modbus = MDB.
mdb = vending protocol...
Anyone want to prove me wrong??? Hopefully I am wrong.
thanks guys!
I didn't think modbus = MDB.
mdb = vending protocol...
Anyone want to prove me wrong??? Hopefully I am wrong.
thanks guys!
Hi Trend, had you any success with your project to connect a MDB bill acceptor to a PIC?
I'm running in the same situation and I think the additional bit after the 8th data bit could be a problem because IT IS NOT a parity bit. It is a basically a flag.
For who wish to help on that, I'll report what the official documentation said about the MDB protocol:
Baud rate: 9600 NRZ
Serial bit format:
1 start bit
8 data bits
1 MODE BIT
1 stop bit
Total: 11 bits
MODE BIT: Master-To-Peripheral
"The Mode bit differentiates between ADDRESS bytes and DATA bytes. ADDRESS bytes must be read by all peripherals, DATA bytes are only read by the peripheral that has been addressed".
"The MODE BIT is set (logic one) to indicate an ADDRESS byte, and not set (logic zero) to indicate a DATA byte".
MODE BIT: Peripheral-To-Master
"The MODE bit must be set on the last byte sent when data is sent from a Slave to the Master".
Any idea?
Thank you a lot.
Thank you Dave.
Actually the 9th bit it is really NOT a parity bit, for that protocol. Is is used as a flag in different moments.
What I'm trying to do is a Master (that in the MDB documentation is called V.M.C., that means Vending Machine Controller).
So, a Master has to send a "message" to a "slave" indicating, in the first byte, the address and then the serial message has to continue sending eventually any "DATA".
So, the schema should be:
- send the slave's address with the 9th bit set
- eventually start sending data with the 9th bit cleared.
When the slave answer, then the 9th bit assume another meaning at the VMC side: it has to be cleared while the answer's bytes are sent from the slave and then on the LAST byte it has to be set. This will help the VMC understand the transmission is finished.
So, the questions are:
- should I manipulate the TX9D register BEFORE use some HSEROUT?
- If I'll write to the TX9D register despite the "Define HSER_EVEN 1", will the HSEROUT command use the content of the TX9D register in the way I wish?
- when I'll go to receive some message, will HSERIN load the content of the RX9D register in the proper way?
...or just I can't use any HSERIN/HSEROUT for that purposes?
I'm sorry for that questions that looks silly, but it is the first attempt to that world and I'm trying to find some help that put a light over a more than 350 pages of documentation about that MDB protocol...
Thank you for your help.
Mikebar, I dont use the Hserout or Hserin commands in any of my code. I truly do not know how MELabs handles the parity bit in its implementation of there code. The uart register TXD9 is for setting the bit manually. It is upto the programmer to set this bit and to interpret the RXD9 bit after reception. I have done this in the past, using it for the same purpose as you have discribed. I would suggest maybe looking at Darrels DT_INTS routines and use the hardware uart and place it into the 8 bit w/parity mode then set the TXD9 bit to your liking.. Same thing on the receive side of things.. I would however try the implementation you described in your last post and see if you can set the TXD9 bit just before the Hserout command and then see if it sticks...
Dave Purola,
N8NTA
Ok, thank you Dave.
I'll go on studying the MDB documentation (as said more than 300 pages). As soon I can I'll buy some MDB client device (like a bill acceptor) and wire-up some circuit to test it.
If, in the meanwhile, you have some idea to test it will be really appreciated.
mikebar, What I would do if I were you is: wire up 2 pic's connected the same way you discribe in post #10 and write the code to do the exact same thing. One of the pic's would be the master and one pic would act as the bill exceptor. Then see if it works....
Dave Purola,
N8NTA
Bookmarks