modul atmega8535 by muhammad kennedy ginting (universitas sumatera utara)
Post on 22-Nov-2014
4.273 Views
Preview:
DESCRIPTION
TRANSCRIPT
Modul Belajar Atmega8535 by Kennedy 2013
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’)
Source : depokinstrument.com Page 1
Gambar 1. Contoh Mikrokontroler AVR
Modul Belajar Atmega8535 by Kennedy 2013
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.
Source : depokinstrument.com Page 2
Modul Belajar Atmega8535 by Kennedy 2013
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
Source : depokinstrument.com Page 3
Gambar 2. Atmega 8535
Modul Belajar Atmega8535 by Kennedy 2013
Capture Mode
Real Time Counter (RTC) dengan Osilator yang terpisah
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
Source : depokinstrument.com Page 4
Modul Belajar Atmega8535 by Kennedy 2013
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.
Source : depokinstrument.com Page 5
Gambar 3. Skematik Sismin Atmega8535 dengan Led Controller
Modul Belajar Atmega8535 by Kennedy 2013
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).
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 berkedipPortc = 0 ‘Nilai desimal 0 = seluruh pin Portc berlogika 0 = LED MENYALAWait 1 ‘Waktu tunda = 1 detikPortc = 255 ‘Nilai desimal 255 = seluruh pin Portc berlogika 1 = LED PADAMWait 1
Portc = &B1111_1110 ‘LED L0 = menyala (&B = Biner)
DoRotate Portc , Left , 1 ‘Data pada Portc digeser ke kiri sebanyak 1-bitWaitms 500 ‘Tunda selama 500msLoop ‘Loop seterusnyaEnd
*Modul Depok Instruments yang Memudahkan Pembelajaran:
Source : depokinstrument.com Page 6
Modul Belajar Atmega8535 by Kennedy 2013
DI-Smart AVR System
DI-Smart AVR ISP
DI-Low Cost USB AVR ISP (USB AVR Downloader)
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.
Source : depokinstrument.com Page 7Gambar 4. Skematik Sismin Atmega8535 untuk membaca Input ADC
Modul Belajar Atmega8535 by Kennedy 2013
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
Source : depokinstrument.com Page 8
Modul Belajar Atmega8535 by Kennedy 2013
Start AdcDim Data_adc As Word ‘memesan variable Data_adc bertipe word
Do
‘Data adc pada kanal-0 (PORTA.0) disimpan dalam variabel Data_adcData_adc = Getadc(0)
‘Kirim Data_adc ke serial port,‘chr(13) meletakkan kursor pada posisi paling kiri tampilanPrint Data_adc ; Chr(13);
Waitms 500 ‘Tunda selama 500ms (0.5 detik)
Loop End
PROGRAM CVAVR:
/*****************************************************This program was produced by theCodeWizardAVR V2.03.5 EvaluationAutomatic Program Generator© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :Version :Date : 20/01/2011Author : Freeware, for evaluation and non-commercial use onlyCompany :Comments:
Chip type : ATmega8535Program type : ApplicationClock frequency : 8,000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 128*****************************************************/
#include <mega8535.h>
// Standard Input/Output functions#include <stdio.h>
Source : depokinstrument.com Page 9
Modul Belajar Atmega8535 by Kennedy 2013
#include <delay.h>
#define ADC_VREF_TYPE 0×00
// Read the AD conversion resultunsigned int read_adc(unsigned char adc_input){ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the ADC input voltagedelay_us(10);// Start the AD conversionADCSRA|=0×40;// Wait for the AD conversion to completewhile ((ADCSRA & 0×10)==0);ADCSRA|=0×10;return ADCW;}
// Declare your global variables hereunsigned 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=TPORTA=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: 9600UCSRA=0×00;UCSRB=0×08;UCSRC=0×86;UBRRH=0×00;UBRRL=0×33;
// Analog Comparator initialization// Analog Comparator: Off
Source : depokinstrument.com Page 10
Modul Belajar Atmega8535 by Kennedy 2013
// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0×80;SFIOR=0×00;
// ADC initialization// ADC Clock frequency: 921,600 kHz// ADC Voltage Reference: AREF pin// ADC High Speed Mode: Off// ADC Auto Trigger Source: NoneADMUX=ADC_VREF_TYPE & 0xff;ADCSRA=0×83;SFIOR&=0xEF;
while (1){// Place your code heredataadc=read_adc(0);printf(“%d\r\n”,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)
Source : depokinstrument.com Page 11
Modul Belajar Atmega8535 by Kennedy 2013
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.
Source : depokinstrument.com Page 12
Modul Belajar Atmega8535 by Kennedy 2013
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):
$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 16X2Const _lcdport = Portb ‘LCD port = portbConst _lcdddr = DdrbConst _lcdin = PinbConst _lcd_e = 2 ‘LCD enable = portb.2Const _lcd_rw = 1 ‘LCD rw = portb.2Const _lcd_rs = 0 ‘LCD rs = portb.2
Cursor Off
Do ‘Looping Forever
Cls ‘bersihkan layar LcdWaitms 500 ‘tunda 500ms
Lcd ” Smart LCD16X2 ” ‘” Smart LCD16X2 ” di ‘baris atasLowerline ‘set Cursor di kolom ‘paling kiri, baris ‘bawahLcd “DepokInstruments” ‘”DepokInstruments” di ‘baris bawahWaitms 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)
Source : depokinstrument.com Page 13
Modul Belajar Atmega8535 by Kennedy 2013
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 hereunsigned 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=TPORTA=0×00;DDRA=0×00;
Source : depokinstrument.com Page 14
Modul Belajar Atmega8535 by Kennedy 2013
// 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=TPORTB=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=TPORTC=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=TPORTD=0×00;DDRD=0×00;
// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: Timer 0 Stopped// Mode: Normal top=FFh// OC0 output: DisconnectedTCCR0=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: OffTCCR1A=0×00;TCCR1B=0×00;TCNT1H=0×00;TCNT1L=0×00;ICR1H=0×00;
Source : depokinstrument.com Page 15
Modul Belajar Atmega8535 by Kennedy 2013
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: DisconnectedASSR=0×00;TCCR2=0×00;TCNT2=0×00;OCR2=0×00;
// External Interrupt(s) initialization// INT0: Off// INT1: Off// INT2: OffMCUCR=0×00;MCUCSR=0×00;
// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0×00;
// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0×80;SFIOR=0×00;
// I2C Bus initializationi2c_init();
// DS1307 Real Time Clock initialization// Square wave output on pin SQW/OUT: Off// SQW/OUT pin state: 0rtc_init(0,0,0);
// LCD module initializationlcd_init(20);
/*****setup time and date*****/jm=12;mn=11;dt=00;rtc_set_time(jm,mn,dt);
Source : depokinstrument.com Page 16
Modul Belajar Atmega8535 by Kennedy 2013
tg=26;bl=10;th=11;rtc_set_date(tg,bl,th);/*****************************/
while (1){// Place your code herertc_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);
sprintf(bstr,”Date %02d-%02d-%02d”,tg,bl,th);lcd_gotoxy(0,1);lcd_puts(bstr);};}
Source : depokinstrument.com Page 17
Modul Belajar Atmega8535 by Kennedy 2013
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 herechar 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 penekananif (pinkey.0==0) buffer=’1′;else if (pinkey.1==0) buffer=’2′;else if (pinkey.2==0) buffer=’3′;
Source : depokinstrument.com Page 18
Modul Belajar Atmega8535 by Kennedy 2013
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);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
Source : depokinstrument.com Page 19
Modul Belajar Atmega8535 by Kennedy 2013
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=PPORTC=0xFF;DDRC=0xF0;
// LCD module initializationlcd_init(16);
//program utama menampilkan penekanan tombol ke LCDwhile (1)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);};}
Source : depokinstrument.com Page 20
Modul Belajar Atmega8535 by Kennedy 2013
Source : depokinstrument.com Page 21
Modul Belajar Atmega8535 by Kennedy 2013
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
Source : depokinstrument.com Page 22
Modul Belajar Atmega8535 by Kennedy 2013
‘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
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
Source : depokinstrument.com Page 23
Modul Belajar Atmega8535 by Kennedy 2013
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
’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
Source : depokinstrument.com Page 24
Modul Belajar Atmega8535 by Kennedy 2013
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
Calc = Calc + T1c
Calc2 = Tempc – 25
Calc = Calc2 * Calc
Rhlintemp = Calc + Rhlinear
Dis = Fusing(rhlintemp , “##.##”)
Print “Humidity adjusted for temperature = ” ; Dis
’Locate 2 , 1
’Lcd “Humi = ” ; Dis ; ” %”
’Portc = Rhlintemp
’Set Portc.7
’Porta = Rhlintemp
’Set Porta.7
Source : depokinstrument.com Page 25
Modul Belajar Atmega8535 by Kennedy 2013
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
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
Source : depokinstrument.com Page 26
Modul Belajar Atmega8535 by Kennedy 2013
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
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
Source : depokinstrument.com Page 27
Modul Belajar Atmega8535 by Kennedy 2013
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
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
Source : depokinstrument.com Page 28
top related