TUGAS 1 KULIAH MIKRO


JAM DIGITAL SEDERHANA DENGAN RTC DS3232




[KEMBALI KE MENU SEBELUMNYA]




1. TUJUAN [kembali]
Membuat jam digital sederhana dengan  RTC DS3232

2. KOMPONEN [kembali]

  • arduino

  • lcd

  • RTC DS3232


3. LANDASAN TEORI [kembali]
A. Arduino

Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet). Memiliki 14 pin input dari output digital dimana 6 pin input tersebut dapat digunakan sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya.

Summary:
Microcontroller ATmega328
Operasi dengan daya 5V Voltage
Input Tegangan (disarankan) 7-12V
Input Tegangan (batas) 6-20V
Digital I / O Pins 14 (dimana 6 memberikan output PWM)
Analog Input Pin 6
DC Lancar per I / O Pin 40 mA
Saat 3.3V Pin 50 mA DC
Flash Memory 32 KB (ATmega328) yang 0,5 KB digunakan oleh bootloader
SRAM   2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz

B. Liquid Crystal Display (LCD)
Liquid Crystal Display (LCD) adalah sebuah peralatan elektronik yang berfungsi untuk
Menampilkan output sebuah sistem dengan cara membentuk suatu citra atau gambaran pada sebuah layar. Secara garis besar komponen penyusun LCD terdiri dari kristal cair (liquid crystal) yang diapit oleh 2 buah elektroda transparan dan 2 buah filter polarisasi (polarizing filter).alarm).

C. RTC DS3232
RTC yang dimaksud disini adalah real time clock (bukan real time computing), biasanya berupa IC yg mempunyai clock sumber sendiri dan internal batery untuk menyimpan data waktu dan tanggal. Sehingga jika system komputer / microcontroller mati waktu dan tanggal didalam memori RTC tetap uptodate.

4. RANGKAIAN SIMULASI [kembali]



5. PRINSIP KERJA  [kembali]

Rangkaian jam digital ini memiliki output lcd sebagai tempat menampilkan waktu. Agar waktunya tetap real time, kita menggunakan RTC DS3231 sebagai ic timernya. LCD dan RTC dihubungkan ke pin-pin pada arduino.Pada RTC akan terjadi proses konversi bilangan biner ke bilangan desimal (BCD).


6. LISTING PROGRAM [kembali]


#include <LiquidCrystal.h>

#include <Wire.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);


char Time[]     = "TIME:  :  :  ";
char Calendar[] = "DATE:  /  /20  ";
byte i, second, minute, hour, date, month, year;

void setup() {
  pinMode(8, INPUT_PULLUP);                    
  pinMode(9, INPUT_PULLUP);                  
  lcd.begin(16, 2);
  Wire.begin();                              
}
void DS3231_display(){
  second = (second >> 4) * 10 + (second & 0x0F);
  minute = (minute >> 4) * 10 + (minute & 0x0F);
  hour   = (hour >> 4)   * 10 + (hour & 0x0F);
  date   = (date >> 4)   * 10 + (date & 0x0F);
  month  = (month >> 4)  * 10 + (month & 0x0F);
  year   = (year >> 4)   * 10 + (year & 0x0F);

  Time[12]     = second % 10 + 48;
  Time[11]     = second / 10 + 48;
  Time[9]      = minute % 10 + 48;
  Time[8]      = minute / 10 + 48;
  Time[6]      = hour   % 10 + 48;
  Time[5]      = hour   / 10 + 48;
  Calendar[14] = year   % 10 + 48;
  Calendar[13] = year   / 10 + 48;
  Calendar[9]  = month  % 10 + 48;
  Calendar[8]  = month  / 10 + 48;
  Calendar[6]  = date   % 10 + 48;
  Calendar[5]  = date   / 10 + 48;
  lcd.setCursor(0, 0);
  lcd.print(Time);                          
  lcd.setCursor(0, 1);
  lcd.print(Calendar);                        
}
void blink_parameter(){
  byte j = 0;
  while(j < 10 && digitalRead(8) && digitalRead(9)){
    j++;
    delay(25);
  }
}
byte edit(byte x, byte y, byte parameter){
  char text[3];
  while(!digitalRead(8));                      
  while(true){
    while(!digitalRead(9)){                    
      parameter++;
      if(i == 0 && parameter > 23)            
        parameter = 0;
      if(i == 1 && parameter > 59)            
        parameter = 0;
      if(i == 2 && parameter > 31)            
        parameter = 1;
      if(i == 3 && parameter > 12)            
        parameter = 1;
      if(i == 4 && parameter > 99)            
        parameter = 0;
      sprintf(text,"%02u", parameter);
      lcd.setCursor(x, y);
      lcd.print(text);
      delay(200);                              
    }
    lcd.setCursor(x, y);
    lcd.print("  ");                          
    blink_parameter();
    sprintf(text,"%02u", parameter);
    lcd.setCursor(x, y);
    lcd.print(text);
    blink_parameter();
    if(!digitalRead(8)){                      
      i++;                                    
      return parameter;                        
    }
  }
}

void loop() {
  if(!digitalRead(8)){                        
      i = 0;
      hour   = edit(5, 0, hour);
      minute = edit(8, 0, minute);
      date   = edit(5, 1, date);
      month  = edit(8, 1, month);
      year   = edit(13, 1, year);
      // Convert decimal to BCD
      minute = ((minute / 10) << 4) + (minute % 10);
      hour = ((hour / 10) << 4) + (hour % 10);
      date = ((date / 10) << 4) + (date % 10);
      month = ((month / 10) << 4) + (month % 10);
      year = ((year / 10) << 4) + (year % 10);
   
      Wire.beginTransmission(0x68);            
      Wire.write(0);                          
      Wire.write(0);                            
      Wire.write(minute);                      
      Wire.write(hour);                        
      Wire.write(1);                            
      Wire.write(date);                        
      Wire.write(month);                        
      Wire.write(year);                        
      Wire.endTransmission();                  
      delay(200);                              
    }
    Wire.beginTransmission(0x68);              
    Wire.write(0);                              
    Wire.endTransmission(false);                
    Wire.requestFrom(0x68, 7);                  
    second = Wire.read();                      
    minute = Wire.read();                      
    hour   = Wire.read();                      
    Wire.read();                                
    date   = Wire.read();                      
    month  = Wire.read();                      
    year   = Wire.read();                      
    DS3231_display();                          
    delay(50);                                  
}

7. FLOWCHART [kembali]



8. VIDEO SIMULASI [kembali]



9. LINK DOWNLOAD [kembali]
            rangkaian simulasi download
            listing program download
            video simulasi download

Tidak ada komentar:

Posting Komentar