Open main menu

Changes

4,759 bytes added ,  02:37, 27 April 2020
no edit summary
[[File:Neato XV-11 Map capture-laser.gif|none|thumb]]
== XV-11 API Commands ==
=== Commands available through the USB port on the XV-11 ===
Neato Robotics currently has an list of commands accessible to people who want to tinker with their robots.
See their official site for information: http://www.neatorobotics.com/programmers-manual
=== Getting a list of Commands ===
Your first point of call is the Neato Robotics Programmers Manual listed above. Also if you have an established link to your Neato you can type:-
help
help getmotors
=== Enabling TestMode ===
A lot of the functions available to programmers can only be used if “TestMode” has been enabled on the Neato. Most functions displayed in the Help are listed as “TestMode Only” which will give you an idea as to what can be only be used when TestMode is enabled.
With TestMode enabled, you Neato will behave a little differently than normal.
* All buttons on the robot will NOT respond to input as it normally does* You may not be able to re-establish connection to your robot if you unplugged and reconnected in a short period of time. If you cant re-establish connection, wait a few mins before attempting again.
The following commands and examples listed below will assume you have TestMode enabled, (unless specified differently)
=== Issuing Commands to the Motors ===
When you are first experimenting with command, I recommend you turn Neato up-side-down so the wheels can free spin. Otherwise you may get instances where your robot drives away faster than you expected, crashing into things and generally making a mess of your room as it lacks logic to stop.
As I have been experimenting, my Neato seems to steer to the left a little as it drives along in a ‘straight’ line. I’ve also had differences in distance travelled depending on my speed setting. I have yet to sit down and measure the accuracy of these movement commands.
=== Problems You May Encounter ===
A little issue I found in my tinkering exploits, Neato would suddenly power off when issuing commands. This seems to be because I was issuing a large amount of commands within a short period of time. To give you an idea, I was issuing a set of three SetLED commands once every 20ms. Within about 2seconds, Neato would power off. To fix the issue, unplug your USB, power up Neato and reconnect the USB.
 
== LCD PCB Information ==
[[File:Neato XV-11 LCD panel front labels.png|thumb|Neato XV-11 LCD panel front ]]
[[File:Neato XV-11 LCD panel back labels.png|thumb|Neato XV-11 LCD panel back ]]
'''IMPORTANT LCD INFORMATION!!!''' As you can see in the first image, the LCD is labeled “GVLCM128128G 13572A” on its backside. Googling this brings up the following LCD producer: Golden Vision. However, this exact LCD is not listed on their site, but this similar one is. All the measurable specs are similar (dimensions are approximately the same - the XV-11’s LCD measures approximately 61.6 mm x 55.1 mm x 4.36 mm, which is a bit thicker, probably due to the backlight; 128 x 128 resolution). The only differences I could find are the small white line above the ribbon cable at the bottom of the “similar” LCD isn’t present on the XV-11 LCD, and the ribbon cable of the “similar” LCD is 24 pins, not 25 (so the “similar” LCD CANNOT BE USED AS A REPLACEMENT - IT WOULDN’T BE PIN COMPATIBLE!). Anyway, the company only lists a few 128x128 LCD’s in production (none of which match the XV-11’s), so this narrows down the list of possible LCD controllers used in the XV-11’s LCD to just the ST7541 (others are possible but you could say these are more likely since we know this is the only chip the company uses in their 128x128 greyscale LCD’s). We can’t be sure until we test out driving this LCD standalone (on my TODO list for the next 2 weeks - I’m waiting on a FFC Ribbon Cable Breakout to come in from New Haven Display (look here if interested), but from what the datasheet says and the fact that only 2 of the LCD’s ribbon cable pins are appear to have data running thru them, it seems like the LCD is controlled by i2c from the main board (see below for pinouts).
 
 
The white FFC ribbon cable leading connecting the LCD board to the mainboard has a 1mm pitch.
 
 
The buttons on the LCD board have a pair of legs connected to ground, so it’s safe to deduce that the main board has these buttons’ signals pulled up (these pullups are not found on the LCD board) and expects to read a LOW signal when these buttons are pressed down. See table below for which button is which.
 
 
K1, K2, and K3 labeled in the second image are 3 of the 4 pins attaching the LCD backlight to the PCB. These pins go thru resistors to Q1, which appears to be a transistor driven by pin 10 of the white FFC ribbon cable (going to the mainboard). When a voltage is applied to Q1, it connects K(1-3) to GND, turning the backlight ON. K4, the last of the backlight’s pins, connects to pin 14 of the white FFC ribbon cable (see table below for appropriate voltages).
 
 
All 4 LED’s (2 per Double-LED) run fine at about 20mA @ 2V, with ~ 68 Ohm resistors each, so a 3.3V signal line that can source about 40mA should suffice for each color (each LED color pair has its own pin - see table below)
 
 
EagleCAD LCD PCB Files:
 
I’ve reverse engineered the LCD peripheral board into EagleCAD, just in case it comes in handy
 
IMPORTANT DISCLAIMER: I did my best to determine all the dimensions, but there are likely some minor inaccuracies. Looking at the XV-11’s case, the LCD PCB fits snugly in the outline and all the buttons and LED’s have to line up nicely with the plastic to work properly. If for whatever reason you want to use these files to produce a custom LCD peripheral board, just be warned it may not work (but this is probably your best chance at a template for one).
 
* LCD_board_opensource.brd
* LCD_board_opensource.sch
 
 
16 Pin Main PCB FFC Ribbon Cable (white) Pinout (still working on it...):
{| class="wikitable"
|Pin #
|Signal Type
|Signal
|Notes
|-
|1 (*)
|OUTPUT
|SW1 - “SOFT”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|2
|OUTPUT
|SW3 - “BACK”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|3
|POWER/INPUT
|Green LED’s
|Run HIGH ~(3.3V) to turn on, make sure the pin can source ~40mA
|-
|4
|OUTPUT
|SW4 - “UP”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|5
|POWER/INPUT
|Amber LED’s
|Run HIGH ~(3.3V) to turn on, make sure the pin can source ~40mA
|-
|6
|OUTPUT
|SW2 - “DOWN”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|7
|OUTPUT
|SW5 - “START”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|8
|
|LCD Pin 21
|
|-
|9
|
|LCD Pin 20
|
|-
|10
|INPUT
|Backlight Switch
|Run HIGH (~3.3v) to turn LCD backlight on; signal goes to transistor Q1
|-
|11
|
|LCD Pin 22
|
|-
|12
|POWER
|GND
|
|-
|13
|
|LCD Pin 10
|
|-
|14
|POWER
|5V
|Backlight Power; goes to K4; Measured at ~4.8V... K4 measured at ~3V
|-
|15
|
|LCD Pin 11
|
|-
|16
|POWER
|3.3V
|LCD Power
|}