Main Menu
  • Home
  • Services
    • Strategy
      • Technology Partner
      • UI / UX
      • Artificial Intelligence

      Core Technologies
      • PHP
      • JavaScript
      • Laravel
      • VueJs
      • AWS
    • Development
      • Software Development
      • Mobile App Development
      • Software Integration
      • Software Support (SLA)
      • Managed Hosting
      • Microsoft Access Databases
    • Industries
      • Manufacturing
      • Transport / Logistics
      • Finance
      • Retail & E-commerce
      • Government
      • Construction
      • Health
      • Insurance
      • Mining
  • Our Work
  • About
  • Blog

© 2020 Codium Pty Ltd.

Codium Logo Codium Logo
  • Services
    • Strategy
      • Technology Partner
      • UI / UX
      • Artificial Intelligence

      Core Technologies
      • PHP
      • JavaScript
      • Laravel
      • VueJs
      • AWS
    • Development
      • Software Development
      • Mobile App Development
      • Software Integration
      • Software Support (SLA)
      • Managed Hosting
      • Microsoft Access Databases
    • Industries
      • Manufacturing
      • Transport / Logistics
      • Finance
      • Retail & E-commerce
      • Government
      • Construction
      • Health
      • Insurance
      • Mining
  • Our Work
  • About
  • Blog

Programming AVR - Parallel Port (LPT)

15 Mar 2009, in

  • Blog
Here is a quick and dirty tutorial for writing data and setting fuse bits on an AVR microcontroler using Ubuntu. All details in this post are related to the Atmega8-16PU, for other versions you should relate to the data sheets for the relevant specifications. First we need to get the necessary development tools:
# sudo  apt-get install gcc-avr avr-libc gdb-avr avrdude
Now we need to create a cable to go between the LPT port on your PC and the AVR micro-controller:
DB25 Male AVR
Pin 1 SCK
Pin 2 MOSI
Pin 11 MISO
Pin 16 RESET
Pin 21 GND
*Warning: The data pins (1,2) should have a 1k resister in line, this is to stop you from killing either your LPT port, AVR, or both. It will work without just make sure you have it wired 100% correct. d9-f1 atmega8-1 Run the following to test the connection:
# sudo avrdude -p m8 -P /dev/parport0 -c dapa
You should receive back:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
If you receive:
avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.
Then something is wrong and you should check all your connections. Now to Test out some code you can try this example:
/*
 * blink.c
 */

#include <avr/io.h> #include <util/delay.h> #define LED PD4

int main(void) { // define pd4 as output DDRD |= (1 << LED); while (1) { PORTD |= (1 << LED); // switch on _delay_ms(1000); PORTD &= ~(1 << LED); // switch off _delay_ms(1000); } return 0; }
Save as blink.c Now in the same directory save the following Makefile:
MCU=atmega8
AVRDUDEMCU=m8
CC=/usr/bin/avr-gcc
CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=$(MCU)
OBJ2HEX=/usr/bin/avr-objcopy
AVRDUDE=/usr/bin/avrdude
TARGET=blink

program : $(TARGET).hex $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/parport0 -c dapa -U flash:w:$(TARGET).hex

%.obj : %.o $(CC) $(CFLAGS) $< -o $@

%.hex : %.obj $(OBJ2HEX) -R .eeprom -O ihex $< $@

clean : rm -f *.hex *.obj *.o
So now using the makefile we are going to create a .hex file of the c code above and write it onto our chip:
# sudo make
sucessful output:
/usr/bin/avr-gcc -g -Os -Wall -mcall-prologues -mmcu=atmega8   -c -o blink.o blink.c
/usr/bin/avr-gcc -g -Os -Wall -mcall-prologues -mmcu=atmega8 blink.o -o blink.obj
/usr/bin/avr-objcopy -R .eeprom -O ihex blink.obj blink.hex
/usr/bin/avrdude -p m8 -P /dev/parport0 -c dapa -U flash:w:blink.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9307 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "blink.hex" avrdude: input file blink.hex auto detected as Intel Hex avrdude: writing flash (138 bytes): Writing | ################################################## | 100% 0.05s avrdude: 138 bytes of flash written avrdude: verifying flash memory against blink.hex: avrdude: load data flash data from input file blink.hex: avrdude: input file blink.hex auto detected as Intel Hex avrdude: input file blink.hex contains 138 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.03s avrdude: verifying ... avrdude: 138 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you.

rm blink.obj blink.o
Attach a LED to PD4 with a resister in line and the LED should light up and flash. Written by: Jason Smith
Codium Logo
Codium Pty Ltd.
Ground Floor, 207 Greenhill Road
Eastwood, 5063
Adelaide, South Australia

Company

  • About us
  • Blog
  • Terms of Business
  • Customer Experience
  • Quality Policy
  • Security Policy
  • Privacy Policy

Services

  • Software Development
  • Mobile App Development
  • Support Services
  • Managed Hosting
  • Software Integration
  • Technology Partner
  • Microsoft Access

Support

  • Contact Us
  • Customer Feedback
  • Careers
  • Codium Remote Support

Socialise

© Codium Pty Ltd. All Rights Reserved.

Back Top