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: Mengirim Perintah ke Micro-AVR Via SMS



Posting ini adalah kelanjutan dari posting terdahulu, kirim SMS via attiny intro disini dan lanjut disini, kali ini kita akan bahas mengenai mode "penerima sms" , dimana micro AVR akan menerima SMS dan melakukan keputusan atau proses berdasarkan parsing teks sms yg dikirim.

Kelemahan mode serial UART yg sebelumnya adalah bisa mengirim(banyak teks) dan menerima hanya 1 teks sebagai triger interupt.

...Bagaimana jika Teks yg ingin diparsing berupa beberapa karakter? semisal "LED1ON" ?..

Ternyata jika kita cek satu persatu per-karakter sms yg diterima maka akan muncul masalah "sms terpotong" atau timing yg kacau....Untuk itu dibutuhkan mode "FIFO" atau "circular buffering" dimana teks yg diterima oleh micro melalui UART/serial akan disimpan dalam buffer memory barulah kemudian akan diolah/parsing untuk keperluan kontrol.

Setelah mencoba beberapa library , yang paling pas adalah pfleury uart library penjelasan disini dan download disini. Silahkan baca terlebih dahulu dan ternyata cukup mudah dan simple.

Selanjutnya kita ingat dulu AT command dari modem yg kita gunakan yaitu Wavecom. Beberapa command yg penting adalah :

AT+IFC=0,0 : Agar mode serial control = none

ATE0 : Agar karakter yg dikirim tidak di echo/kembalikan
AT+CMGF=1 : mode sms "teks"

dan yang baru adalah :

AT+CNMI=2,2 : mode SMS terima langsung tampil teksnya

jika sms diterima dengan mode diatas, maka ketika sms diterima akan muncul seperti ini di modem :


+CMT :"+628155555555","11/10/01,12 :30 :00+00",
pesan sms disini
dan dari teks sms yg diterima kemudian diolah oleh micro (parsing) untuk melakukan keputusan yg diinginkan.

Lanjut kita ke proyek sebenarnya, kali ini kita menggunakan micro ATMEGA 8515 dengan circuit seperti berikut (micro lain menyesuaikan aja):


(klik untuk memperbesar skematik)

*) modem wavecom memiliki mode komunikasi serial yg "cross" jadi jangan lupa untuk melakukan cros TX & RX (pin 2 vs pin 3 dari DB9)

selanjutnya kita akan bahas scriptnya

-Inisialisasi

kita akan menggunakan library uartnya si pleury, dengan mengcopy "uart.h" serta "uart.c" ke folder avr studio dan menambah source uart.c dan include uart.h


#define F_CPU 7372800UL //xtal yg digunakan biar error 0%
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 

#include "uart.h"  //pastikan sudah tersedia di folder program

//definisi baudrate RS232

#define UART_BAUD_RATE 9600 


char buffer[10];  //definisi buffer teks
int indexbuf=0;

cara menambahkan uart.c :



- Inisialisasi I/O port dan modem wavecom



int main(void)
{  

   DDRA  |= (1<<PA6)|(1<<PA7); //port yg digunakan PA6 & PA7
    
  unsigned int c;
  uint8_t a;

   //inisialisai UART dari library pfleury

    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
    sei(); // mode receive interupt

   
    uart_puts_P("ATE0\r");   // biar tidak memenuhi buffer
   _delay_ms(500);
    uart_puts_P("AT+CMGF=1\r"); //mode smsteks
   _delay_ms(500);
    uart_puts_P("AT+CNMI=2,2\r"); // mode langsung baca sms
sebelumnya agar diingat untuk mengedit uart.h dibagian dibawah ini, sesuaikan dengan panjang sms teks yg diterima
Code:
/** Size of the circular receive buffer, must be power of 2 */
#ifndef UART_RX_BUFFER_SIZE
#define UART_RX_BUFFER_SIZE 64
#endif
/** Size of the circular transmit buffer, must be power of 2 */
#ifndef UART_TX_BUFFER_SIZE
#define UART_TX_BUFFER_SIZE 64
#endif

- Parsing SMS

Kita lanjut dengan Parsing SMS yg masuk, dimana akan meng-ON/OFF Led di port A6 & A7. Untuk mepermudah parsing, kita gunakan trigger karakter khusus sehingga dapat menandai SMS yg akan diparsing ( kali ini menggunakan " $ ")


PORTA &= ~_BV(PA6) & ~_BV(PA7);


   while(1)

   {   


        c = uart_getc();
        if ( c & UART_NO_DATA ) // jika ga ada data masuk
        {

        }
        else
        {
 
         if( c == '$') indexbuf=0;  //jika triger $, maka mulai parsing (index aray buffer = 0 )
  
     

   buffer[indexbuf] = c; //masukkan teks sms ke buffer

   indexbuf++; //index array ditambah 
    

        }
    
   // Jika yg diterima sms "$LED1ON", maka Led di PA6 akan hidup
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='1' &&
        buffer[4]=='O' &&  buffer[5]=='N')

       { PORTA |= _BV(PA6); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED2ON", maka Led di PA7 akan hidup
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='2' &&
        buffer[4]=='O' &&  buffer[5]=='N')

       { PORTA |= _BV(PA7); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED1OFF", maka Led di PA6 akan mati
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='1' && 
             buffer[5]=='O' &&  buffer[6]=='F' &&  buffer[7]=='F')

       { PORTA &= ~_BV(PA6); 
    
      for(a=0;a<10;a++) buffer[a]=0; // bersihkan buffer
    
    
    }

   // Jika yg diterima sms "$LED2OFF", maka Led di PA7 akan mati
    if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
     buffer[3]=='D' && buffer[4]=='2' && 
             buffer[5]=='O' &&  buffer[6]=='F' &&  buffer[7]=='F')


       { PORTA &= ~_BV(PA7); 
    
      for(a=0;a<10;a++) buffer[a]=0;// bersihkan buffer
    
    
    }
  
 }

   


}


Cara parsing pada script diatas masih menggunakan logika sederhana seperti penjelasan berikut :

1. Format SMS dimulai dengan karakter '$', sehingga parsing akan menunggu karakter ini muncul lalu kemudian diarahkan menuju posisi array buffer 0
2. Tiap array buffer kemudian di cek satu per satu sampai menemukan format kata sesuai keinginan, seperti contoh yg digunakan berupa kata $LED1ON :

  if( buffer[0]=='$' &&  buffer[1]=='L' &&buffer[2]=='E' &&
      buffer[3]=='D' && buffer[4]=='1' &&
      buffer[4]=='O' &&  buffer[5]=='N')


       { PORTA |= _BV(PA6); 
                  }

3. Diakhiri dengan pembersihan isi buffer agar bisa digunakan selanjutnya.



Kontrol micro via sms ini memiliki banyak kemungkinan aplikasi sesuai kreativitas diantaranya :

1. Menghidupkan Lampu otomatis via SMS
2. Membaca data suhu atau kondisi on/off setelah sms dikirim (tanpa harus menerima report terus menerus seperti contoh sebelumnya)
3. Trigger BO** .....duhhh jangan yaaa....INGAT ! Pisau didapur bisa bikin masakan enak, tapi ditangan orang tidak bertanggung jawab maka pisau dapur bisa menjadi alat pembunuh...


SELAMAT MENCOBA
Share:

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:

Rabu, 08 Mei 2013

Komputer 8-bit : Revolusi yang berhasil membawa komputer ke "rumah"


Adalah mimpi dari beberapa penghobi elektronika yang tergabung pada club "HOMEBREW COMPUTER CLUB" di palo alto - california (yang kemudian menjadi silicon valley), mimpi itu adalah membawa komputer yang segede rumah dan hanya dimiliki oleh korporasi besar menjadi dapat dibawa kerumah. Hanya sebuah mimpi ketika suatu artikel pada majalah popular electronics ditampilkan pembahasan KIT elektronika yang dapat dibeli dan kemudian dirakit sebagai "Komputer 8-bit". Ketika pertemuan mingguan para kutu buku itu menjadi sangat riuh karena semua membicarakan tentang KIT ALTAIR 8800 buatan MITS pada tahun 1975. Mulailah mereka mendapatkan gambaran mimpi mengenai komputer rumah, walau hanya dapat mengerjakan program  dengan input berupa tombol toogle dan output berupa LED merah berjejer, tapi itulah komputer 8 bit pertama yang dapat menjalankan perintah berdasarkan bahasa pemrograman mesin seperti halnya komputer mainframe yang biasanya dapat disewa secara time-sharing terminal.




Saat itu seorang jenius bernama steve wozniak sedang mengerjakan beberapa proyek kalkulator di perusahaannya yaitu HP, atas bujukan steve job yang bekerja di perusahaan game ATARI mengajaknya untuk menjawab tantangan bos ATARI (yang pada saat itu ngetop dengan game PONG) untuk membuat game serupa pong yang bernama breakout, dengan tantangan merancang hardware dengan jumlah IC kurang dari 50. Saat itu steve wozniak memang sedang tertarik dengan game pong dan dia berhasil membuatnya sendiri pada pesawat TV dirumahnya dan kemudian berhasil membuat game breakout dengan ic yang kurang dari 50 buah. Woz juga (yang kemudian memiliki patent tentang menulis karakter di TV) berkreasi untuk membuat sebuah terminal yang dapat menghubungkan ARPANET (cikal bakal internet) via modem dengan pesawat televisi dan sebuah keyboard ASCII.


Sampailah berita bahwa ada seorang programmer bernama Bill Gates yang membuat bahasa BASIC pada ALTAIR dan mempersingkat proses pemrogramannya. Woz yang saat itu melihatnya mendapatkan sebuah ide brilian untuk menggabungkan alat terminal arpanet nya ke dalam sebuah komputer 8bit. Dan berkutatlah dia siang malam untuk membuat komputer pertama (yang memiliki keyboard dan layar monitor) dan steve jobs bertugas untuk menjualnya di toko elektronik. Awalnya mereka hanya menjual pada beberapa orang akan tetapi belum berbentuk rakitan, hanya berupa PCB tersolder yang kemudian oleh penjual ditoko diberikan power suply dan kotak / box yang terbuat dari kayu atau ada yang menaruhnya di dalam tas koper.


"Ini bisa dijual" kata steve jobs, tapi steve yang satunya mengatakan "belum sempurna". Dan memang akhirnya woz berhasil menyempurnakannya menjadi sebuah komputer "color" yang tak ada tandingannya saat itu yaitu APPLE II. Wah ...mereka kaya...steve jobs yang berjiwa bisnis berhasil mendatangkan investor, woz merancang software dasar dan 5 tahun kemudian APPLE INC menjadi perusahaan FORTUNE 500 dengan harga saham yang terus merangkak naik. Luar biasa ...





Apple II merupakan komputer 8 bit pertama dambaan setiap orang pada masanya. Dengan bundling software yang sangat revolusioner yaitu VISICALC (mbahnya excel - spreadsheet), penjualan bak kacang godog di layar tancap. Walau pesaing bermunculan seperti Commodore PET, Radio shack TRS -80, dan yang paling berat adalah ketika raksasa komputer IBM mengeluarkan IBM PC, tetap saja APPLE II memiliki penjualan yang fantastis sampai akhir era 80-an. 

Share:

Jumat, 22 Maret 2013

Tutorial XML Untuk Aplikasi Dinamis Android - Adobe Air




Setelah kita berhasil membuat swf loader, kali ini akan kita manfaatkan keunggulan dari flash-adobe air lainnya yakni dapat melakukan load database berbasis XML yang sangat simpel dan berguna. Dengan menggunakan database "Tree" yang dimiliki nya maka akan sangat mudah untuk melakukan update isi dari suatu aplikasi dinamis hanya dengan merubah satu file text saja. Untuk belajar dasar-dasar mengenai flash (actionscript3) dan xml dapat membaca tutorial yang sangat menarik disini.

Format file xml dimulai dengan tag  <?xml version="1.0" encoding="UTF-8"?> , selanjutnya disusun berdasarkan tag < nama > </nama> yang dinamakan tiap node dan boleh memiliki children node didalamnya. Perhatikan kode berikut :


<GALLERY>

<IMAGE TITLE="gambar 1">
<FILE>gambar1.jpg</FILE>
<TEKS>ini teks untuk gambar1</TEKS>
</IMAGE>

<IMAGE TITLE="gambar 2">
<FILE>gambar2.jpg</FILE>
<TEKS>ini teks untuk gambar2</TEKS>
</IMAGE>

<IMAGE TITLE="gambar 3">
<FILE>gambar3.jpg</FILE>
<TEKS>ini teks untuk gambar3</TEKS>
</IMAGE>


</GALLERY>


kode diatas merupakan kode XML dari GALLERY yang memiliki node <IMAGE> yang beranak<FILE> dan <TEKS>. Panjang dari node dan anak dari GALLERY dapat disesuaikan sesuai keinginan asal dengan format yang seragam. Node IMAGE disini memiliki 3 anggota, sehingga akan menjadi array yang sangat simple jika dipindahkan ke FLASH dengan contoh test script berikut: 



simpan file xml tadi dengan nama "test.xml"

var myXML:XML;
var myLoader:URLLoader = new URLLoader();

myLoader.load(new URLRequest("test.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
myXML = new XML(e.target.data);
trace(myXML.IMAGE.length());
trace(myXML.IMAGE.*);
trace(myXML.IMAGE[0].TEKS);
trace(myXML.IMAGE.(@TITLE=="gambar 3").FILE);

}



output dari tracing scipt diatas adalah :



3
<FILE>gambar1.jpg</FILE>
<TEKS>ini teks untuk gambar1</TEKS>
<FILE>gambar2.jpg</FILE>
<TEKS>ini teks untuk gambar2</TEKS>
<FILE>gambar3.jpg</FILE>
<TEKS>ini teks untuk gambar3</TEKS>
ini teks untuk gambar1
gambar3.jpg






Dan dari hasil tracing diatas dapat dilihat betapa simplenya database dapat diubah-ubah sesuai keinginan, semisal kita ingin merubah nama gambar ke 3 tinggal merubah saja nama filenya sesuai alamat yang dituju. contoh script berikut jika kita menginginkan menampilkan gambar pada file lokal melalui XML

file gambar1.jpg , gambar2.jpg dan gambar3.jpg harus ada di lokasi yang satu folder dengan aplikasi.

var myXML:XML;
var myLoader:URLLoader = new URLLoader();

myLoader.load(new URLRequest("test.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
myXML = new XML(e.target.data);

var pictURL:String = myXML.IMAGE[1].FILE;
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
addChild(pictLdr);

}



output yang keluar adalah gambar2.jpg pada layar 


jika kita memiliki text field dengan nama textnya, maka bisa juga di tambahkan seperti berikut:

var myXML:XML;
var myLoader:URLLoader = new URLLoader();

myLoader.load(new URLRequest("test.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
myXML = new XML(e.target.data);

var pictURL:String = myXML.IMAGE.(@TITLE =="gambar 3").FILE;
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
addChild(pictLdr);
textnya.text=myXML.IMAGE.(@TITLE == "gambar 3").TEKS;

}



Maka output yang didapat adalah flash meload gambar3.jpg serta menampilkan isi TEKS yaitu: "ini teks untuk gambar 3". Mudah bukan? Ayo kita lanjut saja ke praktek beneran pada adobe flash cs5.5 . kali ini kita akan membuat loader file xml, dengan gambar yang bersumber di internet dan teks dari file XML yang diupload ke server.





Sesuai pembahasan loader swf sebelumnya, kita akan membuat animasi pre-loader dengan menggunakan tween, sehingga kelihatan halus saat menunggu file xml serta gambar di load ke layar android. Kita membuat animasi loader serta textbox dengan UI component berupa scroll slider.

Langsung saja perhatikan code berikut dan kita akan bahas setelahnya.



var myXML:XML;
var myLoader:URLLoader = new URLLoader();
var urutan:Number=0; //urutan gambar
tulisan.visible=false; //tulisan
uiScroller.visible=false; //text scroller

//xml loader,  contoh filenya ada di server berikut
//ubah sesuai keinginan (lokal juga bisa)

myLoader.load(new URLRequest("http://www.flexievdo.net/test.xml"));

//listener
myLoader.addEventListener(Event.COMPLETE, processXML);

//pengatur gambar
var pictLdr:Loader = new Loader();
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, kecilkan);

//geser-geser secara swap
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe);


//function untuk menyeuaikan gambar

function kecilkan(e:Event):void {
pictLdr.x=10;
pictLdr.y=10;
pictLdr.width=300;
pictLdr.height=310;
trace("selesai");
tulisan.visible=true;
uiScroller.visible=true;

//tampilkan setelah gambar selesai di load

nama.text=myXML.IMAGE[urutan].@TITLE;
tulisan.text=myXML.IMAGE[urutan].TEKS;
ke.text="Gambar ke "+ String(urutan + 1) + " dari " + String(myXML.IMAGE.length());
uiScroller.update();

loaded.visible=false;

}


//pemroses xml

function processXML(e:Event):void {
myXML = new XML(e.target.data);


loaded.visible=true;

var pictURL:String = myXML.IMAGE[urutan].FILE;
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
addChild(pictLdr);



}


//swipe babe !!

function onSwipe(evt:TransformGestureEvent):void {
 
//swipe akan menentukan urutan gambar
 
 if( evt.offsetX == -1){
 
 urutan++ ;
 if(urutan >= myXML.IMAGE.length()) {
  urutan=0;
 }
 
 }

 else if( evt.offsetX == 1){
 
 urutan-- ;
 if(urutan < 0 )  {
  urutan= (myXML.IMAGE.length() -1);
 }
 
 }

//hayo kita hancurkan kemudian tampilkan lagi

if(evt.offsetX == 1 || evt.offsetX == -1 )
{

tulisan.visible=false;
uiScroller.visible=false;
loaded.visible=true;
nama.text="";
tulisan.text="";
ke.text="";
uiScroller.update();


removeChild(pictLdr);
var pictURL:String = myXML.IMAGE[urutan].FILE;
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
addChild(pictLdr);
}

}








Terlihat mudah saja, bahwa tiap file XML memiliki format sesuai contoh awal pada test.xml dan informasi yang akan digunakan berupa @TITLE, FILE, dan TEKS . Kita akan memainkan proses swipe untuk merubah posisi dari IMAGE[urutan] dan kemudian dengan image loader akan diresize sesuai panjang dan lebar dari layar HP Android. Sebagai keunggulan dari xml dimana kita dapat mengambil source gambar dari mana saja seperti contoh berikut, dan file tutorial lengkap dapat diunduh disini.


<GALLERY>
<IMAGE TITLE="BALI ISLAND OF GOD">
<FILE>http://us.123rf.com/400wm/400/400/saiko3p/saiko3p1107/saiko3p110700147/

10085679-beauty-rice-terrace-with-palms-on-bali-island.jpg</FILE>
<TEKS>Bali, the famed Island of the Gods, with its varied landscape of hills 

and mountains, rugged coastlines and sandy beaches, lush rice terraces and 

barren volcanic hillsides all providing a picturesque backdrop to its 

colourful, deeply spiritual and unique culture, stakes a serious claim to be 

paradise on earth. With world-class surfing and diving, a large number of 

cultural, historical and archaeological attractions, and an enormous range of 

accommodations, this is one of the world's most popular island destinations 

and one which consistently wins travel awards. Bali has something to offer a 

very broad market of visitors from young back-packers right through to the 

super-rich.
</TEKS>
</IMAGE>
</GALLERY>



Jangan lupa untuk mempublish aplikasi adobe air - android dengan permission "Internet"


-=UPDATE=-


Contoh aplikasi yang telah dibikin dengan methode xml dan ditambah dengan image caching




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 (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 (74) 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 (5) 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