Jump to content
rahmat700

Atmel Dengan Pic Mane Lebih Senang Utk Dpelajari,,,

Recommended Posts

Dua2 senang..dua2 susah..actually same je..programming language yg digunakan menentukan susah atau senang. Kalau familiar dengan embedded c, senang la gune c. Kalau familiar dgn assembly, senang la gune assembly. Tapi essembly depend pada compiler n microcontroller..kena study sket..tapi flexibility dia tinggi compare dgn c.

Untuk permulaan, 2 microcontroller ni sesuai la untuk newbie. Skrang popular dgn ARM controller..nak advanced lagi, gune resberry pie..

Share this post


Link to post
Share on other sites
Programmer adalah tool yg digunakan untuk write code dlm microcontroller. Pic ada programmer dia..atmel pn ada programmer dia sendiri..

Yang ko nak blajar ni programming ke programmer? Ko nak pkai programming language ape? Compiler ape?

Kalau pic ko bleh gune MPLAB IDE daripada microchip. Atmel aku xsure lak..tapi ada compiler x?

Share this post


Link to post
Share on other sites
Compiler adalah tool utk convert code programming kepada machine code. Maknanya convert bahasa yg kita faham kepada bahasa yg mesin faham. MPLAB IDE didatangkn dgn HI-TEC C Compiler. Ada juga assembly compiler.

Tak semestinya kita hanya boleh guna compiler ni sahaja. Banyak lagi compiler yang ada. Contohnya PICC Compiler,PIC Basic dan lain-lain. Bergantung programming language yg kita gunakan. Setiap compiler ni juga ada special keyword atau compile option yg boleh digunakan.

Untuk beginner ni, ada satu website yg jual development kit utk pic dan atmel. Local company la. Ada contoh2 source code dan aplikasi yg boleh dirujuk.

http://www.cytron.com.my

Share this post


Link to post
Share on other sites
Ko beli SK40C ke?utk permulaan, cuba main-main IO dulu..output dia bleh tgk dengan LED kat board..buat blinking ke..alternate blinking ke..pastu main dgn button switch..bile dah mahir dengan IO, bleh la explore adc, timer, interrupt, pwm, spi dan lain-lain.

Kat website cytron ada contoh2 source code. Boleh rujuk situ. Tapi sebelum tu, ko kena study datasheet pic. Study io pins..study registers..baru nampak dengan lebih jelas

Share this post


Link to post
Share on other sites
ko ada basic programming tak?ape language yang ko familiar?

ni contoh programming dalam c untuk pic.

[code]
#include <stdio.h>
#include <16f877a.h>

/*------- Register Settings for IO -------------*/
TRISA = 0x00;
TRISB = 0xFF;

/*-------Function prototype-------------*/
void delay( void );


void main( void )
{
while(1)
{
RB0 != RB0; //blinking
delay();
}
}

void delay( void )
{
for(;;); //do nothing
}

[/code]

Share this post


Link to post
Share on other sites
aku xde basic langsung.. sbb minat ni yg nk blajar..
#include <stdio.h>
#include <16f877a.h>


ape function include..?
<stdio.h> ni ape ,,, wajib ke bnde ni letak,,,
16f877a.h utk pic yg kite gune kepe?

Share this post


Link to post
Share on other sites
Takde basic langsung? Agak susah jugak ni. Ko belajar jurusan ape?
Aku nak ajar pun agak susah kalau xde basic langsung.

Kalau C ko tak tahu langsung, tambah la assembly.
Tapi ko jangan risau, ko blaja benda basic dulu. Basic C programming.
Ko kena tahu dulu C programming structure.

Benda yang penting:[list=1]
[*]basic data type
[*]arithmetic conversion of data type
[*]statement
[*]type definition
[*]constants
[*]type qualifier
[*]operators
[*]preprocessor statements
[*]storage class
[*]expressions
[*]arrays
[*]pointers
[*]functions
[*]structure
[*]unions
[/list]
#include - ni preprocessor statement. Di mana kita reference kan header file dalam source code kita.
Contoh <stdio.h> adalah standard I/O header file yang ada function, constants, etc. yang akan digunakan dalam source code kita. File ni biasanya disediakan oleh compiler developer. kalau ko tak letak pun takpe, tapi ko kena buat sendiri la functions yang ada dalam stdio.h tu..

<16f877a.h> lak header file yang mengandungi data, register, io adfdress dan lain-lain lagi related to PIC yang digunakan. Setiap PIC berbeza dia punya io address, register address. So header file ni mengandungi maklumat tentang PIC yang kita guna.

Share this post


Link to post
Share on other sites
aku amik jurusan dip kej elektronik, kat poli,, penah blaja dulu basic je c++,,, tu pun run kat cmd.... xde hardware pun,,, da lupe dah,, lame tinggalkn,,,,
so skarg ni aku nk blaja pasal programming pastu aku nk aplikasikn kat hardware,, bru nmpk hasil..
hardware xde masaalh cth nye skemmatikk dll..
cume programming je xtau ape,,, minat tu ade cume nak cari org yg blh tunjuk je yg xde ni,,,, nak bace bku je xpaham la,,, mcm org blajo gitar,, mesti ade org yg ajarnye,,,

studio.h ni dapat dri mane,,, knpe yg ade gune <pic.h>

TRISA = 0x00;
TRISB = 0xFF;

ni io kan ..trisA port A,,,,, trisB port B,, so 0x00, 0xFF ni pe plk,, ape function.....

Share this post


Link to post
Share on other sites
File stdio.h ni ada dalam include folder dlm compiler punya directory kalau xsilap. Selain tu ada macam-macam lagi macam math.h (untuk mathematic operation, log, square root, exponential ,etc.)

Bergantung kepada compiler, ada yang gune pic.h, ada yang gune 16f877a.h, benda tu xde masalah pun. Boleh refer kat documentation.

TRISA dan TRISB ni utk setting IO port sebagai input. Mane-mane bit yang 1 akan jadi input. Yang value 0 jadi output.

Sbg contoh, port b ada 8 pin. (RB0-RB7). Bile kite set TRISB = 0xf0 , kita set RB4-RB7 sebagai input dan RB0-RB3 sebagai output. Aku assume ko tau pasal sistem nombor yg digunakan. (Hexadecimal, decimal dan binary)

Hex : 0x12
Dec : 18
Bin : 0b00010010

Semua value ni mempunyai nilai yg sama. Dan tu jugak cara kita nak guna sistem nombor tu. Ape2 sistem nombor pn boleh digunakan.

Share this post


Link to post
Share on other sites
TRISA, TRISB = 0xf0 = MASIH XFAHAM LAGI AR,,
[color=#ff0000]RB4-RB7 sebagai input dan RB0-RB3 sebagai output[/color] ni secara automatik ke RB4-3 jadi input n RB0-3 jadi output?
aduhh nak kene bljar lgi sistem nombr,, allamak,, lupe2...
include folder yg kite nak gune tu ada di mplabide atau datasheet pic tu kepe?

input ni gunaya spt button switch, sensor n outpt spt led, motor,servo,buzzer,, betul x?
pic16f877a ni aku tengok datasheet bnyak plk portnye ade port A,B,C,D,E Edited by rahmat700

Share this post


Link to post
Share on other sites
First ko kena faham IO Port tu..Untuk PIC16F877A dia ada Port A,B,C,D,E
Port A,B,C ada 8 pin setiap satu..Port D ada 5 pin an Port E ada 3 pin.

Setiap IO pin ni boleh jadi input atau output. Kita boleh set pada registers mengikut design kita.
Input ada 2 jenis. Digital atau analog. Digital di sini bermaksud pin tersebut akan membaca logic input. Sekiranya voltage high (3.3v~5V), maka logic dia TRUE (1). Kalau voltage bawah daripada itu, logicnya FALSE (0).

Untuk analog signal pulak, pic boleh membaca voltage. Tetapi nilai voltage ni akan melalui satu modul ADC (Analog-Digital Converter). Boleh pilih 8bit atau 10bit dengan set pada register. Tapi ni complicated sket sebab dia ada calculation skit. Untuk beginner, tumpu pada digital input dulu. Dah mahir, baru pergi kepada analog input.

output pulak logic pada pin sama ada TRUE atau FALSE. Logic ni kita boleh set pada port yang kita nak. Untuk makluman la, pic ni microcontroller. So dia cuma control signal. Ko tak boleh pasang direct dc motor atau led. Sebab benda ni akan draw current yang tinggi. Boleh merosakkan pic. Kalau nak smbung, mesti buat pull up/down resistor kat led. DC motor lak kena ada motor driver.

Psal TRISA dan TRISB yang ko tak faham tu, aku tunjukkan 3 contoh guna sistem nombor yang berlainan tetapi result dia sama. Sebelum tu ko kena tahu Port A ada RA0,RA1,RA2,RA3,RA4,RA5,RA6 dan RA7.

[code]TRISA = 0b00010010 ;[/code]
Ini adalah sistem binary. LSB (less significant bit) yang sebelah kanan dan MSB (most significant bit) yang sebelah kiri sekali. LSB start pada bit 0 dan MSB pada bit 7.
Bit 0 adalah RA0, bit 4 adalaha RA4, dan Bit 7 adalah RA7. (Ko faham setakat ni?)
Berdasarkan code di atas, value bit 1 dan bit 4 adalah 1 dan yang lain adalah 0.
Jadi, bit yang valuenya 1 akan jadi input dan bit yang valuenya 0 akan jadi output.

[code]TRISA = 0x12;[/code]
Code ni sama je dengan di atas. Cuma dia guna sistem nombor hexadecimal. Kalau convert hex kepada bin, value dia sama. Macam mana nak tukar? Amik calculator casio fx-570MS. Tekan MODE 2 kali pastu tekan nombor 3. Tekan butang ^, masukkan nombor hex. Tekan butang =. Pastu tekan butang "log". nak convert ke decimal, tekan butang x[sup]2[/sup]

[code]TRISA = 18;[/code]
pun sama dengan di atas. Cuma menggunakan sistem nombor decimal.

Share this post


Link to post
Share on other sites
[color=#ff0000]TRISA = 0b00010010 ;[/color]
[color=#ff0000]Ini adalah sistem binary. [/color][color=#0000ff]LSB (less significant bit) yang sebelah kanan[/color][color=#ff0000] dan [/color][color=#008000]MSB (most significant bit) yang sebelah kiri sekali[/color][color=#ff0000]. LSB start pada bit 0 dan MSB pada bit 7.
Bit 0 adalah RA0, bit 4 adalaha RA4, dan Bit 7 adalah RA7. (Ko faham setakat ni?)[/color]

=
[color=#ff0000]TRISA = 0b[/color][color=#008000]0001001[/color][color=#0000ff]0[/color]
yg aku hijaukn tu MSB ke?
yg biru tu lsb ke?
b tu ape,, kene ade ke..
bit 4 n bit 7 tu yg ade nombor 1 kan?bace dari kiri ke kanan or sebalaiknye...?
[color=#000000]0b ..tu pe plk?[/color]

Share this post


Link to post
Share on other sites
Ob ni menunjukkan nombor tu dlm sistem binari.

0x lak menunjukkan nombor tu dlm sistem hexadecimal.

Dalam binari, bit 0 bermula dari sebelah kanan sekali. Bit 0 tu dikenali sbg LSB. Dan bit yg terakhir (tak kisah la 7 ke..32 ke..janji last bit) dipanggil MSB. Last bit sahaja. Clear?!

so, urutan bit bermula dari kanan ke kiri..dari bit 0 ke last bit. Nak bagi senang nmpak, kita biasanya guna sistem binari. Kita boleh nmpk setiap bit atau pin accordingly. Kalau kita nk set pin RA5 sebagai input, kita just set bit 5 kepada 1.

[Code]TRISA = 0b00110010;[/code]

Share this post


Link to post
Share on other sites
Ni sistem nombor hex. O,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

0xFF = 0b11111111 = 255

Basically, cuma sistem nombor yg berubah. Value dia tetap sama.

Kalau value 0xFF, maknanya semua bit (bit 0-bit 7) diset 1*. Maknanya semua pin pada port b adalah input.

*rujuk hex to bin conversion

Share this post


Link to post
Share on other sites
Boleh je..kalau nk set input pada pin 5 dan 7 sahaja, set la 0xA0..

Aku rasa better ko study number system dulu. Benda ni fundamental kepada digital system. Kalo xdpt catch up asas ni, memang susah ko nk faham

Share this post


Link to post
Share on other sites
[quote name='NeoLogy' timestamp='1353681829' post='1087008']
Boleh je..kalau nk set input pada pin 5 dan 7 sahaja, set la 0xA0..

Aku rasa better ko study number system dulu. Benda ni fundamental kepada digital system. Kalo xdpt catch up asas ni, memang susah ko nk faham
[/quote]

0b10100000 betul x?

/*-------Function prototype-------------*/
void delay( void );


void main( void )
{
while(1)
{
RB0 != RB0; //blinking
delay();
}
}

void delay( void )
{
for(;;); //do nothing
}


ape function void,,delay, n bahase2 lain nya?

Share this post


Link to post
Share on other sites
Ni ko kena study c language la..untuk pic ni..dia panggil embedded c.

Secara asasnya, sama je dgn c language lain. Bezanya cuma function dia lebih kepada embedded programming. Dlm embedded, xde printf atau scanf..xde function read file, write file. Dlm pic mmg ada memory, tapi nk write,kena tahu address..kena tahu size..

The best way nak blaja, kena study datasheet dan kena tahu basic electronic. Time diploma dulu aku blaja digital electronic. Byk membantu la utk aku paham pic.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...