Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Praktikum Mikrokontoler 2
1. LAPORAN PRAKTIKUM MIKROKONTROLER
2
DISUSUN OLEH :
Nama : MUHAMMAD TAUFIK
Kelas : 2 ELEKTRONIKA B
Tingkat : 2 (Dua)
Semester : 4 ( Empat )
POLITEKNIK MANUFAKTUR NEGERI
BANGKA BELITUNG
2014/2015
Kawasan Industri Air Kantung Sungailiat 33211
Bangka Induk Propinsi Kepulauan Bangka Belitung
Telp : (0717) 431335 ext. 2281, 2126
Fax : (0717) 93585 email : polman@polman-babel.ac.id
http://www.polman-babel.ac.id/
5. if(PINA.0==0){PORTC = 0xEA;}
if(PINA.1==0){PORTC = 0xEB;}
if(PINA.2==0){PORTC = 0xEC;}
if(PINA.3==0){PORTC = 0xEF;}
delay_ms(5);}
}
Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan 7Segment dengan data yang berasal dari PINA dengan
data masukan berasal dari Keypad.
Pada Program keypad kita harus menyeleksi data tiap kolom dan baris dengan logika
low(0) dengan contoh program PORTA=0b11101111/untuk kolom; if(PINA.0==0)/untuk
baris maka kita dapat menggunakan tombol pada kolom 0 pada baris ke 0. Kemudian karena
PORTC = 0xE.. Maka pada keypad pada kolom ke 0 baris ke 0 akan menampilkan data ke
7Segment. Pada program ini tiap tombol pada keypad 4x4 dimasukan dengan tampilan
7Segment dengan data yang berbeda. Maka untuk menggunakan/ menampilkan data pada
saat keypad ditekan maka kita harus memanggil selektor data pada tiap baris dan kolom maka
saat program dijalankan dan tombol ditekan maka akan menampilkan data pada 7Segment
sesuai tombol yang ditekan.
8. Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LCD dengan data yang berasal dari PINA dengan data
masukan berasal dari Keypad.
Pada Program keypad kita ingin membuat Counter Up dan Counter Down dengan
tombol panah atas dan bawah dengan tombol 0 untuk reset. Maka agar kita dapat
menggunakan tombol keypad dengan meyeleksi baris dan kolom keypad sesuai tombol yang
diinginkan. Pada program ini kita mengunakan sub menu naik turun reset dengan naik untuk
proses Counter Up ,turun untuk Counter Down, dan Reset untuk mereset nilai, Di program ini
juga kita menggunakan data i yang tersimpan agar proses looping dapat berulang. Sehingga
pada saat program dijalankan pada menu utama saat tombol panah atas ditekan akan
membaca data sub menu atas dan menampilkan pada LCD Counter Up 0-100. Pada saat
tombol panah bawah diatas maka akan menjalankan perintah sub menu bawah sehingga
menampilkan Counter Down dari i-0 pada LCD dan saat tombol 0 ditekan maka i=0 sehingga
akan menampilkan angka 0 pada LCD.
9. Praktikum 2
Aplikasi ADC dengan Output LED
#include <mega32.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
unsigned char 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|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;}
void main(void)
{PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
10. while (1)
{PORTC = read_adc(0);
delay_ms(1000);};
}
Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LED dengan data yang berasal dari PINA dengan data
ADC
Pada Program ini kita ingin menyalakan LED dengan tegangan yang berasal dari
ADC PINA. Maka agar kita harus menyeting PINA sebagai ADC sehingga saat program
dijalankan maka karena PORTC = read_adc maka Led akan aktif dengan tegangan ADC port
A dimana tegangan tersebut diatur oleh potensiometer. Sehingga nyala LED tergantung dari
tegangan ADC yang berasal dari potensiometer pada PINA.
11. Tugas 2A.1
Menghitung tegangan ADC 8 BIT dan ditampilkan ke LCD
#include <mega32.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
unsigned char nilai[16];
unsigned char bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7;
int data;
unsigned char 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|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;}
void main(void)
{PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
12. // Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
// LCD module initialization
lcd_init(16);
while (1)
{data=read_adc(0);
sprintf(nilai,"D=%4d",data);
lcd_gotoxy(0,0);
lcd_puts(nilai);
delay_ms(100);
sprintf(nilai,"H=%2xH",data);
lcd_gotoxy(8,0);
lcd_puts(nilai);
delay_ms(100);
//BINER
bit0=data%2;
bit1=data/2%2;
bit2=data/4%2;
bit3=data/8%2;
bit4=data/16%2;
bit5=data/32%2;
bit6=data/64%2;
bit7=data/128%2;
lcd_gotoxy(0,1);
lcd_putchar(bit0+0x30);
delay_ms(10);
lcd_gotoxy(1,1);
lcd_putchar(bit1+0x30);
delay_ms(10);
lcd_gotoxy(2,1);
14. Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LCD dengan data yang berasal dari PINA dengan data
ADC
Pada Program ini kita ingin menghitung tegangan yang berasal dari ADC PINA
dengan ADC 8 Bit. Maka agar kita harus menyeting PINA sebagai ADC. Dengan data PINA
maka akan diproses pada rumus Desimal, Biner, dan Heksa. Pada program ini
sprintf(nilai,"D=%4d",data) untuk mengubah data ADC menjadi bilangan desimal,
sprintf(nilai,"H=%2xH",data) untuk mengubah data ADC menjadi bilangan Heksa, dan
program bit0=data%2… untuk mengubah data ADC menjadi bilangan Biner, sehingga saat
program dijalankan maka karena Data = read_adc maka data ADC akan terbaca pada LCD
dengan tegangan diatur oleh potensiometer. Sehingga pada LCD akan menampilkan
Tegangan ADC pada bilangan Desimal, Biner, dan Heksa sesuai dengan Tabel Pengukuran.
15. Tugas 2A.2
Menghitung tegangan ADC 10 BIT dan ditampilkan ke LCD
#include <mega32.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x40
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|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;}
// Declare your global variables here
unsigned char nilai[16];
int bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,bit9;
int data;
void main(void)
{PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
16. // Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
// LCD module initialization
lcd_init(16);
while (1)
{ data=read_adc(0);
sprintf(nilai,"D=%4d",data);
lcd_gotoxy(0,0);
lcd_puts(nilai);
delay_ms(100);
sprintf(nilai,"H=%2xH",data);
lcd_gotoxy(8,0);
lcd_puts(nilai);
delay_ms(100);
//BINER
bit0=data%2;
bit1=data/2%2;
bit2=data/4%2;
bit3=data/8%2;
bit4=data/16%2;
bit5=data/32%2;
bit6=data/64%2;
bit7=data/128%2;
bit8=data/256%2;
bit9=data/512%2;
lcd_gotoxy(0,1);
lcd_putchar(bit0+0x30);
delay_ms(10);
18. Nilai ADC Pada 10 bit
No Vref
Vin
Analog
ADC
Perhitungan
ADC
Yang
Terukur
%ERROR
1 5 0 0 0 0%
2 5 0.1 18.37 19 3%
3 5 0.2 36.73 36 2%
4 5 0.3 55.10 56 2%
5 5 0.4 73.46 75 2%
6 5 0.5 91.83 92 0%
7 5 0.6 110.20 110 0%
8 5 0.7 128.56 128 0%
9 5 1 183.66 189 3%
10 5 2 367.32 364 1%
11 5 2.5 459.16 457 0%
12 5 3 550.99 556 1%
13 5 4 734.65 730 1%
14 5 5 918.31 915 0%
Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LCD dengan data yang berasal dari PINA dengan data
ADC
Pada Program ini kita ingin menghitung tegangan yang berasal dari ADC PINA
dengan ADC 10 Bit. Maka agar kita harus menyeting PINA sebagai ADC. Dengan data
PINA maka akan diproses pada rumus Desimal, Biner, dan Heksa. Pada program ini
sprintf(nilai,"D=%4d",data) untuk mengubah data ADC menjadi bilangan desimal,
sprintf(nilai,"H=%2xH",data) untuk mengubah data ADC menjadi bilangan Heksa, dan
19. program bit0=data%2… untuk mengubah data ADC menjadi bilangan Biner, sehingga saat
program dijalankan maka karena Data = read_adc maka data ADC akan terbaca pada LCD
dengan tegangan diatur oleh potensiometer. Sehingga pada LCD akan menampilkan
Tegangan ADC pada bilangan Desimal, Biner, dan Heksa sesuai dengan Tabel Pengukuran.
20. Tugas 2B
Menggeser nyala LED dengan data ADC dan ditampilkan ke
LCD dengan Kecepatan yang berbeda-beda
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char 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|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
unsigned char lcd[16];
int x,y;
void main(void)
{PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x00;
DDRD=0xFF;
21. // ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
// LCD module initialization
lcd_init(16);
while (1)
{
x=read_adc(0);
sprintf(lcd,"%3d",x);
lcd_gotoxy(0,0);
lcd_puts(lcd);
if(x==128){PORTB=0x00;};
if(x<128)
{
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b10000000;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b01000000;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00100000;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00010000;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00001000;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00000100;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00000010;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00000001;delay_ms(1+x);
x=read_adc(0);sprintf(lcd,"%3d",x);lcd_gotoxy(0,0);lcd_puts(lcd);
PORTB=0b00000000;
}
23. Praktikum 3
Jam Digital dengan menggunakan RTC
#include <mega32.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
#include <delay.h>
// LM75 Temperature Sensor functions
#include <lm75.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
24. SFIOR=0x00;
// I2C Bus initialization
i2c_init();
// LM75 Temperature Sensor initialization
// thyst: 75°C
// tos: 80°C
// O.S. polarity: 0
lm75_init(0,75,80,0);
// 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(16);
rtc_set_time(20,05,10);
while (1)
{ unsigned char h2,h1,m2,m1,s2,s1,h,m,s;
rtc_get_time(&h,&m,&s);
h2 = h % 10;
h1 = h / 10;
m2 = m % 10;
m1 = m / 10;
s2 = s % 10;
s1 = s / 10;
lcd_gotoxy(0,0);lcd_putsf("Waktu sekarang");
lcd_gotoxy(0,1);lcd_putchar(h1 + 0x30);
lcd_gotoxy(1,1);lcd_putchar(h2 + 0x30);
lcd_gotoxy(2,1);lcd_putsf(":");
lcd_gotoxy(3,1);lcd_putchar(m1 + 0x30);
lcd_gotoxy(4,1);lcd_putchar(m2 + 0x30);
lcd_gotoxy(5,1);lcd_putsf(":");
lcd_gotoxy(6,1);lcd_putchar(s1 + 0x30);
lcd_gotoxy(7,1);lcd_putchar(s2 + 0x30);
delay_ms(10);};
};
25. Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LCD dan PORTD untuk data clock, dimana pada PORTD
diatur sebagai RTC.
Pada RCT biasanya dipakai untuk membuat jam digital dimana
rtc_set_time(20,05,10), digunakan untuk menyetting waktu awal dan dengan program
rtc_get_time(&h,&m,&s), untuk memproses data waktu dan dengan rumus h2 = h % 10;….
maka data akan disimpan, sehingga saat program lcd_putchar(h1 + 0x30);… maka data
waktu tersebut akan ditampilkan. Pada RTC setiap perubahan clock yang diatur pada PORTD
akan menambah waktu pada RTC yang akan terlihat pada saat program dijalankan pada LCD
maka jam tersebut bergerak seperti jam digital.
26. Tugas 3B
Kalender digital dengan menggunakan RTC
#include <mega32.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
#include <delay.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
void main(void)
{
// 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,1,0);
// LCD module initialization
lcd_init(16);
rtc_set_date(19,4,17);
delay_ms(100);
while(1)
{
unsigned char d,m,y;
unsigned char d1,d2,m1,m2,y3,y4;
rtc_get_date(&d,&m,&y);
27. d2=d % 10;
d1=d / 10;
m2=m % 10;
m1=m / 10;
y4=y % 10;
y3=y / 10;
y3=y3 % 10;
lcd_gotoxy(0,0);lcd_putsf("Rabu");
lcd_gotoxy(0,1);lcd_putchar(d1 + 0x30);
lcd_gotoxy(1,1);lcd_putchar(d2 + 0x30);
lcd_gotoxy(2,1);lcd_putchar('/');
lcd_gotoxy(3,1);lcd_putchar(m1 + 0x30);
lcd_gotoxy(4,1);lcd_putchar(m2 + 0x30);
lcd_gotoxy(5,1);lcd_putchar('/');
lcd_gotoxy(6,1);lcd_putchar(0x32);
lcd_gotoxy(7,1);lcd_putchar(0x30);
lcd_gotoxy(8,1);lcd_putchar(y3 + 0x30);
lcd_gotoxy(9,1);lcd_putchar(y4 + 0x30);
delay_ms(10);};
}
Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTC sebagai Output
yang digunakan untuk menyalakan LCD dan PORTD untuk data clock, dimana pada PORTD
diatur sebagai RTC.
Pada RCT dapat dipakai untuk membuat kalender dimana rtc_set_date(19,4,17);
digunakan untuk menyetting tanggal, bulan dan tahun awal. Pada program rtc_get_date
(&d,&m,&y) untuk memproses data kalender dan dengan rumus d2=d % 10;..maka data akan
digunakan untuk ditampilkan ke LCD. Pada program ini lcd_putchar(d1 + 0x30)….
digunakan untuk menampilkan data yang telah diproses pada rumus sehingga saat
ditampilkan akan terlihat LCD akan menampilkan Rabu 19/4/2017 dimana perubahan pada
tanggal ini sangat lama karena settingan RTC dengan perubahan data diatur pada clock pada
PORTD.
28. Praktikum 4
Mengatur Lama Pemprosesan Flip-flop dengan Timer
#include <mega32.h>
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xE1;
TCNT1L=0x7B;
PORTA=~PINA;}
// Declare your global variables here
void main(void)
{PORTA=0x00;
DDRA=0xFF;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: Normal top=FFFFh
// Timer 1 Overflow Interrupt: On
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xE7;
TCNT1L=0x1B;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// Global enable interrupts
#asm("sei")
while (1)
{// Place your code here};}
29. Perhitungan
Pengaturan waktu tunda 1 detik
Tmax = 1/Freq.Osc x (FFFFh + 1) x Prescaler
= 1/8MHz x 65536 x 1024
= 8,388608 detik
Karena Ttunda yang diinginkan lebih kecil dari Tmax
Ttunda = 1/Freq.Osc x (65536 – TCNT1) x Prescaler
1s = 1/8MHz x (65536 – TCNT1) x 1024
1s = 128us x (65536 – TCNT1)
7812,5 = (65536 – TCNT1)
TCNT1= 65536 – 7812,5 = 57723,5 = E17B (dalam heksa)
Maka nilai Valve pada settingan timer 1 adalah E17B untuk jeda sebesar 1 detik
Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTA sebagai
Output yang digunakan untuk menyalakan LED.
Pada program ini kita menggunakan timer 1 dengan System clock untuk sumber clock
oscillator crystal dengan frekuensi 7813KHz dengan intruksi Overflow untuk timer 1 dan
dengan jeda waktu pembacaan program sebesar 1 sekon/ E17B untuk valve dengan program
TCNT1H=0xE1;TCNT1L=0x7B; maka jeda waktu yang dimasukan akan sebesar 1 detik.
Pada program PORTA=~PINA maka akan memproses kondisi flip-flop saat PORTA
dihubungkan dengan LED. Maka saat program dijalankan maka pada PORTA=~PINA akan
terjadi jeda selama 1 detik dan terlihat bahwa LED menyala flip-flop dengan jeda 1 detik.
30. Tugas 4A
Program Flip-flop LED sebesar 0.5 Detik
#include <mega32.h>
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{// Reinitialize Timer 1 value
TCNT1H=0xF0;
TCNT1L=0xBE;
PORTA=~PINA;}
void main(void)
{ PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xF0;
TCNT1L=0xBD;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
31. OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{// Place your code here };}
Perhitungan
Pengaturan waktu tunda 0,5 detik
Tmax = 1/Freq.Osc x (FFFFh + 1) x Prescaler
= 1/8MHz x 65536 x 1024
= 8,388608 detik
Karena Ttunda yang diinginkan lebih kecil dari Tmax
Ttunda = 1/Freq.Osc x (65536 – TCNT1) x Prescaler
0,5s = 1/8MHz x (65536 – TCNT1) x 1024
0,5s = 128us x (65536 – TCNT1)
3906,25 = (65536 – TCNT1)
TCNT1= 65536 – 3906,25 = 61629,75 = F0BD (dalam heksa)
Maka nilai Valve pada settingan timer 1 adalah F0BD untuk jeda sebesar 0.5 detik
32. Analisa:
Pada Praktikum ini pertama-tama atur tipe IC, Output, dan Input dari program sesuai
dengan modul yang kita pakai. Pada Praktikum ini kita menggunakan PORTA sebagai
Output yang digunakan untuk menyalakan LED.
Pada program ini kita menggunakan timer 1 dengan System clock untuk sumber clock
oscillator crystal dengan frekuensi 7813KHz dengan intruksi Overflow untuk timer 1 dan
dengan jeda waktu pembacaan program sebesar 0,5 sekon/ F0BD untuk valve dengan
program TCCR1B=0x05; TCNT1H=0xF0; TCNT1L=0xBD; maka jeda waktu yang
dimasukan akan sebesar 0.5 detik. Pada program PORTA=~PINA maka akan memproses
kondisi flip-flop saat PORTA dihubungkan dengan LED. Maka saat program dijalankan
maka pada PORTA=~PINA akan terjadi jeda selama 0,5 detik dan terlihat bahwa LED
menyala flip-flop dengan jeda 0,5 detik.
33. Praktikum 5
PWM
#include <mega32.h>
unsigned int x;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
x++;
if(x==625) x=0;
if(x<=312) PORTA=255;
else PORTA=0;
}
// Declare your global variables here
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
34. // INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Analisa
Pulse-Width Modulation adalah salah satu jenis modulasi. Modulasi PWM dilakukan
dengan cara mengubah perbandingan lebar-pulsa-positif terhadap lebar-pulsa-negatif ataupun
sebaliknya dalam frekuensi sinyal yang tetap. Pada praktikum ini pada program ini akan
menampilkan duty cycle sebesar 50% yang bermakna perbandingan pulsa negatif dan positif
sama dikarenakan batas logika high hanya saat 312 sehingga saat program dijalankan karena
if(x<=312) PORTA=255 maka terlihat pada oscilloskop bahwa perbandingan pulsa positif
dan negatif sama atau ukuran pulsa positif dan negatif sama sama besar.