PARALLEL PORT PROGRAMMER FOR

ATMEGA 16/32

In-system programmer means we can design a programmer circuit using simple parallel port interfacing such that our controller can be directly burned with the program while in the designed system or circuit board.

Following pins of Atmega16 is used in programmer circuit-

Pin NO. / Description
6 / MOSI (SPI Bus Master Output/Slave Input
7 / MISO (SPI Bus Master Input/Slave Output)
8 / SCK (SPI Bus Serial Clock)
9 / Reset
10 / Vcc
11 / Ground

Table-Atmega16 Pins

• SCK – Port B, Pin 7

SCK: Master Clock output, Slave Clock input pin for SPI channel. When the SPI is enabled as a Slave, this pin is configured as an input regardless of the setting of DDB7.When the SPI is enabled as a Master; the data direction of this pin is controlled by DDB7. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB7 bit.

• MISO – Port B, Pin 6

MISO: Master Data input, Slave Data output pin for SPI channel. When the SPI is enabled as a Master, this pin is configured as an input regardless of the setting of DDB6. When the SPI is enabled as a Slave, the data direction of this pin is controlled by DDB6. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB6 bit.

• MOSI – Port B, Pin 5

MOSI: SPI Master Data output, Slave Data input for SPI channel. When the SPI is enabled as a Slave, this pin is configured as an input regardless of the setting of DDB5. When the SPI is enabled as a Master, the data direction of this pin is controlled by DDB5. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB5 bit.

• RESET-Pin 9

Reset Input. A low level on this pin for longer than the minimum pulse length will generate a reset, even if the clock is not running.

• VCC -Pin 10

Digital supply voltage(+5V).

•GND-Pin-11

Ground.

Parallel Port-

Parallel Port interfacing is the simplest method of interfacing. Parallel Port’s are standardized under the IEEE 1284 standard first released in 1994. It has data transfer speed up to 1Mbytes/sec. Parallel port is basically the 25 pin Female connector (DB-25) in the back side of the computer (Printer Port). It has 17 input lines for input port and 12 pins for output port. Out of the 25 pins most pins are Ground and there is data register (8 bit), control register (4 bit) and status register (5 bit).

Fig-Pin diagram of Parallel Port

Following Pins are used in parallel port-

Pin No. / Description
7,8,9 / Data pins
10 / Status pin
19 / Ground

Table- Parallel Port Pins

Interfacing -

In programmer circuit pins of parallel port which are above described has to interface with pins of ATmega16 microcontroller which are responsible for in-system programming. The parallel port can be interfaced directly with microcontroller. To avoid reverse current we can use Schottkey diodes as safety precaution for pc motherboard.

Following pins of Parallel Port and ATmega16 are to be interfaced-

Parallel Port / Atmega16
Pin 7 / Reset (Pin 9)
Pin 8 / SCK (Pin8)
Pin 9 / MOSI (Pin6)
Pin 10 / MISO(Pin7)
Pin 19 / Ground(Pin11)

Interface Connections

Fig-Circuit Diagram of ATmega16 Programmer

SOFTWARES USED:

WinAVR– WinAVR is open source package in which we use two sub-programs

Programmers Notepad & Mfile.

Version- 2.0.8.718-basic

Creator- Simon Steele

Purpose- 1. To write code.

2. To compile coding.

3. To generate Hex Code.

4. To burn Hex code

Steps for Compiling and Burning Process-

1. Open Programmers Notepad [WinAVR] from “StartàAll programs à WinAVR-20090313”, write the code. Save the program into a specified folder whose name is same as the File name.

2. Open MFile [WinAVR] from “StartàAll programs à WinAVR-20090313” apply following steps-

I. Select Microcontroller type which is Atmega16 or Atmega32 whichever you are using.

(CLick To Enlarge)

II. Select output format as “ihex”.

III. Select Debug format as “avr-ext-COFF (AVR Studio 4.07+, VMLAB3.10+).

(CLick To Enlarge)

IV. Select programmer option as “bsd”.

V. Select output port as lpt1 because we are using Parallel port (0X378 is the address of Parallel port).

VI. Save As the file as Mfile format in the same folder where the program file is saved. Name of the Mfile should me kept Makefile only; don’t change it to any other name.

VII. Reopen the saved Mfile in Notepad.exe and correct F_CPU to 1 MHz and write the target name same as Program file name. Save the Mfile.

(CLick To Enlarge)

3. Open programmer Notepad select Tools à[WinAVR] Make All option to compile and create hex code Hex code.

4. After successful compilation the hex file is saved automatically into the same folder in which the program file and the Makefile are already saved.

5. Connect parallel port of burner to the CPU of your PC and select Tools à[WinAVR] Program option to burn Hex code.

6. Below is the snapshot of the output window which displays all the actions being taken and their status.

(CLick To Enlarge)

COMMON ERRORS ENCOUNTERED

First Error

avrdude: AVR device not responding

avrdude: initialization failed, rc=-1

Double check connections and try again, or use -F to override

this check.

avrdude done. Thank you.

make.exe: *** [program] Error 1

Second Error:

avrdude: Device Signature=0xffffff.

avrdude: Yikes! Invalid device Signature.

Double check connections and try again, or use -F to override

this check.

avrdude done. Thank you.

make.exe: *** [program] Error 1

Hello friends , here is a small video tutorial on how to communicate to devices connected to our PCs parallel port using MATLAB programming. A large number of applications can be thought of using MATLAB as a platform in robotics. The digital bit data obtained at the parallel port can be utilized for driving DC motors or Stepper motors or other actuators.

%Code to transmit bits to the Parallel Port.

%The output1 & output2 matrix bits are transmitted sequentially.

parlport = digitalio('parallel', 'LPT1');

line = addline(parlport, 0:3, 'out');

output1 = [0 0 0 1; 0 0 1 1; 0 1 1 1; 1 1 1 1; 0 0 0 0];

output2 = [1 0 0 0; 1 1 0 0; 1 1 1 0; 1 1 1 1; 0 0 0 0];

for m=1:5

for x = 1:5

pval1 = output1(x,:);

putvalue (parlport, pval1);

pause(0.3);

end

for y = 1:5

pval2 = output2(y,:);

putvalue (parlport, pval2);

pause(0.3);

end

end