About authors

We are writers in avrchip.com. We present the articles on programming and arduino. You can get information on how to program the microcontroller and arduino. How do I write a script language for arduino and avr microcontroller.Most of the authors is an embedded systems engineer, software engineer, and electrical engineer.If you have questions about microcontrollers and arduino, please contact us at writer.avrchip@gmail.com.
Website: http://avrchip.com/
authors has written 22 articles so far, you can find them below.

What is the Minimum System on the Microcontroller?

avr minimal circuit

avr minimal circuit

The minimum system circuit of a microcontroller is a series of minimal so the microcontroller can work.

ATmegga AVR chip is equipped with an internal oscillator and thus no need external crystal for CPU clock source in order to save costs.

AVR microcontroller minimum system is very simple, just connect the VCC and AVCC to the DC +5V power supply voltage. Then GND and AGND with the ground. No need an additional crystal and reset pin is not connected to anything. With this circuit, AVR microcontroller has been able to work normally, but you can not reset the microcontroller manually. If you want to activate the reset pin with a button to trigger it, then connect the reset pin on your microcontroller with pull circuit made up of a 10k resistor and capacitor 10uF.

This circuit works for all AVR microcontroller family as ATMega8535, ATMega8, ATmega32, ATmega16 and others.

If you want to use larger crystals from 8MHz to your microcontroller circuit, then you can use an external crystal. You can see a more complete circuit on this page or this one.

Atmega8 Datasheet and the Explanation of The Input Output Pin Features

atmega8 microcontroller pin features

atmega8 microcontroller pin features

In this article described the hardware features of the AVR ATMega atmega 8 that is devoted to the type of PDIP, so for other types (QFN / MLF, TQPF) please refer to the specific datasheet only.

In addition to functioning as an input/output pins, a pin on AVR microcontroller can concurrently as other functions. For example at the AVR ATMega 8 microcontroller, PORTD.2 is an input / output pins, but this pin can also function as a trigger channel “external interrupt 0”. For more details, please follow the following explanation:

Description pin features on ATMega 8:

-VCC: supply voltage Microcontroller
-Ground: Ground

– Port B is a port i / o 8bit with internal pull-up resistors on each pin.
– Buffer on port B AVR ATMega8 have the capacity to absorb (sink) and distribute (sorce)
– Lodging in PB.6 can be used as a crystal input (inverting oscillator amplifier) and input to the internal clock circuit depends on the setting of fuse bits (currently set software downloader / programmer) is used as a clock source.
– Especially for PB.7 port can be used as a crystal output (inverting oscillator amplifier output) depends upon the setting of fuse bits are used to select the clock source.

– If the clock source is the internal oscillator (internal clock, then PB6 and PB7 pin can be used as input / output (I / O pin) or if using Asyncronousu Timer / Counter2 then PB6 and PB7 (TOSC2 and TOSC1) used for counter input channels.

– PORTC.0 – PORTC.5 are input / output ports with internal pull-up resistor for each pin. Buffer in this PORT has the capacity to absorb (sink) and distribute (sorce). In addition, the PORTC in atmega8 microcontroller can function as port ADC (analog to digital converter).

– Reset / PORTC.6, is a pin that can function as a reset pin on the microcontroller program cycle. By way RSTDISBL fuse bit set as “unprogramed” and will be active when it gets a signal “low”. But if RSTDISBL set as “programed” then portC.6 will be used as input / usual output pins.

-PORTD.0 – PORTD.7 are input / output ports with internal pull-up resistor for each pin. Buffer Portc have the capacity to absorb (sink) and distribute (sorce).
– AVCC is the supply voltage pin for the analog to digital converter (ADC). Note: PORTC.5 and PORTC.6 using digital VCC supply voltage.
– Aref is an analog reference voltage pin for ADC

AVR Microcontroller Architecture

avr architecture

avr architecture

AVR microcontroller has some parts that are divided into:

  • ALU (Arithmetic Logic Unit) is a processor for executing the program code that is appointed by the counter program.

  • Program memory is a flash memory to store programs in the form of a memory address and program code in the memory address.
  • Program Counter (PC) is a component to show the address of the program memory. So that ALU can make the execution of programs that exist in the address.

  • General Purpose Working Registers (GPR) is a register that has 8-bit space. GPR will execute program code each instruction in the ALU involving GPR.
  • Static Random Access Memory (SRAM) is RAM that hold the temporarily data. SRAM also has a memory address of the usual RAM. Last address of an SRAM depends on the capacity of SRAM and is already defined in the header file with the name RAMEND. So, to make the stack (the last address of SRAM) we can use RAMEND.

  • Internal pheripheral is an internal module in a microcontroller such as channel input / output, external interrupts, timers / counters, USART, EEPROM, and others. Each of these modules have internal port registers which control the internal module.

**) Pict from mouser,com

Arduino Bluetooth Shield Source Code and Tutorial

arduino bluetooth shield master to slave

arduino bluetooth shield master to slave

 

This is a tutorial on how to use Arduino Bluetooth shield.

To use this bluetooth shield, you have to plug it on the Arduino Uno board as shown in the image above.

This Bluetooth shield can be programmed to be a master or slave. If Bluetooth shield is programmed into the master, the bluetooth shield will make ‘a name’ for bluetooth connectivity.

In addition, it will set the baudrate and will be looking for signals bluetooth enabled. After finding an active bluetooth signal, This bluetooth shield will try to make the process of “pairing” and if the appropriate settings, then it will be connected.

Here is an example program “Master Bluetooth Shield”

#include <SoftwareSerial.h> // Software Serial Port

#define RxD 6
#define TxD 7
#define DEBUG_ENABLED 1

String retSymb = “+RTINQ=”; // start symble when there’s any return
String slaveName = “;SeeedBTSlave”; // caution that ‘;’must be included, and make sure the slave name is right.
int nameIndex = 0;
int addrIndex = 0;

String recvBuf;
String slaveAddr;

String connectCmd = “\r\n+CONN=”;

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
setupBlueToothConnection();
//wait 1s and flush the serial buffer
delay(1000);
Serial.flush();
blueToothSerial.flush();
}

void loop()
{
char recvChar;
while(1)
{
if(blueToothSerial.available()) //check if there’s any data sent from the remote bluetooth shield
{
recvChar = blueToothSerial.read();
Serial.print(recvChar);
}
if(Serial.available()) //check if there’s any data sent from the local serial terminal, you can add the other applications here
{
recvChar = Serial.read();
blueToothSerial.print(recvChar);
}
}
}

void setupBlueToothConnection()
{
blueToothSerial.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
blueToothSerial.print(“\r\n+STWMOD=1\r\n”); // set the bluetooth work in master mode
blueToothSerial.print(“\r\n+STNA=SeeedBTMaster\r\n”); // set the bluetooth name as “SeeedBTMaster”
blueToothSerial.print(“\r\n+STAUTO=0\r\n”); // Auto-connection is forbidden here
delay(2000); // This delay is required.
blueToothSerial.flush();
blueToothSerial.print(“\r\n+INQ=1\r\n”); //make the master inquire
Serial.println(“Master is inquiring!”);
delay(2000); // This delay is required.

//find the target slave
char recvChar;
while(1)
{
if(blueToothSerial.available())
{
recvChar = blueToothSerial.read();
recvBuf += recvChar;
nameIndex = recvBuf.indexOf(slaveName); //get the position of slave name

//nameIndex -= 1;
//decrease the ‘;’ in front of the slave name, to get the position of the end of the slave address
if ( nameIndex != -1 )
{
//Serial.print(recvBuf);
addrIndex = (recvBuf.indexOf(retSymb,(nameIndex – retSymb.length()- 18) ) + retSymb.length());//get the start position of slave address
slaveAddr = recvBuf.substring(addrIndex, nameIndex);//get the string of slave address
break;
}
}
}

//form the full connection command
connectCmd += slaveAddr;
connectCmd += “\r\n”;
int connectOK = 0;
Serial.print(“Connecting to slave:”);
Serial.print(slaveAddr);
Serial.println(slaveName);
//connecting the slave till they are connected
do
{
blueToothSerial.print(connectCmd);//send connection command
recvBuf = “”;
while(1)
{
if(blueToothSerial.available()){
recvChar = blueToothSerial.read();
recvBuf += recvChar;
if(recvBuf.indexOf(“CONNECT:OK”) != -1)
{
connectOK = 1;
Serial.println(“Connected!”);
blueToothSerial.print(“Connected!”);
break;
}
else if(recvBuf.indexOf(“CONNECT:FAIL”) != -1)
{
Serial.println(“Connect again!”);
break;
}
}
}
}while(0 == connectOK);
}

arduino bluetooth shield slave to computer master tutorial

arduino bluetooth shield slave to computer master tutorial

If you set it as a slave bluetooth shield, then this will be passive. This bluetooth shield will set the baudrate and put a name of bluetooth connectivity.

After that, it will wait until there is a device that finding and trying to ‘pairing itself’. If the settings are appropriate, then both bluetooth device will be connected.

Here is an example program “Slave Bluetooth Shield”

#include <SoftwareSerial.h> //Software Serial Port
#define RxD 6
#define TxD 7

#define DEBUG_ENABLED 1

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
setupBlueToothConnection();

}

void loop()
{
char recvChar;
while(1)
{
if(blueToothSerial.available())
{//check if there’s any data sent from the remote bluetooth shield
recvChar = blueToothSerial.read();
Serial.print(recvChar);
}
if(Serial.available())
{//check if there’s any data sent from the local serial terminal, you can add the other applications here
recvChar = Serial.read();
blueToothSerial.print(recvChar);
}
}
}

void setupBlueToothConnection()
{
blueToothSerial.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
blueToothSerial.print(“\r\n+STWMOD=0\r\n”); // set the bluetooth work in slave mode
blueToothSerial.print(“\r\n+STNA=SeeedBTSlave\r\n”); // set the bluetooth name as “SeeedBTSlave”
blueToothSerial.print(“\r\n+STOAUT=1\r\n”); // Permit Paired device to connect me
blueToothSerial.print(“\r\n+STAUTO=0\r\n”); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
blueToothSerial.print(“\r\n+INQ=1\r\n”); // make the slave bluetooth inquirable
Serial.println(“The slave bluetooth is inquirable!”);
delay(2000); // This delay is required.
blueToothSerial.flush();
}

AVR ATMega8 Schematic Circuit with Eagle Software

avr-atmega8-minimum-system-schematic-circuit

avr-atmega8-minimum-system-schematic-circuit

ATMega8 Schematic Circuit (Minimum system) is a support circuit for the microcontroller.

Without this support circuit, the microcontroller will not be able to work.

Minimum system for microcontrollers consist of several components. The components are : crystal, capacitors, and the reset circuit (consisting of resistors and capacitors).

And the crystal must be combined by two capacitors. The capacity of this capacitor should be in accordance with the AVR ATMega8 datasheet.

RESET pin on AVR ATMega8 must be pull up with a 4K7 ohm resistor and stabilized with ‘100nF capacitors’.

You have to make the pin as a downloader port. pin of the downloader port must meet a standard sequence. The pin sequence is: MOSI, MISO, SCK, RESET, GROUND.

This AVR ATMega8 schematic is made with the EAGLE software.

The Easiest Arduino Uno Bluetooth Shield

arduino bluetooth seeedstudio shield

arduino bluetooth seeedstudio shield

The easiest Arduino Uno Bluetooth shield for your Arduino Uno project is SeeedStudio Bluetooth Shield. Simply by plugging the Bluetooth Shield on your Arduino Uno and it has been ready for use. SeeedStudio bluetooth shield work using serial communication. You can choose two pins from Adruino Uno (from pin D0 to D7) to be used as Software Serial Port – Transmite Data (TX) and Receive Data (RX). You can choose RX and TX pins by sliding ‘jumper pin’ on the port that you want (D0 to D7).

arduino bluetooth seeedstudio shield tutorial

arduino bluetooth seeedstudio shield tutorial

 

Arduino Uno Bluetooth Shield ( SeeedStudio Bluetooth Shield ) Features :

  1. Input Voltage: 3.3V
  2. Baudrate: 9600, 19200, 38400, 57600, 115200, 230400, 460800
  3. Seeeduino/Arduino compatible
  4. Up to10m communication distance in house without obstacle
  5. UART interface (TTL) with programmable baud rate (SPP firmware installed)
  6. Default Baud rate: 38400, Data bits: 8, Stop bit: 1, Parity: No parity
  7. Default PINCODE:”0000”
  8. A full set of configuration commands
  9. On board PCB Antenna
  10. FCC Part 15 Certificated

 

Arduino uno bluetooth shield

Arduino uno bluetooth shield

You can still use all the Arduino pin bluetooth although this shield cover Arduino Uno board.  This Bluetooth shield provides 2 grove connectors (digital and analog) for you to install the grove module.

Pad TypeDescription
PIO1Status instruction port of Bluetooth module can be read by Arduino A1 port: low-disconnected, high-connected.
BT_RXUART Data input of Bluetooth module.
BT_TXUART Data output Bluetooth module.
Two Grove connectorsOne is Digital (D8 and D9), the other is I2C/Analog (A4 and A5).

 

arduino bluetooth shield master to slave

arduino bluetooth shield master to slave

You can set this shield bluetooth become a master or slave. For a tutorial and sample programs (source code program) you can also read on this blog.

arduino bluetooth shield slave to computer master tutorial

arduino bluetooth shield slave to computer master tutorial

You can connect this bluetooth shield with the other one (2 different bluetooth shield).

You can also connect a Bluetooth shield with a laptop or computer.

You can also connect a Bluetooth shield with the smartphone.

arduino bluetooth shield slave to master tutorial

arduino bluetooth shield slave to master tutorial

Arduino Source Code for Water Flow Meter Sensor

water-flow-arduino-tutorial

water-flow-arduino-tutorial

As described in the article Water Flow Meter Sensor, this sensor can detect the flow of water passing through the sensor.

This sensor has three wires (red, black and yellow). Red cable is connected to VCC. Black cable is connected to GND. And the yellow cable is connected to the arduino data pin (digital pin number 2) but you will need to pull up this cable with a 10k resistor.

Once you finish making the hardware, you should upload this program to the Arduino software IDE.

The program will calculate the flow rate and sends it via the serial port (USB cable). To view the sensors data, you must connect a computer with the Arduino and see it through the terminal on the Arduino IDE software.

 

Arduino Program Source Code for Water Flow Meter Sensor :

// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com

volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;
int hallsensor = 2; //The pin location of the sensor

void rpm () //This is the function that the interupt calls
{
NbTopsFan++; //This function measures the rising and falling edge of the

hall effect sensors signal
}
// The setup() method runs once, when the sketch starts
void setup() //
{
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
Serial.begin(9600); //This is the setup function where the serial port is

initialised,
attachInterrupt(0, rpm, RISING); //and the interrupt is attached
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()
{
NbTopsFan = 0; //Set NbTops to 0 ready for calculations
sei(); //Enables interrupts
delay (1000); //Wait 1 second
cli(); //Disable interrupts
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate

in L/hour
Serial.print (Calc, DEC); //Prints the number calculated above
Serial.print (” L/hour\r\n”); //Prints “L/hour” and returns a new line
}

Arduino LCD and Keypad Shield

lcd keypad shield - arduino shield

lcd keypad shield – arduino shield

Arduino LCD Shield that widely used is made by DFRobot.

DFRobot combines LCD Shield and Keypad Shield in one module. This LCD shield using a 16×2 character LCD components, and 5 buttons that you can use to create a menu option on your project.

This Arduino LCD keypad shield can be mounted on the Arduino Uno. And like Arduino shield in general, you can install it by plugging in the top of Arduino Uno.

lcd keypad shield - datasheet

lcd keypad shield – datasheet

You will still be able to use all Arduino pins, although it is installed by sticking the Arduino Board. This diagram illustrates that this LCD Arduino provide pins which replaces the function of the pins on the Arduino board. You can still access + 5V, 3.3V, and ground pin, which has been provided on the LCD keypad shield.

PinFunction
Analog 0Button (select, up, right, down and left)
Digital 4DB4
Digital 5DB5
Digital 6DB6
Digital 7DB7
Digital 8RS (Data or Signal Display Selection)
Digital 9Enable
Digital 10Backlit Control

It uses 8 pin arduino, and you can take advantage of the other pins for sensors or other purposes. Pin A1 to detect the five buttons, while the digital pin 4 to 10 is used to control the LCD.

lcd keypad board - arduino shield

lcd keypad board – arduino shield

SG90 Tower Pro Servo Datasheet

servo-for-arduino-sg90-tower-pro

servo-for-arduino-sg90-tower-pro

One type of electric motor is a servo. Servo motor is used to make mechanical robotic or automated devices. Servo work based on the frequency signal from the controller (such as a microcontroller or arduino).

SG90 Tower Pro servo motor can also be controlled by a ruspberry pi.

You can plug this SG90 Tower Pro Servo straight onto the raspberry pi GPIO pins 4,6,8 without some extra wires. Pin 8 on the raspberry pi is normally the UART Tx pin, so your SG90 Tower Pro servo will not work properly if you connect it without disabling the UART before running the main program, You can search the instructions for how to disabling the UART on pin 8 from google.

sg90 tower pro servo cable pin

sg90 tower pro servo cable pin

Each servo motor cables have different pin configurations. Tower Pro SG90 servo has a three-pin cable. Red cable is wired VCC. Black/brown cable is a ground cable. While the orange cable is a signal cable.

You can find the SG90 Tower Pro servo tutorial and arduino uno source code here.

HC-SR04 Distance Sensor Arduino Source Code

hc-sr04 distance sensor and arduino wire

hc-sr04 distance sensor and arduino wire

HC-SR04 is a proximity sensor that is very widely used.

This sensor is very easy to use because it only needs a simple syntax for programming it. You can view the datasheet and specification of the sensor’s hc-sr04 here.

Sensor HC-SR04 is widely used as a sensor on the robot to detect objects around the robot. In this tutorial, use the Arduino Uno as the processor. While its pin configuration can be seen in the image above.

VCC and GND pins on the sensor is connected to the VCC and GND pins on the Arduino UNO. While Trig pin is connected to digital pin 11 on the Arduino UNO. And echo pin is connected to digital pin 12 on the Arduino UNO.

 

HC-SR04 Source code :

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){
/* Send a negative number to computer and Turn LED ON
to indicate “out of range” */
Serial.println(“-1”);
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}

//Delay 50ms before next reading.
delay(50);
}

ATMega8535 Schematic Diagram

avr-atmega8535-minimum-system-schematic-circuit

avr-atmega8535-minimum-system-schematic-circuit

AVR ATMega8535 is a very popular microcontroller.

In the recent years, ATMega8535 has been displaced by the other microcontroller with a more complete feature like ATMega32, ATMega16 or ATMega128. Even, when Arduino offers ease (in the used and programming), the conventional Microcontroller becoming obsolete.

However, some users are still loyal to use the conventional microcontroller. And if you want to learn about the basics of the microcontroller, then you have to learn from the conventional microcontroller. You have to create an electronic circuit by yourself. And you have to find out all about the components used. After you finish creating the electronic circuits, then you will understand how the microcontroller’s minimum system so that it able works. And you will understand how a microcontroller work,  before you start programming it.

Like other microcontroller, we need some electronic components so that it able to work.

Crystal,some resistor and capacitor for the clock and the reset button. And don’t forget to provide the supply (VCC and GND) on the microcontroller board. You can make the ATMega8535 schematic diagram with the EAGLE software like the exsample above.

AVR ATMega128 Schematic Circuit Adapter DIY

avr-atmega128-schematic-and-board-adapter

avr-atmega128-schematic-and-board-adapter

ATmega128 is one of the AVR microcontroller. Large memory (128KBytes) can be used to make a big project.

For example, if you create a storage system using the MMC and use BASCOM AVR as the programming language, then you have to load a very large libraries into the memory of the microcontroller. And this can not be done if you are using a microcontroller with a small memory such as ATMega16 or ATMega8535. Therefore, you can try using AVR ATmega128 to complete your major project.

However, you would have difficulty in assembling and soldering components on this ATmega128 microcontroller. This is because ATmega128 an SMD component. And you must be able to make a double layer PCB if you want to use a ATmega128 microcontrollers and use part of DIP components (such as IC MAX232 or another).

If you want to combine the two types of these components, then I have tips for you. Make two single PCB layer and combine with pin headers. The first is an adapter PCB for ATmega128 microcontroller and the second is used for the other DIP components. And then combine it with pin header (male and female pin header). You can see PCB adapter for ATmega128 microcontroller in the picture.

DIY – Do It Yourself project

Hopefully this tutorial ( AVR ATMega128 Schematic Circuit Adapter DIY ) can help you in completing the project.