LAPORAN PRAKTIKUM
Internet of Things
Timer dan Counter pada Mikrokontroler
Disusun oleh:
Ilham Rezkiawan
(23/522232/SV/23637)
Isdiizaz Zhifrana Ramadhana
(23/522272/SV/23643)
Kelas : IK3B2
TEKNOLOGI REKAYASA INSTRUMENTASI DAN KONTROL
DEPARTEMEN TEKNIK ELEKTRO DAN INFORMATIKA
SEKOLAH VOKASI
UNIVERSITAS GADJAH MADA
2024
JOOBSHEET
NO. 1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
boolean dataLed = 0;
unsigned int overflowCount = 0;
// Inisialisasi LCD I2C (alamat bisa berbeda, biasanya 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, 16 karakter, 2 baris
void setup(){
[Link](9600);
pinMode(13, OUTPUT);
// Inisialisasi LCD
[Link]();
// Set timer dengan prescaler 256
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 34286;
TCCR1B = (1 << CS12); // 256 prescaler
TIMSK1 = (1 << TOIE1); // Enable Timer Overflow Interrupt
sei(); // Enable global interrupt
// Tampilkan pesan awal di LCD
[Link](0, 0);
[Link]("Overflow:");
[Link](0, 1);
[Link]("LED State:");
}
ISR (TIMER1_OVF_vect) {
TCNT1 = 34286; // Reload timer value
// Update status LED
if(dataLed == 0){
dataLed = 1;
} else {
dataLed = 0;
}
digitalWrite(13, dataLed); // Update LED state
overflowCount++; // Increment overflow count
}
void loop() {
// Tampilkan overflowCount dan status LED di Serial Monitor
[Link]("Overflow Count = ");
[Link](overflowCount);
[Link](", LED State = ");
[Link](dataLed);
// Tampilkan data ke LCD
[Link](10, 0); // Set posisi pada baris pertama
[Link](overflowCount); // Tampilkan overflow count
[Link](10, 1); // Set posisi pada baris kedua
[Link](dataLed); // Tampilkan status LED (0 atau 1)
delay(100); // Delay for readability
}
NO. 2
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi display I2C 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);
unsigned long previousMillis = 0; // Waktu terakhir diperbarui
const long interval = 1000; // Interval 1 detik
// Variabel untuk jam, menit, dan detik
int hours = 0;
int minutes = 0;
int seconds = 0;
void setup() {
// Inisialisasi tampilan LCD
[Link]();
[Link]();
// Tampilkan teks tetap pada baris 1, 2, dan 4 dengan huruf besar
[Link](0, 0);
[Link]("PRAKT MIKROKONTROLER");
[Link](0, 1);
[Link]("JAM DIGITAL W9 TIMER");
[Link](2, 3); // Posisikan teks agar berada di tengah baris keempat
[Link]("BY ILHAM & ZIFRAN");
}
void loop() {
unsigned long currentMillis = millis();
// Perbarui waktu setiap detik
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
seconds++; // Tambah detik
// Cek jika detik mencapai 60
if (seconds >= 60) {
seconds = 0;
minutes++; // Tambah menit
}
// Cek jika menit mencapai 60
if (minutes >= 60) {
minutes = 0;
hours++; // Tambah jam
}
// Cek jika jam mencapai 24
if (hours >= 24) {
hours = 0; // Reset jam
}
}
// Tampilkan jam:menit:detik pada baris ketiga, di tengah
[Link](5, 2); // Posisikan jam di tengah baris ketiga
if (hours < 10) [Link]('0'); // Tambahkan 0 jika jam < 10
[Link](hours);
[Link](':');
if (minutes < 10) [Link]('0'); // Tambahkan 0 jika menit < 10
[Link](minutes);
[Link](':');
if (seconds < 10) [Link]('0'); // Tambahkan 0 jika detik < 10
[Link](seconds);
}
NO. 3
/* Program Pertemuan 7.3 */
/* Counter Mode Falling Edge */
void setup() {
[Link](9600); // Inisialisasi komunikasi serial
// Konfigurasi Timer1 untuk counter mode (Falling Edge)
TCCR1A = 0x00; // Mode normal
TCCR1B = 0x06; // External clock source on T1 pin (Falling edge)
// Reset nilai counter
TCNT1H = 0x00;
TCNT1L = 0x00;
// Tidak menggunakan ICR1 dan OCR1, jadi kita bisa mengabaikan
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x00;
OCR1BH = 0x00;
}
void loop() {
// Tampilkan nilai dari Timer1 (TCNT1) dalam format desimal
[Link]("Nilai TCNT1 = ");
[Link](TCNT1, DEC); // Cetak nilai TCNT1 dalam desimal
delay(100); // Delay untuk memberikan jeda waktu
}