|
By Oleg Mazurov  MAX3421E protoboard setup
In previous article I wrote about ways to build the project. Picture on the right shows one built on a piece of protoboard. The PIC is clocked at 64MHz using internal oscillator and SPI clock is 16MHz. It works well.
I’d like to start describing the code with an overview of a project layout. All project-related definitions are contained in project_config.h file. Types like BYTE, WORD, BOOL are defined in Generic_Types.h, the rest goes to a header file with the same name as .c module.
At present, the code consists of SPI functions, MAX3421E register read/write functions, MAX3421E event handler, and a small CLI used primarily to aid in debugging. SPI functions are explained in Interfacing LCD via SPI article, take a look if you haven’t already. In this article I will be talking about MAX3421E low-level routines.
Continue reading Lightweight USB Host. Part 3 – accessing MAX3421E.
By Oleg Mazurov  Setting serial speed on Xbee module
Xbee module supports two modes of operation – transparent mode and API mode. To create simple point-to-point links, Xbee works nicely in transparent mode without much coding. However, if your goal is to build a network consisting of more than two devices, AT mode becomes too difficult to bear. You will spend almost all the time switching in and out of command mode, wasting time and draining batteries in the process. On the other hand, in API mode commands and data travel in specially formatted frames and no switching is necessary. Another advantage of API mode is that serial speed on transmitters doesn’t have to match – one can be configured for 115200bps, another for 2400bps, third left with default 9600bps. There is another nice feature called remote command; you can remotely request the state of Xbee module pins, for example, or change an output pin level. It means that for simple measuring and control applications no MCU is even necessary at the sensor.
API mode requires re-flashing module firmware and some extra coding on both sides of the link. I started with upgrading the firmware. Picture on the right shows X-CTU screen with serial speed drop-down expanded – along with loading API firmware I’m changing the speed of coordinator Xbee to 115200.
Continue reading Playing Xbee. Part 4 – API.
By Oleg Mazurov  Xbee on a protoboard
First of all – breadboards are evil. Sure, they are handy. But when you spend a whole day chasing glitches which drive your logic analyzer crazy, it’s not fun. I moved my Xbee setup on a protoboard; picture on the right shows the result. The capacitor on Xbee VDD pin is essential – the module generates pretty strong spikes every time it starts transmitting and without the capacitor one should expect to see glitches every 250ms or so. The manual recommends bypassing VDD using 1uF and 8.2pF caps in parallel; I’m using 0.1uF here and it works well also.
In the previous article, I talked about switching in and out of command mode on an Xbee module running AT firmware. You can do exciting things with AT commands; however, when you interact with the module via RF link, how are you supposed to see the output of an AT command? In command mode, all output goes back to the PIC USART, so we need a method to capture it and send back to us.
The following function is called from CLI. It queries every AT command, stores the result, and sends it back after going back online. The usual way of doing that is to switch to command mode, issue all the commands capturing output to a buffer, then switch back online and send the buffer contents back. PIC18 doesn’t have enough RAM to hold such a big buffer, that’s why this function queries one command at a time. Because of that, the function is quite slow – the guard time before sending “+++” is one second plus it needs to wait for RF transmission of previous result to complete before switching to command mode for the next query. It takes approximately 3 seconds per query and querying about 60 commands takes 3 minutes.
Continue reading Playing Xbee. Part 3 – Measure and send.
By Oleg Mazurov  Xbee on a breadboard
In the previous article, I described a simple wireless setup using a pair of Xbees connected to PIC microcontroller and serial port of a Linux machine. After finishing the article, I continued working on the project and that’s what I have found so far.
First, using router firmware in Xbee module is bad for your batteries. In this configuration power consumption is steady 40ma. In addition to that, sleep is not working. After loading end device firmware power consumption dropped to 5ma on average and I was able to use Sleep pin. Measured current in sleep mode is less than 1ua – not bad. Second, PIC18F4520 is not the best PIC for sensor applications. Newer K-series PIC18s with their internal 1.2V reference, such as PIC18F26K20, are much better. In addition, they can be clocked up to 64MHz, and they are cheaper. At the time of this writing PIC18F26K20 in DIP package sells for less than $4 in single quantities on Mouser.
Continue reading Playing Xbee. Part 2 – Command mode.
By Oleg Mazurov  Xbee coordinator
Couple of days ago, I picked a pair or Xbees at Sparkfun. The plan is to build low power sensor platform using PICs, Zigbee radios, and Linux. In this article, I’m sharing my experience in building with Xbees.
The BOM includes two Xbee 2.5 RPSMA radios, Xbee USB explorer, Xbee breakout, PIC18F4520 microcontroller, and a breadboard. The code is written in C18 and built in MPLAB. Project files are available in download section.
Even though it is (presumably) possible to get two Xbees talk without any configuration, I decided not to do it. First, the firmware was old; second, I’m planning on having more than two radios. In addition to that, new stack supports firmware upgrades over the air. I downloaded X-CTU and upgraded my radios to Xbee ZB; one became a coordinator( pictured on the right ), the other one a router.
Continue reading Playing Xbee. Part 1 – First impression.
By Oleg Mazurov  MAX3421E breakout board schematic
As I mentioned in the previous article of this series, the schematic of MAX3421E board differs very little from datasheet reference design. It consists of MAX3421E itself, MAX4793 USB current-limiting switch, MAX6349 3.3V regulator, plus a dash of resistors, capacitors and connectors. Some parts are optional; for example, if you prefer leaving USB power line (called Vbus) unrestricted, don’t solder MAX4793. Also, if you don’t mind using 2 power supplies – 5V to supply Vbus, and 3.3V for MAX3421E, then leave MAX6349 unpopulated as well. Alternative power pins are provided on the board.
The 3.3V regulator can also be substituted with LDOs from other manufacturers either “drop-in”, like ones from National Semiconductor (example: LP3990) or with minor modification – cutting a trace or two (example: TC1040 from Microchip). Look for LDO in SOT-223 package and check pin assignment against MAX6349 datasheet.
Continue reading Lightweight USB Host. Part 2 – Hardware.
By Oleg Mazurov  PIC VPP limiter schematic
Newer PIC18s, such as my current favorite – PIC18F26K20, don’t like to be programmed with 12V. The datasheet maximum is 9V. Older Microchip programmers/debuggers, such as PicKit and ICD 2, do not support variable programming voltage. When you start a MPLAB project consisting of K-series PIC18 and ICD 2 debugger, you will get a warning and suggested VPP limiting circuit schematic. In this article I’m describing this very circuit, so you can build it beforehand.
Continue reading VPP limiter for new PIC microcontrollers.
By Oleg Mazurov  Lightweight USB Host
Universal serial bus is quite popular. USB peripherals are aplenty, and they are cheap; therefore,it is tempting to use them in microcontroller projects.
There are two distinctive roles for devices on USB bus. USB host controls the bus and initiates data exchanges. Peripheral device won’t do anything until instructed by host. In other words, to make use of USB peripheral, our little microcontroller has to become a USB host.
Making a USB host is not as difficult and scary as it sounds. We don’t need a functionality of a PC USB host controller. USB specification for embedded host says that such host need only support a certain set of devices or device classes and nothing else. What is in this set (called Target peripheral List, or TPL ) is up to you. You may want your micro to work with a certain web camera or printer, or use memory sticks, which are all “Mass Storage Class Bulk Only Transfer” devices, or Bluetooth radios, or whatever else you may need in your design.
Continue reading Lightweight USB Host. Part 1 – Motivation.
By Oleg Mazurov  HD44780 LCD display
Introduction.
As time goes by, microcontrollers become more powerful, cheaper, and smaller. A typical micro of the past could have had 40 pins and no internal memory. On the contrary, modern J-series PICs are made with 96K program memory and 28 pins. We can drive a lot of peripherals with that amount of memory, however we are getting short on pins.
In this article I will show how to drive a parallel interface peripheral serially. A HD44780-compatible LCD module is good candidate – it is popular, inexpensive, and slow, so you won’t be losing any speed while converting parallel to serial. And you could even save some money using a micro with fewer pins.
Continue reading Interfacing LCD via SPI.
By Oleg Mazurov Installed syntax highlighting plugin built on my favourite GeSHi. The plugin name is wp-syntax. Testing:
#include <stdio.h>
main
{
printf("hello, world\n");
} |
|
|