Following is pseudocode to read 4 bytes from the EEPROM:
//Initial read of EEPROM bytes 0-3 in the user memory area.
//We need a single I2C transmission that writes the address and then reads
//the data. That is, there needs to be an ack after writing the address,
//not a stop condition. To accomplish this, we use Add/Go/Get to combine
//the write and read into a single low-level call.
numWrite = 1;
array[0] = 0; //Memory address. User area is 0-63.
AddRequest(lngHandle, LJ_ioI2C_COMMUNICATION, LJ_chI2C_WRITE, numWrite, array, 0);
numRead = 4;
AddRequest(lngHandle, LJ_ioI2C_COMMUNICATION, LJ_chI2C_READ, numRead, array, 0);
//Execute the requests.
GoOne(lngHandle);
For more example code, see the I2C.cpp example in the VC6_LJUD archive.
4.3.12 - Asynchronous Serial Communication
The UE9 has a UART available that supports asynchronous serial communication. Currently, the UART connects to the
PIN2/PIN20 (TX0/RX0) pins on the DB37 connector. On a future UE9 hardware revision, it is expected that the UART will appear
on FIO/EIO lines after any timers and counters.
Communication is in the common 8/n/1 format. Similar to RS232, except that the logic is normal CMOS/TTL. Connection to an
RS232 device will require a converter chip such as the MAX233, which inverts the logic and shifts the voltage levels.
This serial link is not an alternative to the USB connection. Rather, the host application will write/read data to/from the UE9 over
USB, and the UE9 communicates with some other device using the serial protocol. Using this serial protocol is considered an
advanced topic. A good knowledge of the protocol is recommended, and a logic analyzer or oscilloscope might be needed for
troubleshooting. Also consider that a better way to do RS232 communication is with a standard USB<=>RS232
adapter/converter/dongle, so the user should have a particular reason to not use that and use a U3 instead.
There is one IOType used to write/read asynchronous data:
LJ_ioASYNCH_COMMUNICATION
The following are special channels used with the asynch IOType above:
LJ_chASYNCH_ENABLE // Enables UART to begin buffering rx data.
LJ_chASYNCH_RX // Value= returns pre-read buffer size. x1= array.
LJ_chASYNCH_TX // Value= number to send (0-56), number in rx buffer. x1= array.
LJ_chASYNCH_FLUSH // Flushes the rx buffer. All data discarded. Value ignored.
When using
LJ_chASYNCH_RX
, the Value parameter returns the size of the Asynch buffer before the read. If the size is 32 bytes
or less, that is how many bytes were read. If the size is more than 32 bytes, then the call read 32 this time and there are still bytes
left in the buffer.
When using
LJ_chASYNCH_TX
, specify the number of bytes to send in the Value parameter. The Value parameter returns the
size of the Asynch read buffer.
The following is a special channel, used with the get/put config IOTypes, to specify the baud rate for the asynchronous
communication:
LJ_chASYNCH_BAUDFACTOR // Value= 2^16 – 3000000/bps
For example, use a BaudFactor of 65224 to get a baud rate of 9615 bps (compatible with 9600 bps).
Following is example pseudocode for asynchronous communication:
//Set data rate for 9600 bps communication.
ePut(lngHandle, LJ_ioPUT_CONFIG, LJ_chASYNCH_BAUDFACTOR, 65224, 0);
//Enable UART.
ePut(lngHandle, LJ_ioASYNCH_COMMUNICATION, LJ_chASYNCH_ENABLE, 1, 0);
//Write data.
eGet(lngHandle, LJ_ioASYNCH_COMMUNICATION, LJ_chASYNCH_TX, &numBytes, array);
//Read data. Always initialize array to 32 bytes.
eGet(lngHandle, LJ_ioASYNCH_COMMUNICATION, LJ_chASYNCH_RX, &numBytes, array);
4.3.13 - Watchdog Timer
The UE9 has firmware based watchdog capability. Unattended systems requiring maximum up-time might use this capability to
reset the UE9 or the entire system. When any of the options are enabled, an internal timer is enabled which resets on any
incoming communication to the Control processor. If this timer reaches the defined TimeoutPeriod before being reset, the
specified actions will occur. Note that while streaming, data is only going out, so some other command will have to be called
periodically to reset the watchdog timer.
Timeout of the watchdog on the UE9 can be specified to reset either/both processors, update the state of 1 or 2 digital I/O (must
be configured as output by user), and update either/both DACs.
Typical usage of the watchdog is to configure the reset defaults (condition of digital I/O and analog outputs) as desired (use the
“config defaults” option in LJControlPanel V2.26+), and then use the watchdog simply to reset the device on timeout. For initial
49
Summary of Contents for UE9
Page 84: ...84 ...