PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC > Những câu hỏi thường gặp

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

Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-11-2008, 03:01 PM   #1
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Mô phỏng protues - Port A hoạt động không theo ý muốn!

Mình sử dụng protues để mô phỏng chương trình đơn giản là xuất đ.áp cao (5v) ra port A nhưng khi chạy thì thấy các chân của port A có màu xám (không phải đỏ=mức áp cao) .
Trong khi các port khác thì bình thường.Chương trình viết bằng C.
Có ai biết tại sao không ?
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2008, 04:54 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi lequocbao View Post
Mình sử dụng protues để mô phỏng chương trình đơn giản là xuất đ.áp cao (5v) ra port A nhưng khi chạy thì thấy các chân của port A có màu xám (không phải đỏ=mức áp cao) .
Trong khi các port khác thì bình thường.Chương trình viết bằng C.
Có ai biết tại sao không ?
Code của bạn ra sao?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2008, 11:04 AM   #3
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Code:
#include <16F877A.h>
#use delay (clock=20000000) 
void main()
{
do
{
        output_bit(pin_a0,1);
        delay_ms(200);
        output_bit(pin_a1,1);
        delay_ms(200);
        output_bit(pin_a2,1);
        delay_ms(200);
        output_bit(pin_a3,1);
        delay_ms(200);
        output_bit(pin_a4,1);
        delay_ms(200);
        output_bit(pin_a5,1);
        delay_ms(200);
}While(true);
}//sau 6s thì tất cả  chân của portA phải ở mức áp cao
Sẳn cho mình hỏi luôn:
#use delay (clock=20000000) và delay_ms(200) là trì hoãn 1s (cái này mình thử đo bằng đồng hồ )chứ không biết có đúng là 1s không nữa?Ý mình muốn hỏi là 02 cặp lệnh trên dùng như thế nào?và con số 20000000 là gì?

thay đổi nội dung bởi: namqn, 17-11-2008 lúc 03:19 PM.
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2008, 04:45 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi lequocbao View Post
Code:
#include <16F877A.h>
#use delay (clock=20000000) 
void main()
{
do
{
        output_bit(pin_a0,1);
        delay_ms(200);
        output_bit(pin_a1,1);
        delay_ms(200);
        output_bit(pin_a2,1);
        delay_ms(200);
        output_bit(pin_a3,1);
        delay_ms(200);
        output_bit(pin_a4,1);
        delay_ms(200);
        output_bit(pin_a5,1);
        delay_ms(200);
}While(true);
}//sau 6s thì tất cả  chân của portA phải ở mức áp cao
Sẳn cho mình hỏi luôn:
#use delay (clock=20000000) và delay_ms(200) là trì hoãn 1s (cái này mình thử đo bằng đồng hồ )chứ không biết có đúng là 1s không nữa?Ý mình muốn hỏi là 02 cặp lệnh trên dùng như thế nào?và con số 20000000 là gì?
Với PIC16F877A, khi vừa cấp nguồn cho PIC thì các chân của port A ở chế độ ngõ vào analog. Để dùng như ngõ ra digital thì bạn cần cấu hình lại port A (xem ví dụ 4-1 trong datasheet của PIC16F877A).
#use delay (clock=20000000) báo cho trình biên dịch biết xung clock của vi điều khiển là 20 MHz, từ đó có thể tính ra các số đếm tương ứng cho các hàm delay_ms() và delay_us().

Theo hiện tượng bạn mô tả, hàm delay_ms(200) cho thời gian trễ khoảng 1 s, có thể thấy xung clock thực tế bạn đang dùng trong Proteus nhỏ hơn so với giá trị đã thiết lập trong code (20 MHz) khoảng 4, 5 lần.

Với những ví dụ bật/tắt LED dùng hàm delay_ms(), mô phỏng trong Proteus chỉ tốn thời gian một cách không cần thiết.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-11-2008, 01:38 PM   #5
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Có phải sử dụng lệnh: set_tris_a(0x00); để cấu hình portA là cổng xuất phải không bạn?

Như vậy nếu mình sử dụng thạch anh 4Mhz thì mình phải khai báo là:
#use delay<4000000> phải không bạn?
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2008, 10:02 AM   #6
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
led

Trích:
Nguyên văn bởi lequocbao View Post
Có phải sử dụng lệnh: set_tris_a(0x00); để cấu hình portA là cổng xuất phải không bạn?

Như vậy nếu mình sử dụng thạch anh 4Mhz thì mình phải khai báo là:
#use delay<4000000> phải không bạn?
set_tris_a(0x00); cái này thì đúng rồi.
#use delay<4000000> cái này là để khai báo tần số thạch anh ngoài mà bạn sử dụng. tuy nhiên bạn cần thêm phần fuses để thiết lập phần cứng cho pic. (4M khai báo hệ số XT, 20M khai báo hệ số HS)....
tần số dao động của 16f bằng 1/4 tần số thạch anh ngoài, một lệnh của nó mất khoản 3-5 lần tần số dao động. do đó để tính được thời gian delay chính sát với thực tế bạn phải chạy mạch thật và tính chính sát các lệnh mà bạn sử dụng.

thay đổi nội dung bởi: tungtot_vl, 21-11-2008 lúc 10:04 AM. Lý do: sai chính tả
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2008, 05:07 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tungtot_vl View Post
set_tris_a(0x00); cái này thì đúng rồi.
#use delay<4000000> cái này là để khai báo tần số thạch anh ngoài mà bạn sử dụng. tuy nhiên bạn cần thêm phần fuses để thiết lập phần cứng cho pic. (4M khai báo hệ số XT, 20M khai báo hệ số HS)....
tần số dao động của 16f bằng 1/4 tần số thạch anh ngoài, một lệnh của nó mất khoản 3-5 lần tần số dao động. do đó để tính được thời gian delay chính sát với thực tế bạn phải chạy mạch thật và tính chính sát các lệnh mà bạn sử dụng.
Nên phát biểu cho chính xác về thời gian thực thi lệnh. Một chu kỳ máy của các PIC 8-bit luôn luôn bao gồm 4 chu kỳ dao động (chu kỳ của xung clock). Đa số lệnh của PIC cần 1 chu kỳ máy để thực hiện, và một số lệnh cần 2 chu kỳ máy để thực hiện.

Hoàn toàn có thể dùng MPLAB SIM để mô phỏng và xác định thời gian delay của một đoạn lệnh bất kỳ. Nếu chịu khó tính toán kỹ, bạn cũng có thể tính toán ra thời gian delay của một đoạn lệnh bất kỳ. Khi đó, bạn có thể dùng MPLAB SIM để kiểm chứng.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-11-2008, 10:58 AM   #8
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
uh phần chu kỳ dao động thì em có nhằm. nhưng anh dùng MPLAB thì mõi lệnh mất khoản 1-2 chu kỳ, còn em dùng CCS thì số chu kỳ lệnh phải cao hơn chứ
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-11-2008, 03:14 PM   #9
love_ac
Đệ tử 4 túi
 
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
:
Trích:
Nguyên văn bởi tungtot_vl View Post
uh phần chu kỳ dao động thì em có nhằm. nhưng anh dùng MPLAB thì mõi lệnh mất khoản 1-2 chu kỳ, còn em dùng CCS thì số chu kỳ lệnh phải cao hơn chứ
---Không phải cứ dùng trình dịch ngôn ngữ bậc cao thì phải làm mạch thật mới biết chính xác thời gian delay đâu bạn.
---MPlap đúng là cho thời gian thực hiện mỗi lệnh mất 1 đến 2 chu kỳ(đối với lệnh rẽ nhánh),CCS thì "không hẳn" sẽ tốn thời gian để thực hiện một lệnh nhiều hơn.Phát biểu của bạn mang tính chất cảm tính
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-11-2008, 04:40 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tungtot_vl View Post
uh phần chu kỳ dao động thì em có nhằm. nhưng anh dùng MPLAB thì mõi lệnh mất khoản 1-2 chu kỳ, còn em dùng CCS thì số chu kỳ lệnh phải cao hơn chứ
Tôi nói đến lệnh cấp thấp của PIC, chứ không nói về các phát biểu trong các ngôn ngữ cấp cao. Một lệnh gọi hàm trong C có thể tốn rất nhiều chu kỳ máy, nếu như hàm đó được viết cho mục đích như vậy.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2012, 01:24 PM   #11
cuong_now
Nhập môn đệ tử
 
Tham gia ngày: Jan 2012
Bài gửi: 1
:
chân RA4 của Pic6f877a không thể xuất ra mức điện áp cao.

em mới học pic,thử một chương trình hết sức đơn giản bằng CCS(có một số plug in) là:

#include <test RA4.h>


void main()
{set_tris_a(0x00);
while(1) {OUTPUT_A(0b11111111);delay_ms(500); output_a(0);delay_ms(500);
output_high(pin_a4);delay_ms(500);
};

}


nhưng chân A4 vấn không thể cho ra tín hiệu(khi mô phỏng proteus), "nghi ngờ" proteus,em test ngoài mạch cũng thế. Với cùng cách viết đó thì mọi chân xuất số khác đều hoạt động bình thường. chỉ có mỗi chân RA4. Ai giúp em với!!!
cuong_now vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2012, 12:37 PM   #12
trieucn
Đệ tử 1 túi
 
trieucn's Avatar
 
Tham gia ngày: Apr 2008
Bài gửi: 18
:
Talking

Trích:
Nguyên văn bởi cuong_now View Post
em mới học pic,thử một chương trình hết sức đơn giản bằng CCS(có một số plug in) là:

#include <test RA4.h>


void main()
{set_tris_a(0x00);
while(1) {OUTPUT_A(0b11111111);delay_ms(500); output_a(0);delay_ms(500);
output_high(pin_a4);delay_ms(500);
};

}


nhưng chân A4 vấn không thể cho ra tín hiệu(khi mô phỏng proteus), "nghi ngờ" proteus,em test ngoài mạch cũng thế. Với cùng cách viết đó thì mọi chân xuất số khác đều hoạt động bình thường. chỉ có mỗi chân RA4. Ai giúp em với!!!
Bạn xem lại datasheet của pic bạn dùng ở chân RA4 nhé. nếu ở chế độ output. Hiểu nôm na ở cái chân này thì nó là chân hở cực C của transtor. Vì vậy chỉ có trạng thái nối thông xuống đất khi lệnh ra là 1, ngược lại là lệnh 0
__________________
Tiền là tiên là phật. Tiền là sức bật của ta.
trieucn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2012, 10:01 PM   #13
youaremylife
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 26
:
Send a message via AIM to youaremylife Send a message via Yahoo to youaremylife
Chân RA4 đó có hai trạng thái là trở khác cao (thả nổi) và nối đất
output_high() ứng với trạng thái thả nổi Vra4 ?
output_low() ứng với trạng thái nối đất Vra4 = 0
youaremylife 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à 06:47 AM.


Đượ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