IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik
Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel
Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.
Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul
Kegemaran saya mengoprek jam kalender dan TV dimulai sejak membaca tulisan mengenai steve wozniak dan steve jobs tentang bagaimana mereka bekerjasama membuat hardware video game "breakout" di Atari, hingga akhirnya menciptakan komputer apple yang legendaris itu. Dulu saat penulis kuliah sempat mendapat praktikum interfacing monitor VGA tapi hanya selintas aja dan menyesal juga kenapa gak sedari dulu bisa mengerti walau nilai praktikum dapat A (nyontek teman yg pinter sihhh). Dari dua latar belakang tersebut dan ketika microcontroller semakin murah dan mudah didapatkan menjadi tantangan tersendiri bermain micro di TV dan terlihat seperti main-main dan menghabiskan waktu, memang itu benar tapi asyik lhoo! Tapi jangan berkecil hati karena penulis juga dapat banyak ilmu terutama mengenai pemrograman script yang lebih efisien. Salah satunya adalah ketika tantangan komunikasi arduino ke ESP agar tidak mengganggu timer Atmega328 untuk scanning TV. Jika menggunakan Serial baik Hardware atau emulasi software tetap aja akan menimbulkan interfrensi timer. Untuk itu digunakan komunikasi dengan timer yg independen yaitu I2C. Dari hasil googling didapat bahwa ESP8266 bisa juga dimanfaatkan sebagai I2C master dan Arduino sebagai Slave nya.
Komunikasi I2C sudah tersedia librarinya dalam instalasi default sketch, yaitu dengan library " wire.h ". Untuk arduino uno / mini / micro yg berbasis ATmega328 pin SDA = A4 pin SCL =A5 . Dengan menggunakan I2C maka master dapat mengirim data atau meminta data ke slave. Tiap komponen yg diakses memiliki address masing-masing. Untuk ESP8266-01 memiliki 2 output GPIO yang bukan berfungsi sebagai I2C secara spesifik, sehingga perlu dilakukan inisialisasi port sendiri mana yg berfungsi sebagai SDA atau SCL.
Menyambung tulisan mengenai jam di TV dan esp8266 , maka sebelum melanjutkan ke bahasan dibawah ada baiknya paca dulu PART1 dan PART2.
- Praktek Testing I2C
Kita akan mencoba menghubungkan ESP sebagai master, terhubung secara I2C ke Arduino sebagai Slave dan tujuannya adalah mengirimkan data kalender secara periodik. Slave kemudian akan menuliskan hasil data yg diperoleh ke Serial port.
Script Master ( ESP8266-01)
#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include "TimeLib.h" //library I2c #include <Wire.h> //library NTP , unduh jika blom ada #include <NTPClient.h> const char *ssid = "Nama Wifi"; const char *password = "Password"; //Offset WIB +7 , sesuaikan const long utcOffsetInSeconds = 25200; long previousMillis = 0; long interval = 10000; //tiap 10 detik //Array kalender char tanggalan[] ="20,1,1,23,59,0" ; // NTP lokal, ubah jika perlu WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "ntp.bmkg.go.id", utcOffsetInSeconds); void setup(){ Serial.begin(9600); //monitor Wire.begin(0, 2); /* Koneksi i2c SDA=0 and SCL=2 pada ESP-01 */
#include <Wire.h> void setup() { Serial.begin(9600); Wire.begin(8); //rutin event receive i2c Wire.onReceive(espWifiReceiveEvent); } void loop() { delay(1); } //Kirim ke serial saat ada data i2c masuk void espWifiReceiveEvent(int count) { Serial.print("Received["); while (Wire.available()) { char c = Wire.read(); Serial.print(c); } Serial.println("]");
}
Nah jika dilihat output pada serial monitor / putty disisi arduino/slave seperti berikut:
- SCRIPT JAM LENGKAP
Terdapat beberapa hal yg menjadi perhatian saat data diterima arduino pada port I2C, dimana timer tetap akan kacau kalau data i2c nya panjang. I2C akan hang itulah yg terjadi saat 17 byte char diterima , jadi diakali dengan melakukan penonaktifan I2C setelah data kalender lengkap. Peng-update-an tanggalan dilakukan setiap jam atau sesuai keinginan misalnya tiap jam 3 pagi jika TV mau nyala terus dan gak dipake emak nonton sinetron..hehehehe...ayuk kita kupas satu persatu.
angle=(angle/57.29577951) ; //Convert degrees to radians
x3=(tvx+(sin(angle)*(tvradius-6)));
y3=(tvy-(cos(angle)*(tvradius-6)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);
angle = minute * 6 ;
angle=(angle/57.29577951) ; //Convert degrees to radians
x3=(tvx+(sin(angle)*(tvradius-11)));
y3=(tvy-(cos(angle)*(tvradius-11)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);
angle = hour * 30 + int((minute / 12) * 6 ) ;
angle=(angle/57.29577951) ; //Convert degrees to radians
x3=(tvx+(sin(angle)*(tvradius-15)));
y3=(tvy-(cos(angle)*(tvradius-15)));
TV.draw_line(tvx,tvy,x3,y3,WHITE);
}
void setup() {
//TV di mode NTSC
TV.begin(_NTSC,150,71);
TV.select_font(font6x8);
TV.clear_screen();
tvx= TV.hres()/2;
tvy=TV.vres()/2;
tvradius=TV.vres()/2 ;
//clock face lingkaran
TV.draw_circle(tvx,tvy,tvradius,WHITE);
//hour ticks
for( int z=0; z < 360;z= z + 30 ){
//Begin at 0° and stop at 360°
float angle = z ;
angle=(angle/57.29577951) ; //Convert degrees to radians
x2=(tvx+(sin(angle)*tvradius));
y2=(tvy-(cos(angle)*tvradius));
x3=(tvx+(sin(angle)*(tvradius-5)));
y3=(tvy-(cos(angle)*(tvradius-5)));
TV.draw_line(x2,y2,x3,y3,WHITE);
}
TV.set_cursor(10,30);
TV.print("NTP");
TV.set_cursor(0,55);
TV.print("aisi555");
TV.set_cursor(3,63);
TV.print(".com");
//buka serial kalau mau debug
//Serial.begin(9600);
Wire.begin(8); // I2C
Wire.onReceive(espWifiReceiveEvent);
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
TV.delay(980); // Sesuaikan antara 950-1000
printTime();
}
}
void espWifiReceiveEvent(int count)
{
//buka blok serial kalau mau debug
//Serial.print("Received[");
//jika i2c terima data dan blum komplit kalendernya
while (Wire.available() && ntpkomplit == false)
{
char c = Wire.read();
//Serial.print(c);
buff[buffindex]=c;
buffindex++;
}
//Serial.println("]");
//Ntpkomplit = true Jika buffer kalender sampe menit terpenuhi
if(buffindex >=14) {
ntpkomplit = true;
TWCR = 0; //bunuh i2c
}
buffindex = 0;
}
HASIL :
Proses update yg saya gunakan adalah tiap JAM atau menit ke 0, jadi memang tidak akan langsung terupdate akibat proses BITBANG tabrak menabrak antar timer vs i2c. Jadi seperti video berikut ini dapat dilihat UPDATE ke waktu NTP terjadi hampir 2 menit kemudian.
Bagaimana ? Sudah Mumet ? Sebaiknya baca dari awal ya PART1 dan PART2 dan juga bagian sebelumnya mengenai TV menggunakan microcontroller yang sudah saya tulis sejak 2012.