EE318 Electronic Design Lab Project Report, EE Dept, IITB, April 2009. Wireless Microcontroller Programmer



Similar documents
Single channel data transceiver module WIZ2-434

Using Xbee in Serial Communication

Programming Flash Microcontrollers through the Controller Area Network (CAN) Interface

Programming and Using the Courier V.Everything Modem for Remote Operation of DDF6000

ET-BASE AVR ATmega64/128

2.0 Command and Data Handling Subsystem

DSO138 oscilloscope program upgrade method

MCB3101 (Class I) WiRobot Serial Bluetooth Wireless Module User Manual

Bluetooth HC-06 with serial port module Easy guide

Lab Experiment 1: The LPC 2148 Education Board

RDF1. RF Receiver Decoder. Features. Applications. Description. Ordering Information. Part Number Description Packages available

Bluetooth to serial HC-06 wireless module

RS-232 Communications Using BobCAD-CAM. RS-232 Introduction

Microcontrollers and Sensors. Scott Gilliland - zeroping@gmail

APPLICATION NOTE. AT07175: SAM-BA Bootloader for SAM D21. Atmel SAM D21. Introduction. Features

Serial Communications

What is Easy-Radio? Devices Covered. Frequency Hopping Transceiver. Where x00 denotes frequency of operation. E.g. 400 = 433MHz

The Programming Interface

MANUAL FOR RX700 LR and NR

PM1122 INT DIGITAL INTERFACE REMOTE

AN601 I2C 2.8 Communication Protocol. SM130 SM130 - Mini APPLICATION NOTE

Application Note. C51 Bootloaders. C51 General Information about Bootloader and In System Programming. Overview. Abreviations

Home Security System Using Gsm Modem

Part Number Description Packages available

A RF18 Remote control receiver MODULE

RS-485 Protocol Manual

ESPA Nov 1984 PROPOSAL FOR SERIAL DATA INTERFACE FOR PAGING EQUIPMENT CONTENTS 1. INTRODUCTION 2. CHARACTER DESCRIPTION

Software User Guide UG-461

How to setup a serial Bluetooth adapter Master Guide

Designing VM2 Application Boards

Display Message on Notice Board using GSM

1 Technical Description Lokal-200PC

Wireless Home Security System

SYMETRIX SOLUTIONS: TECH TIP August 2015

Process Control and Automation using Modbus Protocol

SPROG DCC Decoder Programmer

Bootloader with AES Encryption

[WIR-1186] 865MHz-869MHz Wireless Module(version 3.0) (3.3V)

The Answer to the 14 Most Frequently Asked Modbus Questions

TNM Programmer User Manual. For Windows 7 / Vista / XP. TNM Electronics Ltd.

AVR Butterfly Training. Atmel Norway, AVR Applications Group

Hand Gestures Remote Controlled Robotic Arm

Using ISO Compliant RFID Tags in an Inventory Control System

[F/T] [5] [KHz] [AMP] [3] [V] 4 ) To set DC offset to -2.5V press the following keys [OFS] [+/-] [2] [.] [5] [V]

BIT COMMANDER. Serial RS232 / RS485 to Ethernet Converter

KTA-223 Arduino Compatible Relay Controller

Rev GSM base station. Installation instructions

8051 MICROCONTROLLER COURSE

LDG Electronics External Meter Serial Communications Protocol Specification

8-bit. Application Note. Microcontrollers. AVR282: USB Firmware Upgrade for AT90USB

TURBO PROGRAMMER USB, MMC, SIM DEVELOPMENT KIT

Application Note AN-00160

Date Rev. Details Author

Atmel s Self-Programming Flash Microcontrollers

Table 1 below is a complete list of MPTH commands with descriptions. Table 1 : MPTH Commands. Command Name Code Setting Value Description

Modification of an AOR AR-8600 receiver to tune it with a ACECO FC-3002 frequency finder

VMR6512 Hi-Fi Audio FM Transmitter Module

Design and Implementation of Home Monitoring System Using RF Technology

Access Control Using Smartcard And Passcode

Smarthome SELECT Bluetooth Wireless Stereo Audio Receiver and Amplifier INTRODUCTION

MidiStream. UHF Wireless MIDI System Operating Manual

F2103 GPRS DTU USER MANUAL

Remote control circuitry via mobile phones and SMS

RN-XV-RD2 Evaluation Board

RC2200DK Demonstration Kit User Manual

SMS based remote control system

EDK 350 (868 MHz) EDK 350U (902 MHz) EnOcean Developer Kit

SIM808 V2.2.5 user manual V1.2. Electrodragon.com

Fingerprint Based Biometric Attendance System

Bluetooth to Serial Adapter

Microcontroller Based Low Cost Portable PC Mouse and Keyboard Tester

OWNERS MANUAL. Status Monitor. for Windows 95, 98, ME, NT 4, 2000 & XP. SIGNALCRAFTERS TECH, INC.

CONCEPT1 RS232 COMMUNICATION

Microtronics technologies Mobile:

Surveillance System Using Wireless Sensor Networks

DESIGN OF 6 DOF ROBOTIC ARM CONTROLLED OVER THE INTERNET

PC2400 EEPROM PROGRAMMER INSTRUCTION MANUAL

MSR605. Programmer s Manual. Magnetic Stripe Card Reader/Writer (High & Low Coercivity) Revision B

Wireless Temperature

Advanced Data Capture and Control Systems

Virtual Integrated Design Getting started with RS232 Hex Com Tool v6.0

AN3155 Application note

Elettronica dei Sistemi Digitali Costantino Giaconia SERIAL I/O COMMON PROTOCOLS

Development of GSM and GPS based Cost Effective Telematics Module

CAM-VGA100 User Manual

ENTTEC Pixie Driver API Specification

TOSR0X-D. USB/Wireless Timer Relay Module. User Manual. Tinysine 2013 Version 1.0

Testing Data Radio Modem with Serial Port Tool V1.20

Bluetooth Serial Adapter

Driver Installation and Hyperterminal Operation of iload Digital USB Sensors

LDG DTS-4/4R Desktop Coaxial Switch / Remote

Quick Start Guide. MRB-KW01 Development Platform Radio Utility Application Demo MODULAR REFERENCE BOARD

DK40 Datasheet & Hardware manual Version 2

Lab 6 Introduction to Serial and Wireless Communication

PICAXE RF CONNECT KIT (AXE213)

8-bit RISC Microcontroller. Application Note. AVR910: In-System Programming

Parallax Serial LCD 2 rows x 16 characters Non-backlit (#27976) 2 rows x 16 characters Backlit (#27977) 4 rows x 20 characters Backlit (#27979)

User Manual. AS-Interface Programmer

SPA-Bus Communication Protocol V2.5. Technical description

Keep it Simple Timing

Transcription:

EE318 Electronic Design Lab Project Report, EE Dept, IITB, April 2009 Wireless Microcontroller Programmer Group No. B04 Varun Jog (06007012), varunjog@iitb.ac.in Rohit Agarwal (06007014), rohitagarwal@iitb.ac.in Robin Mandal (06007022), robinmandal@iitb.ac.in Guide: V Rajbabu Abstract This project aims at facilitating wireless programming of a microcontroller. It exploits the capability of a microcontroller to write in its own flash memory. This is made possible by pre writing a Bootloader code in the uc which accepts serial data and writes it in the main memory. The set structure of a hex file is used to fabricate an error free wireless transmission-reception protocol. Over 3 months, we have been able to design and implement such a programmer for 28 and 40 pin microcontrollers of the Atmega series. The following sections describe the hardware and software aspects of the project in an organized manner. 1 Introduction During the testing stage of a microcontroller code, programming and reprogramming of the microcontroller requires us to pluck the uc from the circuit a large number of times. Not only is this process tiring, frequently attaching and detaching the uc from the circuit can cause damage to the pins. Similar experiences during the BabyEDL project motivated us to design a wireless microcontroller programmer. We note that an ISP could achieve the same motive however it would require that the uc be easily accessible to the programmer which might not always be possible. This reinforced our decision to make a wireless programmer. The project objective can be restated as wirelessly transmitting a hex file from the computer to a microcontroller s main memory. We first arrange for the target microcontroller to be in a state where it can accept serial data at its RXD pin. This is achieved through a Bootloader program preloaded in the microcontroller using conventional programming methods. We use the computer s serial port to transmit the hex file to a Amplitude Shift Keying(ASK) based transmitter which operates at 433MHz. The receiver at the other end 1

passes the data online to the target microcontroller where the Bootloader accepts the incoming data and writes it in the uc s main memory. Both transmitter and receiver are powered by 5 Volt regulated supplies. The programmer hardware entertains all microcontrollers and requires no customization, however the Bootloader program needs to be modified suitably for programming different microcontrollers. 2 Design Approach 2.1 Hardware We can divide the hardware designing problem into 2 sub parts: Interfacing the ASK Transmitter Module with the PC Interfacing the ASK Receiver Module with the Microcontroller The first part requires interfacing the serial port of the computer with the transmitter. This is done using an RS232 connector, however, the High and Low voltage levels of the computer are 10V and -10V respectively which need to brought to 5V and 0V for normal circuit operation. This is achieved by mediating using a MAX232 IC. Interfacing at the receiving end requires just connecting the DATA OUT pin of the receiver to the RXD pin of the microcontroller. An unregulated 12V supply is downconverted to a 5V regulated supply using LM7805 voltage regulator. LEDs at PORT B of the microcontroller indicate whether the uc is being programmed or if there has been an error in programming. LEDs at PORT A of the uc are used for testing purposes i.e. whether the uc performs as expected after programming. 2.2 Software Again, two different software designing problems can be identified. These are: Program to send a hex file from the PC serially Bootloader Program to serially receive the data from the receiver and check for bit flips 2

Figure 1: Transmitter circuit, from [2] We used Hyperterminal and BrayTerminal [1] during the initial testing stages to send the hex file byte by byte and line by line respectively. However, we chose Matlab to send the complete hex file because of its high configurability. The Bootloader program is designed to identify whether the data at the receiver antenna is the desired hex file or noise contracted from the channel. It accordingly instructs the uc to write the data in the memory or generates signal for retransmission of data. When the entire hex file has been written in the memory, it automatically jumps to the program s starting location (0x0000) and starts executing the program. 3 Circuit Design 3.1 Hardware Design In this section we describe the various Hardware components that we have used while designing the circuits and the reasons for choosing them. We ve used the following major components at the transmitter and receiver side: MAX232 3

Figure 2: Receiver for Atmega16 Figure 3: Receiver for Atmega168 4

The High and Low level voltages from the computer are +10V and - 10V respectively. However othercircuit components interpret +5V and 0V as the high and low level voltages. Therefore, we need to bring the voltage levels down to these values. This is done using a 16 pin MAX232 IC. LM7805 We need to provide a regulated 5V power supply to various circuit components. The supply from the source is not reliable and fluctuates somewhat. So we use the LM7805 voltage regulator to provide a 5V regulated supply from a 12V unregulated supply. The same is used at the receiving end. ASK Transmitter and Receiver Module We were faced with a choice between RF and Bluetooth as the possible means for wireless communication. The small range of Bluetooth modules somewhat defeats the purpose of our project. Some Sparkfun bluetooth modules were available [3] but they were costly( around Rs. 2000). This prompted us to choose RF modules which were available for cheap (around Rs. 330) and had a relatively higher range. Once we were decided with this, we were faced with a choice between ASK and FSK modules. FSKs were our first choice but the non availability of FSK modules made us try out ASK Modules. However, after testing the ASK Modules as described in the next section, we found that they could serve the purpose too provided we chose a suitable Baud Rate and made some changes in the Bootloader program described next. Also, ASK modules come cheaper than FSK Modules (around Rs.1000) according to [4]. This made us settle at ASK Modules for setting up the RF link. Atmega Microcontrollers Our programmer is capable of programming any microcontroller which supports self programming. Since Atmega series microcontrollers are self programmable [5] and are widely used, we chose our target ucs from the Atmega series. For demonstration purposes we ve made the programmer for 28 pin Atmega168 and 40 pin Atmega16. 3.2 Software Design In this section we describe the MATLAB code for sending a hex file from the computer and the Bootloader program for taking serial data and writing it in the uc s main memory. 5

MATLAB Code to transmit HEX file Matlab is capable of communicating via the PC s serial port. This is done by defining a serial port object s and giving it suitable properties like port number and baudrate. Our code initially sends a string which tells the bootloader that a new program is about to be transmitted. Then, we load the hex file to be transmitted, and transmit it serially line by line. To ensure that each line is received, we transmit each line three times. Bootloader Program The bootloader depends heavily on the fixed structure of an intel hex file. Stucture of an intel hex file Each intel hex file consists of six parts as described by [6]: Start code, one character, an ASCII colon :. Byte count, two hex digits, a number of bytes (hex digit pairs) in the data field. 16 (0x10) or 32 (0x20) bytes of data are the usual compromise values between line length and address overhead. Address, four hex digits, a 16-bit address of the beginning of the memory position for the data. Limited to 64 kilobytes, the limit is worked around by specifying higher bits via additional record types. This address is big endian. Record type, two hex digits, 00 to 05, defining the type of the data field. Data, a sequence of n bytes of the data themselves. 2n hex digits. Checksum, two hex digits - the least significant byte of the two s complement sum of the values of all fields except : and checksum byte. The rough version of the bootloader was adapted from [7]. The bootloader program accepts two strings as input. uuuu and bbbb. The first string commands the bootlloader to erase the entire program memory, and get ready to write a new program. The second string tells it to jump to address 0x0000, that is the beginning of an existing program and start executing it. If the string is uuuu, then the bootloader creates a temporary page in its memory whose size is 16 bytes. As the hex file line is received, this line is stored in this temporary page. If the page does not fill completely (owing to lesser number of bytes being sent in the line), the 6

remaining bytes are filled as 0xFF. After each line, the checksum bit is used to verify if the line has been received without errors. If there is an error, the bootloader generates a signal which indicates that an error has occured and that the program should be re-transmitted. If the target uc s TXD pin is connected to a PC s serial port, we can observe the output as each line is written a code G12T. is transmitted as each line gets successfully written and G12T.* is transmitted when the program is completely written successfully. Also, one LED on PORTB toggles as each line gets written, and is permanently on when the code is completely written. We had to implement several noise handlers in our code as the ASK link used was very noisy. Some of them were The initial code string was made uuuu and bbbb as it is very improbable that the same character will occur as noise four times in a row. The code refuses to write anything unless it receives a : as the start bit We send each line three times to make sure that its received atleast once. For each line we check it address characters to make sure that it is a new line and not one that has already been written. 4 Testing Procedure and Results Testing the Computer s Serial Port To test the computer s serial port, short the RXD and TXD pins of the RS232 connector. Using Hyperterminal, send a character and if it appears twice on the display then the serial port is working just fine. In our case, we had sent stream of characters at 1200 Baud Rate and observed it reported twice on the display. Testing RF link It is quite possible that the transmitter and receiver pick up noise from the channel. In our application, where we need 100pc accuracy in reception of transmitted data, it becomes important that we identify the Baud rate such that bit flips are kept to the minimum while at the same time maintaining a decent programming time. For testing this, we interfaced the transmitter module with BrayTerminal at one computer and the receiver module with BrayTerminal at another computer. BrayTerminal allows sending a stream of characters 7

at a time. By sending data from one PC and observing it on the other, we could make out whether the data is getting corrupted. In our case, we noticed that the receiver was receiving noise till the data was sent, however once the stream of data was sent, it was received uncorrupted. This prompted us to device a mechanism which makes out whether the data at the reciver is the data of interest or arbitrary noise. Testing Bootloader program The Bootloader function is supposed write the program in uc s main memory and execute it once it is written. For testing the bootloader, we sent a LED blinking code [8] from the computer and observed the LED blink at port C of the ATmega 168 uc after the programming period was over. This confirmed that the bootloader was working. Once we had all the individual links working, we sent the hex file from the PC and observed the LEDs blinking on the PORT C of the uc. We then sent a variety of codes to check the system. 5 Conclusion The above description proves the feasibility of wireless programming and suggests its potential as a viable product. We have implemented one such programmer using ASK modules, for the Atmega series. In this section we propose some ideas for developing the product further, making it a more reliable and faster programmer. Upgrading the existing ASK based RF link to an FSK or X-Bee radio based link can increase the data rate and hence reduce programming time considerably. However, this would incur an additional cost. Also, the current transmitter circuit uses an external power supply. A circuit can be designed to draw power from the PC s serial port [9]. We are currently studying its feasibility. Programming time can also be reduced by optimizing the number of times a line is sent, by acknowledging the reception of a line, thus reducing the average number of times a line is transmitted. However, this would require upgrading the transmitter and receiver to transceivers each, increasing both the size and cost of the product. References [1] (2008) Bray terminal. [Online]. Available: braypp.googlepages.com/terminal 8

[2] (Feb 2007) So do it yourself. [Online]. Available: http://sodoityourself.com/max232-serial-level-converter/ [3] (2009) Sparkfun circuits. [Online]. Available: http://www.sparkfun.com [4] (2009) Vegakit india. [Online]. Available: http://www.vegakitindia.com/ [5] (2009) All datasheets. [Online]. Available: www.datasheetcatalog.com [6] Wikipedia. [Online]. Available: http://en.wikipedia.org/ [7] (Oct 2007) Polulu robotics forum - super simple bootloader. [Online]. Available: http://forum.pololu.com [8] (2009) Kartik s home. [Online]. Available: http://kartikmohta.com/ [9] (2009) How to get power from rs-232 port. [Online]. Available: http://www.tkk.fi/misc/electronics/circuits/rspower.html 6 User s Manual 6.1 Burning the bootloader The first step to wireless programming your atmel microcontroller is to burn the suitable bootloader onto it. This can be achieved by using the hex file of the bootloader provided and programming it using standard methods. Note that to burn a bootloader and to use it, the following fusebit settings should be used Set boot reset vector to bootloader address and not the default 0x0000 address Burn the BOOTSZ0 and BOOTSZ1 fuses according to the size of the bootloader, and as specified by the datasheet Once the uc has a bootloader, it can now be programmed using a suitable RF link 6.2 Setting up the RF link Connect the transmitter module to PC s serial port. Connect the receiver module to your target uc such that the DATA OUT pin of the receiver module is connected to the RXD pin of your uc. Provide an unregulated 12V supply on the transmitter side, and give suitable regulated 5V voltage 9

to the receiver pins. Connect antennae (around 15-20cm in length) to the transmitter and receiver modules. 6.3 Programming the uc Execute the m-file provided in matlab, replacing the test program with the name of your program. Also, fill up the hex file of your program so that each line has 43 characters, generally only the last 2 lines don t have 43 characters. In such case, fill them up with zeroes or any other character. The LED on PORTB blinks as it programs each hex file line, and another LED on PORTB lights up if there is a checksum error. Once the entire code is transmitted, the bootloader automatically jumps to 0x0000 and starts executing the program. After every reset, the uc jumps to the bootloader. If an existing program is to be executed, simple transmit bbbb using matlab. 6.4 Modifying the source code If you want to modify the bootloader source files, it can be done by making the following changes in a winaver makefile. Add the line BOOTLOAD= xxxxx where xxxxx is the start address of the bootloader as specified by the BOOTSZ fuse values Add the following line after LDF-flags LDFLAGS += -Wl, section-start=.text=$(bootload) Change target to bootloader 10