Programming ATmega328P Target Bd

From media_wiki
Jump to: navigation, search

Setup ATmega328P Target Bd at 1MHz and flash the blink program to chip that blinks an LED.

Prerequisites: Know how to use AVRdude with a USB programmer. (usbtiny, usbasp, etc.....)
avrdude -p m328p -c usbtiny -v | avrdude -p m328p -c usbasp -P usb -v
  • Connect USBtiny to ATmega328P Target Board.
  • Test the connection to programmer: avrdude -p m328p -c usbtiny -v
  • Connect LED with pull down resistor to Pin D13 on ATmega328P Target bd. (Not needed if using Target Bd built in Yellow LED)
  • Open Arduino IDE and change the following settings: Under the Tools tab
      Board: ="Arduino/Genunio Uno"
      Programmer: = "USBtiny or USBasp"
  • Copy-Paste/Load BlinkATmega328P.ino Arduino file. (Do not Flash at this time)
/* BlinkATmega328P.ino 
Turns on an LED for one second, then off for one second, repeatedly.
AVRdude Embedded Workshop - Rusty Cain 2018
Demonstrate Changing the Fuse setting using AVRdude. */ 

#define LED_YELLOW 13
void setup() 
{
     pinMode(LED_YELLOW, OUTPUT);      // Define pin as output
}
void loop() 
{
     digitalWrite(LED_YELLOW, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(100);                       // wait for a second
     digitalWrite(LED_YELLOW, LOW);    // turn the LED off by making the voltage LOW
     delay(100);                       // wait for a second
} 
  • Validate ATmega328P clock speed is set to the 1 MHz default by using the following command for reading fuse settings.

avrdude -p m328p -c usbtiny -v
1MHzSettingPic.PNG

1 MHz Default Settings:
avrdude -p m328p -c usbtiny -v -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m
  • Generate the binary file by selecting under the Sketch Tab: "Export complied Binary"
  • Flash the chip by Selecting Upload Using Programmer under Sketch Tab in Arduino IDE.
  • Notice the speed of the blinking LED at 1MHz.
  • Using AVRDude Set Fuses to 8MHz
8 MHz Settings:
avrdude -p m328p -c usbtiny -v -U lfuse:w:0xE2:m -U hfuse:w:0xD6:m -U efuse:w:0xFF:m
8MHzSettingPiv.PNG
  • Notice the faster blink rate.
  • Using AVRDude Set Fuses to 16MHz. Needs 16MHz external clock which is included on the Target board
16 MHz Settings 
avrdude -p m328p -c usbtiny -v -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0xFF:m 
16MHzSettingPic.PNG
  • Notice the even faster blink rate.
  • Using AVRDude Set ATmega328P Chip back to 1MHz
1 MHz Default:
avrdude -p m328p -c usbtiny -v -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m
  • Notice the blink rate.
Special Note:
Some Arduino libraries are written to only work at 16 MHz. 
Always check the Fuse setting if devices are not working properly.
When changing Fuse setting always ensure the correct Baud Rate for any serial RS232 UART communications. 

Examples of Clock fuse setting commands:

1 MHz ATmega328P Default Fuse Settings 
avrdude -p m328p -c usbtiny -v -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m
8 MHz Internal clock 
avrdude -p m328p -c usbtiny -v -U lfuse:w:0xE2:m -U hfuse:w:0xD6:m -U efuse:w:0xFF:m 
16 MHz Default
avrdude -p m328p -c usbtiny -v -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0xFF:m 
Arduino Uno: 16 MHz Standard Arduino Uno settings. 
avrdude -p m328p -c usbtiny -v -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0x05:m  = Arduino Uno


Project 1 completed.

AVRDUDE Class