Mikrokontroller

TENTANG I/O


A.    TEORI DASAR
Secara umum setiap mikrokontroler memiliki I/O port. Jumlahnya berbedabeda untuk masingmasing mikrokontroler. Mikrokontroler AVR AT90SXXX juga memiliki I/O port yang jumlahnya bervariasi, dari mulai satu port hingga lebih dari empat port. Meskipun dari sisi jumlah berbeda, namun karakteristik I/O port mikrokontroler AVR adalah sama. Untuk lebih jelasnya anda dapat membaca datasheet dari mikrokontroler yang anda pakai.

Untuk mengakses port pada mikrokontoler AVR maka anda harus mengenal register yang ada pada I/O port. Ada tiga register bit pada I/O port yaitu DDRx, PORTx dan PINx. Register DDRx digunakan untuk menentukan apakah port tersebut akan dijadikan sebagai input atau output. Sedangkan register PORTx dipakai untuk mengirim data keluar dari port ketika DDRx diset sebagai output. Dan register PINx dipakai untuk membaca data pada port ketika DDRx diset sebagai input.

Karena ketiga register di atas adalah register bit maka masingmasing pin pada port bisa diset secara bebas. Misalkan, kita menginginkan sebagian dari PORTA dijadikan sebagai input dan sebagian yang lain dijadikan sebagai output. Hal ini mudah dilakukan dengan mengatur register DDRA, sebagian sebagai input dan sebagian yang lain sebagai output. Agar pin pada port berfungsi sebagai input maka bit pada register DDRx diset 0. Sedangkan, pin pada port akan berfungsi sebagai output ketika bit pada register DDRx diset 1. Untuk lebih detailnya anda bisa membaca di datasheet.

B.    ALAT DAN BAHAN
1.      Modul AVR Atmega8535/8/16/32
2.      PC (Personal computer)/laptop
3.      Jumper
C.    SKEMA RANGKAIAN
                           
D.     LANGKAH KERJA DAN PENGAMATAN
1.      Buatlah alat dan bahan seperti rangkaian diatas;
2.   Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.   Cobalah list program berikut;
#include <mega8535.h>
#include <delay.h>

unsigned char kiri=0b00000001, kanan=0b10000000;
void nyala_led()
{
PORTA = 0xff;
delay_ms(500);
PORTA = 0x00;
}

void geser_led_kanan()
{
if (kanan ==0b00000001)
kanan = 0b10000000;
else kanan >>= 1;
PORTA = kanan;
delay_ms(500);
}

void geser_led_kiri()
{
if (kiri==0b10000000)
kiri = 0b00000001;
else kiri <<= 1;
PORTA = kiri;
delay_ms(500);
}

void tekan_tombol_led_nyala()
{
PORTA = PINB;
}

void main(void)
{
PORTA = 0xff;
DDRA = 0xff;
PORTB = 0x0f;
DDRB = 0x00;
while(1)
{
geser_led_kiri() ; // pemanggilan fungsi };
}
                   }
4.      Selanjutnya dengan cara yang sama coba program berikut;
while (1)
{
if (PINB.0==0) {PORTA=00xFF;} };
}
5.     Selanjutnya dengan cara yang sama coba program berikut; 
      while (1)
{
if(PINB.0==0) PORTA=15; delay_ms(1000); PORTA=240; delay_ms(1000);
};
}
6.      Selanjutnya dengan cara yang sama coba program berikut;
#include <avr/io.h>
int main (void)
{
//Jadikan Semua PORTA Sebagai Output
DDRA = 0xFF;
//Hidupkan LED
PORTA = 0x0F;
return 0;
}
7.   Buatlah kesimpulan dari hasil praktik saudara.
8.      Tugas, buatlah program jika SW1 ditekan maka bit ganjil PORTA menyala, kemudian jika SW2 ditekan bit genap PORTA padam.

9.      Tuliskan hasil praktikum ini dan praktikum selanjutnya dengan format berikut;

             E.     HASIL DAN ANALISIS
                   1.  Hasil program dari langkah 3



                   2.  Hasil program dari langkah 4
                       
                    
                   3. Hasil program dari langkah 5


    
    
4.    Hasil program dari langkah 6

5.    Program untuk tugas
while (1)
      {
      if (PINB.0 ==1)
      {PORTA = 0b01010101;

      }
       if (PINB.1 ==1)
      {PORTA = 0b10101010;

      }
      else {
      PORTA = 0b00000000;}
}        }


Pada percobaan diatas perlu menambahkan file library #include <delay.h> untuk bisa memberikan perintah pada program untuk melakukan waktu penundaan. Pada program diatas ada yang menggunakan kode biner dan hekadesimal, hal tersebut untuk mengatur keluaran LED. Pada program ini PORTA sebagai output dan PORTB sebagai input.

F.  KESIMPULAN
Dari percobaan yang sudah dilakukan dapat disimpulkan bahwa :
1.        Perlunya melakukan konfigurasi input dan output AVR agar dapat lebih terstruktur dan sesuai yang diinginkan.
2.        Dalam melakukan konfigurasi input dan output perlu diperhatikan port yang digunakan agar tidak terjadi error atau no respon dalam praktik.




TENTANG LCD

A.    TEORI DASAR
Mengakses LCD padaAVR dapat dilakukan dengan mode 4 bit. Untuk menggunakan mode 4 bit, kita dapat menggunakan library built in pada Code Vision. Library ini telah terdapat berbagai fungsi untuk menampilkan karakter ke LCD. Beberapa perintah dasar akses LCD antara lain;
1.Membersihkan layar LCDClear();
2.Set cursor pada posisi tertentu LCDGotoXY(x,y); x merupakan colom pada LCD, y adalah barisnya. Pada LCD 16x2, terdapat 16 yakni 0-15 dan 0-1.
3.Inisialisasi LCD lcd_init(void)
4.Menuliskan karakter ke LCD lcd_putchar(char c). Misalnya lcd_putchar(”C”) akan menuliskan karakter C ke LCD.
5.Menuliskan  string  ke  LCD  lcd_putsf(char*str).  Misalnya, lcd_putsf(“TEMPERATURE”) akan menuliskan string TEMPERATURE pada LCD. Sebelum dapat menggunakan berbagai fungsi tersebut, pada bagian header dari program kita harus menginclude librarynya.

B.    ALAT DAN BAHAN
1.      Modul AVR Atmega8535/8/16/32
2.      PC (Personal computer)/laptop
3.      Jumper

C.    SKEMA RANGKAIAN


D.     LANGKAH KERJA DAN PENGAMATAN
1.        Buatlah alat dan bahan seperti rangkaian di atas;
2.        Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.        Cobalah list program berikut;
#include <mega8535.h>
#include <alcd.h>
#include <delay.h>

char kolom;
void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADCSRA=0x00;
SPCR=0x00;

TWCR=0x00;
lcd_init(16);
      
while (1)
      {
      // Place your code here
           for (kolom=0; kolom<=15; kolom++){
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("NAMA:RIZKI NUR Q");
      lcd_gotoxy(kolom,1);
      lcd_putsf("NIM :16507134015");
      delay_ms(1000);
      }
}
}
4.    Buatlah kesimpulan dari hasil praktik saudara.
5.    Tugas, buatlah program dengan tulisan “LOADING…” berjalan dari kiri ke kanan setelah itu muncul “MIKRO B 2014” tulisan berjalan dari kanan kekiri.
6.    Tuliskan hasil praktikum ini dan praktikum selanjutnya dengan format.
           E.     HASIL DAN ANALISIS
     
                    
                  Tugas :
Program dengan tulisan “LOADING…” berjalan dari kiri ke kanan setelah itu muncul “MIKRO B 2014” tulisan berjalan dari kanan kekiri.


#include <mega8535.h>
#include <alcd.h>
#include <delay.h>

char kolom =0;
char kolom1=15;
void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xFF;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;

ADCSRA=0x00;

SPCR=0x00;

TWCR=0x00;
lcd_init(16);

while (1)
      {
      for (kolom=0; kolom<=15; kolom++){
      lcd_clear();
      lcd_gotoxy(kolom,1);
      lcd_putsf("LOADING...");
      delay_ms(50); }
     
      for (kolom1=15; kolom1>=0; kolom1--){
      lcd_clear();
      lcd_gotoxy(kolom1,1);
      lcd_putsf("MIKRO B 2016");
      delay_ms(50); }
      }
}

Hasil Gambar

                



TENTANG ADC


A.    TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1.      Memahami konfigurasi ADC
2.      Menguasai pemrograman ADC untuk aplikasi input sensor

B.     TEORI DASAR
ADC (Analog To Digital Converter) adalah perangkat elektronika yang berfungsi untuk mengubah sinyal analog (kontinyu) menjadi sinyal digital (deskret). Perangkat ADC dapat berbentuk suatu modul atau rangkaian elektronika maupun suatu chip IC. ADC berfungsi untuk menjembatani pemrosesan sinyal analog oleh sistem digital.
Kecepatan sampling suatu ADC menyatakan “seberapa sering sinyal analog dikonversikan ke bentuk sinyal digital pada selang waktu tertentu”. Kecepatan sampling biasanya dinyatakan dalam sample per second (SPS).



Gambar. Kecepatan sampling ADC dalam ketelitian
Resolusi ADC menentukan “ketelitian nilai hasil konversi ADC”. Sebagai contoh: ADC 8 bit akan memiliki output 8 bit data digital, ini berarti sinyal input dapat dinyatakan dalam 255 (2n –1) nilai diskrit, ADC 10 bit memiliki 1023 nilai deskret. ADC 12 bit memiliki 12 bit output data digital, ini berarti sinyal input dapat dinyatakan dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit akan memberikan ketelitian nilai hasil konversi yang jauh lebih baik daripada ADC 8 bit.
Resolusi ADC             = Vref/(nilai bit-1)
Contoh
Jika diketahui Vref   = 5V                Prosesor = Atmega16 (8bit)
Maka, Resolusi ADC = 5/(256-1)
                                    = 0,0196 V
Artinya setiap kenaikan 0,0196 V maka nilai ADC akan bertambah 1 nilai deskret ADC. Dengan cara sebaliknya akan diperoleh nilai tegangan input. Resulosi dapat ditingkatkan dengan memperkecil nilai referensi, misalnya:
Jika diketahui :       Vref = 2,5 V    Prosesor = ATmega16 (8bit)
Resolusi ADC = 2,5/(256-1)
= 0,0098 V
Dengan demikian dapat diartikan bahwa setiap kenaikan 0,0098 V maka nilai deskret ADC akan naik 1 poin. Prinsip kerja ADC mengkonversi sinyal analog ke dalam bentuk besaran yang merupakan rasio perbandingan sinyal input dan tegangan referensi. Sebagai contoh, bila tegangan referensi 5 volt, tegangan input 3 volt, rasio input terhadap referensi adalah 60%. Jadi, jika menggunakan ADC 8 bit dengan skala maksimum 255, akan didapatkan sinyal digital sebesar 60% x 255 = 153 (bentuk decimal) atau 10011001 (bentuk biner).
Sinyal Analog       = (sample/max_value) * reference voltage
(153/255) * 5
3 Volts

D.    ALAT DAN BAHAN
1.      Modul AVR Atmega8535/8/16/32
2.      PC (Personal computer)/laptop
3.      Jumper
4.      Power supply 5-12V
  
E.     SKEMA RANGKAIAN


E.     LANGKAH KERJA DAN PENGAMATAN
1.        Buatlah alat dan bahan seperti rangkaian di atas;
2.        Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.        Cobalah list program berikut;
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


unsigned char data = 0;
char kata [16];
void main(void)

{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

SPCR=0x00;

TWCR=0x00;

lcd_init(16);
while (1)
      {
      char tempC, tempF, display;
              float tempff;
              tempC = ADCH;                            // Output ADCH to PortD
              tempff = (float)tempC;
              tempff = (tempff*9)/5 + 32;          
              tempF = tempff;

              LCD_goto(2,4);     
              itoa(tempC/10,display,10);
              LCD_print(display);
              itoa(tempC%10,display,10);
              LCD_print(display);
              LCD_send_data(0xDF);
              LCD_print("C   ");
              itoa(tempF/10,display,10);
              LCD_print(display);
              itoa(tempF%10,display,10);
              LCD_print(display);
              LCD_send_data(0xDF);
              LCD_print("F");
          _delay_ms(500);
              ADCSRA |= 1<<ADSC;               
      }
}

4. Berikan input ADC Anda berupa potensiometer, amatai apa yang terjadi.
5. Tugas, buatlah program dengan untuk membuat termometer dengan sensor LM35 DZ.
6. Tuliskan hasil praktikum anda sesuai format dan simpulkan hasilnya.

             F.     HASIL DAN ANALISIS
                   Hasil program :
                        
                   Hasil tugas :
                        

#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x20
(ADMUX=adc_input | ADC_VREF_TYPE & 0xff);
ADCSRA|=0x40;
ADCSRA|=0x10;
return ADCH;
int SUHU;
char temp[8];
float suhu_celcius;
void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xFF;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA3;
SFIOR&=0x1F;

SPCR=0x00;

TWCR=0x00;

lcd_init(16);

while (1)
      {
      lcd_clear();
      suhu_celcius = (float)SUHU*500/1023; 
      lcd_gotoxy(0,0);
      lcd_putsf("SUHU :  ");
      ftoa(suhu_celcius,1,temp);
      lcd_gotoxy(0,1);
      lcd_puts(temp);


      lcd_gotoxy(5,1);
      lcd_putchar(0xdf);
      lcd_putsf("C");
      delay_ms(50);
      }
}

Pada percobaan ini untuk menampilkan hasil konversi ADC harus didefinisikan terlebih dahulu tipe ADC yang akan digunakan dengan deklarasi #define ADC_VREF_TYPE 0x20 selanjutnya program akan membuat array untuk menampung hasil pembacaan data analog pada variabel suhu. Untuk bisa menggunakan ADC harus mengatur terlebih dahulu registernya yaitu ADMUX, ADCSRA, dan SFIOR. Pada program ini menggunakan pembacaan ADC secara free running. Input yang digunakan adalah PORTA dengan menggunakan potensiometer sebagai pengatur tegangan dan output PORTD yang ditampilkan melalui LCD. Potensiometer disini hanya sebagai pengganti sensor LM35 sebagai pengatur suhunya diibaratkan tegangan.
Untuk membuat thermometer diperlukan membuat rumus yaitu   (float)SUHU*500/1023 dan untuk membuat karakter derajat dengan menggunakan lcd_putchar(0xdf);

             G.    KESIMPULAN
                   Dari percobaan yang sudah dilakukan dapat disimpulkan bahwa :
1.    Sebelum membuat rangkaian ADC harus memahami dulu fungsi dari tiap port pada mikrokontroller.
2.  ADC adalah fitur yang digunakan untuk mengkonversi data analog menjadi data digital.

TENTANG PWM

             A.    TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1.      Memahami kerja dari PWM
2.      Menguasai pengontrolan motor DC menggunakan PWM
B.     TEORI DASAR
PWM (Pulse Width Modulation) atau modulasi lebar pulsa adalah salah satu keunggulan Timer/Counter yangterdapat pada Atmega8535. Ketiga jenis Timer/Counter pada Atmega8535 dapat menghasilkan pulsa PWM. Pulsa PWM adalah sederetan pulsa yang lebar pulsanya dapat diatur. Pulsa PWM berfungsi mengatur kecepatan motor DC, mengatur gelap terang LED dan aplikasi lainnya. PWM adalah Timer mode Output Compare yang canggih. Mode PWM Timer juga dapat mencacah turun yang berlawanan dengan mode Timer lainnya yang hanya mencacah naik. Pada mode PWM tersebut, Timer mencacah naik hingga mencapai nilai TOP, yaitu 0xFF (255) untuk PWM 8 bit dan 0x3FF (1023) untuk PWM 10 bit. Timer/Counter 0 hanya memiliki PWM 8 bit, sedangkan pada Timer/Counter 1 memiliki 9 bit dan PWM 10 bit, dan Timer/Counter 2 memiliki PWM 8 bit.
Pemilihan mode PWM diseting melalui bit COM01 dan bit  OM00 pada register TCCR. Saat COM00 clear dan COM01 set, pin OC0 clear sat timer mencacah diatas Compare Match dan pin OC0 set saat timer mencacah dibawah Compare Match atau non-inverting PWM. Kebalikannya, saat COM00 set dan COM01 juga set, maka pin OC0 set saat timer mencacah dibawah Compare Match atau disebut juga inverting PWM. Agar lebih jelas, perhatikan gambar berikut.
 
Gambar 1. Pulsa PWM inverting dan non-inverting
                    
Gambar 2. Hasil Pulsa PWM
Fasilitas timer mikrokontroler digunakan untuk pengaturan PWM. Berikut ini pengujian fungsionalitas mikrokontroler Atmega 16 dalam membangkitkan PWM. Penggunanan PWM menggunakan fasilitas overflow pada timer/counter 1.
C.    ALAT DAN BAHAN
1.      Modul AVR Atmega8535/8/16/32
2.      PC (Personal computer)/laptop
3.      Jumper
4.      Power supply 5-12V
5.      CRO
D.    SKEMA RANGKAIAN

E.     LANGKAH KERJA DAN PENGAMATAN
1.        Buatlah alat dan bahan seperti rangkaian di atas;
2.        Buatlah program seperti yang tertulis berikut, uji cobakan/simulasikanlah di Proteus lalu coba pada hardware nyata;
3.        Cobalah list program berikut;
Dfasfas
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <alcd.h>
#define PULSE PORTB.0
#define ECHO  PINB.0
#define ARAH  DDRB.0
#define OUT 1
#define INP 0  
#include <alcd.h>

unsigned int ultrasonic()
{
unsigned int count=0;
unsigned int jarak;

        ARAH=OUT;
        PULSE=1
        delay_us(5);
        PULSE=0;
        ARAH=INP;
        PULSE=1;

while (ECHO==0) {};
while (ECHO==1)
        {
        count++;
        }

jarak=(unsigned int)(((float)count)/25);
return(jarak);
}

int SigA,SigB;
char MA[12];
char MB[12];

void main(void)
{
PORTA=0xFF;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xFF;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0xA1;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;

SPCR=0x00;

TWCR=0x00;

lcd_init(16);
while (1)
      {
lcd_gotoxy(0,0);
lcd_putsf("MOT1=");
lcd_gotoxy(0,1);
lcd_putsf("MOT2=");
PORTD.0=1;
PORTD.1=0;
PORTD.3=1;
PORTD.4=0;
if(PINA.0==0){SigA++;}
if(PINA.1==0){SigA--;}
if(PINA.2==0){SigB++;}
if(PINA.3==0){SigB--;}
lcd_gotoxy(5,0);
itoa(SigA,MA);
lcd_puts(MA);
lcd_gotoxy(5,1);
itoa(SigB,MB);
lcd_puts(MB);
OCR1A=SigA;
OCR1B=SigB;
}
}
           F.     HASIL

           G.    KESIMPULAN
      Pulse Width Modulation (PWM) atau yang biasa dikenal dengan modulasi lebar pulsa adalah salah satu fitur yang dimiliki oleh mikrokontroller. PWM adalah sebuah fitur yang memungkinkan kita untuk dapat merubah lebar pulsa sesuai dengan keinginan. 

TENTANG UART

A.    Tujuan
Setelah melakukan praktik mahasiswa diharapkan dapat:
1. Memahami prinsip kerja komunikasi UART
2. Mampu mengirim data menggunakan UART USB termonitor di hyperterminal
      B.     Teori Dasar
UART merupakan sebuah subsistem hardware yang memungkinkan untuk melakukan transmit dan receipt data secara serial. Fitur ini biasnya telah terinclude dalam sebuah mikrokontroller. Berbeda dari metode komunikasi lain, komunikasi secara serial mengandalkan clock pada sisi transmit dan receive dimana kedua sisi clock ini harus sama. Sehingga pada komunikasi ini hanya dibutuhkan tiga pin, yakni Tx (Transmit), Rx (Receive), dan GND. Pada PC level tegangan RS232 antara +3 hingga +25 volt untuk data 0, dan -3 hingga -25 untuk logika 1. Perlu diketahui, bahwa pada Atmega16 terdapat pin Txd dan Rxd yang bekerja pada level UART. Sementara untuk strandar RS232, kita memerlukan sebuah IC converter untuk menyesuaikan dengan tegangan RS232. Karena level logika pada AVR hanya sekitar 3 – 5 volt.
Ciri khas daari komunikasi UART adalah sebagai berikut: 1) Pada transmisi asinkron, mengirimkan 1 stop bit (1) di awal dan 1 atau lebih start bit (0) di akhir setiap byte. 2) Data ditransmisikan per karakter dalam satu saat (5 sampai 8 bit). 3) Asinkron berarti “asinkron pada level byte”, tetapi bit-bit tetap disinkronkan; durasinya sama. Teknik paritas memerlukan tambahan satu bit (bit paritas) pada data word. Bit paritas dapat bernilai 1 atau 0 tergantung pada:
1.      Jumlah angka 1 di dalam data word
2.      Pola paritas yang digunakan
3.      Bit Paritas digabungkan pada byte data, sehingga menjadi 9 bit
Pola paritas genap (even parity) memerlukan total jumlah angka 1 (termasuk bit paritas sendiri) genap. Pola paritas ganjil (odd parity) memerlukan total jumlah angka 1 ganjil.
     C.    Alat dan Bahan
1.      Modul AVR Atmega8535/8/16/32
2.      PC (Personal computer)/laptop
3.      Jumper
4.      Power supply 5-12V
5.      CRO
D.    Skema Rangkaian

     E.     Hasil Kerja
Hasil Program :
#include <mega16.h>
#include <stdio.h>
#include <delay.h>

unsigned char m,n,a;
void main(void)
{
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRA=0x02;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x8F;

ACSR=0x80;
SFIOR=0x00;
n=0;
m=0;
a=0;
while (1)
{
if(PINB.4==0)
{n=n+1;
if (n==1)
{
putsf("Kalau tidak belajar mikro sekarang, kapan lagi?\r");
delay_ms(200);
{n=0;}
}
}
if(PINB.7==0)
{a=a+1;
if (a==1)
{
putsf("ayo bali!!!\r");
delay_ms(200);
{a=0;}
}
}
if(PINB.0==0)
{m=m+1;
if (m==1)
{
putsf("Kalau bukan kelas B, siapa lagi?\r");
delay_ms(200);
}
{m=0;}
{n=0;}
}
};
}
     F.     Hasil Praktikum

     G.    Analisis
Pada pembahasan ini kita mencoba menulis tulisan penyemangat dengan program CVAVR yang dimasukan ke program kerja sofware ataupun hardware dan saat dicompail akan muncul program yang kita inginkan melalui tampilan hyperterminal dengan mode uart.
H.    Kesimpulan
            UART merupakan sebuah subsistem hardware yang memungkinkan untuk melakukan transmit dan receipt data secara serial. Fitur ini biasnya telah terinclude dalam sebuah mikrokontroller. Berbeda dari metode komunikasi lain, komunikasi secara serial mengandalkan clock pada sisi transmit dan receive dimana kedua sisi clock ini harus sama. Sehingga pada komunikasi ini hanya dibutuhkan tiga pin, yakni Tx (Transmit), Rx (Receive), dan GND. Pada PC level tegangan RS232 antara +3 hingga +25 volt untuk data 0, dan -3 hingga -25 untuk logika 1. 

TENTANG RTC

A.     TUJUAN
Setelah melakukan praktik mahasiswa diharapkan dapat:
1.              Memahami prinsip kerja Real Time Clock (RTC)
2.              Mampu menggunakan RTC untuk mendukung sistem aplikasi elektronika

B.     DASAR TEORI
RTC (Real Time Clock) merupakan jenis timer yang bekerja berdasarkan waktu nyata, atau dengan kata lain berdasarkan waktu sesaui waktu kita. Agar dapat berfungsi, pewaktu ini membutuhkan dua parameter utama yang harus ditentukan, yaitu pada saat mulai (start) dan pada saat berhenti (stop). DS1307 merupakan salah satu tipe IC RTC yang dapat bekerja dalam daya listrik rendah, yang juga sering kita jumpai dalam PC/hanphone. Di dalamnya berisi waktu jam dan kalender dalam format BCD,. Waktu jam dan kalender memberikan informasi detik, menit, jam, hari, tanggal, bulan, dan tahun. Untuk bagian jam dapat berformat 24 jam atau 12 jam. Pendeteksi sumber listrik juga disediakan untuk mendeteksi kegagalan sumber listrik dan langsung mengalihkannya ke sumber baterai.

Gambar 1. RTC DS1307
Komunikasi yang digukan untuk RTC mengacu I2C-Bus atau Inter-Integrated Circuit Bus, merupakan bus serial yang dikembangkan oleh Phillips. I2C Bus digunakan untuk menghubungkan berbagai macam IC yang dikontrol oleh sistem micro-processor atau micro-controller (intelligent control application). Sebagai catatan umumnyakristal 32,768 KHz dipasang berbaring dan bodi/can disolder dengan ground.

C.     ALAT DAN BAHAN
1.              Modul AVR Atmega8535/8/16/32
2.              Jumper
3.              Power supply 5-12V
D.     SKEMA RANGKAIAN

E.     LANGKAH KERJA DAN PENGAMATAN
1.              Buatlah alat dan bahan seperti rangkaian di atas;
2.              Sebelum Anda menulis program aturlah seperti gambar berikut;


      Catatan: apabila Anda menggunkan CVAVR versi non-commercial maka sangat dimungkinkan fasilitas I2C tidak berfungsi, maka solusinya lakukan upgrade/downgrade ke versi commercial, contoh ini menggunkan versi CodeVisionAVR 2.03.
3.              Tuliskan list program berikut;
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
unsigned char s,m,h,d,mo,y,dd, temp[16];
void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xFF;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADCSRA=0x00;

SPCR=0x00;

TWCR=0x00;

i2c_init();
rtc_init(0,0,0);
lcd_init(16);

while (1)
      {
       rtc_get_time(&h,&m,&s); 
       rtc_get_date(&d,&mo,&dd,&y);
       lcd_gotoxy(0,0);
       sprintf(temp,"Pkl %d:%d:%d", h,m,s); 
       lcd_puts(temp);  
       lcd_gotoxy(0,1);
       sprintf(temp,"Tgl %d:%d:%d", d,mo,y);
       lcd_puts(temp); 
       PORTC=0b11111111;      
      };
}

4.              Setelah  Anda  compile,  uji  cobakan/simulasikanlah  di  Proteus  lalu  coba  pada
hardware;
5.              Tugas, buatlah progam untuk menjalankan motor DC/lampun (beban) apabila jam telah menunjukkan waktu tertentu. Misalnya saat pukul 09:09:00, maka beban akan aktif, kemudian jika sudah pukul 09:12:00, maka beban akan nonaktif.
Tuliskan hasil praktikum Anda sesuai format dan simpulkan
F.      HASIL DAN ANALISA
Hasil contoh :
                       

Program tugas :
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>

unsigned char s,m,h,d,mo,y,dd, temp[16];
void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0xFF;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADCSRA=0x00;

SPCR=0x00;

TWCR=0x00;

i2c_init();
rtc_init(0,0,0);
lcd_init(16);

while (1)
      {
       rtc_get_time(&h,&m,&s); 
       rtc_get_date(&d,&mo,&dd,&y);
       lcd_gotoxy(0,0);
       sprintf(temp,"Pkl %d:%d:%d", h,m,s); 
       lcd_puts(temp);  
       lcd_gotoxy(0,1);
       sprintf(temp,"Tgl %d:%d:%d", d,mo,y);
       lcd_puts(temp);  
      
       if ((h==16)&&(m==34))
       {
       PORTC=0b11111111;
       }
       else if ((h==16)&&(m==34)&&(s==00))
       {
       PORTC=0b00000000;
      }
}
}
Hasil tugas :

Pada percobaan RTC ini berfungsi menampilkan hasil dari coding yang ada untuk menghasilkan berupa tanggal, bulan, dan tahun dan juga waktu setempat. Pada hasil diatas didapat tanggal yang tidak sesuai dikarenakan masih menggunakan simulasi. Untuk dapat mengcoding program ini harus mengatur dulu chip, LCD, dan i2C seperti pada gambar dilangkah kerja. Bentuk komunikasi data dari IC RTC adalah I2C yang merupakan kepanjangan dari Inter Integrated Circuit. Komunikasi jenis ini hanya menggunakan 2 jalur komunikasi yaitu SCL dan SDA. SCL/Serial clock berfungsi untuk menyelaraskan data yang ada antara master dan slave. Sedangkan SDA/Serial Data berfungsi sebagai saluran data.
Pada tugas ditambahkan dengan pengaturan putaran motor dengan penyesuaian waktu yang diinginkan. Untuk dapat menghasilkan itu tinggal menambahkan coding if else seperti yang ada diatas. Yang diisi waktu sesuai yang diinginkan.
G.    KESIMPULAN
Dari percobaan yang sudah dilakukan dapat disimpulkan bahwa :
1.              RTC adalah fitur komponen untuk mengatur waktu dengan tepat.
2.              RTC dapat digunakan untuk pengaturan saklar suatu alat sesuai dengan konfigurasi yang diinginkan.

3.              Prinsip kerja RTC ada 2 jalur komunikasi yaitu SCL dan SDA. SCL/Serial clock berfungsi untuk menyelaraskan data yang ada antara master dan slave. Sedangkan SDA/Serial Data berfungsi sebagai saluran data.

Tidak ada komentar:

Posting Komentar