PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-01-2011, 10:22 PM   #31
ham hoc
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 8
:
sao không thấy ai giúp đỡ vậy.hic
em đang cần gấp sự hướng dẫn của các bác.hic
email của em là : lemung_07@yahoo.com
gmail : lemung.07@gmail.com
ham hoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-01-2011, 03:50 PM   #32
hoc_picpicpic
Đệ tử 6 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 127
:
Trích:
Nguyên văn bởi ham hoc View Post
chào các bác!em mới bắt đầu làm quen với con PIC 16F877 này. em có bài tập: thiết kế mạch 16 đầu vào và 16 đầu ra số sử dụng con PIC này, mà em chưa biết phải làm thế nào cả. Bác nào biết thì hướng dẫn giúp em với.
gmail của em là :lemung.07@gmail.com
cảm ơn rất nhiều !
đề tài của bạn như thế này thì ko biết giúp kiểu gì nữa. Bạn nên đặt câu hỏi cụ thể và rõ ràng hơn thì mới có người giúp bạn đc.
hoc_picpicpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-01-2011, 09:55 PM   #33
ham hoc
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 8
:
vâng.
bài tập của em là: sử dụng pic 16F877 thiết kế PLC 16 đầu vào số và 16 đầu ra số.
các bác biết thì hướng dẫn tóm tắt giúp em xem em phải làm gì với.
thank các bác!
ham hoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2011, 12:18 PM   #34
NTL22
Nhập môn đệ tử
 
Tham gia ngày: Feb 2011
Bài gửi: 4
:
đề tài này khoai quá.hi
NTL22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2011, 03:28 PM   #35
lexuantien
Đệ tử 2 túi
 
Tham gia ngày: Feb 2009
Nơi Cư Ngụ: Qui Nhon - Binh Dinh
Bài gửi: 37
:
Send a message via Yahoo to lexuantien
Các bác cho em hỏi . Em dùng CCS C để lập trình cho con 16F887 , trong chân 1 của 16F887 có ghi ( RE3/MCLR/VPP ) . Mạch reset thì em làm đúng như datasheet hướng dẫn , nạp test thì ổn định chỉ có điều khi reset thì không được dù chân MCLR khi nhấn nút reset có trở về mức 0 . Em muốn hỏi mình phải khai báo trong CCS C như thế nào để cho chế độ reset của 16F887 hoạt động . (Em dùng reset qua chân MCLR )
__________________
the stair
lexuantien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-04-2011, 05:09 PM   #36
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
Trích:
Nguyên văn bởi lexuantien View Post
Các bác cho em hỏi . Em dùng CCS C để lập trình cho con 16F887 , trong chân 1 của 16F887 có ghi ( RE3/MCLR/VPP ) . Mạch reset thì em làm đúng như datasheet hướng dẫn , nạp test thì ổn định chỉ có điều khi reset thì không được dù chân MCLR khi nhấn nút reset có trở về mức 0 . Em muốn hỏi mình phải khai báo trong CCS C như thế nào để cho chế độ reset của 16F887 hoạt động . (Em dùng reset qua chân MCLR )
em không biết cái hình này có đủ trả lời cho bác không, nhưng bác cứ coi thử nhé, cái chỗ : master clear is enable
Hình Kèm Theo
File Type: jpg PrtScr capture.jpg (105.8 KB, 14 lần tải)
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2011, 10:20 AM   #37
dongduong_spkt
Nhập môn đệ tử
 
Tham gia ngày: Mar 2010
Bài gửi: 3
:
cho mình hỏi với.mình có code viết cho 16f887a không biết liệu có dùng được cho 16f877a không nhỉ? để chuyển sang dùng 16f877a phải chỉnh sử gì trong code hok nhỉ?
đây là code mong mọi người sủa giúp để có thể dùng cho 16f877a


//ccsc pcwhd v8.088
#include <16F887.h>
#define INT_RB 0xFF0B08 //sua o day de cho int co the chay
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ADC=8
#use delay(clock=20000000)
#use fast_io(B)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)



//!#include <input.c>

int8 dem_x, dem_y, dem_z;
int8 vi_tri_x, vi_tri_y, vi_tri_z;
int8 du_lieu_b;
int8 gia_tri_adc; // gia_tri_adc
int1 step_x, step_y, step_z;
int1 dir_x, dir_y, dir_z;


BYTE const POSITIONS[4] = {0b0101,
0b1001,
0b1010,
0b0110};

//!BYTE const POSITIONS[8] = {0b0101,
//! 0b0001,
//! 0b1001,
//! 0b1000,
//! 0b1010,
//! 0b0010,
//! 0b0110,
//! 0b0100};
void quay_thuan_x(){
vi_tri_x=(vi_tri_x+1)&(sizeof(POSITIONS)-1);
dem_x = POSITIONS[ vi_tri_x ];
output_bit (PIN_D0, (bit_test (dem_x, 0)));
output_bit (PIN_D1, (bit_test (dem_x, 1)));
output_bit (PIN_D2, (bit_test (dem_x, 2)));
output_bit (PIN_D3, (bit_test (dem_x, 3)));
}
void quay_nguoc_x(){
vi_tri_x=(vi_tri_x-1)&(sizeof(POSITIONS)-1);
dem_x = POSITIONS[ vi_tri_x ];
output_bit (PIN_D0, (bit_test (dem_x, 0)));
output_bit (PIN_D1, (bit_test (dem_x, 1)));
output_bit (PIN_D2, (bit_test (dem_x, 2)));
output_bit (PIN_D3, (bit_test (dem_x, 3)));
}
void quay_thuan_y(){
vi_tri_y=(vi_tri_y+1)&(sizeof(POSITIONS)-1);
dem_y = POSITIONS[ vi_tri_y ];
output_bit (PIN_D4, (bit_test (dem_y, 0)));
output_bit (PIN_D5, (bit_test (dem_y, 1)));
output_bit (PIN_D6, (bit_test (dem_y, 2)));
output_bit (PIN_D7, (bit_test (dem_y, 3)));
}
void quay_nguoc_y(){
vi_tri_y=(vi_tri_y-1)&(sizeof(POSITIONS)-1);
dem_y = POSITIONS[ vi_tri_y ];
output_bit (PIN_D4, (bit_test (dem_y, 0)));
output_bit (PIN_D5, (bit_test (dem_y, 1)));
output_bit (PIN_D6, (bit_test (dem_y, 2)));
output_bit (PIN_D7, (bit_test (dem_y, 3)));
}
void quay_thuan_z(){
vi_tri_z=(vi_tri_z+1)&(sizeof(POSITIONS)-1);
dem_z = POSITIONS[ vi_tri_z ];
output_bit (PIN_A0, (bit_test (dem_z, 0)));
output_bit (PIN_A1, (bit_test (dem_z, 1)));
output_bit (PIN_A2, (bit_test (dem_z, 2)));
output_bit (PIN_A3, (bit_test (dem_z, 3)));
}
void quay_nguoc_z(){
vi_tri_z=(vi_tri_z-1)&(sizeof(POSITIONS)-1);
dem_z = POSITIONS[ vi_tri_z ];
output_bit (PIN_A0, (bit_test (dem_z, 0)));
output_bit (PIN_A1, (bit_test (dem_z, 1)));
output_bit (PIN_A2, (bit_test (dem_z, 2)));
output_bit (PIN_A3, (bit_test (dem_z, 3)));
}


void chuyen_dong_step(){
step_x = bit_test(du_lieu_b,4);
step_y = bit_test(du_lieu_b,5);
step_z = bit_test(du_lieu_b,6);
////////////////////////////////////////
dir_x = bit_test(du_lieu_b,0);
dir_y = bit_test(du_lieu_b,1);
dir_z = bit_test(du_lieu_b,2);
/////////////////////////////////////////
if (step_x ){
// motor x
if(dir_x ){ // neu quay thuan
quay_thuan_x();
}
else{ //quay nguoc
quay_nguoc_x();
}
}
////////////////////////////////////////
if (step_y ){
// motor y
if(dir_y ){ // neu quay thuan
quay_thuan_y();
}
else{ //quay nguoc
quay_nguoc_y();
}
}
////////////////////////////////////////
if (step_z ){
// motor z
if(dir_z ){ // neu quay thuan
quay_thuan_z();
}
else{ //quay nguoc
quay_nguoc_z();
}
}
////////////////////////////////////////
}
#INT_RB
void ngat_RB() { // doc du lieu nhap vao
du_lieu_b = input_b();
chuyen_dong_step();
}

void main() {

enable_interrupts(GLOBAL);
enable_interrupts(INT_RB);// turn on interrupts

set_tris_B (0xff);

// su dung PWM de dieu khien dong vao motor
// han che trong khoang 9A cho 3 motor step ma thoi
setup_adc_ports(sAN5);
setup_adc(ADC_CLOCK_INTERNAL);

setup_timer_2 ( T2_DIV_BY_16, 255, 1);
setup_ccp1 (CCP_PWM);

set_adc_channel(5);



output_low (PIN_D0);
output_high (PIN_D1);
output_low (PIN_D2);
output_high (PIN_D3);

output_low (PIN_D4);
output_high (PIN_D5);
output_low (PIN_D6);
output_high (PIN_D7);

output_low (PIN_A0);
output_high (PIN_A1);
output_low (PIN_A2);
output_high (PIN_A3);

while (TRUE) {
delay_us(40);
gia_tri_adc = read_adc();
//printf("%u",gia_tri_adc);
//delay_us(20);
set_pwm1_duty(gia_tri_adc);
}

}
dongduong_spkt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2011, 05:39 PM   #38
minhtuando
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 1
:
bạn không cần thay đổi gì nhiều, khai báo lại con pic bạn xài .
thực tế 16f877 và 16f887 không khác nhau nhiều
minhtuando vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-06-2011, 10:41 AM   #39
ToanZ8
Nhập môn đệ tử
 
Tham gia ngày: Jun 2009
Bài gửi: 2
:
Post 16F877A Kíu với!

code của mình đơn giản chỉ là nhấp nháy con led B0. Chạy trên mô phỏng thì OK, nhưng xuống mạch thì lại không được. Mình đã nối chân PGM của nó qua trở xuống đất rồi. Dùng osscillo đo thì đã thấy dao động trên chân thạch anh. Chẳng hiểu sao lại không được.

Mình dùng con 18f4550 thì OK hết ko hiểu sao làm với con 16f877a này lại ko được. Các cao thủ giúp hộ mình với nhé!

#include <16F877A.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected

#use delay(clock=12000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)


void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// TODO: USER CODE!!
while(true)
{
output_high(PIN_B0);
delay_ms(200);
output_low(PIN_B0);
delay_ms(200);
}

}
File Kèm Theo
File Type: rar start.rar (25.2 KB, 15 lần tải)
ToanZ8 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-06-2011, 06:54 PM   #40
tree
Nhập môn đệ tử
 
Tham gia ngày: May 2011
Bài gửi: 1
:
các huynh cho đệ hỏi pic 16f877a dùng phần mềm nào để nạp và mạch nạp nào thì hiệu quả nhât.
tree vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-07-2011, 09:06 PM   #41
fly_1304
Nhập môn đệ tử
 
Tham gia ngày: Dec 2009
Bài gửi: 2
:
void chuyen_doi_adc()
{
set_adc_chanel(0);
delay_us(10);
value[0]=read_adc();//doc gia tri dua va chuyen doi gia tri adc do cam bien dua vao
set_adc_chanel(1);
delay_us(10);
value[1]=read_adc();
set_adc_chanel(2);
delay_us(10);
value[2]=read_adc()
set_adc_chanel(3);
delay_us(10);
value[0]=read_adc();
set_adc_chanel(4);
delay_us(10);
value[1]=read_adc();
set_adc_chanel(5);
delay_us(10);
value[2]=read_adc()

for(i=0;i<=5;i++)
{
if(value[i]<580) cb[i]=1;
else if(value[i]>620) cb[i]=0;
}
}
ai giải thích hộ em đoạn code này với
fly_1304 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-10-2011, 06:12 PM   #42
NGUYEN24
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 3
:
Trích:
Nguyên văn bởi tree View Post
các huynh cho đệ hỏi pic 16f877a dùng phần mềm nào để nạp và mạch nạp nào thì hiệu quả nhât.
Bạn này có thể dùng PICKIT2 để nạp, phần mềm thì có thể dùng PICKIT2, hoặc có thể nạp trên MPLAB
__________________
- Mạch nạp vi điều khiển các loại
- LK Vi điều khiển
- Phụ kiện vi tính
- Quà tặng, Đồ dùng tiện ích

http://www.chipn24.com
NGUYEN24 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-12-2011, 11:50 AM   #43
holy_ghost
Nhập môn đệ tử
 
Tham gia ngày: May 2010
Bài gửi: 4
:
Mình đang làm mạch điều khiển động cơ DC, nhưng khi mô phỏng với Proteus ko chạy. Ai bjt lỗi gì ko? HELP!

Mô phỏng Proteus: http://www.mediafire.com/?tkk2cghepz34vp5


CODE:

#include <16F877A.h>

#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use fast_io(b)
#define tocdo0 0 //toc do bang 0
#define td_macdinh 80 //toc do mac dinh
#define tocdo1 124 //1/5 toc do cuc dai
#define tocdo2 248 //2/5 toc do cuc dai
#define tocdo3 372 //3/5 toc do cuc dai
#define tocdo4 496 //4/5 toc do cuc dai
#define tocdo5 620 //toc do cuc dai
#byte portB =0x06
#bit B0 = portB.0
#bit B1 = portB.1
#bit B2 = portB.2
#bit B3 = portB.3
#bit B4 = portB.4
#bit B5 = portB.5
#bit B6 = portB.6
#bit B7 = portB.7
int16 duty1=0;
int16 duty2=0;
int8 bientocdo=0;
int1 bienthuan=0;
int1 biennghich=0;
void main() //bo PMW1 dk dong o quay thuan
{ //bo PMW2 dk dco quay nghich
set_tris_b(0x0ff); //khoi tao port B la port nhap
setup_ccp1(CCP_PWM); //khoi tao bo PWM1
setup_ccp2(CCP_PWM); //khoi tao bo PWM2
setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms
//(1/clock)*4*t2div*(period+1)
//(1/10e6)*4*16*(154+1)=1e-3=1ms

set_pwm1_duty(duty1);
set_pwm2_duty(duty2);
//gia tri duty cua PWM duoc tinh theo cong thuc duty1*t2div/clock
//khoi tao duty=0 -> tat dong co
while(true)
{

if (B0 == 1)) //neu nhan phim FO : chay thuan
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dong co
bienthuan=1;
biennghich=0;
goto next;
}
if (!bit_test(portb,2)) //neu nhan phim RE : chay nghich
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dco
bienthuan=0;
biennghich=1;
goto next;
}
if (!bit_test(portb,3)) //nhan phim toc do 1
{
bientocdo=1;
goto next;
}
if (!bit_test(portb,4)) //nhan phim toc do 2
{
bientocdo=2;
goto next;
}
if (!bit_test(portb,5)) //nhan phim toc do 3
{
bientocdo=3;
goto next;
}
if (!bit_test(portb,6)) //nhan phim toc do 4
{
bientocdo=4;
goto next;
}
if (!bit_test(portb,7)) //nhan phim toc do 5

bientocdo=5;
next:

if (!bit_test(portb,0)) //neu nhan phim OFF
{
duty1=tocdo0;
duty2=tocdo0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
bienthuan=0;
biennghich=0;
bientocdo=0; //xoa bien toc do
}
if (bienthuan)
{
duty2 = tocdo0;
switch (bientocdo)
{
case 1: duty1= tocdo1;
break;
case 2: duty1= tocdo2;
break;
case 3: duty1= tocdo3;
break;
case 4: duty1= tocdo4;
break;
case 5: duty1= tocdo5;
break;
default : duty1 = td_macdinh;
break;
}
set_pwm1_duty(duty1); //cho dco chay thuan
set_pwm2_duty(duty2);
}

if (biennghich)
{
duty1 = tocdo0;
switch (bientocdo)
{
case 1: duty2= tocdo1;
break;
case 2: duty2= tocdo2;
break;
case 3: duty2= tocdo3;
break;
case 4: duty2= tocdo4;
break;
case 5: duty2= tocdo5;
break;
default : duty2 = td_macdinh;
break;
}
set_pwm1_duty(duty1); //cho dco chay nghich
set_pwm2_duty(duty2);
}
}
}
File Kèm Theo
File Type: txt CODE.txt (3.8 KB, 9 lần tải)
holy_ghost vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-02-2012, 02:11 AM   #44
vuquanghoang
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 1
:
Trích:
Nguyên văn bởi zero View Post
Cho tôi hỏi chút nhé
1.Có thể mua được con 16F887 ở HN ko ? nếu có thì giá khoảng bao nhiêu?
2.Có thể dùng mạch nạp PC1 và PC3 để nạp cho con này ko? nếu ko thì dùng mạch nạp j?

Thank!
1. Bạn ra 17a Hàn thuyên có bán, giá khoảng 65k
2. tớ cũng ko rõ lắm, tớ thì dùng pickit2 giá 240k mua ở hoàng văn thái ý.
vuquanghoang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:47 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam