Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    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

  • Ayo Migrasi TV Digital

    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

  • Bermain DOT Matrix - LOVEHURT

    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.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    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

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Tampilkan postingan dengan label microcontroller. Tampilkan semua postingan
Tampilkan postingan dengan label microcontroller. Tampilkan semua postingan

Rabu, 22 Januari 2020

[Elektronika mudah] Hello World modul Bluetooth HM10 MLT-BT05-BLE4.0


BLE alias bluetooth low energy merupakan pengembangan terbaru teknologi wireless jarak dekat yaitu versi bluetooth 4.0 keatas dimana merupakan salah satu penggerak dunia IOT yang sangat digemari. Apabila anda jalan-jalan ke MALL dan melakukan scan bluetooth melalui perangkat HP smartphone maka anda akan terkejut  melihat banyaknya perangkat disekitar kita yang menggunakan komunikasi BLE. Contohnya dapat saya gambarkan disebuah mall di surabaya dengan hasil scan pada toko sepatu dan saya terkejut melihat hasilnya ...





Kira-kira barang apa yg ada disekitar saya ya ? Kok bisa banyak banget..dan ternyata setelah saya menengadah diatas kepala saya terdapat ratusan lampu LED dengan bentuk yg sedikit "oversize" dan ketika saya googling hasilnya lampu itu merupakan smartlamp BLE yang secara IOT dapat mengatur posisi dan kecerahannya sesuai kondisi yang diinginkan. Canggih bukan ?

Blog ini sempat juga berkenalan dengan modul bluetooth versi jadul yang bisa anda baca disini : http://www.aisi555.com/2013/09/tutorial-avr-bluetooth-android-its-easy.html , dan dapat diperoleh penjelasan dari praktek tentang kemudahan berkomunikasi serial secara wireless. Bagaimana dengan versi terbaru yang sudah mengadopsi teknologi BLE 4.0 ? Ternyata ada istilah baru yg harus digoogling apabila pertama mengenal BLE yaitu ADVERTISING, UUID, SERVICE, GATT, CHARACTERISTIC  dan sebagainya. Untuk mempersingkat pemahaman bisa dilihat pada hasil scanning di smart TV berikut.

dan ketika kita bonding dengan alat BLE semacam smart watch bisa dilihat akan muncul beberapa UUID dan Characteristicnya dalam format yg sedikit menakutkan bagi orang awam.



Jadi biar tidak bingung cukup dibayangkan UUID  sebagai bapaknya, Characteristic sebagai anaknya. Prosesor yg terhubung dengan BLE akan menentukan properties dari masing CHAR apakah bisa dibaca, ditulis atau memberikan notifikasi. Nah data CHAR inilah  yg nanti akan diisikan data oleh prosesor Input Output BLE dan pihak lawan membacanya atau merubah nya seperti umumnya client/server yg berkomunikasi secara wireless.

Dipasaran modul siap pakai BLE hanya ditemukan satu model yaitu "clone" yg mengaku BT09-AT . Tetapi ketika penulis mencoba berkenalan "hello world" ternyata modul ini lebih ke versi MLT-BT05 yang memang sudah ber versi BLE 4.0 . Mari kita bahas cara berkenalan dengan modul BT05 ini. Kesan saya pertama kalinya memegang alat ini:

  • Power supply bisa gunakan 5Volt jadi aman menggunakan micon atau arduino
  • Level serial ditulisan 3.3V , tapi serial TTL cukup juga kok levelnya
  • Jika menggunakan USBSERIAL untuk mencoba berkomunikasi maka akan sangat kesulitan sebab batasan muncul ketika perintah serial yg dikirim tanpa memerlukan CR (enter) dan LF (\n). Jadi AT command yg dikirim akan sedikit berbeda seperti pada modem GSM
  • Akibatnya untuk hello world sebaiknya langsung menggunakan arduino saja seperti gambar rangkaian dibawah ini.



Dengan script berikut ini yg berdasarkan komunikasi serial biasa maka akan dapat di test hasil dari AT command paling dasar yaitu AT+NAME<nama nya bluetooth> .

include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); // RX, TX

void setup() {
  
  mySerial.begin(9600);
  Serial.begin(9600);

  sendCommand("AT");
  sendCommand("AT+NAMEwww.aisi55.com");
}

void sendCommand(const char * command){
  Serial.print("Command send :");
  Serial.println(command);
  mySerial.println(command);
  //delay bentar
  delay(100);
  
  char reply[100];
  int i = 0;
  while (mySerial.available()) {
    reply[i] = mySerial.read();
    i += 1;
  }
  //biar string end
  reply[i] = '\0';
  Serial.print(reply); //tulis jawaban dari BLE
  Serial.println("Sukses");
}

void loop() {

}


jika dilihat monitor terminal serial  akan muncul jawaban sebagai berikut 


Dan hello world saya sukses dengan berhasil memancarkan sinyal BLE dengan nama www.aisi555.com. Bisa dicoba juga menambahkan beberapa AT command lainnya seperti AT+VERSION  dan  AT+ADDR . Selamat mencoba.
Share:

Senin, 13 Januari 2020

[Elektronika mudah] Berkenalan Dengan MakeBlock vs Arduino - Praktek Dasar Led Blink & Sensor LM35



" Mengajarkan ilmu ke anak-anak yg lahir setelah generasi milenial haruslah berbasis VISUAL .." 

Apaan lagi nih bikin pusing aja ? Quote tadi saya kutip dari pembicaraan bersama teman sesama penjaga stand pada pameran ARTPRENEUR pada akhir desember 2019. Kegalauannya pecah ketika melihat kenyataan  siswanya (anak smk) dimana hanya segelintir saja yg bisa menyerap ilmu coding web php yg dan berujung banyak siswa yg bolos. Kenapa sepeti itu ya ? Kenapa coding menjadi tidak menarik ? Padahal penulis sangat mencintai coding (yang gampang tentunya). Saya merasakan masuk kedalam koding sangat mengasyikkan layaknya memecahkan sebuah role play game, mungkin dapat dibandingkan seperti keasikan anak sekarang bermain Mobile Legend. 


Pada dasarnya pemrograman DRAG & DROP bukan barang baru terutama era 90-an dengan  platform pemrograman desktop yaitu Visual Basic, C# dan Delphi dimana membuat tombol dan input teks hanya dari ujung mouse. Apalagi setelah era macromedia / adobe flash malahan semakin dimanja pemrograman nya dengan penggabungan animasi dan actionscript (penulis jagonya di flash sih). Lalu kita tengok pemrograman visual drag-drop lainnya, Scratch menjadi Visual IDE (berbasis flash) pilihan untuk tujuan edukasi koding ke anak-anak yg dikembangkan oleh MIT. Semakin dimanjanya anak-anak dengan gadget dan pilihan aplikasi yg langsung tampil "VISUAL" nya menyebabkan proses koding berbasis teks menjadi kurang menarik lagi. Bagaimana dengan pemrograman microcontroller  yg selama ini selalu dilakukan pada mode teks?


Mudah bukan gambaran program scratch diatas ? Bagaimana dengan pemrograman arduino pada scratch? Sama gampangnya kok...liat nihh...


Mulai tertarik dengan bahasa pemrograman drag and drop diatas ? Jika iya mari saya ajak menyelam membuat Hello Word dengan praktek Led Kedip dan Pembacaan Sensor Suhu LM35. Untuk itu anda perlu menuju ke  IDE online web ( http://ide.mblock.cc ) atau download saja programmer offline nya yg tersedia di websitenya (googling aja).  Perlu diketahui makeblock atau mblock merupakan platform programming robotik dari senzhen china yg demi menarik pasar anak-anak pencinta robotik maka dimanfaatkanlah scratch sebagai programming IDE nya. Tentunya jika ingin lebih menarik minat anak-anak anda harus membeli Mbot atau modul robotik yg memang dibuat semenarik mungkin dan sesuai tujuan mblock. Namun bagi anda yg hanya mempunyai board clone arduino seperti UNO jangan khawatir masih bisa kok. Mau saya bagi langkah-langkahnya berkenalan ? Ikuti tulisan dibawah.




  1. Device & Connection : Untuk arduino UNO butuh melakukan download modul librarinya. Menu awal ketika membuat project baru akan muncul  device Codey dan sprite panda. Hapus saja karena tidak diperlukan.
  2. Component : Berisikan semua block komponen pemrograman yang diperlukan. Penggunaannya sangat simple hanya klik drag dan drop.
  3. Block Canvas : Yaitu tempat menyusun komponen menjadi blok saling berkaitan yang kemudian akan diterjemahkan menjadi suatu software arduino
  4. Code : Tempat kode yang equivalen dengan block pada canvas. Jadi bagi anda yg sudah menguasai sketch arduino akan mudah memahami walau akan ada batasan yg akan dihadapi.



HELLO WORD LED BLINK


PIN 13 sebenarnya sudah memiliki LED internal pada PCB tapi kalau mau lebih terang ya bisa mengikuti gambar diatas. Langkahnya dari awal seperti ini nih..



Jangan lupa ya gambar diatas dimana harus ditambahkan device Arduino UNO pada kolom devices. Pastikan driver USB to Serial ch340 sudah terinstal juga di komputer kamu.




Gambar diatas menunjukkan cara melakukan koneksi ke board arduino uno kamu dan akan muncul gambar dikanan apabila sudah terkoneksi dengan baik. Lanjut yuk kita berkenalan dengan Component beserta proses drag-dropnya ke dalam canvas.


Komponen block events yg mungkin satu-satunya dipakai dalam pemrograman arduino Uno adalah "when Arduino Uno Starts up "



Komponen PIN berisikan blocks yg berhubungan dengan PIN IO baik untuk mengatur fungsinya maupun pembacaan datanya, jadi super lengkap dari PWM sampai ADC. Contoh diatas kita akan menyusun blocks sehingga PIN 13 (LED) merupakan pin OUT dan kemudian kita bisa tentukan statenya apakah HIGH (nyala) atau LOW (mati).


Komponen control berisikan block perintah pengulangan, delay serta conditional statement. Tidak begitu susah kalau hanya buat menyalakan dan mematikan LED tiap 1/2 detik seperti gambar diatas. Tinggal menentukan blocks yg sesuai urutannya dan selanjutnya dapat dievaluasi melalui script yang berada dikanannya. Memang akan terjadi kesalahpahaman mengenai fungsi LOOP yg digantikan oleh perintah WHILE(1) pada fungsi void setup. Tapi secara fungsi itu PODO WAE MUNYER SAMPEK KIAMAT.


Komponen blocks Variables seperti namanya kita akan mendaftarkan sebuah variabel atau list(array) dan kemudian dapat kita tentukan nilai nya melaui block "set" atau perubahannya melalui  block "change". Pada gambar diatas kita buat variabel coba bernilai awal 0, kemudian pada awal setup dirubah menjadi 2 dan melalui LOOP FOREVER akan berubah nilainya bertambah 1 tiap 1 detik.



Komponen operators berisikan operator aritmatika, binary serta operasi string. Tidak jauh berbeda dengan pemrograman teks lainnya yg menjadi spesial adalah drag drop antar blocks yg harus sesuai bulat atau persegi sesuai operasi yang diinginkan. Contoh penggabungan blocks control dengan blocks operators ada pada pembahasan dibawah.



Tujuan dari blocks diatas adalah menghidupkan dan kemudian mematikan LED dengan memperhatikan nilai dari variabel angka. Jadi saat angka <50 maka LED akan menyala lalu saat angka >50 maka LED akan mati. Untuk mengembalikan variabel angka ke 0 maka dibuat satu blocks IF statement lagi yg akan meReset varibel angka menjadi NOL. Sudah siap mencoba di Arduino UNO kamu ? Langsung tancapkan saja dan tekan UPLOAD !



MEMBACA SUHU LM35





Jika berbicara tentang pembacaan sensor LM35 pasti semua paham sangat gampang scriptnya bertebaran dibahas di google..jadi jika dikembangkan melalui scratch Mblocks menjadi satu baris yg sangat indah seperti gambar dibawah ini.


Mau tahu hasilnya seperti bagaimana di terminal serial putty ?



Tentunya MakeBlock memiliki keterbatasan untuk penggunaan arduino uno tapi saya rasa cukup menarik untuk dipelajari. Jika ada uang lebih bisa tuh membeli modul robot mBot yang sangat memungkinkan diajarkan ke anak-anak generasi Z . Semoga tulisan saya dapat mengispirasi kalian untuk tetap semangat belajar.
Share:

Minggu, 08 Juni 2014

Dukun Fusebit Mengalahkan Fusebit Doctor !


Pernah mengalami masalah ic tidak response setelah mengubah fusebit clock pada microcontroler AVR ? 
Anda lupa clock yg digunakan atau Xtal yang akan disolder entah kemana ?
Duit cekak di penghujung bulan sementara tugas sudah deadline ?



DUKUN FUSEBIT AKAN MEMBANTU ANDA !



Anda tidak perlu menggunakan Fusebit Doctor yg dijual dipasaran atau rangkaian njlimet lainnya




Cukup Menggunakan Praktek dasar timer 555 yang ada disini



Dengan Menggunakan Rumus  Frequency = 1.44 / [C*(R2 + 2*R1)] 
Maka buatlah clock dengan frekuensi 500khz- 1Mhz dan hubungkan dengan kaki output (3) dari timer 555 menuju  XTAL1 pada ic microcontroller AVR anda.



Putar-putar VR/ Trimpot sehingga memiliki resistansi berkisar 20k - 30 k ohm dan hubungkan avr ke isp programmer seperti biasa ( disarankan menggunakan stk500/avrisk mk2, rangkai micro seperti biasa dan jangan lupa di beri vcc/gnd/pull up di rst). Jika Read signature berhasil maka lakukan perubahan Fusebit seperti biasa (ubah ke default internal RC saja)

Contoh ubah fusebit di avrstudio 4



Syarat dan ketentuan:

  • IC microcontroller dalam keadaan BAIK, hanya fusebit clock nya saja yg salah atau lupa
  • Port SPI masih dalam posisi ENABLE, jika tidak maka perlu HVPP (high Voltage Parallel Programming) atau menggunakan universal programmer (All-7/All-100) yg biasanya ada di toko yg melayani pengisian EEPROM Player DVD/TV




TUNGGU APALAGI ... 
SELAMAT MENCOBA !!
Share:

Selasa, 18 Maret 2014

[TUTORIAL] Clinometer (pengukur ketinggian) Sederhana Memanfaatkan ADC




Persiapan sebelum memulai project :

  • Tutorial ADC dapat dibaca disini
  • Dasar menulis ke LCD dapat dilihat disini

Bahan-bahan yang dibutuhkan :
  • Minimum System / ATmega 8535/ ATmega 16
  • Display LCD 16 x 2 
  • Potensiometer linear (nickel) 10K ohm(2 buah)
  • Resistor 1K (2 buah)

Project ini adalah request dari anak SMA yang mendapatkan tugas matematika dimana gurunya cukup "Gila" untuk menantang anak didiknya membuat alat clinometer atau pengukur ketinggian. Sang murid mencari di google dan didapatkan rangkaian yg menggunakan acelerometer tapi kendalanya harga yang mahal dan dia pun kesulitan mengerjakannya. Solusi saya cukup sederhana dengan memanfaatkan putaran sudut yg dikonversikan ke putaran potensiometer (variable resistor) yang kemudian dirubah ke dalam level tegangan dan dibaca ADC.


Gambar diatas merupakan ilustrasi trigonometri dari sebuah clinometer dengan mencoba memanfaatkan rumus trigonometri. Keuntungan rumus diatas adalah tidak perlu menentukan jarak pengamat ke benda yang diukur,akan tetapi karena mengandalkan rumus tangen maka dari grafik tangen berikut terjadi sedikit anomali pengukuran jika sudut mendekati kelipatan 90 derajat, dimana tangent 90 adalah tak berhingga !.

grafik tangen yang tidak linear sedikit mempengaruhi keakuratan


Pemilihan potensiometer yang akan digunakan sebagai penerjemah dari sudut ke tegangan (menggunakan prinsip pembagian tegangan) juga perlu diperhatikan karena pada umumnya potentiometer yg dijual dipasaran adalah potentiometer audio yg bersifat logaritmik. Jadi potentiometer yang dipilih adalah berjenis "wire wound" atau yang umum di pasaran bernama "potensiometer nikel".



Output dari project kali ini menggunakan lcd 16x2 yang akan menampilkan nilai sudut alpha, beta dan nilai hasil pengukuran ketinggian.



Perputaran sudut pengukuran vs tegangan yg dihasilkan dapat menggunakan rumus pembagian 10 bit adc (0 - 1023) sehingga didapat sudut yang mewakili per bit. Tentunya potensiometer tidaklah terlalu linear karena banyak faktor dan untungnya kita hanya menggunakan sudut 0-90 derajat saja untuk alpha maupun beta. Saya mendapatkan untuk sudut 0-90 dapat menggunakan pembagian nilai bulat per bit ADC yaitu  "pembacaan adc / 3". Jadi sesuaikan dulu dengan respon nilai potensiometer yang kamu punya dengan sudut yang dihasilkan.

Untuk pengukuran tangen pada WinAvr akan digunakan library "math.h" dimana pengukuran sudut akan dirubah menjadi satuan radian. Rumus yang digunakan tentunya akan sangat memakan memory akibat nilai "float" yang digunakan. Hal ini kita akali saja dengan menggunakan unsigned integer 32 bit dengan pendekatan seperti berikut :

  • tana = tan((M_PI*adcalpha)/180)*1000;
  • tanb = tan((M_PI*adcbeta)/180)*1000;
  • tinggi= (tanb/tana) + 1 ;

Kita ingat juga konversi dari derajat ke radian digunakan rumus :


  • RADIAN = (PI * sudut ) /180 


Pengali 1000 pada rumus diatas digunakan untuk mendapatkan nilai float (pecahan / koma) menjadi ratusan sehingga pembagian menjadi agak bulat.


Skematiknya adalah sebagai berikut ini :

klik untuk memperjelas


Script selengkapnya seperti dibawah ini, diasumsikan bahwa tinggi pengamat 1 meter :


#define F_CPU 4000000UL
#include <string.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <math.h>
#include "lcd.h"

char derajat = 0xDF; // karakter derajat

void reverse(char s[]) //rutin untuk merubah angka ke ascii
   int c, i, j; 
    
   for (i = 0, j = strlen(s)-1; i < j; i++, j--){ 
      c = s[i]; 
      s[i] = s[j]; 
      s[j] = c; 
   } 
void itoa(uint16_t n, char s[]) 
//rutin untuk merubah angka ke ascii
   uint16_t i;
   
   i = 0; 
   do {   // generate digits in reverse order 
      s[i++] = n % 10 + '0'; // get next digit 
   } while ((n /= 10) > 0); // delete it 

   s[i] = '\0'; // add null terminator for string 
   reverse(s); 


void initADC() //inisialisasi ADC
{
ADMUX=(1<<REFS0);// Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}


uint16_t ReadADC(uint8_t ch) //pembacaan ADC
{
   //Select ADC Channel ch must be 0-7
   ch=ch&0b00000111;
   ADMUX|=ch;

   //Start Single conversion

   ADCSRA|=(1<<ADSC);

   //Wait for conversion to complete
   while(!(ADCSRA & (1<<ADIF)));

   //Clear ADIF by writing one to it
   ADCSRA|=(1<<ADIF);

   return(ADC);
}

int main(void)
{

uint16_t baca1,baca2,tana,tanb,tinggi;
char dum;

lcd_init(LCD_DISP_ON);//inisialisasi LCD
lcd_clrscr(); //bersihkan LCD

   while(1)
   {
      initADC(); 

      baca1=ReadADC(6) / 3; //baca alpha
      if(baca1 <90){ //jika hasil tidak lewat 90 derajat

      lcd_gotoxy(0,0);
      lcd_putc(224); //ascii alpha
      lcd_puts(" =");

          itoa(baca1,&dum);
  lcd_puts(&dum);
 lcd_putc(derajat);
 lcd_putc(' ');
 
 }

 else{ //jika lebih 90 di warning
          lcd_gotoxy(0,0);
 lcd_putc(224);
 lcd_puts(" =max");
 }


     _delay_ms(100);

initADC();


     baca2= ReadADC(5) / 3; //baca beta

     if(baca2 <90){  // jika perhitungan < 90 derajat
 
 lcd_gotoxy(8,0);
 lcd_putc(226);
          lcd_puts(" =");

          itoa(baca2,&dum);
 lcd_puts(&dum);
 lcd_putc(derajat);
 lcd_putc(' ');
      }

      else{  //jika lebih 90 di warning
          lcd_gotoxy(8,0);
 lcd_putc(226);
 lcd_puts(" =max");
 }

      _delay_ms(100);
 lcd_gotoxy(0,1);
      

      if(baca1 <90 && baca2 <90){
          //PERHITUNGAN TINGGI
          tana = tan((M_PI*baca1)/180)*1000;
 tanb = tan((M_PI*baca2)/180)*1000;
 tinggi= (tanb/tana) + 1 ;
 
 lcd_puts(" TINGGI:");
          itoa(tinggi,&dum);
 lcd_puts(&dum);
 lcd_puts(" m");
 lcd_puts("        ");
 }

         else{
          lcd_gotoxy(0,1);
 lcd_puts(" TINGGI: Error !");
 }
   }
return 0;

}


SELAMAT MENCOBA  
Share:

Kamis, 02 Januari 2014

Trick Pada Mikrokontroler Saat Catuan Menghilang




Selamat Tahun Baru 2014 kepada pembaca setia aisi555 dot com. Semoga ditahun yang baru ini berbagi ilmunya semakin bermanfaat bagi kita semua. Doakan saya juga agar sehat dan terus berkreasi serta membagi ilmu kepada kalian semua. 

Tahun baru ini dimulai dengan berbagi trick mengatasi masalah hilangnya catuan pada microcontroller. Kita tidak akan membahas fasilitas sleep mode dan low power mode lainnya karena ada alasan yg menyebabkan hal ini tidak diperlukan pada level mikrokontroler sederhana. Yang kita akan bahas adalah jawaban dari pertanyaan yang beberapa hari yang lalu disampaikan oleh pembaca.

  1. Bagaimana membuat jam digital tetap jalan saat lampu mati sehingga saat nyala kembali jam tidak kacau ?
  2. Bagaimana melanjutkan hasil counter di alat saya pada saat catuan menyala lagi ?

Pembahasan kali ini menggunakan metode battery backup dan yang lainnya menggunakan memory EEPROM yg sudah dimiliki mikrokontroler untuk menyimpan data sebelum catuan hilang. Untuk itu sebelum melanjutkan agar terlebih dahulu membaca pembahasan mengenai eeprom disini.


Bagaimanakah logika dari rangkaian diatas ? Prinsip yang digunakan adalah prinsip arus searah dari dioda.


VCC atau sumber tegangan dari microcontroller yang masih ditoleransi adalah minimal 2.5 volt (kecuali pengukuran ADC). Saat supply utama masih memberikan tegangan maka gambar dibawah ini mewakili kondisinya.


Jika tegangan baterai yang diberikan bernilai kurang dari VCC + 0.5 volt (forward voltage)  dari tegangan dikiri katode maka arus tidak akan mengalir ke arah VCC. Dalam contoh digunakan 3 buah baterai 1.5 volt yg ekivalen kurang dari 4.5 volt. Apa yang terjadi ketika sumber utama tidak ada ? Berikut ini gambarannya.


Dengan tidak adanya sumber di kiri katoda maka VCC akan benilai  tegangan baterai dikurangi 0.5 volt yang merupakan forward voltage dari dioda. Trick yg mungkin menghemat penggunaan baterai saat catuan utama mati adalah dengan mematikan fungsi yg memakan energi besar. Ini menjawab pertanyaan no 1 yang intinya adalah untuk menjaga fungsi waktu tidak kacau sehingga tidak diperlukan tampilan ke display 7 segmen. Caranya adalah dengan menggunakan supply yg terpisah ke catuan display 7 segmen dan catuan ini bersumber ke adaptor/trafo yg akan mati ketika PLN mati. Cara lainnya adalah dengan menggunakan deteksi tegangan menggunakan transistor.



Script deteksinya mudah saja


if(bit_is_clear(PIND, PIND2) ) // jika catuan normal
{

 yang_boros_nyala(); 

}

else  // jika catuan mati dan baterai aktif

{

 yang_boros_mati(); 

}


Trick seperti gambar diatas dapat juga digunakan untuk menjawab pertanyaan kedua. Ini alasannya mengapa deteksinya dipasang di PIN D2 yang juga merupakan pin untuk INT 0. Marilah kita ingat pembahasan interrupt disini. Jadi saat power supply mati maka deteksi dari low ke high akan kita gunakan untuk proses penyimpanan data counter sebelum sumber benar-benar hilang. Bagaimana ceritanya menjalankan mikrokontroller padahan tegangan sumber tidak ada  ? Jawabannya cukup simpel dengan menggunakan kapasitor pada VCC untuk menyimpan tegangan 5 volt beberapa saat.



Bagaimana dengan scriptnya ? Kita inisialisasi dulu Interuptnya , kali ini menggunakan ATMega 8535


#define F_CPU 4000000UL
#include <avr/io.h>
#include <avr/interrupt.h>  // INI JANGAN LUPA !!
#include <avr/eeprom.h>
#include <util/delay.h>


uint8_t EEMEM eecounter;

uint8_t counter;


void init_interupt(void)
{
  
// interrupt aktif ketika perubahan Low ke High (0--> 1)
MCUCR |= (1<<ISC01)|(1<<ISC00) ; 
  
// aktifkan INT 0
GICR |= (1<<INT0);

   sei();

}




Dan ketika saat power PLN mati dan kemudian basis transistor tidak mendapatkan tegangan maka transistor akan ada pada kondidi cut off sehingga pada pin INT 0 terjadi perubahan dari LOW (0) ke HIGH (5volt) dan berdasarkan inisialisasi telah ditentukan trigger interrupt pada kondisi "rising edge" . Pada kondisi ini hasil dari counter disimpan ke EEPROM.


ISR(SIG_INTERRUPT0) 

eeprom_write_byte(&eecounter,counter);

}



Dan ketika listrik menyala kembali yang pertama dilakukan adalah membaca isi eeprom dari counter



int main(void)
{


counter= eeprom_read_byte(&eecounter); //baca eeprom

init_interupt(); //inisialisasi interrupt


while(1)
{

// contoh program penambahan counter
// sesuaikan dengan keperluan

counter++;  

_delay_ms(2000);


}

return(0);

}




SELAMAT MENCOBA
Share:

Jumat, 20 Desember 2013

[TUTORIAL] Keypad + LCD + Password



Tutorial berikut ini merupakan kelanjutan dari pembahasan sebelumnya mengenai keypad dan lcd dengan menitikberatkan pada proses input dan pengecekan password. Prinsipnya mudah saja hanya dengan memindahkan penekanan tombol ke array memory dan kemudian membandingkannya dengan password yg diinginkan. Untuk itu agar diperhatikan juga pembahasan mengenai ARRAY.



uint8_t pas[6];  // ARRAY untuk menyimpan inputan tombol
uint8_t pase[6]={ 1,2,3,4,5,6 } ; //ARRAY password yg akan dibandingkan




Langkah pertama mendeklarasikan ARRAY yg akan menyimpan inputan tombol. Kita batasi jumlah password yg diinput 6 angka sehingga array ini memiliki panjang 6. Setiap tombol ditekan maka array pas[ ] akan dimasukkan nilai dari variabel keypad.



Untuk menampilkan karakter diatas scriptnya adalah :


lcd_init(LCD_DISP_ON_CURSOR);  //inisialisasi LCD
lcd_puts(" Input Password:");
lcd_gotoxy(4,1);              //pindah baris



Sedangkan untuk memindahkan inputan keypad seperti berikut:


//jika tombol ditekan (bukan * dan # )
if(keypad!= 100 && keypad !=21 && keypad !=20 ) 
 {  
  

   if( posisi < 6 ) {    //ada 6 buah password
   lcd_putc('*') ; // tampilkan asterix untuk password
   pas[posisi]=keypad; //pindahkan nilai keypad ke array
      posisi++; //tambahkan nilai posisi
 
      }

 

 _delay_ms(150);   
   

   }






 Jika ingin mengoreksi password yg telah dimasukkan , maka cancel diwakili oleh tombol '*' dan scriptnya seperti berikut :


if(keypad == 21 )  // penekanan * berarti hapus 1 kebelakang
 {  
  

 
 if(posisi != 0)  posisi--;  //posisi kursor dikurangi



  

  lcd_gotoxy((posisi +4),1); //mundur 1 posisi 
  lcd_putc(' '); //bersihkan kursor
  lcd_gotoxy((posisi +4),1); //balik lagi


 
 _delay_ms(150);   
   

   }






Berikut ini adalah script untuk membandingkan password :


 if(keypad == 20 )  // penekanan # berarti password bisa dicek
 { 


  if(posisi == 5) { //jika sudah semua password dimasukkan
//berikut ini pembanding
   if( pas[0] == pase[0] && pas[1] == pase[1] && pas[2] == pase[2] && pas[3] == pase[3] && pas[4] == pase[4] && pas[5] == pase[5]  )

    {

     lcd_gotoxy(1,0);
  lcd_puts(" Password Benar "); //jika benar

 }
   else
   {
   
     lcd_gotoxy(1,0);
  lcd_puts(" Password Salah "); //jika salah
   }   
  
  
  }




 _delay_ms(150); 

 }





Hasilnya seperti berikut :





Script selengkapnya dapat didownload disini.



SELAMAT MENCOBA


Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) arduino (26) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (7) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (7) radio (24) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika