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

Kamis, 30 Mei 2013

SMS KONTROL: Kirim SMS dengan AVR ATTiny 2313



  


Pada praktek kali ini kita akan memanfaatkan ATtiny 2313 sebagai controller untuk mengirim sms ketika tombol ditekan


Baud rate untuk komunikasi RS232 adalah 9600, sehingga sebelum menggunakan modem (modem yg dipake modem wavecom dengan port rs232) perlu diset baud rate nya 9600 dengan AT command melalui PC dengan software terminal seperti hyperterminal atau putty. Ingat secara default modem wavecom memiliki baudrate 115200 sehingga koneksi awal menggunakan baudrate 115200. Setting juga mode control dari komunikasi serial yang hanya menggunakan 3 kabel (tx rx gnd) sehingga dipilih control mode = none.


AT+IPR=9600<enter>
OK
AT+IFC=0,0<enter>
OK
AT&W<enter>



Rangkaian elektronik nya sebagai berikut : (klik untuk memperjelas)


*) koneksi dari PORT Serial ke Serial DB9 secara cross , 1 vs 3(DB9-Rx) , 2 vs 2(DB9-Tx) , GND=5(DB9)
**) xtal yg digunakan nilainya khusus (7372800), jika menggunakan yg umum (4/8 mhz) atau default 1Mhz maka akan terjadi error 0,2%, tetapi tidak terlalu signifikan jika hanya kirim sms
***) ketika tombol ditekan maka micro akan mengirimkan perintah ke wavecom untuk mengirim sms


secara bertahap kita akan bahas programming dalam GCC-WINAVR-AVRSTUDIO




Inisialisasi Awal

Yang utama dari bagian inisialisasi adalah penulisan clock CPU yang digunakan, sebaiknya membaca datasheet dibagian BAUD RATE dan hubungannya dengan persentase error akibat pembagian clock yang tidak bulat.

#define F_CPU 7372800UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 

//definisi baudrate RS232

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)


Inisialisasi command2 AT COMMAND sebagai variabel constant



//ganti nomer HP 
const char sms[] PROGMEM=  "AT+CMGS=0812345678\r test dari micro";

const char smsend[] PROGMEM= {0x1A}; // ascii dari CTRL+Z

Routine untuk inisialisasi USART


void init_usart(void)
{


   UCSRB |= (1 << RXEN) | (1 << TXEN);   
   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 
   UBRRL = BAUD_PRESCALE; 
   UBRRH = (BAUD_PRESCALE >> 8);
   UCSRB |= (1 << RXCIE);  //interupt serial usart

  }


Routine untuk kirim karakter melalui RS232



void USART_Tx(unsigned char data)
{   
    
   while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
    UDR = data; // Send data to the computer
}

void kirim_text(const char *data)
{
   while (pgm_read_byte(data) != 0x00)
     USART_Tx(pgm_read_byte(data++));
}

Routine interupt untuk membaca tombol dan kirim sms



SIGNAL (SIG_INT0)
{

kirim_text(sms);
kirim_text(smsend); 
}
Routine main program


int main(void)
{
   GIMSK |= (1<<INT0) ; // tombol interupt  0
   MCUCR |= (1<<ISC01)| (1<<ISC00); //rising edge interupt

   init_usart(); // inisialisai komunikasi usart
 
   sei(); //hidupkan interupt


while(1)

   {
   }


}

Jika menggunakan clock external / xtal , jangan lupa untuk mengaktifkan clock external dari Attiny di fusebit/CKSEL, pilihlah frek yg high. 




Aplikasi pada contoh praktek kali ini dapat digunakan juga dalam berbagai keperluan, diantaranya:


- Alarm (contoh pintu terbuka langsung kirim sms, sensor menggunakan limit switch)
- Deteksi level tegangan AC jika drop langsung kirim sms (sensor menggunakan komparator)
- Deteksi level air, misal untuk pendeteksi banjir maka otomatis mengirim sms (sensor level air sederhana menggunakan transistor FET)

- dsb

SELAMAT MENCOBA
Share:

Jumat, 17 Mei 2013

DHT-11: Sensor suhu dan kelembaban murah meriah

courtesy of : http://www.candrian.gr/index.php/dht-11-one-wire-bus/

Sensor DHT-11 merupakan sensor suhu & kelembaban versi LOW COST dengan hasil yang "cukup". Jika membutuhkan hasil yang lebih stabil maka kita perlu menggunakan sensor buatan sensirion SHT-11 dan seri sejenis.


Spesifikasi:

Supply Voltage: +5 V
Temperature range :0-50 °C error of ± 2 °C
Humidity :20-90% RH ± 5% RH error
Interface: Digital


  



Data bus sensor ini bukan TWI / I2C melainkan bus tersendiri dimana nilai 1 & 0 dibedakan melalui LEBAR PULSA HIGH

sebelum lanjut lebih mendalam, sebaiknya bagi yang belum menguasai penulisan ke LCD agar mempelajarinya disini.


skematik yang kita gunakan adalah sebagai berikut:






Lanjut kita akan bahas scriptnya, tapi hanya dibagian DHT11 nya, untuk detail LCD harap membaca posting sebelumnya (LCD & ADC/termometer LM35 terutama dibagian ITOA)

seperti sumber link diatas , 1 PIN I/O akan berfungsi sebagai Output dan Input bergantian, untuk langkah pertama akan dikirimkan perintah START oleh micro ke DHT 11



jadi kita kirim pulsa Low 18ms dan High 40us, lalu kita tunggu sebentar sampai ada response/jawaban dari DHT 11 berupa pulsa low - high selebar 54us & 80us



setelah itu hasil pengukuran akan dikirimkan sensor menggunakan format 8bit sebanyak 5 kali


scriptnya seperti yang dibawah ini :


void baca_sensor()
{

char dum;  // variabel sementara

suhu=0;
humi=0;
counter=0;

DDRD|=(1<<PD3); //PD3 sebagai output
_delay_ms(250);

PORTD &=~(1<<PD3); // nolkan PD3
_delay_ms(18); //tunggu 18 ms

PORTD |=(1<<PD3); // naikkan PD3
_delay_us(40); //tunggu 40us


DDRD &=~(1<<PD3); //PD3 sebagai input

//tunggu response dari DHT11

while(counter <100)
{
_delay_us(1);
counter++;
if (bit_is_set(PIND, 3)) break;
}

counter=0;

while(counter <100)
{
_delay_us(1);
counter++;
if (bit_is_clear(PIND, 3)) break;
}


//baca data setelah response, lihat script di pembahasan selanjutnya untuk routine hitung()

//8 bit pertama ( puluhan kelembaban )
humi=hitung();
//8 bit kedua( satuan kelembaban ), tidak usah di baca karena nilai selalu 0 untuk DHT11
hitung();
//8 bit ketiga ( puluhan suhu )
suhu=hitung();
//8 bit keempat ( satuan suhu ), tidak usah di baca karena nilai selalu 0 untuk DHT11
hitung();

//8 bit ke 5 tidak perlu dihitung 
//tulis lcd
lcd_gotoxy(9,0);
itoa(suhu,&dum;);
lcd_puts(&dum;);

lcd_gotoxy(9,1);
itoa(humi,&dum;);
lcd_puts(&dum;);



}
pada script diatas ada trick menggunakan variabel counter dan delay 1us, ini cara yg paling gampang dan menyederhanakan proses counter terhadap lebar pulsa
Setiap bit yang dikirim dimulai sinyal Low sepanjang 54uS , kemudian dikuti 24uS sampai 70uS sesuai bit yang diwakilinya. 
Bit '0' : ~54uS Low  kemudian ~24uS High
Bit '1' : ~54uS Low kemudian ~70uS High

Pada akhir paket data yg diberikan oleh DHT-11 akan muncul sinyal Low sepanjang 54uS dan kemudian bus menjadi high selamanya dan masuk ke sleep mode.

Script berikut menyederhanakan perhitungan dengan trick counter dan delay, dimana jika counter melebihi 24 , maka kita anggap nilainya 1 dan sebaliknya

uint8_t hitung(void)
{

uint8_t a,counter,hasil;

counter=0;
hasil=0;

for (a=8;a>0;a--) // 8 kali tiap perhitungan
{


while(counter <100) // deteksi saat LOW ( tidak ada perhitungan)
{
_delay_us(1);
counter++;
if (bit_is_set(PIND, 3)) break; //tunggu sampai high dan keluar loop
}

counter=0;

while(counter <100)
{
_delay_us(1);
counter++; // counter mendeteksi lebar pulsa
if (bit_is_clear(PIND, 3)) break; //jika low maka keluar dari loop
}

// perhitungan 8 bit decimal dengan geser-geser bit
//jika lebih 25us =1 , kurang < 25 us = 0
 
if(counter > 25) hasil += (1 << (a-1)) ; 

counter=0;

}

return hasil;


}

mudah bukan ? dan hasilnya lumayan mengecewakan jika dibanding dengan sensor yg paten sekelas SHT 11



SELAMAT MENCOBA



Share:

Rabu, 15 Mei 2013

TUTORIAL : Memanfaatkan ICP (INPUT CAPTURE PIN) sebagai penghitung lebar pulsa

parallax-ping-ultrasonic-sensor-large.jpg (552×348)


Berawal ketika mendapatkan sensor ultrasonic untuk ranging/deteksi jarak, jenis Ping)) (buatan paralax) dan berdasarkan datasheet diketahui bahwa sensor memiliki response terhadap jarak setelah diberikan trigger seperti gambar dibawah ini :



Setelah sinyal mendapatkan perintah melalui pulsa 10us pada pin SIG kemudian bagian Transmit dari ping)) akan mengeluarkan sinyal burst 20us dengan frekuensi 40khz, dan ketika mendapatkan halangan sebuah benda didepannya maka suara ultrasonic ini akan dipantulkan kembali dan kemudian dapat dibaca oleh sensor penerima ultrasonic.Penghitungan jarak berbanding terbalik dengan lama sinyal echo atau pantulan yang ditangkap oleh sensor, sehingga kita perlu menghitung lebar pulsa yang diterima balik oleh penerima ultrasonik.

Salah satu fungsi yang digunakan adalah fasilitas INPUT CAPTURE PIN (ICP) yang selalu dimiliki oleh fasilitas counter dari AVR. Maksudnya ICP adalah pin ini akan menangkap (melalui interupt) perubahan logic yg diberikan kepadanya. Saat capture terjadi maka sebuah register yaitu ICR akan mengambil timestamp dari sebuah timer yang sedang berjalan yaitu pada register TCNT . Prescaller dari timer masih berfungsi seperti halnya pada tutorial mengenai timer

Untuk mencobanya, perhatikan PIN dari ATTINY2313 berikut :



ICP berada paka pin no 11 (PD6) dan dapat dihubungkan menjadi input dari suatu frekuensi / sinyal pulsa TTL yang akan diukur. Permasalahannya adalah ketika ICP hanya mendeteksi satu sisi perubahan logic yaitu rising (0-1) atau falling (1-0) . Cara yang biasa dilakukan untuk mendapatkan frekuensi dari sinyal :

1. Mendeteksi 2 buah timestamp dan kemudian mencari selisihnya
2. Memanfaatkan pin INT (external interupt) sebagai pendeteksi edge yang arahnya berlawanan dengan ICP

sebelumnya kita akan memanfaatkan LCD 16x2 sebagai output dan tombol sebagai input pulsa yang akan kita baca lebarnya. Perhatikan terlebih dahulu tutorial menulis di LCD karena output akan kita tulis di LCD.




scriptnya seperti ini, kita akan membaca lebar dari ICP pada counter 16bit, dimana nilai yg muncul adalah 0-65335 , dimana tiap angka mewakili :

tick dari TCNT = 1 / (frekuensi xtal / prescaler) = prescaler / frek xtal

Code:
/* ====================

ICP TEST

ATTINY2313

ahocool@gmail.com

www.aisi555.com

=====================*/



#define F_CPU 4000000UL //frek xtal

#include <avr/io.h>

#include <avr/interrupt.h>

#include <string.h>

#include <util/delay.h>

#include "lcd.h" //baca dulu tutorial menulis di LCD



//variabel tulisan

char text1[]= "   LEBAR PULSA";

char text2[]= "     START      ";

char clear[]= "                ";



//fungsi sederhana untuk merubah angka ke ASCII

void reverse(char s[]) 

{ 

   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[]) 

{ 

   uint16_t i, sign; 

    

   if ((sign = n) < 0) // record sign 

      n = -n;         // make n positive 

   i = 0; 

   do {   // generate digits in reverse order 

      s[i++] = n % 10 + '0'; // get next digit 

   } while ((n /= 10) > 0); // delete it 

   if (sign < 0) 

      s[i++] = '-'; 

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

   reverse(s); 

}  



//tulis menulis di LCD , kreasi sendiri oprekan pfleury library

void tulis(uint8_t pos,uint8_t posx,uint8_t posy,uint16_t tulisan)



{ 

char dum;



if(pos == 1) lcd_gotoxy(posx,posy);

itoa(tulisan,&dum);

lcd_puts(&dum);



}



//saat capture terjadi

ISR(TIMER1_CAPT_vect) 

{ 

   

   uint16_t capture;

   capture = ICR1; //pindahkan nilai hasil capture

   lcd_gotoxy(0,1);

   lcd_puts(clear);

   tulis(1,0,1,capture);  //hasil capture BCD tulis di LCD



//yang dibawah ini gunakan jika ingin menampilkan detik sebenarnya

//hilangkan yg diatas dan buka blok yg dibawah jika mau

/*    tulis(0,1,1,(capture / 62500) ); 

  lcd_putc(',');

   tulis(0,6,1,(capture % 62500) ); 

   lcd_puts(" detik");

*/

}



//pendeteksi edge logic yang lainnya 

SIGNAL (SIG_INT0)

{



 TIFR |= (1<<ICF1); //clear interrupt-flag

 TCNT1=0;

 lcd_gotoxy(0,1);

 lcd_puts(text2);

}



int main(void)

{



//PIN OUTPUT ke LCD    , liat skematik

DDRD  |= (1<<PD4)|(1<<PD5)|(1<<PD3); 

DDRB  |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3);



//Input tombol paralel di ICP dan INT0

  

//yang ini menyatakan kalau INT0 akan mendeteksi ketika pulsa turun



   MCUCR |= (1<<ISC01) ; // faling edge

   GIMSK |= (1<<INT0);



//yang ini menyatakan kalau ICP akan mendeteksi ketika pulsa naik  

//silahkan baca di datasheet ..lengkap broo

 

   TIMSK |=(1<<ICIE1); //enable input capture interrupt 

   TCCR1B |=(1<<ICNC1)|(1<<ICES1)|(1<<CS11)|(1<<CS10); 



//Noise canceller, with 64 prescaler , rising edge icp



 sei();//hidupkan interupt



lcd_init(LCD_DISP_ON);

lcd_gotoxy(0,0);

lcd_puts(text1);



while(1)



{

}



return 0;

}




Mudah bukan ? selanjutnya penjelasan diatas dapat digunakan ke applikasi penghitung frekuensi, phase sinyal dan  membaca ranging dari sensor pengukur jarak ultrasonic seperti PING)))





Share:

Jumat, 10 Mei 2013

Komputer 8-bit: Revolusi berawal dari microprocessor



Pada tulisan sebelumnya kita dapat merunut kembali awal dari dunia komputer dimulai dari penciptaan IC dan microchip oleh Bob Noyce dan kawan-kawan yang kemudian mendirikan Intel. Dari sinilah sebenarnya revoulusi bermula, ketika para engineer berhasil mengkreasikan rangkaian logic yang tersusun pada prosessor komputer jaman itu menjadi sebuah rangkaian logic ukuran micro ( 10 pangkat minus 6) yang memiliki kekuatan komputasi yang tidak berbeda. Para engineer ini menyadari suatu saat akan ada engineer jenius lainnya diluar sana yang akan mengetahui cara menggunakan dan kekuatan microprosessor ini.

Intel mengeluarkan microprosessor 4bit 4004 dan kemudian 8 bit 8080 pada awal tahun 70an, disusul dengan MOS (pecahan motorola) yang berkreasi dengan versi 6800/6502 dengan harga lebih murah. Inilah ic microprocessor yang dapat dikatakan pioneer dijamannya diawal era 70an. IC ini tidak dapat melakukan apa-apa sebelum dirakit dan perintah berupa bahasa mesin diberikan kedalamnya. Tiap microprocessor memiliki opcode dan instruction set tersendiri yang merupakan bahasa mesin dari tiap perintah yang oleh pengguna ingin diberikan kepadanya. Disinilah timbul keterkaitan antara para desainer IC dengan para desainer system komputerdimana mereka memiliki mimpi yang sama padahal tidak berhubungan secara langsung.

opcode / bahasa mesin dari datasheet MOS 6502


Dan benar saja ALTAIR 6800 membuka segalanya dengan KIT komputer micro mereka yang memiliki sebuah rancang bangun minimal (minimum system) . Rancang bangun minimum system sebuah komputer adalah memiliki sebuah otak yang bernama microprocessor, sebuah tempat penyimpanan data-data sementara yang bernama RAM, kemudian memiliki juga kontrol Input-Output dan sebagai tambahan diberikan ROM sebagai penyimpan data program yang akan dibaca saat menghidupkan komputer.

Minimum system dari sebuah komputer mini


Janganlah dikira ini mudah sebelum para jenius dibidang software membuat bahasa pemrograman. Benar saja, semua perintah yang diberikan kedalam microprocessor harus diberikan melalui kode binner - hexa kedalam microprocessor, seperti halnya perintah pertama yang diberikan oleh steve wozniak kedalam komputer apple 1 nya (dicuplik dari manual komputer APPLE 1 yang bisa diunduh disini)




Lihatlah kode perintah pada petunjuk kedua (SECOND) dimana yang dimasukkan adalah kode opcode untuk memerintahkan komputer APPLE 1 menampilkan karakter ascii secara terus menerus pada layar TV. Begitu susahnya dan hanya orang yang mengetahui opcode yang benarlah yang dapat menjalankan suatu program pada komputer jaman "batu" ini. Sampai muncullah intrepreter bahasa pemrograman BASIC yang dibuat oleh bill gate pada komputer ALTAIR dan kemudian diterapkan oleh steve wozniak pada komputer APPLE. Tentu saja setelah itu para engineer yang bergerak dibidang software menjadi lebih tertarik untuk membuat software-software yang menarik, game yang asyik dan berbagai jenis aplikasi yang tidak terbatas oleh kemampuan otak manusia.

Berikut ini sebuah video youtube yang menampilkan acara komputer "BIT AND BYTES" episode pertama yang akan menggambarkan generasi komputer 8bit pertama dan bagaimana primitif nya komputer yang mereka pakai. Dan jangan ketawa, karena itulah awal dari segala kemajuan teknologi komputer saat ini. Tanpa mereka maka iphone yang kalian pegang tidak akan pernah ada !!



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 (11) arduino (27) 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 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (73) 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 (11) lorawan (2) 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 (8) radio (28) raspberry pi (9) 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) telkomiot (4) 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) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika