PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Pic16f877a TỪ DỄ TỚi KhÓ (http://www.picvietnam.com/forum/showthread.php?t=238)

typhn 04-07-2006 11:32 PM

Ở đây có anh nào dùng proteus chưa.
Em tìm trong thư viện ko có con p16f877a nên em dùng con p16f877
Vì 2 con này cũng gần giống nhau
Nhưng em tìm mãi ko thấy chân VDD và VSS đâu.
2 chân này đã bị ẩn đi thì phải
Có anh nào biết cách làm nó hiện lên ko?
thanks

namqn 04-07-2006 11:42 PM

Bạn định dùng Proteus với PIC16F877 để làm gì?

Có thể có cách khác để đạt được mục đích của bạn mà không phải hiện các chân hidden của chip.

Thân,

typhn 05-07-2006 10:08 AM

Em định dùng để mô phỏng chương trình của anh NTC
Làm mấy cái led nhấp nháy,chạy từ trái qua phải...
Nhưng muốn nó hoạt đọng phải cấp nguồn +5v cho nó
Nhưng em ko thấy chân VDD và GND thì làm sao mà cấp nguồn được hả anh
thanks

ntc 05-07-2006 10:25 AM

Chú typhn phức tạp gớm.

Có mấy cái led thì mô phỏng làm gì.

:D

chuthong1 05-07-2006 11:07 AM

Sao may hom nay em vao ma khong thay' cac anh post tiep' bai len vay?
Mong qua'.....................hic...

namqn 05-07-2006 07:06 PM

Trích:

Nguyên văn bởi typhn
Em định dùng để mô phỏng chương trình của anh NTC
Làm mấy cái led nhấp nháy,chạy từ trái qua phải...
Nhưng muốn nó hoạt đọng phải cấp nguồn +5v cho nó
Nhưng em ko thấy chân VDD và GND thì làm sao mà cấp nguồn được hả anh
thanks

Proteus tự cấp nguồn cho mấy con chip trong mạch mô phỏng. Bạn đọc cái tutorial của nó về mô phỏng trong Proteus VSM Help.

Thân,

totite 24-07-2006 09:56 AM

Anh Nguyễn Trung Chính ơi. Anh viết tiếp về ADC đi. Sao em làm giống như hướng dẫn trong datasheet mà nó không chạy.

ntc 24-07-2006 04:51 PM

Thì bạn cứ gửi code và sơ đồ nguyên lí mạch lên để cùng thảo luận.

Uh, sắp xong tutorial mới rồi.

Ráng chút xíu đi.

:D

friends 26-07-2006 08:57 PM

cac anh oi, chuong trinh duoi day em viet neu nap cho pic 16f877a thi lieu no co chay khong, em đã viết nó để nạp cho pic 16f876a ,nhưng khi thử nghiệm với pic 16f876a thì ở portb em thấy các led đều tắt, cho em hỏi chương trình em viết để nạp cho pic16f876a có sai chỗ nào không?


#include<p16f876a.inc> ;chen thu vien lien ket cho chuong trinh

org 0x20
count1 res 1
count2 res 1
org 00h
goto START
START

clrf PORTB
bsf STATUS,RP0 ;chon bank1
movlw D'0'
movwf TRISB ; chon bortb xuat
bcf STATUS,RP0
movlw b'00000001'
movwf PORTB
call DELAY
QUAY1
rlf PORTB,1 ;co so 1la vi de dua vao portb
call DELAY
btfss PORTB,7
goto QUAY1
QUAY2
rrf PORTB,1
call DELAY
btfss PORTB,0 ;bit0
goto QUAY2
goto $
DELAY
movlw D'250'
movwf count1
movlw D'250'
movwf count2
LOOP1
decfsz count1,1 ;giam count xuong 1
goto LOOP1
LOOP2
decfsz count2,1
goto LOOP2
return
end

namqn 26-07-2006 09:43 PM

Chương trình viết cho PIC16F876A có thể chạy tốt trên PIC16F877A.

Chương trình của bạn đã viết không có vấn đề gì về cú pháp, nhưng chương trình con DELAY của bạn chỉ thực hiện delay khoảng 1500 chu kỳ lệnh, có thể là quá nhanh để bạn nhìn thấy thay đổi ở ngõ ra bằng mắt thường nếu tần số của vi điều khiển nằm trong tầm MHz. Nếu vi điều khiển có clock là 4 MHz thì tần số của các dịch chuyển giữa các bit là khoảng hơn 660 Hz!

Thân,

chuthong1 28-07-2006 11:34 AM

Cac anh post tiep di

nam03 29-07-2006 07:27 PM

cam on su huynh. Bai cua huynh hay lam.

long2007 02-08-2006 05:20 PM

bài viết thật là hay
mong bạn có điều kiện post nhiều chuyên mục nữa lên để anh em cùng tham khảo

Ngoc Du 03-08-2006 12:05 AM

Thấy các bác khen bài viết của ntc nhiều nên em down về đọc thử thì thấy trong TUT về hàm delay bác ấy tính toán nhầm loạn cả lên. Các bác mà tính toán theo cách tính của ntc thì chỉ có vỡ thớt. Đề nghị mọi người đọc kỹ lại cái TUT này đi. Em chỉ ví dụ cái công thức số (4) nếu tính đúng phải là: [(N-1)*3+4]*Ti . Cái công thức đầu mà sai thì tất nhiên các công thức phía sau mà dựa vào công thức này cũng sẽ sai. Chỉ là góp ý thôi các bác đừng trách em là soi mói nhé.
Nhưng cũng phải công nhận là những người mới làm quen với vi điều khiển mà có mấy cái TUT của bác ntc thì hữu ích lắm đấy. Bác ntc cố gắng viết nhiều TUT hơn nữa để anh em được nhờ.

spirit 05-08-2006 10:08 PM

Trích:

Nguyên văn bởi ntc
Thì bạn cứ gửi code và sơ đồ nguyên lí mạch lên để cùng thảo luận.

Uh, sắp xong tutorial mới rồi.

Ráng chút xíu đi.

:D

Anh viết rất hay và dễ hiểu cho những người mới học pic như em.
Anh viết xong chưa,em mong bài của anh từ lâu lắm rồi

trantanoai 19-08-2006 03:39 PM

cảm ơn bạn ntc vì bai của bạn viết dễ hiểu . tôi đang học về pic đây nhờ bạn post tài liệu về các tâp lệnh và ứng dụng lệnh như bài 1 cho mọi người cùng học hỏi với

hicd 19-08-2006 05:41 PM

chao cac bac
em dang muon tim hieu ve pic nhung khong biet bat dau tu dau
mong cac bac chi giao
em xin cam on

newuser 19-08-2006 07:09 PM

Trích:

Nguyên văn bởi hicd
chao cac bac
em dang muon tim hieu ve pic nhung khong biet bat dau tu dau
mong cac bac chi giao
em xin cam on

sao bạn hicd không nhìn xuống bên dưới một chút nhỉ? cái chủ đề [học PIC như thế nào] đó, đích thân bang chủ hướng dẫn rồi còn gì.
sao các bạn không qua luồng [PIC6F877A nào ta cùng chat] hay luồng [lập nhóm PIC6F877A] mà thảo luận nhỉ? luồng để thảo luận mới có vài trang thôi các bạn à...

leduy173 28-08-2006 09:56 PM

ah pic 16f877a có giao tiếp I2C ko? em chưa bít j về I2C cả ,có thể mod NTC cho cai tut về vấn đề này hay ko hay cho em link nào đó để hướng dẫn em làm I2C cũng được ko? mong được chỉ giáo thêm nhiều vể I2C!!!

namqn 28-08-2006 11:02 PM

Trích:

Nguyên văn bởi leduy173 (Post 4656)
ah pic 16f877a có giao tiếp I2C ko? em chưa bít j về I2C cả ,có thể mod NTC cho cai tut về vấn đề này hay ko hay cho em link nào đó để hướng dẫn em làm I2C cũng được ko? mong được chỉ giáo thêm nhiều vể I2C!!!

Bạn đọc ở luồng này nhé:
http://www.picvietnam.com/forum/show...6&postcount=95

Thân,

LEO-XBS 01-09-2006 11:17 AM

Các bác cho em hỏi tý:em viết 2 chương trình giống nhau đều là xuất dữ liệu ra cổng PORTB, viết bằng MPASM thì chạy được con viết bằng CCS C thi lại chạy không đúng là sao vậy. Em đã dịch ra mã AMS rồi, 2 chương trình đều tương đương nhau

hvqphu 01-09-2006 11:43 AM

Dung la thu tui dang can, cam on nhieu
Mong cac bac tiep tuc post them nhieu bai nua
Tui con dot lam nen mong duoc cac bac giup do nhieu

linhnc308 02-09-2006 12:38 AM

Hi All
Về PIC877 và các bài lập trình cho các tính năng ngoại vi của nó tôi có tổng hợp và đưa lên dientuvietnam.net tại :http://dientuvietnam.net/forums/showthread.php?t=1008
- Chương trình viết trên CCS
- Các mạch điện vẽ băng Orcad9.2
Có khá nhiều chương trình hay, nhiều mạch chính là đồ án cho các môn học của tôi, mạch chạy chính xác, code dễ hiểu (CCS mà).
Chúc thành công với PIC.

Dang Khoa 03-09-2006 10:58 AM

co ban nao viet chuong trinh ve quet LED khong chi giup minh voi?

moihocpic1985 03-09-2006 12:30 PM

Trích:

Nguyên văn bởi ntc (Post 1156)
Bài tui viết xong rồi, nhưng dang chờ mấy tiền bối xét duyệt và điều chỉnh. Trong khi chờ đợi, tui sẽ đưa ra cái mục lục của các bài sắp được post lên. Trong quá trình viết bài có thể sẽ có vài điều chỉnh nhỏ, nhưng định hướng các bài viết sẽ là như vậy. Bài nào có điều chỉnh khác với mục lục tui sẽ đề cập cụ thể:

Bài 1 Điều khiển các port I/O
Bài 2 Chương trình delay
Bài 3 Một số ứng dụng xuất/nhập qua các port của vi điều khiển (bài này
khá dài nên có khả năng sẽ được chia ra thành nhiều bài nhỏ).
Bài 4 Điều khiển IC ghi dịch 74HC595
Bài 5 PIC16F877A và LED 7 đoạn (bài này cũng khó khả năng được chia ra)
Bài 6 Ngắt và cấu trúc của một chương trình ngắt dành cho vi điều khiển
PIC16F877A
Bài 7 Các Timer của vi điều khiển PIC16F877A
Bài 8 Timer và hoạt động định thời
Bài 9 Ứng dụng tổng hợp (coi như là một bài tập để ôn lại tất cả các bài
trước, tui cho rằng bài này sẽ khá thú vị, hehe)
Bài 10 Điều khiển LCD

Tạm thời là như vậy cái đã. Các bạn thấy cái mục lục như vậy đã đủ hấp dẫn chưa?? Hay phải thêm bớt cái gì nữa??

minh moi hoc pic, dang tim hieu ve pwm,compare ban co the them module CCP vao khong!

ntc 05-09-2006 11:47 PM

1 Attachment(s)
Hi all!

:D

Mình quay lại diễn đàn với một tutorial mới đây.

Đây là một bài tập ứng dụng để thiết kế một real time clock sử dụng IC thời gian thực DS12c887, bao gồm các hướng dẫn xây dựng các module ứng dụng và hoàn tất ứng dụng.

Trong bài tập này, mình chưa đặt ra yêu cầu hoàn thiện ứng dụng. Công việc này chúng ta sẽ cùng làm, cùng xây dựng. Như vây sẽ tốt hơn.

Mình để trống một số chỗ chưa hoàn thiện, với ý đồ, làm chạy được rồi, nhưng mà thấy hơi ngứa mắt, thì mọi người sẽ tìm cách làm cho nó đỡ ngứa mắt hơn. :D

Những điểm chưa hoàn thiện, và những chỗ cần hoàn thiện cho ứng dụng, mình sẽ chỉ ra sau.

Chúng ta sẽ xây dựng ứng dụng theo cách suy nghĩ "củ chuối" nhất, và dễ hiểu nhất.

Sau khi đã thực hiện thành công, vấn đề hoàn thiện sẽ được đặt ra sau, từ chương trình đến mạch ứng dụng.

Thôi, nói nhiều quá. Nó đây!

Hy vọng có người chịu thực hành, và hi vọng nó giúp ích cho các thành viên của PICVIETNAM.

:D

ntc 05-09-2006 11:57 PM

2 Attachment(s)
Mình gửi thêm sơ đồ nguyên lí mạch và datasheet của ds12887 để mọi người tham khảo thêm.

Chú ý là module ứng dụng cho ds12887 trong tutorial mình viết dựa trên giản đồ xung của chip. Nên nếu vừa đọc tutorial, vừa xem giản đồ xung trong datasheet thì sẽ dễ hiểu hơn.

:D

spirit 07-09-2006 07:32 PM

Thanks anh NTC rất nhiều,anh viết tut rất hay và dễ hiểu
Hi vọng một ngày nào đó em sẽ đóng góp nhiều cho diễn đàn như anh vì bây giờ kiến thức em còn hạn chế quá

vtt 07-09-2006 11:22 PM

Chào bác!
Tôi có xem các bài đó nhưng tôi thấy bác không post phần chương trình trên PC lên rất khó theo dõi ( do tôi mới học PIC), bác có thể Post cả phần chương trình trên máy tính được không?
Cảm ơn bác!

vtt 07-09-2006 11:23 PM

Xin lỗi!
ý tôi đang nói bài của bác linhnc308

vtt 07-09-2006 11:42 PM

Bác nào chỉ giùm tôi với!
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define RunningLed RD2
int8 ch;

void main(void) {

//Output_high(PIN_D2);
RunningLed = 1;
while(true){
ch = getc();
if (ch == 0) {
putc(ch);
}
else {
ch = ch + 1;
putc(ch);
}
}
}
Trên đây là chương trình tôi viết thử để giao tiếp với PC, nhưng không được.
Có hai điều tôi muốn hỏi các bác!
- Tại sao khi tôi dùng lệnh RunningLed = 1; ở trên thì mạch lại không chạy ( tức là chân RD2 không tích cực mức cao). Còn khi tôi dùng lệnh output_high(PIN_D2) thì lại được.
- Tôi dùng chương trình mô phỏng giao tiếp nối tiếp của CCS và chạy thử chương trình trên thì không được
Bác nào bớt chút thời gian trở lời giúp được không!
Bác nào có thể post cho tôi một chương trình giao tiếp với PC được không, cả trên PC lẫn chương trình của PIC

namqn 07-09-2006 11:50 PM

Trích:

Nguyên văn bởi vtt (Post 4828)
Bác nào chỉ giùm tôi với!
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define RunningLed RD2
int8 ch;

void main(void) {

//Output_high(PIN_D2);
RunningLed = 1;
while(true){
ch = getc();
if (ch == 0) {
putc(ch);
}
else {
ch = ch + 1;
putc(ch);
}
}
}
Trên đây là chương trình tôi viết thử để giao tiếp với PC, nhưng không được.
Có hai điều tôi muốn hỏi các bác!
- Tại sao khi tôi dùng lệnh RunningLed = 1; ở trên thì mạch lại không chạy ( tức là chân RD2 không tích cực mức cao). Còn khi tôi dùng lệnh output_high(PIN_D2) thì lại được.
...

Đã dùng được output_high(PIN_D2) thì tại sao còn phải tìm cách khác! Cách dùng này là chuẩn đối với CCS.

Trong tập tin "DEFS_16F877A.h" bạn có định nghĩa RD2 hay không? Nếu có thì định nghĩa như thế nào?

Thân,

vtt 08-09-2006 10:52 AM

Cảm ơn bác nhiều!
dùng output_high(PIN_X) nhiều khi thấy bất tiện, con thu vien DEFS_16F877A.h là mình load trên diễn đàn này.
Bác cho hỏi luôn tại sao tôi viết như trên dùng Serial Input/output monitor thì không test được?

linhnc308 08-09-2006 06:01 PM

ch = getc();
if (ch == 0) {
putc(ch);

bạn không mô phỏng được vì nếu bạn nhập thử vào màn hình đen phim 0 thì nó gửi xuống là mã ASCII của số 0 = 0x30h. bạn thử nhập vào mục Hex Send xem.

Một điều nữa là check lại phân setting cổng COM

leduy173 08-09-2006 06:07 PM

bac NTC cho them tut ve LCD di.thanks bac NTC cai tut ve RTC nha,doc de hieu lam.h dang lam thu voi no

falleaf 09-09-2006 01:01 PM

Hiện nay F đang giao cho NTC làm về phần truyền thông, vì vậy chắc chưa có thời gian làm tutorial về LCD. Tuy vậy, hiện nay trong luồng Lập nhóm 877 bạn nhh đang viết các tài liệu hướng dẫn mô phỏng và thiết lập LCD cũng như LED 7 đoạn khá hay, bạn có thể theo dõi ở đó.

Chúc vui.

vtt 09-09-2006 05:18 PM

Cảm ơn linhnc308!
Tôi thực sự thấy mình ngu dốt, tôi có về thử lại nhưng vẫn không được, bực quá tôi viết thử lại môt chương trình test đơn giản khác để thử mà vẫn không được. Tôi gửi một số hex vào thì nhận được mốt số hex khác và toàn là số 0 (0x00h), chân RXT trên Serial Input/output monitor sáng liên tục. Bác có thể chỉ giùm tôi cái lỗi của tôi được không?
Dưới đây là đoạn chương trình mà tôi viết lại.
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define RunningLed RD2
int8 ch;

void main(void) {

Output_high(PIN_D2);
//RunningLed = 1;
while(!true){
ch = getc();
if ((ch >= 0x30)&(ch <= 0x7A)){
putc(ch);
}
}
}
Bác nào đã test giao tiếp PIC với PC rồi xin chỉ giáo để tử ngu dốt này với!

nevergoback1001 10-09-2006 09:39 AM

Tôi không thấy đoạn code của bác bị gì cả! Copy- past vào CCS C là chạy bình thường trừ 1 lỗi: bỏ dấu "!" trước true trong vòng lặp while, vì not true nghĩa là false mà false thì biết bao giờ nó mới thực thi! (He he he)
Nếu sửa lại mà vẫn ko chạy thì bác xem lại modul giao tiếp với PC ( hổng biết có mắc lộn chân Tx với Rx hay ko?

vtt 10-09-2006 11:36 PM

Cám ơn bạn
Tôi đã sử lý tạm thời được rồi, nhưng không hiểu tại sao tôi chỉ truyền một ký tự mà nó đáp lại hàng đống ký tự. (khoảng chục ký tự thì nó mới dừng lại).

nevergoback1001 11-09-2006 01:20 AM

Tối viết tạm 1 chương trình đơn giản mà bạn có thể test được!
Chương trình trên PC viết bằng VB, còn chương trình trên PIC thì bạn có thể lấy ngay đoạn code của bạn đã viết đó ( Tôi đã thử rồi nếu như ko có gì trục trặc thì OK hết, nếu có gì trục trặc thì tôi bó tay. He he!). Bạn nhập số hay kí tự vào ô text2, thì PIC sẽ trả kết quả vào ô text1 sau khi nhấn command1. VD: bạn nhập vào đó chữ 'A' hay số '80' thì sau khi nhấn command1 ô text1 sẽ hiện chữ 'A' hoặc '80'.
Việc nhập số hay kí tự thì bạn tự tìm hiểu thêm về việc truyền thông nối tiếp vậy, vì không phải nhập cái gì cũng được đâu, nó sẽ báo lỗi tè lè đấy, bạn có thể phân tích kĩ đoạn code tôi viết để hiểu thêm ( rất đơn giản!)
Good luck!!


Múi giờ GMT. Hiện tại là 07:26 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam