Training Elektronika Industri

No HP : 082322992336

Trainer Microcontroller

No HP : 082322992336

team electronics indonesia

No HP : 082322992336

Interface Electric car

No HP : 082322992336

Altium designer

No HP : 082322992336

Minggu, 30 Maret 2014

ASCII Table

The table that is reproduced below is the most commonly used 7-bit Ascii table. I have tried to transcribe it as carefully as possible, but if you notice any errors please let me know so I can fix them. This is provided for convenience, and should not be considered the official standard (which is available from ANSI (ref. 4)).


Decimal   Octal   Hex    Binary     Value
-------   -----   ---    ------     -----
  000      000    000   00000000      NUL    (Null char.)
  001      001    001   00000001      SOH    (Start of Header)
  002      002    002   00000010      STX    (Start of Text)
  003      003    003   00000011      ETX    (End of Text)
  004      004    004   00000100      EOT    (End of Transmission)
  005      005    005   00000101      ENQ    (Enquiry)
  006      006    006   00000110      ACK    (Acknowledgment)
  007      007    007   00000111      BEL    (Bell)
  008      010    008   00001000       BS    (Backspace)
  009      011    009   00001001       HT    (Horizontal Tab)
  010      012    00A   00001010       LF    (Line Feed)
  011      013    00B   00001011       VT    (Vertical Tab)
  012      014    00C   00001100       FF    (Form Feed)
  013      015    00D   00001101       CR    (Carriage Return)
  014      016    00E   00001110       SO    (Shift Out)
  015      017    00F   00001111       SI    (Shift In)
  016      020    010   00010000      DLE    (Data Link Escape)
  017      021    011   00010001      DC1 (XON) (Device Control 1)
  018      022    012   00010010      DC2       (Device Control 2)
  019      023    013   00010011      DC3 (XOFF)(Device Control 3)
  020      024    014   00010100      DC4       (Device Control 4)
  021      025    015   00010101      NAK (Negativ Acknowledgemnt)
  022      026    016   00010110      SYN    (Synchronous Idle)
  023      027    017   00010111      ETB    (End of Trans. Block)
  024      030    018   00011000      CAN    (Cancel)
  025      031    019   00011001       EM    (End of Medium)
  026      032    01A   00011010      SUB    (Substitute)
  027      033    01B   00011011      ESC    (Escape)
  028      034    01C   00011100       FS    (File Separator)
  029      035    01D   00011101       GS    (Group Separator)
  030      036    01E   00011110       RS (Reqst to Send)(Rec. Sep.)
  031      037    01F   00011111       US    (Unit Separator)
  032      040    020   00100000       SP    (Space)
  033      041    021   00100001        !    (exclamation mark)
  034      042    022   00100010        "    (double quote)
  035      043    023   00100011        #    (number sign)
  036      044    024   00100100        $    (dollar sign)
  037      045    025   00100101        %    (percent)
  038      046    026   00100110        &    (ampersand)
  039      047    027   00100111        '    (single quote)
  040      050    028   00101000        (  (left/open parenthesis)
  041      051    029   00101001        )  (right/closing parenth.)
  042      052    02A   00101010        *    (asterisk)
  043      053    02B   00101011        +    (plus)
  044      054    02C   00101100        ,    (comma)
  045      055    02D   00101101        -    (minus or dash)
  046      056    02E   00101110        .    (dot)
  047      057    02F   00101111        /    (forward slash)
  048      060    030   00110000        0
  049      061    031   00110001        1
  050      062    032   00110010        2
  051      063    033   00110011        3
  052      064    034   00110100        4
  053      065    035   00110101        5
  054      066    036   00110110        6
  055      067    037   00110111        7
  056      070    038   00111000        8
  057      071    039   00111001        9
  058      072    03A   00111010        :    (colon)
  059      073    03B   00111011        ;    (semi-colon)
  060      074    03C   00111100        <    (less than)
  061      075    03D   00111101        =    (equal sign)
  062      076    03E   00111110        >    (greater than)
  063      077    03F   00111111        ?    (question mark)
  064      100    040   01000000        @    (AT symbol)
  065      101    041   01000001        A
  066      102    042   01000010        B
  067      103    043   01000011        C
  068      104    044   01000100        D
  069      105    045   01000101        E
  070      106    046   01000110        F
  071      107    047   01000111        G
  072      110    048   01001000        H
  073      111    049   01001001        I
  074      112    04A   01001010        J
  075      113    04B   01001011        K
  076      114    04C   01001100        L
  077      115    04D   01001101        M
  078      116    04E   01001110        N
  079      117    04F   01001111        O
  080      120    050   01010000        P
  081      121    051   01010001        Q
  082      122    052   01010010        R
  083      123    053   01010011        S
  084      124    054   01010100        T
  085      125    055   01010101        U
  086      126    056   01010110        V
  087      127    057   01010111        W
  088      130    058   01011000        X
  089      131    059   01011001        Y
  090      132    05A   01011010        Z
  091      133    05B   01011011        [    (left/opening bracket)
  092      134    05C   01011100        \    (back slash)
  093      135    05D   01011101        ]    (right/closing bracket)
  094      136    05E   01011110        ^    (caret/circumflex)
  095      137    05F   01011111        _    (underscore)
  096      140    060   01100000        `
  097      141    061   01100001        a
  098      142    062   01100010        b
  099      143    063   01100011        c
  100      144    064   01100100        d
  101      145    065   01100101        e
  102      146    066   01100110        f
  103      147    067   01100111        g
  104      150    068   01101000        h
  105      151    069   01101001        i
  106      152    06A   01101010        j
  107      153    06B   01101011        k
  108      154    06C   01101100        l
  109      155    06D   01101101        m
  110      156    06E   01101110        n
  111      157    06F   01101111        o
  112      160    070   01110000        p
  113      161    071   01110001        q
  114      162    072   01110010        r
  115      163    073   01110011        s
  116      164    074   01110100        t
  117      165    075   01110101        u
  118      166    076   01110110        v
  119      167    077   01110111        w
  120      170    078   01111000        x
  121      171    079   01111001        y
  122      172    07A   01111010        z
  123      173    07B   01111011        {    (left/opening brace)
  124      174    07C   01111100        |    (vertical bar)
  125      175    07D   01111101        }    (right/closing brace)
  126      176    07E   01111110        ~    (tilde)
  127      177    07F   01111111      DEL    (delete)

pemograman C mikrokontroler




BAGIAN PROGRAM C

//===========================================include
#include <stdio.h>
#include <delay.h>
//============================================define
#define LED PORTB        
//============================================= VARIABLE DAN CONSTANTA global
Unsigned char  temp_data;         //contoh variable
Const temp_suhu=50;                    //contoh konstanta
Unsigned char dataserial[30] ;   // contoh array untuk buffer misal serial
//dataserial[0]=1;
//dataserial[1]=1;
//============================================== subrutin
Void namasubrutin()
{
                Isi;
}

Unsigned char namafungsi()
{
                Return nilai fungsi;
}

//====================================================
Void init_devices()
{
                DDRB=255;
                DDRD.2=0;
PORTD.2=1;
                DDRD.3=0;PORTD.3=1;
}
//=======================================================



//==========================================PROGRAM UTAMA
//PROGRAM UTAMA
//saat mikro jalan program langsung lompat ke main
//semua subrutin dan fungsi di panggil di program utama
//jika subrutin hanya untuk inisialisasi awal di simpan sebelum kalang
// jika subrutin yang dipanggil terus menerus di simpan dalam kalang
//=============================================
Void main()
{
                Init_devices();
                While(1)
{
                Namasubrutin();              //cara memanggil subrutin
Temp_data=namafungsi();
}
}
//===============================================================
Variable dalam codevision
Unsigned char namavariable; //0-255
Unsigned int namavariable; //0-65535
char namavariable; //-128-128
char namavariable; //-35767-32676
unsigned long namavariable; //0- 2^32bit
//hubungan pemakaian ram.
// 24c64 i2c eeprom kapasitas 8kbyte. 8000. Pemilihan variable alamat yaitu unsigned int
//24c1024 eeprom 1mb 1000.000 pemilihan variable yaitu unsigned long

PENGGUNAAN ARRAY
unsigned char namaarray[n_array];
biasanya digunakan untuk buffer data yang cukup banyak. Misalnya untuk buffer serial atau buffer MMC.

PROSES PENGULANGAN
Pengulangan untuk for selama 5 kali
-          I merupakan variable
-          I=0;
-          Jika i<5 tambah 1
-          Jika I sam dengan atau > 5 maka selesai
for(i=0;i<5;i++)
{
}
//for tanpa syarat dia akan mengulang terus. Kecuali ada perintah break
For(;;)
{
}
//===============================
//selama I kurang dari 5 maka proses di kerjakan
While(i<5)
{
                I++;
}
//==================================
//selama I < 5 proses di kerjakan
//=================================
Do
{
                I++;

}
While(i<5);
//=====================================================
PERINTAH BREAK
perintah break digunakan untuk keluar dari kalang, dimanapun, baik mau dari subrutin atau program utama.misal
for(i=0;i<5;i++)
{
                If(tombol1==0)break;
}
Proses dikerjakan 5 kali tapi ketika di tekan tombol maka akan keluar dari kalang.
//===================================================================
Perintah seleksi
Jika if hanya melakukan perintah  1 kali maka ridak perlu kalang. contoh
If(suhu==10)alarm=1;

Jika if melakukan perintah lebih dari 1 kali maka di perlukan kalang
If(suhu==10)
{
                Alarm=1;
                Led=255;
                Relay=1;
}
//=====================================================
Penggunaan if dengan else ada 2 kondisi
If(suhu>10)alarm=1;
Else alarm =0;

If(suhu>20)
{
                Alarm=1;
                Relay=1;
}
Else
{
                Alarm=0;
Relay=0;
]

If(suhu<20)alarm=1;
Else if(suhu>=20)&&(suhu<40)relay=1;
Else if(suhu>40)led=255;

Operater matematika
i++;         variable I ditambah 1;
i=I+2;     variable I ditambah 2;
i--;          variable i-1;
i=i*5; variable i*5
i=i/2; variable I dibagi 2
i=i%2; ambil sisa bagi
1<<n      1 digeser n kali ke kiri
1>>n     1 digeser n kali ke kanan
//==========================================================================
Contoh bagi dan sisa bagi
Misal bilangan 156. mau di tampilkan ke 7 segment atau lcd
Dalam proses ini tidak bias langsung di tampilkan tapi perlu di ketau
Nilai ratusan =1
Nilai puluah =5
Nilai satuan=6
Tempbyte=156;
Ratusan=tempbyte/100;   //156/100=1
 puluahn=((tempbyte%=100)/10); 156%100=56 terus 56/10= 5
satuan=(tempbyte%10);//56%10=6

OPERATOR LOGIKA
&&         and
||           or
~              negasi
^              xor
==           sama dengan
!=            tidak sama dengan

Sintak sintak yang sering di pakai
-          Misal membuat portb.7 berlogika 1
PORTB|=(1<<7); // Dipakai di semua bahasa yang menggunakan basic c
PORTB.7=1; // Cuma dipakai di codevision
-          Membuat portb.7 berlogika 0
PORTB&=~(1<<7);  // semua bahasa c
PORTB.7=0

-          Mengecek PIND.2 bukan 0
If(PIND.2)                            //code vision
If(PIND&(1<<2))                               //semua c
If(PIND.2!=0)                     //code vision

Mengecek PIND.2  sama dengan 0
If(!(PIND.2))                       //code vision
If(PIND.2==0)                     //codevision
If(!(PIND&(1<<2)))          //semua c

//=================================================================

If bukan 0 pada variable (pengecekan bit pada variable).

if(datalcd & 0x80) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x40) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x20) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x10) {LCD_D4_HI;} else {LCD_D4_LO;}
if(datalcd & 0x08) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x04) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x02) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x01) {LCD_D4_HI;} else {LCD_D4_LO;}

datalcd&=0x80
nilai yang mungkin keluar ada dua yaitu 0 dan 0x80;
jika bukan 0 maka lcd hi , sama dengan 0 lcd lo

datalcd&=0x40
nilai yang mungkin keluar ada dua yaitu 0 dan 0x40;

CONTOH PIND SEMUANYA INPUT.
Kita ingin mengecek apakah pind bit ke 2 ==1 JIKA YA alarm hi, jika bukan alarm 0

If(PIND&(1<<2)alarm_hi; else alarm lo;
If(PIND&0X04)alarm_hi;elsealarmlo;

PENGECEKAN PAKAI WHILE
Selama PIND.2 belum ditekan (kondisi high)

while (PIND.2);
while(PIND&0X04);
while(PIND&(1<<2));
while(pind.2==1);

selama PIND.2 ditekan (kondisi low)
while(!(PIND.2);
while(!(PIND&0X04));
while(!(PIND&(1<<2)));
while(!(pind.2==1));

soal LKS nasional 2013 bidang elektronika (assembly)

Semoga bermanfaat, dan bisa meningkatkan skill.





silahkan download soal sini.

soal kisi kisi assembly LKS NAs SMK:
klik or  http://www.4shared.com/office/MaltKvztba/Assembly-lks-kisi-kisi.html

pcb:
panel board or
http://www.4shared.com/file/Tm3wDRoZba/PCB1.html
main board
http://www.4shared.com/file/c66pr4mace/project.html

LCD 16x2 with PIC18F4520 Mplab


link download simulasi proteus dan file.HEX :

http://www.4shared.com/rar/1V5EpMqZ/PIC18f4520_LCD_16x2_with_PIC_M.html

/***********************************************/
/*                                             */
/*  program sofware design project PIC 18F4520 */
/*                                             */
/***********************************************/
#include <p18f4520.h>   
#include <delays.h>       
#include <string.h>   
#include <stdlib.h>
/***********************************************/
#define  LCD_DATA    PORTD          //deklarasi di awal program yang datanya tetap
#define     LCD_RS        PORTEbits.RE2
#define     LCD_RW        PORTEbits.RE1
#define     LCD_E        PORTEbits.RE0

const unsigned char write1[16]="SaFa Design soft";
const unsigned char write2[16]="   bismillah    ";

void write_inst(char inst) //sub program
{
    LCD_RS=0;
    LCD_RW=0;
    LCD_E=1;
    LCD_DATA=inst;        //mengkorversi isi data dari "inst" kedalam "LCD_DATA".
    Delay1KTCYx(1);
    LCD_E=0;
}

void write_data(char data)
{
    LCD_RS=1;
    LCD_RW=0;
    LCD_E=1;
    LCD_DATA=data;
    Delay1KTCYx(1);
    LCD_E=0;
}

void init_LCD(void)
{   
    write_inst(0x38);   
    write_inst(0x0C);
    write_inst(0x06);
    write_inst(0x01);
}

void locate_LCD(char x,char y)
{
unsigned char position;
     if(y==0){position=0x80+x;write_inst(position);}
     if(y==1){position=0xc0+x;write_inst(position);}
}

void clear_LCD(void)
{write_inst(0x01);}

void puts_LCD1(unsigned char *message1)
{
    unsigned char i=0;while(i<16)
    {write_data(message1[i]);i++;}
}

void main(void)
{
    ADCON1=0b00001111;
    TRISD=0x00;
    TRISE=0x00;
    init_LCD();
    clear_LCD();

while(1)
    {
    locate_LCD(0,0);
    puts_LCD1(write1);
    locate_LCD(0,1);
    puts_LCD1(write2);   
    }
}

1 tombol on off with PIC18f4520


contoh program 1 tombol on off with PIC18f4520 tanpa interupt
////////////////////////////////////////////////////////////////
#include <p18f4520.h>    //preprocessor.
#include <delays.h>        //header untuk waktu tunda.

#define tombol PORTAbits.RA0    //persamaan nama "tombol=PORTA.0"
#define led1 PORTCbits.RC0      //persamaan nama "led1=PORTC.0"

char kondisi=0;       // variabel

void main (void){     //program utama yang akan dijalankan.
TRISA=0xff;           // Konfigurasi output
TRISC=0x00;           // konvigurasi input
ADCON1=255;
PORTA=0; PORTC=0;     // kondisi PORT standby
   
    while (1){
    if (kondisi==0&&tombol==0){
    kondisi=1;  
    }
    if (kondisi==1&&tombol==1){   
        led1=~led1;kondisi=2;   
    }   
    if (kondisi==2&&tombol==0){   
        kondisi=0;              
    }       
    }
}   

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

penjelasan
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
    while (1){
    if (kondisi==0&&tombol==0){
// jika kondisi=0 dan tombol=0
    kondisi=1;                    // maka kondisi dubuat menjadi 1
    }
    if (kondisi==1&&tombol==1){ 
   // jika kondisi=1 dan tombol=1
        led1=~led1;kondisi=2;    // maka led1 = kebalikan dari kondisi awal led1, dan kondisi diubah menjadi 2
    }   
    if (kondisi==2&&tombol==0){ 
   // jika kondisi=2 dan tombol=0
        kondisi=0;                // kembali ke awal
    }       
    }
}  


download simulasi dengan isis dan file hexnya
http://www.4shared.com/rar/U_MAibmC/1_tombol_on_off_with_PIC18f452.html




control proportional water level with PLC schnaider


Gambar 1. Water Distribution
Keterangan:
V1           : Valve 1”
V2           : Valve ¾”
V3           : Valve ½”
V4           : Valve ¾”
V5           : Drain Valve 1/2”
V6           : Drain Valve2  1“
Tinggi tangki utama : 40 cm

Perinsip kerja:
Dalam system pengaturan level ini awalnya diatur set point level air yang akan dijaga ketinggian. Saat system dijalankan maka pompa air akan mengalirkan air, air mengalir melaui saluran Valve (V1, V2, V3, V4) yang dalam keadaan terbuka dan akan mengisi tangki Utama. sensor Level air akan mengukur level air dari tank utama, Jika level air telah mencapai nilai set poin maka controller akan mengirimkan sinyal ke valve untuk menutup. Saat saluran pembuangan dibuka (Drain Valve “V5, V6”), maka air pada tank utama akan berkurang dan hal tersebut akan diukur oleh sensor level. Saat level air berkurang dari set poin yang telah ditetapkan maka Valve (V1, V2, V3, V4)  akan membuka dan pompa air akan bekerja, sehingga level air tetap terjaga sesuai dengan set point yang telah ditetapkan, dikarenakan menggunakan sisten On OFF maka toleransi set point dibatasi 2 %. Pemilihan V1, V2, V3 untuk terbuka adalah tergantung pada kondisi level air, keterangan bias dilihat table dibawah ini:
selisih atau error antara set pain dengan level air
V1
V2
V3
V4
Pump
<=100 %  >= 50 %
1
0
0
1
1
< 50%  >=25 %
0
1
0
1
1
<25 %  >2 %
0
0
1
1
1
<=2% >=0%
0
0
0
0
0

drain water
V5
V6
slow
1
0
middle
0
1
fast
1
1

Perhitungan nilai error





Keterangan:
Error                      : hasil pengolahan data input
Set point             : nilai pemberian awal pada display
Level Air              : kondisi level air pada tank utama sekarang.

Jika error didapatkan nilai negative atau kondisi air melebihi set point  maka valve drain (V5, V6) akan terbuka
error negative
V5
V6
V4
Pump
<=100 %  >= 50 %
1
1
0
0
< 50%  >=25 %
0
1
0
0
<25 %  >2 %
1
0
0
0
<=2% >=0%
0
0
0
0

Jika error didapatkan nilai positif atau kondisi air kurang dari set point  maka (V1, V2, V3 dan V4) akan terbuka sesuai table dibawah ini.
error positif
V1
V2
V3
V4
Pump
<=100 %  >= 50 %
1
0
0
1
1
< 50%  >=25 %
0
1
0
1
1
<25 %  >2 %
0
0
1
1
1
<=2% >=0%
0
0
0
0
0


FlowChart


Simulasi operator screen


PROGRAM Unity pro xl
if start = 1 then
run :=1;
kon_stop:=0;
lamp_em:=0;
elsif stop = 1 then
run :=0;
kon_stop:=1;
lamp_em:=0;
elsif emergency = 1 then
set_point :=0;
error:=0;
level_air :=0;
run :=0;
lamp_em:=1;
end_if;

if (set_point>=level_air and run=1 ) then
                error := (((set_point - level_air) * 100)/ set_point) ;
                if (error <= 100 and error >=50) then
                v1:=1;
                v2:=0;
                v3:=0;
                v4:=1;
                v5:=0;
                v6:=0;
                pump:=1;
                elsif (error < 50 and error >=25) then
                v1:=0;
                v2:=1;
                v3:=0;
                v4:=1;
                v5:=0;
                v6:=0;
                pump:=1;
                elsif (error < 25 and error >=2) then 
                v1:=0;
                v2:=0;
                v3:=1;
                v4:=1;
                v5:=0;
                v6:=0;
                pump:=1;
                elsif (error < 2 and error >=0) then
                v1:=0;
                v2:=0;
                v3:=0;
                v4:=0;
                v5:=0;
                v6:=0;
                pump:=0;
                end_if;

elsif (set_point < level_air and run=1 ) then
                error := ((( level_air - set_point) * 100 )/set_point);
                if (error <= 100 and error >=50) then
                v1:=0;
                v2:=0;
                v3:=0;
                v4:=1;
                v5:=1;
                v6:=1;
                pump:=0;
                elsif (error < 50 and error >=25) then
                v1:=0;
                v2:=0;
                v3:=0;
                v4:=1;
                v5:=0;
                v6:=1;
                pump:=0;
                elsif (error < 25 and error >=2) then
                v1:=0;
                v2:=0;
                v3:=0;
                v4:=1;
                v5:=1;
                v6:=0;
                pump:=0;
                elsif (error < 2 and error >=0) then
                v1:=0;
                v2:=0;
                v3:=0;
                v4:=0;
                v5:=0;
                v6:=0;
                pump:=0;
                end_if;

end_if;