Spread the love

SPI interfacing  with ATmega16

___________________________________________________________________________________________________


  • What is SPI protocol ? – The Serial Peripheral Interface or SPI bus is a synchronous serial data link, a de facto standard, named by Motorola, that operates in full duplex mode. It is used for short distance, single master communication

 SPI interfacing  with ATmega16

  • How SPI work – Firstly, SPI works in a master/slave setup. The master is the one that sends the clock pulses. At each pulse, data will be sent and received. SPI has a chip select pin. Every device will share the “SDI”, “SDO” and “Clock” pins, but each device will have it’s own chip select pin (also known as slave select). This means we can have a virtually unlimited number of devices on the same SPI bus. You should also note that the chip select pin can be active high or active low depending on the device. For some devices, the chip select pin must stay enabled throughout the transmission, and others require a change in the chip select line before the next transmission. SPI is Dual-Duplex. This means data can be sent and received at the same time. Here’s a diagram showing the way in which SPI sends & receives data:

 SPI_timing_diagram2

  •   Feature of  SPI
    • Full duplex communication.
    • Higher throughput than TWI.
    • Not limited to 8 bit words in the case of bit transferring.
    • Simple hardware interfacing
    • Arbitrary choice of message sizes, contents and purpose.
    • Typically low power requirements
    • Slave uses master’s clock and does not require precision oscillators.
    • Lower power requirements than TWI due to less circuitry.
    • Many SPI-enabled ICs and Microcontrollers can cope with data rates of over 10MHz, so transfer is much faster than with I2C

5842593614_09836c871f

  • Applications-  SPI is used to talk to a variety of peripherals, such as
    • Sensors: temperature, pressure, ADC, touchscreens, video game controllers
    • Control devices: audio codecs, digital potentiometers, DAC
    • Camera lenses: Canon EF lens mount
    • Communications: Ethernet, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11, handheld video games
    • Memory: flash and EEPROM
    • Real-time clocks
    • LCD, sometimes even for managing image data
    • Any MMC or SD card (including SDIO variant)

Click Here: Depth understanding of SPI Protocol

 1. Circuit of spi interfacing with ATmega16 using MAX7221

8 SEVEN SEGMENT ARE MULTIPLRX USING MAX7221 USING AND CONTROLLERED BY SPI interfacing  with ATmega16

 

________________________________________________________________________________________________

1. Program of spi interfacing with ATmega16 using MAX7221

/******************************************************
www.firmcodes.com
DEVELOPED BY:- FIRMWARE DEVELOPER
WHAT PROGRAM DO:- ATMEGA16 CONTROL MAX7221 USING SPI 
PROTOCOL AND ACCORDING MAX7221 CONTROL 8 7-SEGMENT DISPLAYS
******************************************************/

#include<avr/io.h>

#include<util/delay.h>

#define MOSI 5
#define SCK 7
#define SS 4

int ar[10]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
int ar1[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};

void spi_ini();
spi_tr(unsigned char cmd,unsigned char data);

void main()
   {
       int i,a,b,c,d,e,f,g,h;
       spi_ini();
       a=b=c=d=e=f=g=h=0;
       //spi_tr(0x09,0b00000010);
       spi_tr(0x0a,0xf);
       spi_tr(0x0b,0xf);   
       for(i=0;i<9;i++)
          {
              spi_tr(ar1[i],ar[0]);
              _delay_ms(100);
           }
       spi_tr(0x0c,0x01);
       while(1)
         {
                  spi_tr(ar1[7],ar[a]);
                  spi_tr(ar1[6],ar[b]);
                  spi_tr(ar1[5],ar[c]);
                  spi_tr(ar1[4],ar[d]);
                  spi_tr(ar1[3],ar[e]);
                  spi_tr(ar1[2],ar[f]);
                  spi_tr(ar1[1],ar[g]);
                  spi_tr(ar1[0],ar[h]);
                   a++;

                  if(a==10)
                     {
                          a=0;
                          b++;
                     }
                  if(b==10)
                    {
                         a=b=0;
                         c++;
                     }
                  if(c==10)
                     {
                         a=b=c=0;
                         d++;
                     }
                  if(d==10)
                     {
                         a=b=c=d=0;
                         e++;
                     }
                  if(e==10)
                     {
                         a=b=c=d=e=0;
                         f++;
                     }
                   if(f==10)
                     {
                        a=b=c=d=e=f=0;
                        g++;
                     }
                  if(g==10)
                     {
                        a=b=c=d=e=f=g=0;
                        h++;
                     }
                  if(h==10)
                     {
                         a=b=c=d=e=f=g=h=0;
                     }
                  _delay_ms(3000);

           }

  
    }

void spi_ini()
  {
      DDRB|=(1<<MOSI)|(1<<SCK)|(1<<SS);   // make output pin for spi
      SPCR|=(1<<MSTR)|(1<<SPE)|(1<<SPR1); // enable spi in master mode
  }

spi_tr(unsigned char cmd,unsigned char data)
  {
      PORTB &=~(1<<SS);         //enable transmission
      SPDR=cmd;                 // start transmission
      while(!(SPSR&(1<<SPIF))); // wait for complete transmission
      SPDR=data;                // start trasmission
      while(!(SPSR&(1<<SPIF))); // wait for transmission
      PORTB |=(1<<SS);          // disable transmission

   }

PROTEUS File for SIMULATION(Password Of RAR file is :-firmcodes.com)

download (1)

Content for the tab VIDEO