A simple yet useful oscilloscope for arduino duemilanove
Java C
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.


--- Serial protocol definition for arduino-oscope --

 This is protocol definition for version 2.X. For 1.X versions, please
 read README.protocol.v1

 Arduino and display device (PC) communicate over a serial link, using a 
 simple packet-oriented protocol. The protocol is the same for both 
 Packet description:
 | Data    Size | Command  | Payload             | Checksum |
 | (1-2 bytes)  | (1 byte) | (0 to payload size) |  1 byte  |
 * Data size
   - By data size we understand size of payload plus size of command
     field. For a packet with no payload at all, data size is 1.
     Data size field can be 1 byte or two bytes long. For data size
     less than 128 it is depicted as one-byte. If the most significant
     bit is set, then another byte will follow. Data size will then 
     be DATASIZE & 0x7FFF, you'll have to clear the MSbit.

       payload size 3, data size is one byte, 0x04
       payload size 512, data size is two bytes, 0x82 0x01
 * Command
   - Command or reply. 1 byte long. See list below for supported commands.
 * Payload
   - Variable size payload for this packet. Size is depicted by Payload 
     Size. If Payload Size is zero, this field is not present in packet.
 * Checksum
   - Packet checksum, using XOR with 0 as start value. To compute checksum
     for an outgoing packet, XOR all values of the packet except for the
     checksum itself. To validate checksum of a packet, XOR all bytes 
     received including checksum. If result is zero, then packet has no 
 Packets received by arduino have a size limit, due to memory size constraints.
 Any packet received with size greater than this limit is ignored.
 Reset procedure
 Before sending out commands, you should reset the state machines by issuing
 at few number of zeroes. The minimum number of zeroes to send is 
 arduino packet size limit + 1. This will ensure proper reset of all 
 Supported commands (version 1.2):
  * COMMAND_PING           0x3E
    > Payload size: variable
    > Since: v1.1
      Request a ping from arduino. Arduino will reply with COMMAND_PONG and
      same payload.
    > Payload size: 0
    > Since: v1.1
      Request arduino oscope version. Arduino will reply with 
    > Payload size: 0
    > Since: v1.1
      Request arduino to start sampling. Arduino will reply with 
      COMMAND_BUFFER_SEG once sampling is done.
    > Payload size: 1
    > Since: v1.1
      Set trigger level. Payload byte 0 depicts the desired trigger level.
    > Payload size: 1
    > Since: v1.2
      Set holdoff value. Payload byte 0 depicts the desired holdoff samples.
    > Payload size: 1
    > Since: v1.2
    > Removed in v1.4. See CAPTURE_FLAGS.
      Set invert trigger flag. Payload byte 0 depicts if trigger is not 
      inverted (a 0 value) or if it is inverted (a 1 value).
  * COMMAND_SET_VREF       0x45
    > Payload size: 1
    > Since: v1.2
      Set VREF source for Arduino. Payload byte 0 defines VREF source value.
      Values can be 0 (AREF), 1 (AVcc) or 3 (Internal 1.1v).
    > Payload size: 1
    > Since: v1.2
      Set ADC prescaler value. Payload byte 0 defines the log2 of the 
      desired prescaler value (7 gives prescaler of 128, 6 prescaler of 64,
      and so on). Minimum prescaler value is 2.
    > Payload size: 0
    > Since: v1.2
      Request configured parameters from arduino oscope. Arduino will reply
    > Payload size: 2
    > Since: v1.1
      Arduino reply with version. Payload byte 0 depicts upper version, 
      and byte 1 lower version.
    > Payload size: NUM_SAMPLES
    > Since: v1.1
      Arduino reply with sampled data. Packet size may vary depending on 
      number of samples configured. This data is unsigned 8-bit (higher
      ADC sampled values).
    > Payload size: 6 (v1.2), 7 (v1.4)
    > Since: v1.2
      Current configured values. Payload will contain the following values
      at byte offset:
        0 - Trigger level
        1 - Holdoff samples
        2 - ADC reference
        3 - ACD prescaler
        4,5 - Number of samples (NUM_SAMPLES). Big-endian.
        6 (v1.4) - Capture flags
        7 (v2.2) - Number of channels
  * COMMAND_PONG           0xE3
    > Payload size: variable
    > Since: v1.1
      Arduino reply to PING command. Payload is the same as ping request.
  * COMMAND_ERROR          0xFF
    > Payload size: 0
    > Since: v1.1
      Arduino reply to some unknown command.
    > Payload size: 2
    > Since: v1.3
      Set number of arduino samples. Arduino will reply with COMMAND_PARAMETERS_REPLY.

    > Payload size: 1
    > Since: v1.1
      Set capture flags. Will reply with COMMAND_PARAMETERS_REPLY.
      Bitmap of following values:
        bit 0 - Invert trigger
        bit 1 - Set dual-channel (deprecated in v2.2 - see COMMAND_SET_CHANNELS)

    > Payload size: 1
    > Since: v2.2
      Set number of channels (1 to 4). Will reply with COMMAND_PARAMETERS_REPLY.