Showing posts with label mikrokontroller. Show all posts
Showing posts with label mikrokontroller. Show all posts

Thursday, May 4, 2017

Program Jadwal sholat

Program Jadwal Sholat


Assalamu'alikum wr wb,

Kali ini saya akan membagikan Program jadwal sholat yang berbasis koordinat posisi sehingga mudah2an bisa menjadi gambaran teman - teman untuk mengembangkan lebih lanjut.

saya mendapatkan file di internet yang di bagikan free yang Disusun oleh DR. Rinto Anugraha, dosen Fisika UGM (rinto74@yahoo.com). saya menterjemahkan perhitungan tersebut kedalam bahasa program pascal yang di pakai untuk mikrokontroller sehingga bisa di buat alat aslinya.

dalam file yang saya sertakan sudah dengan listing, file simulasi, file firmwarenya (HEX) sehingga memudahkan teman2 untuk membuatnya.

tentunya rangkaian ini belum sempurna jelas yang saya harapkan adalah file ini akan terus di kembangkan dan terus di share secara free juga sama seperti bapak rinto yang membagikannya secara free

adapun penjelasan secara singkat adalah alat ini di beri perintah dari port serial berupa kode perintah sehingga modul dapat menjawab apa yang di butuhkan, berikut adalah list perintahnya


yang perlu di ingat adalah agar menset waktunya dulu sesuai dengan keadaan real dan juga ada variable hari , hari senin di anggap nilai 1 dan minggu adalah 7 jadi sangat perlu untuk lihat penanggalan asli supaya tidak salah perhitungannya

silahkan di lihat contoh di bawah :


nah setelah di set hanya cukup tulis "[x]" seperti contoh berikut


nah simple kan begitu juga dengan perintah2 yang lain sesuai dengan list perintah yang di berikan 

nilai - nilai yang di masukkan saya sesuaikan dengan kolom kuning pada file excel yang saya lampirkan yang telah di susun oleh DR. Rinto Anugraha 

mudah - mudahan teman bisa mengembangkan lebih lanjut untuk aplikasi lainnya selamat mencoba

untuk file lengkapnya bisa teman - teman download di sini

saya tidak membuka tanya jawab masalah program ini karena terlalu panjang silahkan teman2 pelajari dari yang sudah ada saya memakai mikropascal untuk kompiler program mikrokontroller nya dan proteus sebagai simulasinya 


READ MORE

Tuesday, December 6, 2016

Proteksi Mikrokontroller

Proteksi tegangan input pada Mikrokontroller



Pada pin mikrokontroller sering kita memberikan tegangan di atas dari tegangan vcc atau 5 volt maka langkah pencegahan agar tidak merusak icnya atau menghindari masalah ini maka langkah pencegahan perlu di lakukan.

Rangkaian atau konfigurasi ini yang sering saya pakai



Berikut penjelasannya :

Gini mari lihat gambar dibawah ini :


pada titik yang di lingkari maka tegangan pada titik itu tidak akan melebihi 5volt + jatuh tegangan dioda (0.2 - 0.7 volt) dengan asummsi seperti digambar ini :



nah sudah sepakat kan kalau di titik itu g bakal lewat dari nilai vcc + Vdioda tapi kalau dilihat masih tinggi dari datasheet ic mikrokontroller umumnya maka harus di tambah lagi pembagi tegangan agar turun tegangannya dan arusnya tidak terlalu besar nah itulah peran dari resistor 100K dan 10K:


nah dengan begini akan mengurangi tegangan sehingga tidak melewati ratingnya, untuk arus maksimum yang lewat ya 5,583 volt/10000  = 0.5585 mA  jadi sangat kecil itu pun dengan asumsi resistor 100K nya short dengan ground

dan jatuh tegangan pada resistor 100K atau bisa di bilang yang akan di baca oleh mikrokontroller adalah (100K(100K+10K)) x 5.583 = 5,0754 volt  

nah dengan demikian maka pin dari mikrokontroller kita akan aman meskipun main dengan tegangan yang lebih tinggi, da lebih bagus lagi jika pakai dioda schottky dioda misal BAT54

catatan :  ya tegangannya harus melihat datasheet dari diodanya kalau tidak ya sama saja teorinya ideal kalau aslinya tetep harus melihat datasheet yang perlu di ingat adalah metode ini berhasil secara teori dan prakter dengan tetap melihat batasan - batasan dari tiap - tiap komponen









READ MORE

Wednesday, December 9, 2015

Deteksi gas LPG dengan sensor MQ

Deteksi Gas LPG dengan sensor MQ-6




Membuat detektor kebocoran gas lpg ini sangat mudah karena sudah banyak modul nya, jadi modul itu hanya mengeluarkan tegangan 0 - 5 volt saja, 0 volt untuk nilai ppm 0  dan 5 volt untuk nilai 10000 ppm dengan kenaikan kurang lebih 200 ppm per 0,1 volt. jadi anda tidak perlu pusing2 memikirkan bagaimana ini dan itu tinggal buat aplikasi mikrokontroller yang sesuai dengan sarat itu. memang dengan banyak bermunculan penjual modul2 itu kemudahan memang sangat di rasakan tapi tidak ada salahnya untuk mengetahui bagaimana menggunakan sensor itu dan karakteristiknya

pada umumnya semua sensor MQ begini koneksinya jadi selalu ada heater di dalam sensor agar bekerja dengan baik , makanya terlalu dingin atau terlalu panas akan mengakibatkan error pada pembacaan sensor, jadi heater ini adalah bagian penting untuk sensor MQ ini

pada saat awal sambil menunggu suhu heater normal maka ada baiknya menunggu 1 menit sebelum di lakukan sampling atau jika pembacaan ppm sudah di atas 700ppm maka sudah bisa di lakukan sampling, kenapa harus 700ppm ? karena pada udara bebas biasanya nilainya 400-700ppm dan rata2 berhenti di 600 tapi ini biasanya harus di kalibrasi dengan alat aslinya agar mendapat nilai yang akurat.

dan kalibrasinya sebenarnya bukan itu saja karena linearitasnya juga mesti di test tapi karena saya tidak memiliki alat ukur LPG maka asumsi diatas bisa di pakai tapi jangan harap error yang kecil, maka jika menginginkan nilai akurat maka harus di buat procedure yang mengkompensasi masalah linearitas tersebut. yang mungkin nanti pada artikle yang lain saya akan membahasnya

pada modul yang di jual di pasaran tentunya tidak hanya seperti gambar diatas ada rangkaian op-amp nya atau ada penguatnya biasanaya gambarnya seperti ini :


jadi dengan 2 gambar seperti tadi maka anda sudah bisa mengkonversi dari gas menjadi tegangan, dan tinggal memusingkan bagaimana bentuk programnya, dan jangan khawatir teman saya akan memberikan garis besarnya dan hebatnya lagi akan saya berikan sebagai aplikasi open source yang bisa di kembangkan lagi



mari lihat video berikut agar lebih jelas :




dan jangan kawatir saya akan sertakan semua file termasuk file Proteusnya dan listing programnya pada akhir tulisan ini 

mari kita lihat listing program yang di buat dengan kompiler mikropascal 

program lpg;

var adc_rd,alarm : word;
var kp,kpd_temp,posisi,i : byte;
var nilai : real;

//timer
const _THRESHOLD = 2;
var counter : byte;


// Keypad module connections
var keypadPort : byte at PORTC;
var keypadPort_Direction : byte at DDRC;
// End Keypad module connections

// LCD module connections
var LCD_RS : sbit at PORTB2_bit;
var LCD_EN : sbit at PORTB3_bit;
var LCD_D4 : sbit at PORTB4_bit;
var LCD_D5 : sbit at PORTB5_bit;
var LCD_D6 : sbit at PORTB6_bit;
var LCD_D7 : sbit at PORTB7_bit;

var LCD_RS_Direction : sbit at DDB2_bit;
var LCD_EN_Direction : sbit at DDB3_bit;
var LCD_D4_Direction : sbit at DDB4_bit;
var LCD_D5_Direction : sbit at DDB5_bit;
var LCD_D6_Direction : sbit at DDB6_bit;
var LCD_D7_Direction : sbit at DDB7_bit;
// End LCD module connections

//alarm
var sirene : sbit at PORTA0_bit;

var txt1 : array[20] of char;
    txt2 : array[20]  of char;
    
    txt : array[10] of char;
    txt_cov : array[5] of char;

label  lompat;

procedure sampling(); iv IVT_ADDR_TIMER1_OVF; ics ICS_AUTO;
begin
if (counter >= _THRESHOLD) then
  begin
    adc_rd := ADC_Read(2);
    nilai := ((((5/1023)*adc_rd)* 2.15)*1000);
    if nilai > alarm then sirene := 0;
    if nilai < alarm then sirene := 1;
    FloatToStr(nilai, txt);
    txt2 := txt;
    lcd_out (2,1,txt2);
    lcd_out (2,9,'     PPM');
    counter := 0;              // reset counter
  end
else
  Inc(counter);                // increment counter
end;

begin

  Keypad_Init();                          // Initialize Keyp
  ADC_Init();
  Lcd_Init();                        // Initialize LCD
  
  DDA0_bit := 1;
  txt1 := 'Inisialisasi...';
  txt2 := '';

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  LCD_Out(1,1,txt1);                 // Write text in first row
  LCD_Out(2,1,txt2);                 // Write text in second row
  Lcd_Cmd(_LCD_FIRST_ROW);
  delay_ms (5000);
  adc_rd := 1023;
  counter := 0;
  while adc_rd >  150 do
  begin
    adc_rd := ADC_Read(2);
    nilai := ((((5/1023)*adc_rd)* 2.15)*1000);
    FloatToStr(nilai, txt);
    txt2 := txt;
    lcd_out (2,1,txt2);
    lcd_out (2,9,'     PPM');
    delay_ms (1000);
    inc (counter);
    if counter > 60 then break;
  end;
lompat:
  posisi := 0;
  counter := 0;
  txt1 := 'Sensor Gas LPG';
  txt2 := '';
  Lcd_Cmd(_LCD_CLEAR);
  LCD_Out(1,1,txt1);                 // Write text in first row
  LCD_Out(2,1,txt2);                 // Write text in second row
  hi(alarm) := EEPROM_Read(0x00);
  lo(alarm) := EEPROM_Read(0x01);
  //WordToStr(alarm, txt);
  
  SREG_I_bit := 1;               // Interrupt enable
  TOIE1_bit  := 1;               // Timer1 overflow interrupt enable
  TCCR1B := 2;                   // Start timer with 8 prescaler

  while (TRUE) do
    begin
      kp := 0;
      kp := Keypad_Key_Click();

      case kp of

          1: kp := 49;  // 1
          2: kp := 50;  // 2
          3: kp := 51;  // 3
          4: kp := 65;  // A
          5: kp := 52;  // 4
          6: kp := 53;  // 5
          7: kp := 54;  // 6
          8: kp := 66;  // B
          9: kp := 55;  // 7
         10: kp := 56;  // 8
         11: kp := 57;  // 9
         12: kp := 67;  // C
         13: kp := 42;  // *
         14: kp := 48;  // 0
         15: kp := 35;  // #
         16: kp := 68;  // D
         end;
      kpd_temp := kp;
      
      if kpd_temp = 65 then
        begin
          SREG_I_bit := 0;
          Lcd_Cmd(_LCD_CLEAR);
          txt1 := 'setting set point';
          LCD_Out(1,1,txt1);                 // Write text in first row
          for i := 0 to 4 do txt_cov[i] := '';
          txt := '';
          txt2 := '';
          txt_cov := '';
        end;

      if (kpd_temp > 47) and (kpd_temp < 58) then
        begin
          txt_cov[posisi] := kpd_temp;
          lcd_out (2, 1,txt_cov);
          inc (posisi);
        end;
        
      if kpd_temp = 66 then
        begin
          alarm := StrToWord (txt_cov);
        end;

      if kpd_temp = 67 then
        begin
          WordToStr(alarm, txt);
          lcd_out (2, 1,txt);
        end;
      
      if kpd_temp = 68 then
        begin
          posisi := 0;
          EEPROM_Write(0x00, hi(alarm));
          EEPROM_Write(0x01, lo(alarm));
          goto lompat;
        end;
        
    end;
end.

jadi anda bisa mendownload file project ini yang berisi listing program, file hex, simulasi proteus datasheet dll agar anda bisasecara bebas mengembangkan program ini. silahkan download disini

READ MORE

Thursday, December 3, 2015

Modul display 0 - 100% input 4-20ma

Modul display 0 - 100% input 4-20ma


BISMILLAHIRRAHMANIRRAHIM

pada Industri saya sering bertemu dengan alat semacam ini, inputnya 4-20ma dan output displaynya 0 - 100%  atau 0 - 10MPa dan sebagainya. kalau di perhatikan masukkannya sama saja hanya 4 - 20ma yang di konversi dengan ke nilai outputnya dengan nilai perbandingan saja.

misal   4ma  menjadi  0%
         
            12ma menjadi  50%

            20ma menjadi 100%

inputnya selalu sama 4 - 20ma hanya outputnya yang berbeda. inilah kata kuncinya

sebelum membaca ini ada baiknya anda membaca artikle mengapa 4 - 20ma sebagai referensi dasar


dalam rangkaian proteus yang saya ikutkan pada blog ini, menggunakan masukkan tegangan 1 - 5V untuk mengkonversinya menjadi arus maka digunakannya resistor 250ohm yang juga di bahas pada artikle "mengapa 4-20ma".

untuk singkatnya silahkan lihat gambar berikut :


rangkaian Modulnya

Tentunya modul ini harus bisa di kalibrasi agar akurat, berikut adalah cara kalibrasinya

1. tekan tombol menu selama minimal 5 detik sampai display berubah dengan tulisan 1- V artinya      anda sudah masuk  mode kalibrasi.

2. lalu setting titik zeronya dengan tegangan 1V lalu tekan cal_zero

3. lalu setting tegangan 5V lalu tekan cal_range

4. dan selesai tekan exit agar keluar mode kalibrasi dan kembali pada mode operasi

berikut adalah videonya :






baiklah begitulah penjelasan ringkasnya, karena ini bersifat opensource maka akan saya sertakan semua file, saya menggunakan mikropascal sebagai kompilernya dan proteus sebagai simulasinya jika mau test ada folder "file test" jika tidak memiliki mikropascal jadi bisa langsung di coba

download di link ini  "ilmu jika tidak di amalkan bagai pohon yang tak berbuah" semoga bermanfaat dan salam innovasi

listing mikropascalnya :

bagian utamanya :

program lib_7seg;
uses display, tambahan;

{ Declarations section }

var adc_rd : word;
    txt : array[10] of char;
    txt_dis : array[4] of char;
    
    ulv : byte;
    llv : byte;
    cal_zero : word;
    cal_range : word;
    nilai : real;
    range : word;
    hasil : real;
    count : byte;
    test : byte;

var
    oldstate_menu : bit;
    oldstate_exit : bit;
    oldstate_calrange : bit;
    oldstate_calzero : bit;

label
  awal,loop1;


begin

awal:

  //UART1_Init(9600);                          // initialize UART1 module
  //Delay_ms(100);

  
  DDB1_bit := 0;
  DDB2_bit := 0;
  DDD2_bit := 1;
  DDD3_bit := 1;
  DDD4_bit := 1;
  DDB3_bit := 0;
  DDB4_bit := 0;
  
  PORTB1_bit := 1;
  PORTB2_bit := 1;
  PORTB3_bit := 1;
  PORTB4_bit := 1;
  
  {mr := true;} ds := false;  st := false;   sh := false;
  DDC0_bit := 0;
  ADC_Init();
  
  test := EEPROM_Read(0x10);
  if test = '@' then
    begin
      hi(cal_zero) := EEPROM_Read(0x20);
      lo(cal_zero) := EEPROM_Read(0x21);
      hi(cal_range) := EEPROM_Read(0x30);
      lo(cal_range) := EEPROM_Read(0x31);
    end
  else
    begin
      cal_zero := 0;
      cal_range := 1023;
    end;
  //cal_zero := 0;
  //cal_range := 1023;
  ulv := 100;
  llv := 0;
  range := cal_range - cal_zero;
  
// reset nilai oldstate
  oldstate_menu := 0;
  oldstate_exit := 0;
  oldstate_calrange := 0;
  oldstate_calzero := 0;
  count := 0;
  
  while true do
    begin
      adc_rd := ADC_Read(0);
      adc_rd := ADC_Read(0);
      adc_rd := ADC_Read(0);
      adc_rd := sarat(adc_rd);
      nilai := adc_rd - cal_zero;
      hasil := (nilai/range)*100;
      delay_ms (300);
      
      FloatToStr(hasil, txt);
      txt_dis[0]:= txt[0];
      txt_dis[1]:= txt[1];
      txt_dis[2]:= txt[2];
      txt_dis[3]:= txt[3];
      
      if hasil < 100 then
        begin
          txt_dis[0]:= txt[0];
          txt_dis[1]:= txt[1];
          txt_dis[2]:= txt[3];
          txt_dis[3]:= ' ';
        end;
      if hasil < 10 then
        begin
          txt_dis[0]:= ' ';
          txt_dis[1]:= txt[0];
          txt_dis[2]:= txt[2];
          txt_dis[3]:= ' ';
        end;
      
      dis_nilai(txt_dis,4);
      
      if (Button(PINB, 1, 10, 0)) then
        begin
          oldstate_menu := 1;
          inc(count);
          if count > 18 then dis_nilai('1-V ',4);  // tunggu 5 detik
        end;
      if (oldstate_menu and Button(PINB, 1, 10, 1)) then
        begin
          oldstate_menu := 0;
          if count > 18 then   // tunggu 5 detik
            begin
              dis_nilai('1-V ',4);
              //UART1_Write_text('masuk menu');
              goto loop1;
            end;
          count := 0;
        end;
    end;

loop1:

// reset nilai oldstate
  //UART1_Write_text('masuk loop');
  oldstate_menu := 0;
  oldstate_exit := 0;
  oldstate_calrange := 0;
  oldstate_calzero := 0;
    while true do
      begin
        if (Button(PINB, 1, 10, 0)) then
            oldstate_menu := 1;
        if (oldstate_menu and Button(PINB, 1, 10, 1)) then
          begin
           // listingnya
            oldstate_menu := 0;
            dis_nilai('1-V ',4);
            //UART1_Write_text('menu');
          end;

        if (Button(PINB, 2, 10, 0)) then
            oldstate_exit := 1;
        if (oldstate_exit and Button(PINB, 2, 10, 1)) then
          begin
           // listingnya
            oldstate_exit := 0;
           //UART1_Write_text('exit');
            goto awal;
          end;
          
        if (Button(PINB, 3, 10, 0)) then
            oldstate_calrange := 1;
        if (oldstate_calrange and Button(PINB, 3, 10, 1)) then
          begin
           // listingnya
            oldstate_calrange := 0;
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            cal_range := adc_rd;
            EEPROM_Write(0x10, '@');
            EEPROM_Write(0x30, hi(adc_rd));
            EEPROM_Write(0x31, lo(adc_rd));
            //UART1_Write_text('calrange');
            dis_nilai('0-- ',4);
          end;
          
        if (Button(PINB, 4, 10, 0)) then
            oldstate_calzero := 1;
        if (oldstate_calzero and Button(PINB, 4, 10, 1)) then
          begin
           // listingnya
            oldstate_calzero := 0;
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            adc_rd := ADC_Read(0);
            cal_zero := adc_rd;
            EEPROM_Write(0x10, '@');
            EEPROM_Write(0x20, hi(adc_rd));
            EEPROM_Write(0x21, lo(adc_rd));
            dis_nilai('5-V ',4);
            //UART1_Write_text('calzero');
          end;
      
      end;
end.


Library displaynya :

unit display;
{
// contant 7segment
const
     angka_0 : byte   = %01110111;
     angka_1 : byte   = %00010100;
     angka_2 : byte   = %10110011;
     angka_3 : byte   = %10110110;
     angka_4 : byte   = %11010100;
     angka_5 : byte   = %11100110;
     angka_6 : byte   = %11100111;
     angka_7 : byte   = %00110100;
     angka_8 : byte   = %11110111;
     angka_9 : byte   = %11110110;
     angka_spc : byte = %00000000;
     grs     : byte   = %10000000;
     volt    : byte   = %01010111;
// contant 7segment  }

// contant 7segment
const
     angka_0 : byte = 0x40;
     angka_1 : byte = 0XF9;
     angka_2 : byte = 0X24;
     angka_3 : byte = 0X30;
     angka_4 : byte = 0X19;
     angka_5 : byte = 0X12;
     angka_6 : byte = 0X03;
     angka_7 : byte = 0X78;
     angka_8 : byte = 0X00;
     angka_9 : byte = 0X10;
     angka_spc : byte = 0xFF;
     grs     : byte   = %10111111;
     volt    : byte   = %01000001;
// contant 7segment

var
    //######JAM###############
    ds : sbit at PORTD2_bit;
    st : sbit at PORTD3_bit;
    sh : sbit at PORTD4_bit;

var
   dat_7 : byte;
   dat_segA : sbit at dat_7.0;
   dat_segB : sbit at dat_7.1;
   dat_segC : sbit at dat_7.2;
   dat_segD : sbit at dat_7.3;
   dat_segE : sbit at dat_7.4;
   dat_segF : sbit at dat_7.5;
   dat_segG : sbit at dat_7.6;
   dat_segH : sbit at dat_7.7;

var
   dly : byte; external;
   jadwal : string[24];  data; external;
   jadwalku : string[24];  data; external;

procedure dis_nilai (var text: string[10]; segment: byte;);

implementation


//-------------------- convert 7segment
function ubah (temp :byte): byte ;
begin
  if temp = 48 then result := angka_0;
  if temp = 49 then result := angka_1;
  if temp = 50 then result := angka_2;
  if temp = 51 then result := angka_3;
  if temp = 52 then result := angka_4;
  if temp = 53 then result := angka_5;
  if temp = 54 then result := angka_6;
  if temp = 55 then result := angka_7;
  if temp = 56 then result := angka_8;
  if temp = 57 then result := angka_9;
  if temp = 32 then result := angka_spc;
  if temp = 45 then result := grs;
  if temp = 86 then result := volt;
end;

//-------------------- convert 7segment

procedure dis_nilai(var text: string[10]; segment: byte;);

var
  i,j : byte;
begin

  for j := 1 to segment do
    begin
      dat_7 := text[segment - j];
      dat_7 := ubah(dat_7);
      for i := 1 to 8 do
        begin
          if i = 1 then ds := dat_segH;
          if i = 2 then ds := dat_segG;
          if i = 3 then ds := dat_segF;
          if i = 4 then ds := dat_segE;
          if i = 5 then ds := dat_segD;
          if i = 6 then ds := dat_segC;
          if i = 7 then ds := dat_segB;
          if i = 8 then ds := dat_segA;
          sh := true;
          delay_ms (5);
          sh := false;
        end;
    end;

  st := true;
  delay_ms (5);
  st := false;
end;

end.

Library tambahan :

unit tambahan;

var
    ulv : byte; external;
    llv : byte; external;
    cal_zero : word; external;
    cal_range : word; external;

function sarat(dat_ : real) :real;

implementation

function sarat(dat_ : real) :real;
begin
  if dat_ < cal_zero then result := cal_zero;
  if dat_ > cal_range then result := cal_range;
  if (dat_ >= cal_zero) and (dat_ <= cal_range) then result := dat_;
end;

end.



READ MORE

Monday, January 19, 2015

Arduino rasa pascal

             ARDUINO RASA PASCAL




               Arduino adalah minimum sistem yang sudah sangat terkenal, di indonesia juga banyak peminatnya disamping kemudahan yang ditawarkan disisi programnya, misal opensource jadi terbuka dan bebas baik disisi programnya atau hardwarenya, Mantap bukan...

              Tapi dalam bahasan sekarang ini saya hanya tertarik pada minimum sistemnya yang murah dipasaran karena clone arduino banyak beredar dan secara kualitas tidak beda jauh dari aslinya tapi dari segi harga y lumayan lah...

Ok supaya g panjang - panjang pembahasannya gini aja, kita akan bahas ARDUINO UNO  yang paling standart, jadi saya mau koneksikan dengan tools di compiler mikropascal for avr jadi pertanyaannya adalah bagaimana caranya ?


itu adalah data dari arduino uno nya jadi apa yang kita lakukan ???   , sebelum kita isi program bootloader kita harus melakukan perubahan sedikit dan tidak berbahaya kok karena hanya memutus reset otomatis arduinonya dan jika bosen dan mau pakai arduino lagi ya tinggal di sambung lagi

secara schema terletak di bagian ini :


kalau di boardnya posisinya di sini :


jadi kalau dilihat ada jalur yang menghubungkan titik itu , di putus disana baru kita mulai masuk ke program bootloader

untuk awal tetap kita memerlukan downloader biasa nya sih pakai yang usbasp pasangkan di posisi ini :


jika sudah maka arduino siap di program , pertama setting fuse bit saya pakai fuse bit ini :


hati - hati jika salah maka mikro anda bisa tidak bisa di pakai lagi dan harus pakai fusedoctor untuk menormalkan kesalahan setting fuse bit , sekali lagi hati - hati y

jika sudah lakukan hal ini maka kita hanya perlu melakukan 1 kali saja dan sekarang tinggal di isikan dengan file bootloader ini : yang bisa di download di sini

setelah proses ini maka arduino kita sudah bisa komunikasi dengan software bootloader mikropascal tanpa perlu usbasp lagi dan ini akan mempermudah pekerjaan karena tidak 2 kali kerja dan berulang - ulang.


mudah - mudahan bisa membantu teman - teman agar mempermudah proses belajar, sebenarnya asal keluaran mikroe compilernya bisa dipakai juga kok, bukan cuma pascalnya aja  oh y hampir lupa nanti pakai baudratenya  19200 saolnya kalau bukan g bisa konek nanti ,

selamat mencoba dan salam inovasi


READ MORE

Monday, August 12, 2013

Multi LCD dengan 1 Mikro

Multi LCD dengan 1 Mikro

selamat pagi semuanya, sebelumnya saya ditanya di sebuah group di facebook tentang aplikasi yang menurut saya menarik yang referensinya di http://www.hackmeister.dk/2010/08/4-lcd-displays-on-1-arduino/ . Disana saya lihat penggunaan beberapa lcd dalam 1 sistem mikrokontroller. 

ah.. padahal kalau lihat datasheet lcd ini di mungkinkan tanpa ada gangguan di sisi elektroniknya tapi ketika kita masuk dalam bahasa programnya. ini baru masalah.. kebanyakan dari bahasa program yang kita gunakan bertumpu pada kemudahan library LCD ini tukarannya untuk kemudahan adalah keterbatasan manipulasi kemampuan LCD. meskipun di mungkinkan tapi disisi lain kita di batasi bahasa program, sedangkan arduino menawarkan library yang lebih bebas dari kebanyakan kompiler karena aplikasinya yang tidak umum.

saya sendiri pengguna bahasa pascal dengan compiler dari mikroe hal ini juga terjadi dengan saya, batasan di library dan malas belajar dan membuat library baru. jadi di sini saya berbagi hasil modifikasi mikrokontroller sehingga dengan library yang sama saya bisa melakukan hal seperti di sebutkan di atas.

dengan memanfaatkan interupsi eksternal saya memanipulasi pin EN agar dapat mengendalikan beberapa LCD, g usah panjang lebar langsung aja lihat gambar simulasinya

gambar rangkaian simulasi

kunci dari rangkaian ini adalah pin yang di deklarasi library LCD_EN : sbit  at PORTD3_bit; di jumper langsung ke int0 dan jadi signal en akan membangkitkan interupsi dan akan di tentukan bahwa data/ tulisan itu mau muncul di lcd mana

tapi untuk lebih jelasnya silahkan download saja file lengkapnya di sini  ; untuk simulasi saya gunakan proteus 7.8 dan compiler mikro pascal. silahkan menikmati suguhannya. jika ada pertanyaan masukkan di comment 

READ MORE

Monday, June 11, 2012

Port ADC dengan AVR-ATMEGA8


Belajar microcontroller
Menggunakan Port ADC dengan
 AVR-ATMEGA8


Kali ini saya sharing pengalaman saya dengan  mikrokontroller atmega8, saya sangat penasaran yang membuat chip ini sangat terkenal. Padahal untuk aplikasi yang contohnya bisa di download pada halaman internet bisa dilakukan dengan MCS51 yang bisa kita katakana harganya lebih murah dari IC Atmega.

Ternyata setelah beberapa kali mencoba dan mempelajarinya memang harga g bohong… mungkin jika kita menggunakan assembler untuk menulis programnya, ic ini tidak terlalu menarik bikin puusing…. J. Saya menggunakan bahasa pascal yang baru – baru ini dikeluarkan (eh salah baru saya temukan di internet) “mikropascal for AVR” ada versi freenya kok tapi Cuma bisa compile 2K ROM cukup untuk belajar aja. Dan dari fungsinya inilah(ADC) yang paling menarik bagi beberapa designer selain factor kecepatannya.

Oke kita mulai saya menggunakan schema seperti ini :


Bisa dilihat saya menggunakan potensio sebagai masukan ADC agar nantinya input akan bermain dari 0 – 5 volt dan hasilnya akan ditampilkan lewat LCD standard 1 baris.


Sekarang kita lihat firmwarenya :

program ADC_on_LEDs;

// LCD module connections
var LCD_RS : sbit  at PORTD0_bit;
var LCD_EN : sbit  at PORTD1_bit;
var LCD_D4 : sbit  at PORTD5_bit;
var LCD_D5 : sbit  at PORTD6_bit;
var LCD_D6 : sbit  at PORTD7_bit;
var LCD_D7 : sbit  at PORTB0_bit;

var LCD_RS_Direction : sbit at DDD0_bit;
var LCD_EN_Direction : sbit at DDD1_bit;
var LCD_D4_Direction : sbit at DDD5_bit;
var LCD_D5_Direction : sbit at DDD6_bit;
var LCD_D6_Direction : sbit at DDD7_bit;
var LCD_D7_Direction : sbit at DDB0_bit;
// End LCD module connections


var adc_rd : word;
    des: real;
var txt1 : array[16] of char;
var txt2 : array[16] of char;

  begin
   Lcd_Init();                        // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);               // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

    while (TRUE) do
      begin
        adc_rd := ADC_Read(0);  // get ADC value from 2nd channel
        des:= adc_rd;
        des:= (des/1023)*5;
        WordToStr(adc_rd, txt1);
        floattostr(des,txt2);
        LCD_Out(1,1,txt1);
        lcd_out(1,7,txt2);
      end;
  end.

Saatnya simulasi: untuk simulasi saya percayakan pada software proteus karena proteus mempunyai banyak library untuk microcontroller. ada file simulasi yang bisa di download di akhir artikle.

Dan berikut ini adalah foto dan videonya pada saat saya  melakukan pengetesan:







Dan cukup sekian dari article ini dan selanjutnya saya serahkan pada anda, dibawah ini ada file – file dari hal2 yang saya sebutkan di atas silahkan download dan comment semoga kita bisa belajar bersama – sama atau kalo linknya rusak lapor ke ruslan_inst@yahoo.com dan saya akan coba mengirimnya langsung k email anda


file Videonya
file simulasi dan firmware (proteus dan mikro pascal)









READ MORE