Category Archives: Pemrograman C AVR Studio

Pemrograman C dgn AVR Studio 4 atau 5

Pemrograman Display 7 Segment dengan SPI MAX7221 dan MAX7219

Pemrograman Display 7 Segmen dengan MAX7221 /MAX7219  via komunikasi  SPI.

Cara paling mudah memprogram display  7 segment adalah  dgn bantuan IC MAX7221 atau MAX7219.  Kita tdk perlu lagi membuat program scanning (program bergantian mengaktifkan digit ) karena semua itu dilakukan oleh ic max7221. Kita hanya mengirim sedikit perintah2 dan data ke ic tsb  via SPI dgn  format yg sudah ditentukan untuk menampilkan data  di 7 segmen. Selain itu kita bisa berhemat kaki IO  microcontroller, karena  max7221 hanya perlu 3 pin dari  microcontroller.

MAx7221 Untuk Display 7 segment dgn SPI

contoh rangkaian 7 segment dgn max7221

Kaki -kaki  SPI pada microcontroller AVR atmega

Pin isp pada Atmega AVR

Pemrograman Max7221

Untuk menampilkan data kita perlu mengirimkan format dibawah ini ke ic max7221 :

Format Data yg dikirim ke Max7221

Keterangan rincian kombinasi bit pada byte  Address gambar diatas sbb

kombinasi byte Adress untuk memilih Digit  yg aktif dan perintah

datasheetmax1

scantable

—-

testtable

Set up/inisialisasi program AVR   untuk memprogram max7221/7219

1.  mejadikan AVR sebagai master SPI, contoh pada codewizard di codevision

cvwizard_spi

2. Enable decoding mode (command 0x09)

3.  Set Limit Scan

4.  Akktifkan display (perintah 0xC)

5. Set angka tiap digit.

Adapun Langkah-langkah mengirim data(angka)  SPI ke max7221  :

1. Buat pin CS menjadi Low

2. Kirim data dengan format data diatas  ( 2 byte)

3. Buat pin CS kembali High

Contoh Code Program dengan   bahasa C AVR Studio:

#include<avr/io.h>
#define MOSI 5   //(PortB.5)  data out
#define SCK 7    //(PortB.7)
#define SS 4     //(PortB.4)

void kirimbyte(unsigned char perintah, unsigned char data)
PORTB =PORTB & ~(1<<SS)  //pin  SS dibuat LOW

//kirim byte pertama (perintah)
SPDR = perintah;
while(!(SPSR & (1<<SPIF));//tunggu transfer 1 byte sampai  selesai

//kirim byte kedua(data)
SPDR = data;
while(!(SPSR & (1<<SPIF)); //tunggu transfer 1 byte sampai  selesai

PORTB =PORTB | (1<<SS);        //pin SS dibuat  High
}

int main(void)
{
//setting SPI
DDRB = (1<<MOSI) | (1<<SCK) | (1<<SS); //set bit Mosi & sck sbg output
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0) //AVR sebagai master SPI

kirimbyte(0x09,0xFF);// mengaktifkan  8 digit 7segmen
//jika cuma 2 digit : kirimbyte(0x9,0x3);

kirimbyte(0x0B,0x08);   //scan (looping) 8 digit
kirimbyte(0x0C,0x07);   //aktifkan Chip

//menampilkan angka

Kirimbyte(0x01,0x8);  //menampilkan angka 8 di digit 1
Kirimbyte(0x02,0x9);  //menampilkan angka 9 di digit 2
Kirimbyte(0x04,0x7);  //menampilkan angka 7 di digit 3
Kirimbyte(0x08,0x5);  //menampilkan angka 5 di digit 4
// dan seterusnya....

while(1);

return 0;

}

Adapun cara pengiriman data melaui SPI dgn Codevision :  SPI(char data)

lebih lengkapnya Anda bisa baca disini dan   disini.

Rangkaian Cascade 

Jika kita ingin membuat dua buah baris  atau lebih display maka kita bisa membuatnya dengan menyambung ic Max7221  atau max7219 secara cascade sbb:

cascademax7221_7219

perhatikan pin chip select(load) kedua ic  disambung . karena memang  kedua ic ini bekerja  secara bersama.

cascaderegister

Referensi:

– Datasheet max7221

-microcontroller AVR C & asembly, muhammmad ali mazidi

Contoh Program Serial komunikasi AVR USART dgn Interupsi pada AVR Studio

Teory dasar USART ada disini : https://pccontrol.wordpress.com/2013/07/04/pengetahuan-dasar-pemrograman-usart-serial-komunikasi-avr-microcontroller/

/*
* AVRGCC5.c
*
* Created: 5/9/2011 9:25:11 AM
* Author: PCcontrol
*/

#include

void inisialisasi_UART (void)
{
UCSRB = (1<<TXEN) | (1<<RXEN)|(1<<RXCIE);
UCSRC = (1<<UCSZ1) | (1<<UCSZ0) | ( 1<<URSEL);
UBRRL =0x33;
}

ISR(USART_RXC_vect)
{
if(UDR=’a’)      // jika data yg diterima = a maka balas dengan mengirm  “ok”
{
kirim_data(‘o’);
kirim_data(‘k’);
kirim_data(‘\r’); // enter = cr lf
kirim_data(‘\n’);
}

}

void kirim_data (char data)
{
while(! (UCSRA & (1<<UDRE) ));
UDR = data;
}

int main(void)
{

inisialisasi_UART();

while(1)
{
//TODO:: Please write your application code
//program utama disini

}

return 0;

}

Menghitung nilai UBRR

Rumus mencari : baudrate = ( Freq_xtal / 16(UBRR+1) )

nilai baudrate yang kita inginkan tergantung Frekwensi Xtal dan nilai register UBRR.
jika kita tahu nilai Xtal dan baudrate yang kita nginkan maka nilai UBRR yg mesti
kita cari dengan rumus sbb:
UBRR =(Freq_Xtal/(16(baudrate)))-1.

jadi jika diketahui nilai Frekwensi Xtal = 8 Mhz dan baudrate 9600 maka
UBBR =(8000000/(16(9600)))-1 =51,08 = 51 (desimal) atau 33 hexa.

Contoh Pemrograman Serial dengan AVR studio

 
/*
 * AVRGCC5.c
 *
 * Created: 5/9/2011 9:25:11 AM
 *  Author: pccontrol
Xtal = 8 Mhz , baud rate = 9600 bps , data = 8 bit
 */ 

#include <avr/io.h>

void inisialisasi_UART (void)
{
UCSRB = (1<<TXEN);
UCSRC = (1<<UCSZ1) | (1<<UCSZ0) | ( 1<<URSEL);
UBRRL =0x33;
}

void kirim_data (char huruf)
{
while(! (UCSRA & (1<<UDRE) ));
UDR = huruf;
}

int main(void)
{
	inisialisasi_UART();

    while(1)
    {
        //TODO:: Please write your application code
    kirim_data('a');
    }

return 0;
}

Menghitung nilai UBRR

Rumus mencari : baudrate = ( Freq_xtal / 16(UBRR+1) )

nilai baudrate yang kita inginkan tergantung Frekwensi Xtal dan nilai register UBRR.
jika kita tahu nilai Xtal dan baudrate yang kita nginkan maka nilai UBRR yg mesti
kita cari dengan rumus sbb:
UBRR =(Freq_Xtal/(16(baudrate)))-1.

jadi jika diketahui nilai Frekwensi Xtal = 8 Mhz dan baudrate 9600 maka
UBBR =(8000000/(16(9600)))-1 =51,08 = 51 (desimal) atau 33 hexa.

Latihan AVR Studio 5 : Project Pertama ku !…

Langkah Langkah

1. Buka menu New->Project

Gambar1. Buat Project baru

2. Pilih Template

Gambar2

3. Pilih Jenis Microcontroller

Gambar3

4. Template sudah jadi, siap untuk membuat program

Gambar4

5. Menambahkan Kode Program

Gambar5

6. Build Solution (Compile program)

Gambar6

7. Men Debug Program / Simulasikan Hasil

Gambar7

8. Pilih Simulator

Gambar8

9. Tampilkan Jendela Simulasi Port

Gambar9

10. Lihat Hasil dengan nekan tombol F11 berulang ulang.

Gambar10

11. File *.Hex Hasil Compile

Gambar11