Has anyone got the PIC to work with MDB protocol (vending)?


Closed Thread
Results 1 to 15 of 15

Hybrid View

  1. #1
    trend's Avatar
    trend Guest


    Did you find this post helpful? Yes | No

    Default

    I didn't think modbus = MDB.

    mdb = vending protocol...

    Anyone want to prove me wrong??? Hopefully I am wrong.

    thanks guys!

  2. #2
    Join Date
    Aug 2006
    Location
    Italy
    Posts
    72


    Did you find this post helpful? Yes | No

    Question Any success?

    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.

  3. #3
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    mikebar , Look at post number 5......

    Dave Purola,
    N8NTA

  4. #4
    Join Date
    Aug 2006
    Location
    Italy
    Posts
    72


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Dave View Post
    mikebar , Look at post number 5......

    Dave Purola,
    N8NTA
    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.

  5. #5
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mikebar View Post
    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

  6. #6
    Join Date
    Aug 2006
    Location
    Italy
    Posts
    72


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Dave View Post
    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.

  7. #7
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    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

Similar Threads

  1. PortA Doesn't Work
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 11
    Last Post: - 8th September 2015, 18:41
  2. Presetting Configuration Fuses (PIC Defines) into your Program
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 82
    Last Post: - 15th December 2013, 09:54
  3. SMS via pic
    By kenandere in forum GSM
    Replies: 15
    Last Post: - 10th March 2010, 10:00
  4. Replies: 67
    Last Post: - 8th December 2009, 02:27
  5. Replies: 3
    Last Post: - 3rd September 2003, 12:05

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts