Atmega328 Development Kit

This is a very basic Atmega328 development kit It includes:

  • Atmega 328 8 bit microcontroller with 20 MHz crystal resonator
  • PCB board with place for external components
  • Power circuit  that allows powering Atmega directly(2.7-5.5 V), or through a L7805 voltage regulator(8-35 V).  L7805 circuit includes a thermal fuse.
  • 10 pin ISP connection for programming.

A kit comes as true kit, and components must be soldered  by user.

Soldering of the board was easy, because where wasn’t any SMD components, every component has marked place on the PCB with specified value, so it’s is easy to tell which capacitor or resistor goes where.

I didn’t like placement of Atmega in this board, chip looks like placed upwards comparing to notes on the silk screen. It can give impression, that chips is placed to socket in the wrong way, while is not.

Board programming

To program the Atmega328 programmer must be used. I used USBASP AVR Programmer, it’s work with USB port, is cheap, and just works. Khazama AVR Programmer is software for uploading code to microcontroller. Although version 1.7  supports only Atmega328P, but it can be used to program Atmega328 .It’s pity thatt fuse settings doesn’t work, so one way is search for other software, or stick to internal Atmega clocked at 1 MHz using internal 8 MHz RC oscillator with divider.

Software can sometimes warn about incorrect signature, but just ignore it.

I write code using IAR Embedded Workbench for Atmel AVR , you can also use open and more popular WinAVR.

This development kit is very basic, so you need extra component to make board really usable.

This is program that controls LED that is connected to PD6 , but it uses PWM instead of simply turning LED on/off.

//Atmega328p PWM test by electronicsblog.net
#include
#include

unsigned char bright=0;

unsigned char direction=0;

int period=200;

int main( void )
{

DDRD=0x40;

TCCR0A=0x83;

TCCR0B= 0x01;

int delay=period;

while (1) {delay--;

if (delay==0) {

if (direction ==0) {
bright++; }
else bright--;

delay=period;

if (bright == 255) direction=1;

if (bright == 0) direction=0;

OCR0A=bright;
}

};
}