You are on page 1of 8

// Program to SPI (serial peripheral interface) using AVR microcontroller (ATmega16) #include<avr/io.h> #include<util/delay.

h> #define MOSI PB5 void SPI_init(); unsigned char SPI_RX(void); int main() { DDRD=0xFF; PORTD=0x00; SPI_init(); while(1) { PORTD=SPI_RX(); POTRD } } void SPI_init() initialization { DDRB=(1<<MOSI); pin, rest as input SPCR=(1<<SPE); } unsigned char SPI_RX() { while(!(SPSR &(1<<SPIF))); high return SPDR; } //SPI // set MOSI as output // Enable SPI

// move SPDR value to

//wait until SPIF get // return SPDR value

Komunikasi SPI pada ATMEGA8535 January 5, 2010


Posted by ayoenx in Pemrograman Mikrokontroller. trackback A. Tujuan

Mampu membuat program yaang meggunakan SPI (Serial Peripheral Interface) pada AVR ATMEGA8535 untuk membaca / memprogram mikrokontroler AVR ATTINY2313.

B. Bahan Praktikum

Kit latih development board AVR ATMEGA8535 o Mikrokontroler AVR ATTINY2313 ( SPI ) o Resistor 4,7 Kohm ( pull up) o Project Board o Kabel Penghubung

C. Praktikum

Rangkaian Skematik SPI

Program untuk membaca signature byte mikrokontroler ATTINY2313

___________________________________________________________________________ _____ #include <mega8535.h> #include <stdio.h> #include <delay.h> unsigned char SPI(unsigned char data){ SPDR = data; while(SPSR.7==0); //Mengirimkan sebuah data ke komunikasi SPI //Menunggu flag SPIF (Pengiriman data selesai)

return(SPDR); }

//Membaca I/O register SPDR dan clear flag SPIF

flash unsigned char string[]={Signature Byte %u: %X H}; void main(void){ unsigned char data; PORTB = 000; DDRB = 0xB0; //inisialisasi SPI //Tipe SPI : Master //SPI Clock Rate : 31,250 kHz(XTAL/128) //SPI Clock Phase: Cycle Half //SPI Data Order : MSB First SPCR = 053; SPSR = 000; //Inisialisasi USART //Format frame : 8 Data, 1 Stop , No Parity //USART Transmitter : On (enable) //USART Mode : Asynchronous // USART Baud Rate: 9600 UCSRA=000; UCSRB=0xD8; UCSRC=086; UBRRH=000; UBRRL=047; PORTB.4=1; //Untuk kristal 11.05920 Mhz //set RESET //SCK, MOSI, SS = 0 //PB7(SCK), PB5(MOSI), dan PB4(SS) sebagai output

delay_ms(20); PORTB.4=0; delay_ms(20);

//Tunggu 20ms //Clear RESET

//Enable serial programming while RESET is low SPI(0xAC); SPI(053); SPI(000); SPI(000); while(1){ delay_ms(60); //Read Signature byte 00H SPI(030); SPI(000); SPI(000); data = SPI(0); printf(string,0,data); putchar(0x0D); putchar(0x0A); delay_ms(60); //Read Signature byte 01H SPI(030); SPI(000); SPI(001); data = SPI(0); printf(string,1,data); //Kirim ENTER pada terminal untuk baris baru //Instruction Byte 1 //Instruction Byte 2 //Instruction Byte 3 //Read Byte 4 //Instruction Byte 1 //Instruction Byte 2 //INstruction Byte 3 //Instruction Byte 4

putchar(0x0D); putchar(0x0A); delay_ms(60);

//Kirim ENTER pada terminal untuk baris baru

//Read Signature byte 02H SPI(030); SPI(000); SPI(002); data = SPI(0); printf(string,2,data); putchar(0x0D); putchar(0x0A); } } ___________________________________________________________________________ _____

//Kirim ENTER pada terminal untuk baris baru //Read Signature byte 02H

Program untuk menulis suatu data ke memori program mikrokontroler AVR ATTINY2313.

___________________________________________________________________________ _____ #include <mega8535.h> #include <spi.h> #include <stdio.h> #include <delay.h> void chip_reset_and_program_enable(void){ PORTB.4=1; delay_ms(20); PORTB.4=0; //SET RESET //tunggu 20 ms //clear reset

//enable serial programming while reset is low spi(0xAC); spi(053); spi(000); spi(000); } flash unsigned char string[]={ Data pada Flash alamat 000H %p byte : %X H}; flash unsigned char hi[]={high}; flash unsigned char lo[]={low}; void main(void){ unsigned char data; PORTB=000; DDRB=0xB0; SPCR = 053; SPSR = 000; // USART Baud Rate: 9600 UCSRA=000; UCSRB=0xD8; UCSRC=086; UBRRH=000; UBRRL=047; //Untuk kristal 11.05920 Mhz //SCK , MOSI , SS = 0 //PB7(SCK),PB5(MOSI), dan PB4(SS) sebagai output //instruction byte 1 //instruction byte 2 //instruction byte 3 //instruction byte 4

chip_reset_and_program_enable(); //chip erase spi(0xAC); spi(080);

spi(000); spi(000); delay_ms(4); /*sesudah perintah chip erase diperlukan reset dan programming enable , untuk lebih jelasnya dapat dilihat pada datasheet cara memprogram mikrokontroler*/ //AVR ATTiNY2313 secara serial (Serial Downloading SPI) chip_reset_and_program_enable(); //Load Program Memory(Flash) : Low byte //data yang ditulis AAH pada alamat 000H spi(040); spi(000); spi(000); spi(0xAA); //instruction Byte 2 (alamat) //instruction Byte 3 (alamat) //instruction Byte 4 (Data = AAH)

//Load Program Memory(Flash) : High byte //data yang ditulis 33H pada alamat 000H spi(048); spi(000); spi(000); spi(033); //instruction Byte 2 (alamat) //instruction Byte 3 (alamat) //instruction Byte 4 Data = 33H)

//Write Program Memory(Flash) spi(0x4C); spi(000); spi(000); spi(000); delay_ms(5); while(1){ //instruction Byte 2 (alamat) //instruction Byte 3(alamat) //instruction Byte 4

delay_ms(60); /*read Program Memory(flash) : High Byte Data yang dibaca pada alamat 000H*/ spi(028); spi(000); //instruction Byte 2 (alamat) spi(000); //instruction Byte 3 (alamat) data=spi(0); //instruction Byte 4 (Baca Data) printf(string,hi,data); putchar(0x0D); putchar(0x0A); delay_ms(60); //read program memory(flash): low byte data yang dibaca pada alamat 000H spi(020); //instruction Byte 2 (alamat) spi(000); //instruction Byte 3 (alamat) spi(000); //instruction Byte 4 (Baca Data) data=spi(0); printf(string,lo,data); putchar(0x0D); putchar(0x0A); } }

You might also like