Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 1
AVR “The Introduction”
AVR adalah single-chip mikrokontroler ber-arsitektur 8-bit RISC yang
dikembangkan oleh Atmel pada tahun 1996.
RISC, Reduced Instruction Set Computer, adalah teknologi kombinasi antara
hardware (perangkat keras) dan software (perangkat lunak) pada mikrokontroler /
mikroprosesor yang bertujuan untuk mempercepat mikrokontroler / mikroprosesor
dalam melaksanakan suatu instruksi. Dalam RISC, suatu instruksi dibuat
sederhana agar CPU dalam mikrokontroler / mikroprosesor dapat melaksanakan
instruksi tersebut dengan hanya 1-clock oscillator, yang berarti lebih cepat dan
lebih efisien dibandingkan teknologi pendahulunya CISC, Complex Instruction
Set Computer.
Diyakini bahwa dasar dari arsitektur AVR pada awalnya disusun oleh dua
mahasiswa dari Norwegian Institute of Technology (NTH), Alf-Egil Bogen dan
Vegard Wollan.
Arsitektur mikrokontroler AVR kemudian dibeli dan dikembangkan oleh Atmel.
Namun menurut Atmel, nama AVR tidak memiliki makna secara bahasa dan
bukanlah singkatan dari apapun.
Salah satu keluaran pertama dari produk mikrokontroler AVR milik Atmel yang
dijual bebas adalah AT90S8515, yang merupakan chip dengan kemasan 40-pin
DIP dengan pin I/O yang sama persis dengan mikrokontroler pendahulunya 8051,
hanya saja memiliki aktivasi RESET yang berlawan (8051 memiliki aktivasi
RESET dengan logika „1‟, sedangkan AT90S8515 aktivasi RESET berlogika „0‟)
Gambar 1. Contoh Mikrokontroler AVR
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 2
Mikrokontroler AVR secara umum dibagi menjadi 4 keluarga:
tinyAVR; seri ATtiny
o 0.5–8 kB memori program
o 6–32-pin pada chip-nya
megaAVR; seri ATmega
o 4–256 kB memori program
o 28–100-pin pada chip-nya
XMEGA; seri ATxmega
o 16–384 kB memori program
o 44–64–100-pin pada chip-nya
Aplication specific AVR; AVR dengan aplikasi khusus
o megaAVR dengan fitur khusus yang tidak ditemukan di keluarga
AVR yang lainya, seperti kendali LCD, kendali USB, dll.
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 3
AVR “ATmega8535″
ATmega8535. Notasi tersebut adalah
representasi dari sebuah mikrokontroler yang
merupakan salah satu anggota keluarga AVR.
Adalah ATMEL, perusahaan yang
memproduksinya. Dengan arsitektur 8-Bit RISC
berdaya rendah (Low-Power), dan fitur-fitur
unggulan lainnya, ATmega8535 sangat efisien
dan efektif untuk dijadikan pengendali utama dalam suatu sistem kendali.
ATmega8535 memiliki kembaran, yaitu ATmega8535L. Perbedaannya hanya
terletak dari besar minimal tegangan sumber yang diperlukan untuk berfungsi dan
kecepatan maksimal dari tiap chip tersebut, seperti yang terlihat pada “Fitur-Fitur
Mikrokontroler AVR ATmega8535(L)”:
Fitur-Fitur Mikrokontroler AVR ATmega8535(L):
130 instruksi dengan mayoritas hanya 1 clock-cycle
100,000 kali kemampuan program-ulang
32 x 8-bit register (r0 – r31)
8K Byte Flash-ROM
512 Byte EEPROM
512 Byte Internal SRAM
4 x 8-bit Programmable I/O (Port A, Port B, Port C, Port D)
8-Kanal ADC 10-bit pada Port A
Dua buah 8-bit Timer/Counters dengan Separate Prescalers dan Compare Modes
Satu buah 16-bit Timer/Counter dengan Separate Prescalers, Compare Mode, dan
Capture Mode
Real Time Counter (RTC) dengan Osilator yang terpisah
Gambar 2. Atmega 8535
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 4
4-Kanal PWM
Programmable Serial USART
Master/Slave SPI Serial Interface
• Tegangan Sumber
– 2.7 – 5.5V untuk ATmega8535L
– 4.5 – 5.5V untuk ATmega8535
• Kecepatan Maksimal
– 0 – 8 MHz untuk ATmega8535L
– 0 – 16 MHz untuk ATmega8535
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 5
AVR “LED Control”
Pada dasarnya setiap mikrokontroler memiliki bahasa dasar atau ASSEMBLER
yang khusus diperuntukkan baginya. Begitu-pun dengan AVR. Namun
berdasarkan pandangan kami, bahasa ASSEMBLER AVR lebih rumit untuk
dipelajari dibandingkan dengan bahasa yang tingkatannya lebih tinggi, seperti
bahasa “Basic” ataupun bahasa “C”. Karena itu, penjelasan kali ini adalah
penggunaan bahasa “Basic” dengan menggunakan “BASCOM” sebagai program
compiler-nya.
Materi kali ini adalah pengendalian 8 buah LED yang dirangkaikan pada
PORTC dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L),
ATmega163(L), ATmega323(L)) seperti yang terlihat pada gambar berikut.
Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami DI-
Smart AVR System sebagai media praktik. Adapun langkah-langkah dalam
pembuatan sistemnya adalah sebagai berikut:
1. Modul yang dibutuhkan DI-Smart AVR System. (Merangkai komponen-
komponen sesuai dengan gambar skematik rangkaian).
Gambar 3. Skematik Sismin Atmega8535 dengan Led Controller
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 6
2. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada
kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam. (Jika
anda menyusun dari awal, maka pastikan sistem mendapatkan tegangan 5V [VCC
= 5V]).
3. Atur jumper JP3 pada posisi “LED CONNECTED” pada DI-Smart AVR
System.
4. Unduh skrip program berikut (menggunakan BASCOM):
$regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip
ATmega8535
$crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada
rangkaian = 4MHz
„Jika anda menggunakan DI-Smart AVR System, maka crystal = 8000000 =
8MHz
Config Portc = Output „Deklarasi PORTC sebagai output = keluaran LED
„Membuat seluruh LED berkedip
Portc = 0 „Nilai desimal 0 = seluruh pin Portc berlogika 0 =
LED MENYALA
Wait 1 „Waktu tunda = 1 detik
Portc = 255 „Nilai desimal 255 = seluruh pin Portc berlogika 1 =
LED PADAM
Wait 1
Portc = &B1111_1110 „LED L0 = menyala (&B = Biner)
Do
Rotate Portc , Left , 1 „Data pada Portc digeser ke kiri sebanyak 1-bit
Waitms 500 „Tunda selama 500ms
Loop „Loop seterusnya
End
*Modul Depok Instruments yang Memudahkan Pembelajaran:
DI-Smart AVR System
DI-Smart AVR ISP
DI-Low Cost USB AVR ISP (USB AVR Downloader)
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 7
AVR “Membaca Input ADC dan Ditampilkan
di Komputer”
Materi kali ini adalah membaca input tegangan analog (0-5V) pada PORTA.0
dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L),
ATmega163(L), ATmega323(L)) kemudian mengirimkan data tersebut ke serial
komputer (DB9) untuk dibaca. Rangkaian yang diperlukan seperti yang terlihat
pada gambar berikut.
Gambar 4. Skematik Sismin Atmega8535 untuk membaca Input ADC
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 8
Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami, DI-
Smart AVR System, sebagai media praktik. Adapun langkah-langkah dalam
pembuatan sistemnya adalah sebagai berikut:
1. Modul yang dibutuhkan DI-Smart AVR System, DI-Smart Extension
Board, dan DI-Cable Serial. (Merangkai komponen-komponen sesuai
dengan gambar skematik rangkaian).
2. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada
kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam.
(Jika anda menyusun dari awal, maka pastikan sistem mendapatkan
tegangan 5V [VCC = 5V]).
3. Hubungkan DI-Smart Extension Board dengan PORTA DI-Smart AVR
System.
4. Hubungkan input analog dengan salah satu terminal pada DI-Smart
Extension Board (pada contoh digunakan terminal PORTA.0).
5. Hubungkan DI-Cable Serial dengan port serial dari DI-Smart AVR System
dan komputer.
6. Atur jumper JP1 pada posisi “RXD SERIAL PORT”.
7. Atur jumper JP2 pada posisi “TXD SERIAL PORT”.
8. Aktifkan program Hyper Terminal pada PC/LAPTOP, baudrate = 9600
bps.
9. Unduh skrip program berikut (menggunakan BASCOM atau yang
CVAVR):
PROGRAM BASCOM:
$regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip ATmega8535
$crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada
rangkaian = 4MHz
„Jika anda menggunakan DI-Smart AVR System, maka crystal = 11059200 =
11.0592MHz
$baud = 9600 „penge-set-an baudrate, dan yang digunakan adalah 9600
bps
„inisialisasi ADC:
Config Adc = Single , Prescaler = Auto
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 9
Start Adc
Dim Data_adc As Word „memesan variable Data_adc bertipe word
Do
„Data adc pada kanal-0 (PORTA.0) disimpan dalam variabel Data_adc
Data_adc = Getadc(0)
„Kirim Data_adc ke serial port,
„chr(13) meletakkan kursor pada posisi paling kiri tampilan
Print Data_adc ; Chr(13);
Waitms 500 „Tunda selama 500ms (0.5 detik)
Loop
End
PROGRAM CVAVR:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.5 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 20/01/2011
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega8535
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 10
#define ADC_VREF_TYPE 0Ă—00
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0Ă—40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0Ă—10)==0);
ADCSRA|=0Ă—10;
return ADCW;
}
// Declare your global variables here
unsigned int dataadc;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0Ă—00;
DDRA=0xff;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0Ă—00;
UCSRB=0Ă—08;
UCSRC=0Ă—86;
UBRRH=0Ă—00;
UBRRL=0Ă—33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0Ă—80;
SFIOR=0Ă—00;
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 11
// ADC initialization
// ADC Clock frequency: 921,600 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0Ă—83;
SFIOR&=0xEF;
while (1)
{
// Place your code here
dataadc=read_adc(0);
printf(“%drn”,dataadc);
delay_ms(500);
};
}
*Modul Depok Instruments yang Memudahkan Pembelajaran:
DI-Smart AVR System
DI-Smart Extension Board
DI-Smart AVR ISP
DI-Low Cost USB AVR ISP (USB AVR Downloader)
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 12
AVR “Menampilkan Karakter ke LCD”
Materi kali ini adalah pengendalian LCD 16X2 karakter yang dirangkaikan pada
PORTB dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L),
ATmega163(L), ATmega323(L)) seperti yang terlihat pada gambar berikut.
Gambar 5. Skematik Sismin Atmega8535 untuk menampilkan karakter ke LCD
Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami DI-
Smart AVR System dan DI-Smart LCD16X2 Board sebagai media praktik.
Adapun langkah-langkah dalam pembuatan sistemnya adalah sebagai berikut:
1. Modul yang dibutuhkan DI-Smart AVR System dan DI-Smart LCD16X2
Board. (Merangkai komponen-komponen sesuai dengan gambar skematik
rangkaian).
2. Hubungkan DI-Smart LCD16X2 Board pada PORTC DI-Smart AVR
System.
3. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada
kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam.
(Jika anda menyusun dari awal, maka pastikan sistem mendapatkan
tegangan 5V [VCC = 5V]).
4. Unduh skrip program berikut (menggunakan BASCOM):
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 13
$regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip ATmega8535
$crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada
rangkaian = 4MHz
„Jika anda menggunakan DI-Smart AVR System, maka crystal = 8000000 =
8MHz
Config Lcd = 16 * 2 „inisialisasi LCD 16X2
Const _lcdport = Portb „LCD port = portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2 „LCD enable = portb.2
Const _lcd_rw = 1 „LCD rw = portb.2
Const _lcd_rs = 0 „LCD rs = portb.2
Cursor Off
Do „Looping Forever
Cls „bersihkan layar Lcd
Waitms 500 „tunda 500ms
Lcd ” Smart LCD16X2 ” „” Smart LCD16X2 ” di „baris atas
Lowerline „set Cursor di kolom „paling kiri, baris „bawah
Lcd “DepokInstruments” „”DepokInstruments” di „baris bawah
Waitms 1000 „delay 1000ms
Loop
End
*Modul Depok Instruments yang Memudahkan Pembelajaran:
DI-Smart AVR System
DI-Smart LCD16X2 Board
DI-Smart AVR ISP
DI-Low Cost USB AVR ISP (USB AVR Downloader)
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 14
Source Code CVAVR for RTC DS1307
#include <mega8535.h>
#include <stdio.h>
// I2C Bus functions
#asm
.equ __i2c_port=0Ă—12 ;PORTD
.equ __sda_bit=5
.equ __scl_bit=4
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0Ă—18 ;PORTB
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned char jm, mn, dt, tg, bl, th, bstr[16];
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0Ă—00;
DDRA=0Ă—00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0Ă—00;
DDRB=0Ă—00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 15
PORTC=0Ă—00;
DDRC=0Ă—00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0Ă—00;
DDRD=0Ă—00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0Ă—00;
TCNT0=0Ă—00;
OCR0=0Ă—00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0Ă—00;
TCCR1B=0Ă—00;
TCNT1H=0Ă—00;
TCNT1L=0Ă—00;
ICR1H=0Ă—00;
ICR1L=0Ă—00;
OCR1AH=0Ă—00;
OCR1AL=0Ă—00;
OCR1BH=0Ă—00;
OCR1BL=0Ă—00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0Ă—00;
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 16
TCCR2=0Ă—00;
TCNT2=0Ă—00;
OCR2=0Ă—00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0Ă—00;
MCUCSR=0Ă—00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0Ă—00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0Ă—80;
SFIOR=0Ă—00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
// LCD module initialization
lcd_init(20);
/*****setup time and date*****/
jm=12;mn=11;dt=00;
rtc_set_time(jm,mn,dt);
tg=26;bl=10;th=11;
rtc_set_date(tg,bl,th);
/*****************************/
while (1)
{
// Place your code here
rtc_get_time(&jm,&mn,&dt);
rtc_get_date(&tg,&bl,&th);
sprintf(bstr,”Time %02d:%02d:%02d”,jm,mn,dt);
lcd_gotoxy(0,0);
lcd_puts(bstr);
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 17
sprintf(bstr,”Date %02d-%02d-%02d”,tg,bl,th);
lcd_gotoxy(0,1);
lcd_puts(bstr);
};
}
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 18
Source Code CVAVR For DI-Smart KEY4X4 Input
(KEYPAD 4X4)
#include <mega8535.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0Ă—18 ;PORTB
#endasm
#include <lcd.h>
#define pinkey PINC
#define portkey PORTC
// Declare your global variables here
char datakey, buffer;
//program pembacaaan key apa yang ditekan oleh user
//keypad yang digunakan mengunakan metode scanning
char get_key(void)
{
buffer=‟-';
//portkey=0xFF;
delay_ms(1);
portkey.4=0;
delay_us(1); //untuk memberikan waktu pada mikrokontrolller mencapture
penekanan
if (pinkey.0==0) buffer=‟1′;
else if (pinkey.1==0) buffer=‟2′;
else if (pinkey.2==0) buffer=‟3′;
else if (pinkey.3==0) buffer=‟A';
portkey.4=1;
portkey.5=0;
delay_us(1);
if (pinkey.0==0) buffer=‟4′;
else if (pinkey.1==0) buffer=‟5′;
else if (pinkey.2==0) buffer=‟6′;
else if (pinkey.3==0) buffer=‟B';
portkey.5=1;
portkey.6=0;
delay_us(1);
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 19
if (pinkey.0==0) buffer=‟7′;
else if (pinkey.1==0) buffer=‟8′;
else if (pinkey.2==0) buffer=‟9′;
else if (pinkey.3==0) buffer=‟C';
portkey.6=1;
portkey.7=0;
delay_us(1);
if (pinkey.0==0) buffer=‟*';
else if (pinkey.1==0) buffer=‟0′;
else if (pinkey.2==0) buffer=‟#';
else if (pinkey.3==0) buffer=‟D';
portkey.7=1;
return buffer;
}
//fungsi untuk mendeteksi tombol selesai di tekan
void key_up (void)
{
portkey=0x0F;
delay_us(1);
while (pinkey != 0x0F);
delay_ms(10);
}
void main(void)
{
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0Ă—00;
DDRB=0Ă—00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In
Func0=In
// State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P
PORTC=0xFF;
DDRC=0xF0;
// LCD module initialization
lcd_init(16);
//program utama menampilkan penekanan tombol ke LCD
while (1)
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 20
lcd_clear();
{
// Place your code here
datakey=get_key();
if (datakey != „-‟) lcd_putchar(datakey); // key yang ditekan ditampilkan di LCD
key_up(); // tunggu sd key di-release (dilepas)
delay_ms(100);
};
}
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 21
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 22
Source Code BASCOM-AVR for SHT11
$regfile = “m8535.dat”
$crystal = 11059200
„$lib “lcd4busy.lib”
$baud = 9600
„Const _lcdport = Porta
„Const _lcdddr = Ddra
„Const _lcdin = Pina
„Const _lcd_e = 2
„Const _lcd_rw = 1
„Const _lcd_rs = 0
Ddrc = 255
Portc = 255
Ddra = 255
Porta = 255
„Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 =
Portc.7 , E = Portc.2 , Rs = Portc.3
„Config Lcd = 16 * 2
„Config Adc = Single , Prescaler = Auto , Reference = Avcc
„Start Adc
Dim Ctr As Byte
Dim Dataword As Word
Dim Command As Byte
Dim Dis As String * 20
Dim Calc As Single
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 23
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single
Dim Tempf As Single
Dim A As Word , I As Integer
Sck Alias Portc.0
Dataout Alias Portc.1
Datain Alias Pinc.1
Declare Sub Getit()
Declare Sub Connectionreset
Call Connectionreset
Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = 0.01
Const T2 = 0.00008
„Const T1f = .018
Do
„Cls
„Do „continually read the tempfature and
humidity
Command = &B00000011
Call Getit „Get the temperature, puts result in
“dataword” for us
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 24
‟Tempf = T1f * Dataword
‟Tempf = Tempf – 40
Tempc = T1c * Dataword ‟get celcius for later calculations
and for “the rest of the world”
Tempc = Tempc – 40
Dis = Fusing(tempc , “###.##”)
Print “Temp = ” ; Dis ; “C”
‟Lcd “Temp = ” ; Dis ; Chr(0) ; “C”
‟Portc = Tempc
‟Reset Portc.7
‟Porta = Tempc
‟Reset Porta.0
Waitms 250
‟Waitms 250
Command = &B00000101
Call Getit „get the humidity
Calc = C2 * Dataword
Calc2 = Dataword * Dataword „that “2″ in the datasheet sure
looked like a footnote for a couple days, nope it means “squared”!
Calc2 = C3 * Calc2
Calc = Calc + C1
Rhlinear = Calc + Calc2
Dis = Fusing(rhlinear , “##.##”)
Print “Humidity adjusted for linear = ” ; Dis
Calc = T2 * Dataword
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 25
Calc = Calc + T1c
Calc2 = Tempc – 25
Calc = Calc2 * Calc
Rhlintemp = Calc + Rhlinear
Dis = Fusing(rhlintemp , “##.##”)
Print “Humidity adjusted for temperature = ” ; Dis
Print
‟Locate 2 , 1
‟Lcd “Humi = ” ; Dis ; ” %”
‟Portc = Rhlintemp
‟Set Portc.7
‟Porta = Rhlintemp
‟Set Porta.7
Waitms 250
‟Waitms 250
Cls
Loop
Sub Connectionreset()
Ddrc = &B11111111 „all port b are output
Config Pinc.0 = Output ‟sck
Config Pinc.1 = Output „datain
Set Dataout
For Ctr = 1 To 10
Set Sck
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 26
Waitms 2
Reset Sck
Waitms 2
Next Ctr
Set Sck
Reset Dataout
Reset Sck
Set Sck
Set Dataout
Reset Sck
End Sub
Sub Getit()
Local Datavalue As Word
Local Databyte As Byte
‟start with “transmission start”
Set Sck
Reset Dataout
Reset Sck
Set Sck
Set Dataout
Reset Sck
‟now send the command
Shiftout Dataout , Sck , Command , 1
Ddrc = &B1111_1101 „datain is now input
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 27
Config Pinc.1 = Input „datain
Set Sck „click one more off
Reset Sck
Waitus 10 ‟no idea why, but it doesn‟t work
without it!
Bitwait Pinc.1 , Reset „wait for the chip to have data ready
Shiftin Datain , Sck , Databyte , 1 „get the MSB
Datavalue = Databyte
Ddrc = &B1111_1111
Config Pinc.1 = Output
Reset Dataout „this is the tricky part- Lot‟s of hair
pulling- have to tick the ack!
Set Sck
Reset Sck
Ddrc = &B1111_1101 „datain is now input
Config Pinc.1 = Input
Shiftin Datain , Sck , Databyte , 1 „get the LSB
Shift Datavalue , Left , 8
Datavalue = Datavalue Or Databyte
‟don‟t tick the clock or ack since we don‟t need the CRC value, leave it hanging!
Dataword = Datavalue
Ddrc = &B1111_1111
Config Pinc.1 = Output
Reset Dataout
Set Sck
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 28
Reset Sck
Ddrc = &B1111_1101 „datain is now input
Config Pinc.1 = Input
Shiftin Datain , Sck , Databyte , 1 „not using the CRC value for
now- can‟t figure it out! Anybody know how to impliment?
‟Print “CRC value was – ” ; Databyte
Ddrc = &B1111_1111
Config Pind.1 = Output
Set Dataout
Set Sck
Reset Sck
End Sub

Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)

  • 1.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 1 AVR “The Introduction” AVR adalah single-chip mikrokontroler ber-arsitektur 8-bit RISC yang dikembangkan oleh Atmel pada tahun 1996. RISC, Reduced Instruction Set Computer, adalah teknologi kombinasi antara hardware (perangkat keras) dan software (perangkat lunak) pada mikrokontroler / mikroprosesor yang bertujuan untuk mempercepat mikrokontroler / mikroprosesor dalam melaksanakan suatu instruksi. Dalam RISC, suatu instruksi dibuat sederhana agar CPU dalam mikrokontroler / mikroprosesor dapat melaksanakan instruksi tersebut dengan hanya 1-clock oscillator, yang berarti lebih cepat dan lebih efisien dibandingkan teknologi pendahulunya CISC, Complex Instruction Set Computer. Diyakini bahwa dasar dari arsitektur AVR pada awalnya disusun oleh dua mahasiswa dari Norwegian Institute of Technology (NTH), Alf-Egil Bogen dan Vegard Wollan. Arsitektur mikrokontroler AVR kemudian dibeli dan dikembangkan oleh Atmel. Namun menurut Atmel, nama AVR tidak memiliki makna secara bahasa dan bukanlah singkatan dari apapun. Salah satu keluaran pertama dari produk mikrokontroler AVR milik Atmel yang dijual bebas adalah AT90S8515, yang merupakan chip dengan kemasan 40-pin DIP dengan pin I/O yang sama persis dengan mikrokontroler pendahulunya 8051, hanya saja memiliki aktivasi RESET yang berlawan (8051 memiliki aktivasi RESET dengan logika „1‟, sedangkan AT90S8515 aktivasi RESET berlogika „0‟) Gambar 1. Contoh Mikrokontroler AVR
  • 2.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 2 Mikrokontroler AVR secara umum dibagi menjadi 4 keluarga: tinyAVR; seri ATtiny o 0.5–8 kB memori program o 6–32-pin pada chip-nya megaAVR; seri ATmega o 4–256 kB memori program o 28–100-pin pada chip-nya XMEGA; seri ATxmega o 16–384 kB memori program o 44–64–100-pin pada chip-nya Aplication specific AVR; AVR dengan aplikasi khusus o megaAVR dengan fitur khusus yang tidak ditemukan di keluarga AVR yang lainya, seperti kendali LCD, kendali USB, dll.
  • 3.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 3 AVR “ATmega8535″ ATmega8535. Notasi tersebut adalah representasi dari sebuah mikrokontroler yang merupakan salah satu anggota keluarga AVR. Adalah ATMEL, perusahaan yang memproduksinya. Dengan arsitektur 8-Bit RISC berdaya rendah (Low-Power), dan fitur-fitur unggulan lainnya, ATmega8535 sangat efisien dan efektif untuk dijadikan pengendali utama dalam suatu sistem kendali. ATmega8535 memiliki kembaran, yaitu ATmega8535L. Perbedaannya hanya terletak dari besar minimal tegangan sumber yang diperlukan untuk berfungsi dan kecepatan maksimal dari tiap chip tersebut, seperti yang terlihat pada “Fitur-Fitur Mikrokontroler AVR ATmega8535(L)”: Fitur-Fitur Mikrokontroler AVR ATmega8535(L): 130 instruksi dengan mayoritas hanya 1 clock-cycle 100,000 kali kemampuan program-ulang 32 x 8-bit register (r0 – r31) 8K Byte Flash-ROM 512 Byte EEPROM 512 Byte Internal SRAM 4 x 8-bit Programmable I/O (Port A, Port B, Port C, Port D) 8-Kanal ADC 10-bit pada Port A Dua buah 8-bit Timer/Counters dengan Separate Prescalers dan Compare Modes Satu buah 16-bit Timer/Counter dengan Separate Prescalers, Compare Mode, dan Capture Mode Real Time Counter (RTC) dengan Osilator yang terpisah Gambar 2. Atmega 8535
  • 4.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 4 4-Kanal PWM Programmable Serial USART Master/Slave SPI Serial Interface • Tegangan Sumber – 2.7 – 5.5V untuk ATmega8535L – 4.5 – 5.5V untuk ATmega8535 • Kecepatan Maksimal – 0 – 8 MHz untuk ATmega8535L – 0 – 16 MHz untuk ATmega8535
  • 5.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 5 AVR “LED Control” Pada dasarnya setiap mikrokontroler memiliki bahasa dasar atau ASSEMBLER yang khusus diperuntukkan baginya. Begitu-pun dengan AVR. Namun berdasarkan pandangan kami, bahasa ASSEMBLER AVR lebih rumit untuk dipelajari dibandingkan dengan bahasa yang tingkatannya lebih tinggi, seperti bahasa “Basic” ataupun bahasa “C”. Karena itu, penjelasan kali ini adalah penggunaan bahasa “Basic” dengan menggunakan “BASCOM” sebagai program compiler-nya. Materi kali ini adalah pengendalian 8 buah LED yang dirangkaikan pada PORTC dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L), ATmega163(L), ATmega323(L)) seperti yang terlihat pada gambar berikut. Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami DI- Smart AVR System sebagai media praktik. Adapun langkah-langkah dalam pembuatan sistemnya adalah sebagai berikut: 1. Modul yang dibutuhkan DI-Smart AVR System. (Merangkai komponen- komponen sesuai dengan gambar skematik rangkaian). Gambar 3. Skematik Sismin Atmega8535 dengan Led Controller
  • 6.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 6 2. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam. (Jika anda menyusun dari awal, maka pastikan sistem mendapatkan tegangan 5V [VCC = 5V]). 3. Atur jumper JP3 pada posisi “LED CONNECTED” pada DI-Smart AVR System. 4. Unduh skrip program berikut (menggunakan BASCOM): $regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip ATmega8535 $crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada rangkaian = 4MHz „Jika anda menggunakan DI-Smart AVR System, maka crystal = 8000000 = 8MHz Config Portc = Output „Deklarasi PORTC sebagai output = keluaran LED „Membuat seluruh LED berkedip Portc = 0 „Nilai desimal 0 = seluruh pin Portc berlogika 0 = LED MENYALA Wait 1 „Waktu tunda = 1 detik Portc = 255 „Nilai desimal 255 = seluruh pin Portc berlogika 1 = LED PADAM Wait 1 Portc = &B1111_1110 „LED L0 = menyala (&B = Biner) Do Rotate Portc , Left , 1 „Data pada Portc digeser ke kiri sebanyak 1-bit Waitms 500 „Tunda selama 500ms Loop „Loop seterusnya End *Modul Depok Instruments yang Memudahkan Pembelajaran: DI-Smart AVR System DI-Smart AVR ISP DI-Low Cost USB AVR ISP (USB AVR Downloader)
  • 7.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 7 AVR “Membaca Input ADC dan Ditampilkan di Komputer” Materi kali ini adalah membaca input tegangan analog (0-5V) pada PORTA.0 dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L), ATmega163(L), ATmega323(L)) kemudian mengirimkan data tersebut ke serial komputer (DB9) untuk dibaca. Rangkaian yang diperlukan seperti yang terlihat pada gambar berikut. Gambar 4. Skematik Sismin Atmega8535 untuk membaca Input ADC
  • 8.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 8 Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami, DI- Smart AVR System, sebagai media praktik. Adapun langkah-langkah dalam pembuatan sistemnya adalah sebagai berikut: 1. Modul yang dibutuhkan DI-Smart AVR System, DI-Smart Extension Board, dan DI-Cable Serial. (Merangkai komponen-komponen sesuai dengan gambar skematik rangkaian). 2. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam. (Jika anda menyusun dari awal, maka pastikan sistem mendapatkan tegangan 5V [VCC = 5V]). 3. Hubungkan DI-Smart Extension Board dengan PORTA DI-Smart AVR System. 4. Hubungkan input analog dengan salah satu terminal pada DI-Smart Extension Board (pada contoh digunakan terminal PORTA.0). 5. Hubungkan DI-Cable Serial dengan port serial dari DI-Smart AVR System dan komputer. 6. Atur jumper JP1 pada posisi “RXD SERIAL PORT”. 7. Atur jumper JP2 pada posisi “TXD SERIAL PORT”. 8. Aktifkan program Hyper Terminal pada PC/LAPTOP, baudrate = 9600 bps. 9. Unduh skrip program berikut (menggunakan BASCOM atau yang CVAVR): PROGRAM BASCOM: $regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip ATmega8535 $crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada rangkaian = 4MHz „Jika anda menggunakan DI-Smart AVR System, maka crystal = 11059200 = 11.0592MHz $baud = 9600 „penge-set-an baudrate, dan yang digunakan adalah 9600 bps „inisialisasi ADC: Config Adc = Single , Prescaler = Auto
  • 9.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 9 Start Adc Dim Data_adc As Word „memesan variable Data_adc bertipe word Do „Data adc pada kanal-0 (PORTA.0) disimpan dalam variabel Data_adc Data_adc = Getadc(0) „Kirim Data_adc ke serial port, „chr(13) meletakkan kursor pada posisi paling kiri tampilan Print Data_adc ; Chr(13); Waitms 500 „Tunda selama 500ms (0.5 detik) Loop End PROGRAM CVAVR: /***************************************************** This program was produced by the CodeWizardAVR V2.03.5 Evaluation Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 20/01/2011 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega8535 Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h>
  • 10.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 10 #define ADC_VREF_TYPE 0Ă—00 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0Ă—40; // Wait for the AD conversion to complete while ((ADCSRA & 0Ă—10)==0); ADCSRA|=0Ă—10; return ADCW; } // Declare your global variables here unsigned int dataadc; void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0Ă—00; DDRA=0xff; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0Ă—00; UCSRB=0Ă—08; UCSRC=0Ă—86; UBRRH=0Ă—00; UBRRL=0Ă—33; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0Ă—80; SFIOR=0Ă—00;
  • 11.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 11 // ADC initialization // ADC Clock frequency: 921,600 kHz // ADC Voltage Reference: AREF pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0×83; SFIOR&=0xEF; while (1) { // Place your code here dataadc=read_adc(0); printf(“%drn”,dataadc); delay_ms(500); }; } *Modul Depok Instruments yang Memudahkan Pembelajaran: DI-Smart AVR System DI-Smart Extension Board DI-Smart AVR ISP DI-Low Cost USB AVR ISP (USB AVR Downloader)
  • 12.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 12 AVR “Menampilkan Karakter ke LCD” Materi kali ini adalah pengendalian LCD 16X2 karakter yang dirangkaikan pada PORTB dari ATmega8535(L) (bisa pula untuk IC ATmega16(L), ATmega32(L), ATmega163(L), ATmega323(L)) seperti yang terlihat pada gambar berikut. Gambar 5. Skematik Sismin Atmega8535 untuk menampilkan karakter ke LCD Untuk memudahkan pembelajaran, sebaiknya menggunakan modul kami DI- Smart AVR System dan DI-Smart LCD16X2 Board sebagai media praktik. Adapun langkah-langkah dalam pembuatan sistemnya adalah sebagai berikut: 1. Modul yang dibutuhkan DI-Smart AVR System dan DI-Smart LCD16X2 Board. (Merangkai komponen-komponen sesuai dengan gambar skematik rangkaian). 2. Hubungkan DI-Smart LCD16X2 Board pada PORTC DI-Smart AVR System. 3. Hubungkan adaptor DC pada JACK-DC. Tetapkan tegangan adaptor pada kisaran 9 s/d 12 VDC. Pastikan kutub positif berada pada bagian dalam. (Jika anda menyusun dari awal, maka pastikan sistem mendapatkan tegangan 5V [VCC = 5V]). 4. Unduh skrip program berikut (menggunakan BASCOM):
  • 13.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 13 $regfile = “m8535.dat” „Lokasi source code BASCOM untuk chip ATmega8535 $crystal = 4000000 „Sesuai dengan xtal0 = crystal yang digunakan pada rangkaian = 4MHz „Jika anda menggunakan DI-Smart AVR System, maka crystal = 8000000 = 8MHz Config Lcd = 16 * 2 „inisialisasi LCD 16X2 Const _lcdport = Portb „LCD port = portb Const _lcdddr = Ddrb Const _lcdin = Pinb Const _lcd_e = 2 „LCD enable = portb.2 Const _lcd_rw = 1 „LCD rw = portb.2 Const _lcd_rs = 0 „LCD rs = portb.2 Cursor Off Do „Looping Forever Cls „bersihkan layar Lcd Waitms 500 „tunda 500ms Lcd ” Smart LCD16X2 ” „” Smart LCD16X2 ” di „baris atas Lowerline „set Cursor di kolom „paling kiri, baris „bawah Lcd “DepokInstruments” „”DepokInstruments” di „baris bawah Waitms 1000 „delay 1000ms Loop End *Modul Depok Instruments yang Memudahkan Pembelajaran: DI-Smart AVR System DI-Smart LCD16X2 Board DI-Smart AVR ISP DI-Low Cost USB AVR ISP (USB AVR Downloader)
  • 14.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 14 Source Code CVAVR for RTC DS1307 #include <mega8535.h> #include <stdio.h> // I2C Bus functions #asm .equ __i2c_port=0Ă—12 ;PORTD .equ __sda_bit=5 .equ __scl_bit=4 #endasm #include <i2c.h> // DS1307 Real Time Clock functions #include <ds1307.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0Ă—18 ;PORTB #endasm #include <lcd.h> // Declare your global variables here unsigned char jm, mn, dt, tg, bl, th, bstr[16]; void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0Ă—00; DDRA=0Ă—00; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0Ă—00; DDRB=0Ă—00; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  • 15.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 15 PORTC=0Ă—00; DDRC=0Ă—00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0Ă—00; DDRD=0Ă—00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0Ă—00; TCNT0=0Ă—00; OCR0=0Ă—00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0Ă—00; TCCR1B=0Ă—00; TCNT1H=0Ă—00; TCNT1L=0Ă—00; ICR1H=0Ă—00; ICR1L=0Ă—00; OCR1AH=0Ă—00; OCR1AL=0Ă—00; OCR1BH=0Ă—00; OCR1BL=0Ă—00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0Ă—00;
  • 16.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 16 TCCR2=0×00; TCNT2=0×00; OCR2=0×00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0×00; MCUCSR=0×00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0×80; SFIOR=0×00; // I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0 rtc_init(0,0,0); // LCD module initialization lcd_init(20); /*****setup time and date*****/ jm=12;mn=11;dt=00; rtc_set_time(jm,mn,dt); tg=26;bl=10;th=11; rtc_set_date(tg,bl,th); /*****************************/ while (1) { // Place your code here rtc_get_time(&jm,&mn,&dt); rtc_get_date(&tg,&bl,&th); sprintf(bstr,”Time %02d:%02d:%02d”,jm,mn,dt); lcd_gotoxy(0,0); lcd_puts(bstr);
  • 17.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 17 sprintf(bstr,”Date %02d-%02d-%02d”,tg,bl,th); lcd_gotoxy(0,1); lcd_puts(bstr); }; }
  • 18.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 18 Source Code CVAVR For DI-Smart KEY4X4 Input (KEYPAD 4X4) #include <mega8535.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0×18 ;PORTB #endasm #include <lcd.h> #define pinkey PINC #define portkey PORTC // Declare your global variables here char datakey, buffer; //program pembacaaan key apa yang ditekan oleh user //keypad yang digunakan mengunakan metode scanning char get_key(void) { buffer=‟-'; //portkey=0xFF; delay_ms(1); portkey.4=0; delay_us(1); //untuk memberikan waktu pada mikrokontrolller mencapture penekanan if (pinkey.0==0) buffer=‟1′; else if (pinkey.1==0) buffer=‟2′; else if (pinkey.2==0) buffer=‟3′; else if (pinkey.3==0) buffer=‟A'; portkey.4=1; portkey.5=0; delay_us(1); if (pinkey.0==0) buffer=‟4′; else if (pinkey.1==0) buffer=‟5′; else if (pinkey.2==0) buffer=‟6′; else if (pinkey.3==0) buffer=‟B'; portkey.5=1; portkey.6=0; delay_us(1);
  • 19.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 19 if (pinkey.0==0) buffer=‟7′; else if (pinkey.1==0) buffer=‟8′; else if (pinkey.2==0) buffer=‟9′; else if (pinkey.3==0) buffer=‟C'; portkey.6=1; portkey.7=0; delay_us(1); if (pinkey.0==0) buffer=‟*'; else if (pinkey.1==0) buffer=‟0′; else if (pinkey.2==0) buffer=‟#'; else if (pinkey.3==0) buffer=‟D'; portkey.7=1; return buffer; } //fungsi untuk mendeteksi tombol selesai di tekan void key_up (void) { portkey=0x0F; delay_us(1); while (pinkey != 0x0F); delay_ms(10); } void main(void) { // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0×00; DDRB=0×00; // Port C initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P PORTC=0xFF; DDRC=0xF0; // LCD module initialization lcd_init(16); //program utama menampilkan penekanan tombol ke LCD while (1)
  • 20.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 20 lcd_clear(); { // Place your code here datakey=get_key(); if (datakey != „-‟) lcd_putchar(datakey); // key yang ditekan ditampilkan di LCD key_up(); // tunggu sd key di-release (dilepas) delay_ms(100); }; }
  • 21.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 21
  • 22.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 22 Source Code BASCOM-AVR for SHT11 $regfile = “m8535.dat” $crystal = 11059200 „$lib “lcd4busy.lib” $baud = 9600 „Const _lcdport = Porta „Const _lcdddr = Ddra „Const _lcdin = Pina „Const _lcd_e = 2 „Const _lcd_rw = 1 „Const _lcd_rs = 0 Ddrc = 255 Portc = 255 Ddra = 255 Porta = 255 „Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.3 „Config Lcd = 16 * 2 „Config Adc = Single , Prescaler = Auto , Reference = Avcc „Start Adc Dim Ctr As Byte Dim Dataword As Word Dim Command As Byte Dim Dis As String * 20 Dim Calc As Single
  • 23.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 23 Dim Calc2 As Single Dim Rhlinear As Single Dim Rhlintemp As Single Dim Tempc As Single Dim Tempf As Single Dim A As Word , I As Integer Sck Alias Portc.0 Dataout Alias Portc.1 Datain Alias Pinc.1 Declare Sub Getit() Declare Sub Connectionreset Call Connectionreset Const C1 = -4 Const C2 = 0.0405 Const C3 = -0.0000028 Const T1c = 0.01 Const T2 = 0.00008 „Const T1f = .018 Do „Cls „Do „continually read the tempfature and humidity Command = &B00000011 Call Getit „Get the temperature, puts result in “dataword” for us
  • 24.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 24 ‟Tempf = T1f * Dataword ‟Tempf = Tempf – 40 Tempc = T1c * Dataword ‟get celcius for later calculations and for “the rest of the world” Tempc = Tempc – 40 Dis = Fusing(tempc , “###.##”) Print “Temp = ” ; Dis ; “C” ‟Lcd “Temp = ” ; Dis ; Chr(0) ; “C” ‟Portc = Tempc ‟Reset Portc.7 ‟Porta = Tempc ‟Reset Porta.0 Waitms 250 ‟Waitms 250 Command = &B00000101 Call Getit „get the humidity Calc = C2 * Dataword Calc2 = Dataword * Dataword „that “2″ in the datasheet sure looked like a footnote for a couple days, nope it means “squared”! Calc2 = C3 * Calc2 Calc = Calc + C1 Rhlinear = Calc + Calc2 Dis = Fusing(rhlinear , “##.##”) Print “Humidity adjusted for linear = ” ; Dis Calc = T2 * Dataword
  • 25.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 25 Calc = Calc + T1c Calc2 = Tempc – 25 Calc = Calc2 * Calc Rhlintemp = Calc + Rhlinear Dis = Fusing(rhlintemp , “##.##”) Print “Humidity adjusted for temperature = ” ; Dis Print ‟Locate 2 , 1 ‟Lcd “Humi = ” ; Dis ; ” %” ‟Portc = Rhlintemp ‟Set Portc.7 ‟Porta = Rhlintemp ‟Set Porta.7 Waitms 250 ‟Waitms 250 Cls Loop Sub Connectionreset() Ddrc = &B11111111 „all port b are output Config Pinc.0 = Output ‟sck Config Pinc.1 = Output „datain Set Dataout For Ctr = 1 To 10 Set Sck
  • 26.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 26 Waitms 2 Reset Sck Waitms 2 Next Ctr Set Sck Reset Dataout Reset Sck Set Sck Set Dataout Reset Sck End Sub Sub Getit() Local Datavalue As Word Local Databyte As Byte ‟start with “transmission start” Set Sck Reset Dataout Reset Sck Set Sck Set Dataout Reset Sck ‟now send the command Shiftout Dataout , Sck , Command , 1 Ddrc = &B1111_1101 „datain is now input
  • 27.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 27 Config Pinc.1 = Input „datain Set Sck „click one more off Reset Sck Waitus 10 ‟no idea why, but it doesn‟t work without it! Bitwait Pinc.1 , Reset „wait for the chip to have data ready Shiftin Datain , Sck , Databyte , 1 „get the MSB Datavalue = Databyte Ddrc = &B1111_1111 Config Pinc.1 = Output Reset Dataout „this is the tricky part- Lot‟s of hair pulling- have to tick the ack! Set Sck Reset Sck Ddrc = &B1111_1101 „datain is now input Config Pinc.1 = Input Shiftin Datain , Sck , Databyte , 1 „get the LSB Shift Datavalue , Left , 8 Datavalue = Datavalue Or Databyte ‟don‟t tick the clock or ack since we don‟t need the CRC value, leave it hanging! Dataword = Datavalue Ddrc = &B1111_1111 Config Pinc.1 = Output Reset Dataout Set Sck
  • 28.
    Modul Belajar Atmega8535by Kennedy 2013 Source : depokinstrument.com Page 28 Reset Sck Ddrc = &B1111_1101 „datain is now input Config Pinc.1 = Input Shiftin Datain , Sck , Databyte , 1 „not using the CRC value for now- can‟t figure it out! Anybody know how to impliment? ‟Print “CRC value was – ” ; Databyte Ddrc = &B1111_1111 Config Pind.1 = Output Set Dataout Set Sck Reset Sck End Sub