Microcontroller And Electronics

From veeOp Wiki
Revision as of 16:59, 9 October 2013 by Doug (Talk | contribs)

Jump to: navigation, search

Contents

Re-programming the on-board Arduino Compatible

The veeOP has an on-board arduino compatible, allowing you to customize it to the fullest extent.

The tool included with the downloadable distros here is the InoTool, a command-line Arduino tool. To get into the details, check out their installation guide, and their quick-start guide. But, we'll go over the details here, too.

In the distros provided here in the home directory for the "pi" user, you'll find a directory named 'arduino-vop' which already has an editable version of the code that's already on the microcontroller that you can use to get started!


Installing the necessary tools

If you're not using a veeOP customized distro, you might wish to install the tools from scratch. The examples given here are from PiDora (the Fedora distro for the pi), but, can be easily applied to most distros.

For example, where I say "yum install package_name" under a Debian-based distro you can use "apt-get install package_name".


Using Arduino Shields with your veeOP

The veeOP is designed to be able to extend it using Arduino Shields. There are shields for all kinds of applications

  • GPSr (global position system recievers)
  • GSM (cell phone service)
  • LCD Displays
  • Wireless (like the ZigBee / XBee)
  • And much, much more.

Are you new to Arduino?

Don't sweat it! The Arduino is intended to be an approachable technology, and one that gives a new user a lot of power. And, you'll feel great interacting directly with microcontrollers. The best part is, you can use your veeOP to help you learn.

You can log onto the veeOP connected to your raspberry pi, but, you might want to download the Arduino IDE (integrated development environment) and get started on your workstation (your laptop or desktop computer). You can compile the veeOP code right there to do some initial testing and exploration.

Some resources you might be interested in:

The I²C API

The I²C API on the microcontroller is a rather simple little set of commands that rides on I²C. For more information about I²C we direct you to Wikipedia.

The veeOP uses the Raspberry Pi as the I²C master, with the arduino-compatible being the slave, at address 4 (0x04) by default (this is configurable in the library.)

How Commands are transmitted

Commands are sent to the veeOP arduino-compatible with a 4-byte tuple. It looks like so:

(C,P_1,P_2,C_e)

Where each element is a single byte, representing:


    \begin{align}
      C & = \text{Command}                       \\
      P_1 & = \text{First Parameter}             \\
      P_2 & = \text{Second Parameter}            \\
      C_e & = \text{Command Ending (0x0A)} \\
    \end{align}


  • C (command) is any (known) value other than 10 (0x0A, in hex.) and originally assigned all higher 10.
  • P_1 & P_2 are sometimes treated as individual integer values each, or together as a 16 bit integer, depending on context.
  • C_e Command ending allows the microcontroller know when a command is incomplete, or too many bytes are sent.


How responses are received

When the microcontroller recieves the proper 4 bytes for the command, it responds in turn with a response of 4 bytes.

(E,C_r,R_1,R_2)

Where each element is a single byte, representing:


    \begin{align}
      E & = \text{Error Code}           \\
      C_r & = \text{Command return}     \\
      R_1 & = \text{First return byte}  \\
      R_2 & = \text{Second return byte} \\
    \end{align}


  • E errors of a value of 0 denotes an error-free response, any non-zero value is defined in a table below.
  • C_r is a redundant byte that represents C from the sent command. This is used for error handling on the raspberry pi.
  • R_1 & R_2 are the resulting responses from the command. Treated as two bytes, or a 16-bit unsigned integer depending on the context of the command.


Commands

Command Description Value P_1 P_2 Returns Int? Example Command Example Response Example Description
Check Ignition State 11 - - Yes. (0x0B,0x00,0x00,0x0A) (0x00,0x0B,0x00,0x01) Response showing the ignition is on.

Error Codes

E value Code Constant Description
1 ERR_BUFFER_OVERFLOW Too many bytes received before C_e
2 ERR_COMMAND_UNKNOWN Command is unknown.
3 ERR_COMMAND_INCOMPLETE Request for data from master received before C_e sent.

Advanced Resources

Looking at the DTR and Serial RX/TX lines on a HP Logic Analyzer (from 1984!) on the ATMega while developing the veeOP

Other resources that were valuable as the interface between the veeOP board and Raspberry Pi for programming the onboard arduino-compatible: