Dokumen tersebut memberikan ringkasan singkat tentang modul belajar mikrokontroler Atmega8535. Mikrokontroler ini memiliki fitur seperti 8KB flash memory, 512B EEPROM, dan 512B SRAM serta dapat digunakan untuk berbagai aplikasi seperti pengendali LED, pembacaan input ADC, dan pengendalian LCD. Modul ini menjelaskan cara pemakaian mikrokontroler tersebut dengan menggunakan perangkat keras dan perangkat lunak penduk
Konsep rangkaian filter aktif berbasis operational amplifier
Modul ATmega8535 by muhammad kennedy ginting (Universitas Sumatera Utara)
1. 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
2. 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.
3. 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
4. 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
5. 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
6. 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)
7. 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
8. 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
10. 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;
11. 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)
12. 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):
13. 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)
14. 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
15. 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;
16. 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);
17. 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);
};
}
18. 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);
19. 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)
20. 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);
};
}
22. 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
23. 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
24. 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
25. 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
26. 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
27. 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
28. 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