Category Archives: Menengah

Pengetahuan Dasar Input Output dan Akses File pada Pemrograman Bahasa C

Tulisan ini bermula ketika saya ingin membuat program mengakses MMC / Micro SD  menggunakan microcontroller AVR,  ternyata penulisan ke MMC/micro SD  bisa berupa file system ataupun byte . Saya memilih menyimpan data ke MMC/microSD dalam bentuk file system karena sudah  disediakan  fungsi fungsi  tsb pada codevision versi 2.

Input dan output text  dari manapun text  berasal dan kemanapun text ditampilkan/disimpan,  text dianggap sebagai aliran character ( stream of character).   stream character bisa berasal dari keyboard  atau file  .Tempat penyimpanan file bisa di hardisk, disket atau MMC / SD card  dan cara pengaksesan file nya sama saja yaitu:

1. Buat pointer ke struct File ,

misal :  File *pointer_file

2. file dibuka  dgn fungsi fopen(namafile,mode) 

misal :   fopen(“namafile.txt”,”r”)

mode akses file antar lain:

“r” artinya file hanya untuk dibaca .

“w” artinya buat  file baru  untuk ditulis

“a” artinya isi file bisa ditambah

“r+”  artinya file bisa ditulis dan dibaca

“w+”  artinya file bisa dibaca dan ditulis. jika ada file yg sama akan di replace.

“a+” artinya file akan dibaca atau ditulis. jika file tdk ada file baru akan dibuat.

3.  file dibaca / ditulis /edit   dgn fungsi fungsi : fputc,fgetc,fputs,fgets,fscanf, fprintf, fseek, putc, getc, putw .

misal  :  fgetc(pointer_file)  , atau

fgets(string_bufer, ukuran buffer, pointer_file)

3. setelah selesai dibaca/ditulis  kemudian file di tutup.

misal fclosed(pointer_file)

mudah bukan,  nanti kita lihat contohnya dibawah

Input Output standard 

fungsi untuk membaca dan menulis :

scanf

sscanf

getchar

getch

gets

printf

putchar

puts

membaca input  dari keyboad

input menggunakan getchar();

#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;

while (c != EOF) {          // jika blm  sampai end of file

c = getchar();                 // ambil character

putchar(c);                      // tampilkan character ke layar
}
}

input menggunakan scanf


#include <stdio.h>

int main()
{
int bilangan_int;

printf( “masukan data integer: ” );
scanf( “%d”, &bilangan_int );
printf( “yg anda masukan %d”, bilangan_int );
return 0;
}

input  mengunakan sscanf

deklarasi : int sscanf(const char *str, const char *format, ...)

#include <stdio.h>
#include <stdlib.h>

int main()
{
int bilangan1, bilangan2;
char string1[20], string2[20], tampung[100];

strcpy( tampung, “apa kabar 17 21” );
sscanf( tampung, “%s %s %d %d”, string1, string2, &bilangan1, &bilangan2 );

 // string1 berisi “apa”, string2 berisi “kabar , bilangan1 berisi 17,  bilangan2 berisi 21

printf(”  %s %s, %d = %d    \n”, string1, string2, bilangan1, bilangan2 );  // print ke layar monitor

return(0);
}

 

Membaca dan menulis file

membaca data string  dari file dgn fget

deklarasi: char *fgets(char *str, int n, FILE *stream)

contoh program:

/*
buatlah file filetest.txt misal isinya spt ini:
0 1 0
1 2 0
2 0 3

*/

#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

main()
{
FILE *fp;
char baris[20], string1[5], string2[5], string3[5];
int i;

fp=fopen(“filetest.txt”,”r”);
if (fp==NULL) {
printf(“file tdk bisa dibuka\n”);
exit(1);
}
printf(“\n”);
printf(“==========================\n”);
printf(“isi file : \n”);
printf(“==========================\n”);

 // baca tiap baris sampai fp ga ada char/null

i= 0;
while (fgets(baris,sizeof baris,fp)!=NULL)  {

printf(“%s”,baris);   // mencetak string baris ke layar

i++;
}

printf(“\n”);
printf(“==========================\n”)
return(0);
}

misalkan file contoh diatas saya simpan dgn nama readfile.c

hasil compile program diatas dgn compiler  GCC :

readfile

sumber

http://www.cprogrammingexpert.com/C/Tutorial/file/fgets.aspx

Advertisements

Pengetahuan Dasar Function Code Modbus FC15

Tulisan ini adalah sebagai tambahan/lanjutan dari   tulisan  :  Pengetahuan Dasar Protokol Modbus

Frame modbus 

modbusframe

byte Funcntion code pada frame modbus  terletak setelah byte alamat mempunyai  rang 1 – 127 .100 – FC 110.

Berikut ini  Register  map dan function Code yg harus digunakan untuk mengaksesnya.fcmap3

Penjelasan Fuction Code  15  (0FH)  Membaca Coil

FC 15  ini digunakan untuk  men set  beberapa  coil sekaligus  menjadi ON atau OFF.   Frame  query / request yang digunakan untuk itu  spt gambar berikut ini

queryfc15

alamat slave= 1 byte

function code = 1 byte

alamat awal coil = 2 byte

jumlah qoil yg akan di set = 2 byte

N   adalah jumlah byte yg berisi nilai yg akan diset ON atau OFF .

Contoh 1:    ada 16 coil  dgn nomor  20 – 35  yg akan diset  menjadi   8 coil berurutan di set OFF dan 8 coil diset  ON

diset       off   off     off    off   off  off  off  off   off       on   on   on   on   on   on  on   on

COIL :     27  26     25     24    23     22    21   20        35    34  33  32   31  30    29    28

di tulis dalam dalam  biner 00000000  (00H)    dan  11111111 (FFH)

maka N= 2 byte  yaitu 00H danFFH

contoh 2:

diset       on    on     off   off     on     on    off   on        off    off   off  off  off  off   off    on
COIL :       27  26     25     24    23     22    21   20        35    34  33  32   31  30    29    28

di tulis dalam dalam  biner    11001101   = CDH    dan    0000001  = 01H

jadi N=2  yaitu   CDH dan 01H

untuk lebih jelasnya lihat  tabel berikut ini

tabelsetcoil

alamat awal coil pertama adalah 20 (13H)

Frame request untuk contoh2 selengkapnya adalah  (misal alamat slave nya 07)  :  07-0F-0013-000A-2-CD-01-59-6B   untuk lebih jelasnya perhatikan gambar berikut ini:

CONTOHqueryfc15

Setelah  slave 07 memproses request  (on/ off coil) dan  mengisi register  coil yg di on-kan dgn 00FF dan yg di off-kan dgn 0000  jika tdk ada error maka slave akan merespon request tsb dgn format frame yg akan dijelaskan berikut ini.

Frame respon untuk Fc15

responsefc15

Untuk frame respon dari request contoh2  diatas adalah : 07-0F-0013-000A-246F

CONTOHresponsefc15

Referensi:
http://www.simplymodbus.ca/

http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

Pengetahuan Dasar Function Code Modbus FC01

Tulisan ini adalah sebagai tambahan/lanjutan dari   tulisan  :  Pengetahuan Dasar Protokol Modbus

Frame modbus 

modbusframe

byte Funcntion code pada frame modbus  terletak setelah byte alamat mempunyai  rang 1 – 127 .

Function code berfungsi untuk memberitahu Slave tentang perintah yang harus dikerjakan dan sebagai indikasi respon normal atau jenis error yang terjadi (exception response).

Function Code terbagi menjadi 3 kategori

1. Function Code untuk umum

Function Code ini divalidasi oleh komunitas MOSBUS-IDA.org .  function code ini yang akan dibahas di artikel ini.

2. Function Code yg di definisikan sendiri (user defined)

Function code yg didefinisikan oleh kita sendiri mempunai range FC 65-FC72 dan FC 100 – FC 110.

3. Fuction Code cadangan.,  digunakan di internal perusahaan.

fckategory

Berikut ini  Register  map dan function Code yg harus digunakan untuk mengaksesnya.fcmap3

Penjelasan dan contoh masing masing Function Code

Fuction Code  01   Membaca Coil

FC 01  ini digunakan untuk membaca status coil apakah sedang ON atau OFF.  Frame untuk membaca coil selengkapnya spt gambar berikut ini

QUERYFC01

alamat slave= 1 byte

function code = 1 byte

alamat awal coil = 2 byte

jumlah qoil yg akan di baca = 2 byte

Contoh  pembacaan coil    20  sampai coil ke  40,. misalkan alamat slave yg dituju  adalah 07 ,Maka master akan mengirim  frame  spt pada gambar dibawah ini:

 contohfc1

Misal keadaan coil  20 sampai 40 yg ada di slave  alamat 07 adalah sbb:

COILDISLAVE

(tulisan ON dan OFF pd gambar diatas  sebagai keterangan saja)

Kemudian keadaan coil 20-40 kita kelompokan menjadi 3 byte sbb:

responfc01

Sehingga status coil  nomor 20-40 diwakilkan menjadi 3 byte hexa  yaitu 99, 1D dan 07.

RESPON SLAVE UNTUK QUERY FC01

Format frame untuk  respon slave  FC01 adalah sbb

frmeresponfc01

Jadi nilai byte byte respon slavenya akan seperti dibawah ini :

RESPONCONTOHFC01

Referensi:
http://www.simplymodbus.ca/

http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

Pengetahuan Dasar Diagram Interaksi (sequnce diagram dan kolaborasi)

Tulisan ini merupakan lanjutan dari  pengetahuan dasar uml

Diagram interaksi digunakan untuk memodelkan interaksi objek di dalam sebuah use case (proses). Diagram interaksi memperlihatkan interaksi yang memuat himpunan dari objek dan relasi yang terjadi antar objek tersebut, termasuk juga bagaimana message (pesan) mengalir diantar objek. Diagram interaksi terdiri dari dua buah diagram, yaitu diagram sekuen (sequence diagram) dan diagram kolaborasi (collaboration diagram).

Diagram sekuen menggambarkan urutan even dan waktu dari suatu pesan yang terjadi antar objek dalam sebuah use case, sedangkan diagram kolaborasi menggambarkan bagaimana objek terkoneksi secara statik (tetap) dengan penekanan pada organisasi struktural objek-objek yang mengirim dan menerima pesan.

1, Diagram sekuen.

Diagram sekuen menggambarkan  hubungan antara  objek pada use case dengan mendeskripsikan waktu hidup objek dan message yang dikirimkan dan diterima antar objek. Oleh karena itu untuk menggambar diagram sekuen maka harus diketahui objek-objek yang terlibat dalam sebuah use case beserta metode-metode yang dimiliki kelas yang diinstansiasi menjadi objek itu.

Diagram sekuen  dapat berupa sebuah  diagram sekuen  yg bersifat umum  yang menunjukkan semua skenario yang mungkin untuk semua use case, atau  terpisah pisah untuk tiap skenario tungal  di dlm  use case.

Diagram sekuen yang digunakan  pada  analisis dan tahap desain, namun  pada tahap desain , diagram sekuen sangat implementasi spesifik sering kali  objek database  atau GUI sering termasuk sebagai  komponen  kelas tertentu.

Simbol-simbol yang digunakan pada diagram sekuen:

symbol_sequence_diagram

Contoh diagram sekuen  untuk sebuah skenario  login ke sebuah system

login_sekuen

pada diagram diatas Objek user , account dan object database berinteraksi (mengirimkan pesan lewat methode) secara berurutan (sekuen) berdasar  urutan waktu. penjelasan secara berurutan dari diagram contoh diatas sbb:

methode Login()  ada   di objek  Account

methode searcUserlogin ada di objek Database

methode check()  ada di objeck Account .

jadi urutannya  (sequence) login ke system  begini:

1. objek user memanggil methode Login() yg ada di objek Account

2. objek Account memanggil methode   searcUserlogin() yg ada di objek Database. methode ini mengembalikan nilai ( berupa hasil pencarian user) ke objek account.

3.  objek Account mengecek  user hasil pencarian apakah  user tsb valid atau tdk.

4. objek account mengirim hasil  pengecekan tsb ( sebagai return dari methode Login() ).

Contoh kedua :

diagram sekuen  pembelian buku pada toko buku online implementasi dari use case “pembelian buku”

bukuonline

Pengetahuan Dasar mengirim-menerima SMS melalui Mikrokontroler ( dgn AT Command modem GSM)

Pengetahuan Dasar  mengirim-menerima  SMS melalui Mikrokontroler

Tujuan:

Anda bisa berkomunikasi dgn Microcontroller melalui SMS.

Alat  dan bahan :

1.  Modul microcontroller AVR

2.  Modem GSM  dgn serial Port

4.  GSM SIM CARD (XL ,simpati ,tri, dll)

5.  Software Codevision

Prinsip dan Cara kerja Mengirim SMS melalui Microcontroller

Microcontroller mengirim  data ( isi SMS dan No tujuan) ke modem GSM  melalui RS232,kemudian modem GSM mengirim  data tsb ke SMS center yang akan menyampaikan ke No Hp yg dituju.

Blok diagram mengirim-menerima SMS dgn Mikrokontroller

Perintah yang di mengerti modem  adalah “AT Command” . Disebut AT Command karena perintah2nya  didahului oleh “AT” ( Atention).

Contoh beberapa AT command  untuk Modem GSM:

AT+CPBF  : cari no telp.
AT+CPBR  : membaca buku telp.
AT+CPBW : menulis  no telp di buku telp.
AT+CMGF  : menyeting mode SMS text atau PDU
AT+CMGL : melihat semua daftar sms yg ada.
AT+CMGR : membaca sms.
AT+CMGS  : mengirim sms.
AT+CMGD  : menghapus sms.
AT+CMNS : menyeting lokasi penyimpanan ME(hp) atau SM(SIM Card)

AT+CGMI : untuk mengetahui nama atau jenis ponsel
AT+CGMM : untuk mengetahui kelas ponsel
AT+COPS? : untuk mengetahui nama provider kartu GSM
AT+CBC : untuk mengetahui level baterai
AT+CSCA : untuk mengetahui alamat SMS Center

Dalam proses pengiriman atau penerimaan SMS, terdapat  2 mode  yaitu:

1. Mode SMS  text

2. Mode SMS PDU (Protocol Data Unit).

Mode yang paling mudah digunakan yaitu mode teks (kode ASCII)

Penjelasan Beberapa AT Command

AT+CPMS : Mengeset Target lokasi memory

AT Command Respon  Modem
AT+CPMS=[Mode1],[Mode2],[Mode3] OK

Mode1],[Mode2],[Mode3]  , SM =SIM Card , ME (HP) , MT  semua storage.

-AT+CMGF : Mengeset Modem sebagai Mode text atau  PDU.

AT Command Respon  Modem
AT+CMGF=<mode><CR> OK

Parameter 
<mode>     0 =Mode PDU,   1 =  Mode text

<CR> = ASCII character 13

Contoh  Set  GSM modem ke  Text Mode SMS dan kirim  sms ke  No : +6285695341050.

(anda bisa mencobanya lebih dahulu pada hyperterminal)

AT+CMGF=1          <akhiri dg enter(CR) >
OK // ini respon ok dari modem 
AT+CMGS="+6285695341050"  <akhiri dg enter(CR)
> > hallo apa kabar.  <akhiri dgn CTRL-Z>
+CMGS: 324  //parameter jawaban dari modem
OK // jawaban ok dari modem
Untuk mengetahui Mode apa yang sedang aktif gunakan perintah:
AT+CMGF?

 AT+CMGL: Melihat  sms yang ada 

AT Command Respon Modem
AT+CMGL=<stat><CR> +CMGL: <index>,<stat>,<oa>,[<alpha>],[<scts>]<CR><LF><data><CR><LF>

OK

Parameter
<stat>:  Status , antara lain:

status sms  mode text  mode PDU
sms blm dibaca “REC UNREAD” 0
sms sdh dibaca “REC READ” 1
sms tak terkirim “STO UNSENT” 2
sms terkirim “STO SENT” 3
semua sms “ALL” 4

<index>: Index  pesan
<oa>: alamat Originator
<alpha>: Originator name (jika ada di phonebook)
<scts>:  waktu
<data>:  isi pesan

<CR>: ASCII character 13
<LF>: ASCII character 10

Contoh :

Settinglah   modem GSM ke  Mode SMS text,  lihat   semua sms yg ada kemudian hapus sms dari  modem GSM.

AT+CMGF=1 < tekan enter(CR) >
OK
AT+CMGL="ALL"  //(pada mode PDU(CMGF=0) gunakan AT+CMGL=4)
+CMGL: 1,"REC UNREAD","+6285695341050",,"11/01/09,10:26:26+04" pesan pertama
+CMGL: 2,"REC UNREAD","+6285695341050",,"11/01/09,10:26:49+04" pesan kedua 
OK
AT+CMGD=1 //hapus pesan pertama 
OK 
AT+CMGD=2 //hapus pesan kedua
OK
 

Jika ada sms masuk modem akan memberi pemberitahuan  :

+CMTI : “SM”,1″

artinya ada sms diimpan di indek pertama

AT+CMGD : Menghapus SMS

AT Command Response MODEM
AT+CMGD=<index><CR> OK
contoh
AT+CMGD=1 //hapus pesan urutan pertama 
OK //jawaban dari modem GSM
 

AT+CMGS : Mengirim SMS

AT Command Response modem GSM
AT+CMGS=<number><CR><message><CTRL-Z> +CMGS:<mr>
OK

Parameter
<CR> = ASCII character 13
<CTRL-Z> = ASCII character 26
<mr> = message Reference

Contoh
Menseting modem GSM ke  Mode SMS  text dan menngirim sms ke +6285695341050.

AT+CMGF=1
OK //jawaban modem
AT+CMGS="+6285695341050"  <akhiri dgn enter bukan entar :-)
> halo pc control <akhiri dgn CTRL-Z> 
+CMGS: 123 //parameter jawaban dari modem 
OK //jawaban dari modem 

demikianlah ceritanya  dasar perintah AT Command.

Perintah Microcontroller  mengirim  AT Commad  ke modem GSM

Mikrokontroller yg kita gunakan jenis AVR dgn pemrograman C codevision

Gunakan fungsi printf untuk mengirim string At command ke modem  GSM.dan  putchar  jika hanya mengirim  1 karakter.

contoh

printf(“AT+CMGF=1”);                            //menyeting modem GSM ke  mode text

putchar(13);                                                 //mengirim 1 karakter  CR / enter.

printf(“AT+CMGS=”);
putchar(‘ ” ‘);
printf(“+6285695341050″);                  //no HP  yg dituju
putchar(‘ ” ‘);
putchar(13);                                                  //kode ascii <CR>
printf(” apa kabar “);

putchar(26);                                                // kode ASCII untuk  CTRL-Z

kalau ada hal yg membingungkan atau ada pertanyaan silahkan di comment saja

referensi:

– Mobile Application Development with SMS and the SIM Toolkit

http://www.developershome.com/sms

http://www.avrku.com/2010/02/send-sms-pakai-microcontroller.html

http://www.jazi.staff.ugm.ac.id/jazi.pdf

http://electroniclib.wordpress.com/2011/01/27/at-command-gsm-modem-sim300-part-1-pengoperasian-dengan-komputer/

http://www.atmel.com/Images/doc8016.pdf

http://www.dreamfabric.com/sms/

http://u2technologies.wordpress.com/2011/04/03/sms-gateway-dengan-at89s52-c51/

Pengetahuan Dasar Membuat Laporan / Report di .NET dgn Visual C#

Report yang kita akan  buat disini adalah sebuah kesimpulan dari  data di dlm database  yang ditampilkan dalam bentuk  tabel  dan atau grafik  pada form  C# . Form tsb bisa di print  atau di rubah kedalam bentuk format ms Exel atau pdf.

Contoh  report:

Contoh report

Contoh report

Langkah Langkah Membuat report

1. Buat project C#  baru

2. Drag and drop  report viewer ke dlm form

drag and drop report viewer

3.  Buat dataset

membuat dataset

datasource1

– masukan nama server dan pilih database ,

– pilih database name . Pada contoh ini kita pilih database  produksi  pada ms sql server yg sudah kita buat sebelumnya . anda bisa mengggunakan ms access atau mysql atau database lainnya.

data-source2

data-source3

4. Kembali ke Form Utama , klik komponen reportviewer

form

– mendesain form report

datasetwizard1

-pilih database

datasetwizard2

– klik Next sampai Finish , sampai tampil hasil form report sbb :

hasil-report

– Kembali ke form Utama , dan pilih file report yg sudah dibuat spt tampak pd panah merah di gambar berikut

form

5.  Klik menu run untuk melihat hasil

hasil

selesai.

pada hasil report diatas tampak hasil  data kosong , karena memang datbase belum ada datanya :-).

 

Pengetahuan Dasar Pemrograman SPI (serial Pheriperal Interface) pada AVR dengan AVR Studio

Pada artikel ini saya  akan membahas pemrograman SPI dengan AVR Studio , setelah pada artikel  lain saya sudah bahas SPI dgn CodeVision bisa  anda baca disini 

Transfer data dengan SPI digunakan antara Master ( Microcontroller) dgn slave (microcontroller atau SPI device  spt MMC card, SPI ADC , dll)  dalam jarak dekat dan kecepatan cukup tinggi.

Komunikasi serial data antara master dan slave pada SPI diatur melalui 4 buah pin yang terdiri dari SCLK, MOSI, MISO, dan SS  sbb:

  • SCLK dari master ke slave yang berfungsi sebagai clock
  • MOSI jalur data dari master dan masuk ke dalam slave
  • MISO jalur data keluar dari slave dan masuk ke dalam master
  • SS (slave select) merupakan pin yang berfungsi untuk mengaktifkan slave

SPI Diagram

Transfer data SPI

Pin / kaki SS (slave select) merupakan pin yang berfungsi untuk mengaktifkan slave sehingga pengiriman data hanya dapat dilakukan jika slave dalam keadaan aktif (active low). Dari gambar diagram SPi diatas anda sudah bisa membayangkan bagaimana cara SPI mentransfer data antara Master dan slave. Intinya ada di  register geser 8 bit.  Tiap clock dari SCK akan mempertukarkan 1 bit data , jadi untuk mempertukarkan register di master dan slave perlu 8 kali clock. contoh konkritnya begini: data di register geser master adalah 1111  1111 data di register gaser slave adalah  0000 0000

keadaan awal

kemudian pada clock pertama dan kedua  isi register berpindah sbb:

Setelah 8 kali clok data berpindah:

Jalur SPI pada AVR Atmega8535

Jalur SPI pada Atmega8535

Register yang terkait dgn SPI:

Sebelum kita memprogram SPI dengan AVR Studio kita perlu mengetahui 3 buah regsiter yg terkait dgn SPI yaitu:

.

1. Register Control SPI  ( SPCR )

bit SPIF diset =  1 ,  menyebabkan interupsi SPI .

bit SPE  di set =1  : untuk mengaktifkan fungsi SPI

bit MSTR diset =1 menjadikan microcontroller sbg Master SPI, artinya menjadi sumber pengendali.

bit DORD diset 1 maka bit yg dikirim  pertama LSB, jikaDORD= 0 bit yg pertama dikirim MSB
kombinasi Bit SPI2X, SPR1, dan SPR0 untuk menentukan sumber clock

000: SCK = system clock/4
001: SCK = system clock/16
010: SCK = system clock/64
011: SCK = system clock/1284
100: SCK = system clock/2
101: SCK = system clock/8
110: SCK = system clock/32
111: SCK = system clock/64

2. Register Status SPI (SPSR)
bit SPIF otomatis di set 1 ketika delapan bit data telah ditransfer dari master ke slave.
SPSR ini juga berisi bit SPI2X digunakan untuk mengatur frekuensi SCK
3. Register Data (SPDR)
Register ini berisi data yg akan ditulis atau dibaca.

Contoh Code inisialisasi dan baca-tulis SPI dengan AVR Studio
void inisialisasi_spi(unsigned char control)
{
DDRB = 0xA0; //Set SCK (PB7), MOSI (PB5) sbg output,

//konfigurasi Register Control (SPCR)
SPCR = 0x53; //SPIE:0,SPE:1,DORD:0,MSTR:1,CPOL:0,CPHA:0,SPR:1,SPR0:1
}

void menulis_databyte(unsigned char databyte)
{
SPDR = databyte;
while (!(SPSR & 0x80));  //tunggu sampai data selesai di transfer
}

unsigned char membaca_databyte(void)
{
while (!(SPSR & 0x80));  //tunggu sampai data selesai di terima
return SPDR;
}

Master  dapat dihubungkan dengan banyak slave

Master dihubungkan dengan banyak slave dengan cara berantai/ cascade

SPI_daisy_chained

Contoh aplikasi SPI lainnya bisa anda baca disini:
https://pccontrol.wordpress.com/2011/09/15/pemrograman-display-7-segment-dengan-spi-max7221/

referensi :

Penggunaan Microcontroller ( Mikrokontroller) di Industri

by pccontrol

Penggunaan Microcontroller  sebagai controller  di industri saat ini  sudah mulai  banyak dikenal terutama setelah banyak muncul vendor  vendor lokal yang memasok kebutuhan pelatihan, software maupun hardware  , diantaranya  yaitu Delta elektronik (surabaya),  prasimax/mikron123(depok) ,depokinstrument, kelas-mikrokontroller,Pa Agfi    dll .  Tetapi salah satu pendorong utama alasan penggunaan microcontroller di industri adalah alasan ekonomi,  karena pada aplikasi-aplikasi tertentu di dalam dunia industri  menggunakan microcontroller jauh  lebih ekonomis (murah) dibanding penggunaan PLC atau komputer PC.   Selain itu sudah ada juga yang berusaha  membuat   microcontroller  menjadi  spt PLC  secara harware  diantarnya Prof Dr Murat Uzam dari Turki  dan  AVRPLC  dari Microelektronik .

Uzam PLC , berbasis microcontroller PIC16F648A

Microcontroller VS PLC

Perbandingan disini ditujukan bukan untuk menggantikan peran PLC diindustri dengan microcontroller , tapi untuk saling melengkapi peran masing2. Berikut ini perbandingan PLC Vs Microcontroller menurut pendapat penulis.

Perbandingan  PLC    Microcontroller
Harga Hardware  variatif murah,sedang&mahal)  Relatif Murah
Harga Software  mahal  Relatif Murah  & ada yg gratis
Software  Ladder diagram,asembler  bahasa C,basic,assembler,basic,phyton,java
Hardware  terstandarisasi  tdk standar
Qualitas  Jaminan pabrik  Variatif
Komunikasi  Standart  Variatif

Beberapa pertimbangan penggunaan  microcontroller pd Industri:

  • Standart tegangan pada industri.
  • Bahasa Pemrograman.
  • Keadaan Lingkungan sekitar(temperatur ,humidity,debu dll).
  • Waktu Penggunaan  24 jam, 7hari.
  • Interferensi sinyal.
  • Noise.
  • Kemudahan dlm Perawatan.
  • Kemudahan Operasional buat teknisi/operator.
  • Display / indikator / status.
  • Qualitas Hardware (komponen,PCB,circuit dll)
  • Tampilan Casing Simple / Kompak  &  Kuat.
  • Input Bouncing.
  • Komunikasi dgn PC (data logger ataupun real Time)
  • Watchdog timer.
  • Data tdk hilang ketika power off.
  • Manual book / Work Instruction.
  • extending/upgrading hardware  & software.

Contoh Aplikasi Mikrokotroler  di Industri

  • Aplikasi Andon (display Out produksi, Produk NG, Progress dll)
  • Aplikasi Remote Input-Output
  • Aplikasi Control
  • Aplikasi Monitorung
  • Aplikasi Data Logger
  • Aplikasi Timbangan Digital
  • Automatisasi
  • dll

Standar Input dan Output pada PLC di industri

Jika kita ingin membuat aplikasi microcontroller untuk aplikasi di Industri salah satu yg penting dipertimbangkan dalam mendesain rangkaian  adalah standar modul input dan output yg berlaku di industri.  Contoh berikut ini disajikan modul stadart input dan output.

Spesifikasi Input

Tegangan input PLC  diindustri 12v dan 24v

Rangkaian Input

modulinput

Komponen Utama modul input adalah Optocopler yg digunakan untuk isolasi/proteksi rangkaian internal selain sebagai konverter tegangan 24v ke 5V. contoh optocopler PC817 untuk input DC ,PC814 untuk input AC/DC.

 

Spesifikasi Output

Output PLC  berupa saklar dalam bentuk Relay atau Transistor

 beriikut ini contoh speifikasi output untuk  Relay  

switching capacity : 2 A 250 VAC dan    2 A 24 VDC 

Rangkaian Output

moduloutput

 

 berikut ini contoh speifikasi output untuk  Transistor

Switching Capacity : 4.5  s/d 30 VDC

moduoutputtransistor

referensi:

http://www.meliksah.edu.tr/muzam/UZAM_PLC_with_PIC16F648A.htm

http://www.microchip.com/forums/tm.aspx?high=&m=476788&mpage=1#476822

http://www.control.com/thread/1026158987

http://www.parallax.com/StoreSearchResults/tabid/768/txtSearch/plc/List/0/SortField/4/ProductID/290/Default.aspx

http://store.qkits.com/moreinfo.cfm/vm142_uk.pdf

Pengetahuan Dasar penggunaan Timer Counter Microcontroller AVR

timer

Pin Timer /Counter pada AVR

Pin Timer / Counter Pada Atmega8535

Tujuan Pembahasan timer dan counter AVR :

1. Melaksanakan tugas tertentu secara ber ulang  (mode normal).

2. Menghitung panjang pulsa (input capture)

3. Menghitung banyaknya event ( sebagai counter).

4. Mengendalikan kecepatan motor DC (pulsa wide modulation /PWM).

5. Membuat penundaan waktu (delay).

6. Sinyal generator .

Komponen utama Timer/Counter adalah sebuah register  yg tugasnya hanya berhitung dari 0 sampai batas maximumnya, register ini pada AVR disebut  register TCNT .  Misalnya  sebuah register TCNT    pada AVR adalah 8 bit,  maka nilai maksimunya adalah 255.

Register yang digunakan untuk mendukung operasi Timer Counter pada AVR :

  • Register TCNT = register pencacah dari 0 sampai nilai maximum yg kita tentukan.
  • Register TCCR =Untuk pengaturan mode  operasi  Timer/Counter
  • Register TIMSK =Untuk  memilih Timer Counter  mana yg aktif.
  • Register TIFR = Untuk mengetahui adanya interupsi akibat operasi Counter Timer .
  • Register OC (output compare) = untuk menyimpan nilai pembanding dgn nilai pd register  TCNT.
Jadi kalau kita ingin melakukan pengaturan (men set up )   Timer/Counter kita fokuskan ke register TCCRn .  n adalah nomer timer ,  misal  jika kita ingin menggunakan Timer 0 maka yg kita atur adalah TCCR0,timer 1 TCCR1A dan TCCR1B.

Kapan  dia  berfungsi sbg timer dan kapan dia berfungsi sbg counter?

konseptimer

Ketika sumber clock  dari   system clock  (kristal) maka ia  berfungsi sbg timer.

Ketika sumber clock dari external / pin T maka ia berlaku sebagai counter.

pemilihan sumber clock ada pada bit  CS pada register TCCR.

MODE TIMER O 

Untuk menentukan mode timer O di lakukan pd bit WGM-OO dan WGM-OI pada register control (TCCRO) seperti pada tabel dibawah ini.

modetimer0

1.  Mode Normal  

Memilih mode ini dgn cara menset semua bit  WGM OI =O dan WGMOO=O  , pada register TCCR

Digunakan  untuk melaksanakan pekerjaan yang berulang dgn interval tertentu juga bisa digunakan utuk membuat delay.  Nilai TCNT akan terus menerus mengalami kenaikan tiap di clock oleh simber clok yg sudah dipilih. Jika sudah mencapai maksimumnya nilai TCNT akan kembali 0  dan mengeset bit Flag TOV0 di register TIFR.  Waktu interval  dapat dirubah rubah dengan merubah nilai maximum TCNT.  Makin kecil nilai maximum TCNT makin kecil pula waktu intervalnya.  Contoh sebagai gambaran saja , jika periode clock yg di berikan ke timer 1 detik,  maka dgn nilai max TCNT diset 255 , interval timer  1 x255 = 255 detik. untuk nilai max  TCNT  di set 10 . Maka periode interval 1×10 = 10 detik.

Untuk mode normal penggunaanya cukup mudah, contohnya anda bisa baca disini.

pada mode normal selain bisa diset sebagai timer    juga sebagai counter, dgn cara merubah sumber clocknya menggunakan triger di pin TO .  Pengantian sumber clock melalui set bit CSO2:CSOl:CSOO pada register TCCRO seprti tampak pd gambar dibawah ini(  untuk lebih jelasnya lihat  penjelasan no 3.  mode normal sbg  counter   )

modenormal

Cara seting pilihan sebagai Timer atau counter pada codewizard di codevision

setwizardtimer

pilihan scala clock CS02:CSo1:CSoo untuk xtal 11.059.200hz  pd codevision sudah berupa pilihan  frekwensi clock timer:

timer_systemclock_cavr

2.  Mode Input Capture pada Timer 1 .

Input capture digunakan untuk meng hitung periode pulsa yang mentriger pin ICP1.  Setiap kali Pin ICP1 di triger  oleh perubahan sinyal (faaling atau rising )akan mengcopy nilai register 16 bit TCNT ke register 16 bit ICR1 (ICR1H dan ICR1L). perbedaan dengan  timer 0 adalah nilai TCNT continyu bergulir  tanpa ada start dan stop timer sedangkan pa timer0 ada start dan stop timer.

oleh karena itu nilai register ICR1 harus segera dibaca sebelum di overwrite oleh data TCNT yg baru ketika terjadi perubahan sinyal berikutnya.

modeICP

cara menghitung periode pulsa

misalkan triger oleh rising edge (perubahan sinyal rendah ke tinggi) pada pin ICP1

1.   set timer1 ke mode input capture

2.   enable interupsi timer1 overflow dan interupsi input capture

3.   baca nilai ICR1 pada interupsi triger pertama dan baca ICR1 pada interupsi triger kedua

4. selisih hasil bacaan tsb adalah periode pulsa.

contoh kode

#include <mega16.h>
/*define Port C as output for pulse width*/

unsigned char ov_counter;
unsigned int counterSekarang,counterSebelumnya;
unsigned int jumlahStep;
/*Timer 1 overflow ISR*/
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
++ov_counter;
}
/*Timer 1 input capture ISR*/
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
counterSekarang = 256*ICR1H + ICR1L;
jumlahStep=(unsigned long)counterSekarang+ ((unsigned long)ov_counter * 65536)- (unsigned long)counterSebelumnya;
PORTC = ~(clocks / 750); /*output milliseconds to Port C*/

ov_counter = 0;
counterSebelumnya = counterSekarang;             //simpan hasil bacaan ICR1  pertama
}
void main(void)
{
DDRC=0xFF; /*set Port C for output*/
TCCR1A = 0; /*disable all waveform functions*/
TCCR1B = 0xC2;/*Timer 1 input to clock/8, enable input capture*/
TIMSK = 0x24; /*unmask timer 1 overflow and capture interrupts*/
#asm(“sei”) /*enable global interrupt bit*/
while (1)
{
; /*do nothing here*/
}
}

3.  Mode Normal sebagai Counter


Digunakan untuk menghitung jumlah event yang mentriger pin T0 (portB.0) jika kita menggunakan  timer0  atau T1 (portB.1) pada timer1.

/*===================================================
Chip type           : ATmega8535
Author              : Pccontrol.wordpress.com
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 128
*****************************************************/

#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

unsigned int hitunganMSB;
unsigned int hitunganLSB;
 unsigned char bufferCounter[15];
 unsigned long int hitungan;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//hitungan lebih dari 255

hitunganMSB = hitunganMSB + 1;

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Timer/Counter 0 initialization
// Clock source: T0 pin Falling Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x06;
TCNT0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("counter :");
// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      hitunganLSB = TCNT0;
      hitungan = hitunganMSB + hitunganLSB; 

      sprintf(bufferCounter,"%i ", hitungan );
   lcd_gotoxy(0,1);
   lcd_puts(bufferCounter);
      };
}

4. Mode PWM , Pulsa Wide Modulation.

Mode PWM ada dua yaitu PWM phase correct dan Fast PWM.  perbedananya yaitu pada PWM phase corect counter  (TCNT) bergulir/mencacah naik dan turun . sedangkan pada Fast PWM counter  (TCNT) hanya bergulir naik saja .

Untuk menjadikan Timer counter  mode PWM phase corect yaitu  dgn Cara men set bit WGM01=1 dan bit WGM0 =0  ,  pada register TCCR.

MODETIMER
Salah satu kegunaan sinyal PWM  antara lain untuk  mengendalikan Kecepatan putaran  Motor DC.   Gambar berikut ini menunjukan berbagai bentuk PWM dan efek terhadap kecepatan Motor DC yang berbeda sesuai bentuk pulsa PWM.

Pulsa Wide Modulation

 

Cara pembentukan sinyal Fast  PWM 

Nilai pada register Counter TCNT akan terus menerus naik sampai nilai maximum, lalu kembali ke 0. begitu seterusnya selama sinyal clock diberikan kepada timer. Nilai OCR diset untuk mengatur pembentukan PWM.

saat nilai TCNT  >  nilai OCR maka pin OC mengeluarkan sinyal HIGH ,

saat nilai TCNT < nilai OCR maka pin OC mengeluarkan sinyal LOW.

Gambar berikut menunjukan tiga buah nilai OCR yang berbeda ,yg  menghasilkan  sinyal output  PWM   berbeda pula pada pin OC.

mode PWM

Cara Membuat PWM pada CodeWizard  di Codevision spt pada gambar berikut:

membuat pwm 25% pada output OC0 dgn Timer0

code program:

#include <mega8535.h>

// Declare your global variables here

void main(void)
{

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62.500 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x63;
TCNT0=0x00;
OCR0=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

while (1)
      {
      // Place your code here

      };
}

PWM phase corect
PWM PHASE CORRECT
5. Membuat Delay dengan Timer.
#include <mega8535.h>

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
delay = delay + 1
}

void main(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Normal top=FFh
TCCR0=0x05;
TCNT0=0xD9;
// Timer0 enable
TIMSK=0x01;
// Global enable interrupts
#asm("sei")

while (1)
      {
      //program utama disini
       delay(100);   //delay 1 detik   (100*10ms=1000ms)
      };
}

Void delay(int delay_ms)
{
   TCNT0=0xD9;  //interval  timer = 10 ms
   delay=0
   while(delay<=delay_ms)
   {
    //muter2 disini
    }
}

Timer Mode CTC (clear timer on compare match)

Pada mode ini counter TCNT akan bergulir/mencacah naikkemudian akan kembali 0 saat nilai  TCNT = OCR0. Untuk menghasilkan gelombang kotak pd pin OC kita set OC0 toggle yaitu dgn memberi nilai  COM1 =0 dan COM0 =1 di register TCCR.   

modectc
====================================================================
Kesimpulan cara Pengesetan register TCCR0 untuk timer 0
timer_seting

referensi :

http://www.atmel.com/dyn/resources/prod_documents/doc2505.pdf

Mengenal IDE AVR Studio 5 : C/C++ Compiler , Editor & Tool AVR microcontroller

Awal Ramadhan yang penuh berkah ini saya  mendapatkan  installer AVR Studio 5  berukuran 602 MB . Saya install di window 7  .  Bukanya saya tak cinta lagi sama Codevision yang udah memanjakan dlm pembuatan program C untuk  AVR tapi karena AVR studio bersifat free alias gratis dan dibuat oleh pembuat AVR  itu sendiri yaitu Atmel.

Dari Ebook-Ebook  ttg  AVR terbitan luar negri yang pernah  saya baca  kebanyakan mereka menggunakan AVR Studio. Tapi bagi pemula ga usah khawatir sebab baik Codevision maupun AVR studio  sama sama menggunakan bahasa pemrograman C .  silahkan Anda pilih yang mana saja yang menurut anda cocok. Buat para pemula yang penting anda lebih dahulu mengerti ttg konsep konsep dasar pemrograman microcontroller AVR.

Cara penginstallan AVR Studio 5  dgn cara  klik file tunggal hasil download :  as5installer-5.0.1163-full.exe  selanjutnya kita tinggal klik ok, yes, oke ,yes, next  dan finish :-).

Persyaratan Yang dibutuhkan:

AVR Studio berbasis  Microsoft .NET 4.0 technology .

  • Windows XP (x86)  Service Pack 3 – semua  edisi kecuali Starter Edition
  • Windows Vista (x86 & x64)  Service Pack 2 – semua edisi kecuali Starter Edition
  • Windows 7 (x86 & x64)
  • Windows Server 2003 (x86 & x64)  Service Pack 2
  • Windows Server 2003 R2 (x86 & x64)
  • Windows Server 2008 (x86 & x64)  Service Pack 2
  • Windows Server 2008 R2 (x64)

Hardware yg direkomendasikan:

  • 1.6GHz processor atau yg lebih cepat.
  • DirectX 9 capable video card  dgn resulusi 1024×768  (min 800×600 )
  • 1 GB (32 Bit) atau 2 GB (64 Bit) RAM  (tambahkan  512 MB jika berjalan di virtual machine)
  • 5400 RPM hard disk drive
  • 2 GB free hard disk space

IDE AVR Studio 5

Beberapa  Fitur AVR Studio 5:

  •  AVR Studio 5 mensupport  semua AVR microcontrollers  8 bit dan 32 bit.
  • Compiler C yang terintegrasi .  Anda tidak perlu lagi menginstall  tool2 secara terpisah spt versi sebelumnya . AVR Studio 5 sudah termasuk  compiler, assembler , simulator, debugger dan programmers.
  • Editor yang lebih mudah digunakan.
  • Atmel AVR  software framework , kumpulan kode yang siap pakai.

Tampilan menu utama

kereeen

Membuat Project Baru

Step 1

Project Baru

Step 2

step 2

Step 3

step3

Step 4

step 4

 

Selanjutnya anda bisa teruskan di  katagory  Latihan Pemrograman AVR Studio 5 

 

sumber:

http://www.atmel.com/microsite/avr_studio_5/default.asp?source=redirect