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 15-05-2009, 10:15 PM   #1
thaithien
Đệ tử 7 túi
 
Tham gia ngày: Aug 2007
Bài gửi: 213
:
Ngắt RB0 và MCLR ?

Mình viết đoạn code như sau,sử dụng ngắt ngoài RB0 và mạch reset.Mô phỏng bằng proteus thì rất tốt nhưng khi nạp vào pic thì lại không như mô phỏng.Đúng ra thì bắt đầu chương trình thì sẽ thực hiện các lệnh nằm trong main() trước nhưng thực tế thu được là :khi bắt đầu cấp nguồn cho pic thì nó thực hiện ngắt trước ,sau đó mới chạy vào hàm main() và chạy.Sau đó nếu nhấn reset thì lại tiếp tục như vậy.Mình xài ngắt ngoại,liệu reset ở MCLR có được hiểu là một laọi ngắt ngoại không ?Phải cấu hình cho pic thê nào để nó chạy đúng như mô phỏng trong trường hợp này ?
File Kèm Theo
File Type: rar kythuat.rar (53.4 KB, 398 lần tải)
thaithien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2009, 12:26 AM   #2
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
MCLR la ngắt có mức độ ưu tiên cao nhất ! Có thể chương trình bạn có bugs. Hãy dò lại 1 cách kỹ lưỡng xem. Tôi thấy hàm ngắt thực hiện việc hiển thị giống hàm main. Có khi nào bạn lầm lẫn trog việc quan sát kết quả? Bugs nằm ở đó. Thêm nữa, bạn đừng nghĩ sử dụng hàm xây dựng sẵn của trình biên dịch thì có nghĩa là ko cần quan tâm các bit cấu hình cũng như các thanh ghi ko liên quan đến module mình đang dùng. Ở đây bạn dùng ngắt ngoài, nên để ý các thanh ghi liên quan ngắt.
meishun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2009, 05:39 AM   #3
thaithien
Đệ tử 7 túi
 
Tham gia ngày: Aug 2007
Bài gửi: 213
:
Vậy phải cấu hình như thế nào?Hàm ngắt làm công việc giống hàm main() nhưng chuỗi hiển thị thì khác (đó là ý đồ chính ).Có lẽ vấn đề ở đây là cấu hình pic để nó giống với mô phỏng thôi vì mô phỏng đâ chạy được
thaithien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2009, 02:11 AM   #4
thaithien
Đệ tử 7 túi
 
Tham gia ngày: Aug 2007
Bài gửi: 213
:
Vấn đề sao vậy trời .Mô phỏng Proteus chính xác mà.
thaithien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2009, 09:57 AM   #5
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi thaithien View Post
Vấn đề sao vậy trời .Mô phỏng Proteus chính xác mà.
Vấn đề là mô phỏng ko thể mô phỏng được tất cả mọi yếu tố mà chúng ta gặp khi chạy thực tế.

Trong chuơng trình chính bạn nên xóa cờ ngắt ngoài trước khi enable ngắt ngoài.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2009, 12:23 PM   #6
phamhoangthong
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 6
:
Em thử sd POR(power on reset) & PWTR(power up timer)
anh nghỉ mạch em bị nhiểu trên chân RB0
phamhoangthong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2009, 02:05 PM   #7
thaithien
Đệ tử 7 túi
 
Tham gia ngày: Aug 2007
Bài gửi: 213
:
Ngay khi cấp nguồn cho nó chạy thì nó lại nhảy vô chương trình ngắt luôn vậy đó.Để em thử cách cua anh phamhoangthong.Cảm ơn 2 anh phamhoangthong và bien_van_khat.
thaithien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-10-2009, 10:25 AM   #8
thienlong
Đệ tử 1 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 25
:
ngat rb0

minh dang lam ve dieu khien dong co mot chieu.minh dung ngat rb0 de dk toc do dong co theo cac cap khac nhau.nhung khi minh mo phong thi ko ngat dc.bac nao da lam roi cho minh them y khien dc ko???
thienlong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-10-2009, 11:18 AM   #9
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Trích:
Nguyên văn bởi thienlong View Post
minh dang lam ve dieu khien dong co mot chieu.minh dung ngat rb0 de dk toc do dong co theo cac cap khac nhau.nhung khi minh mo phong thi ko ngat dc.bac nao da lam roi cho minh them y khien dc ko???
cho code lên coi thử bạn!
__________________
A&A
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-11-2009, 11:55 PM   #10
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Exclamation Ngắt ngoài bị nhiễu! Help help!

Hi all!
Em cũng đang gặp rắc rối với chú ngắt ngoài RB0. Xin ý kiến của các tiền bối.
Em làm một hệ thống đếm sản phẩm hiển thị 3 LED 7 đoạn.

Gồm 1 MCU điều khiển chung và các module nhỏ.
Riêng module hiển thị LED 7. Em dùng hẳn 1 chú 16F877(Pic_Slave) để điều khiển việc hiển thị LED.



Cứ mỗi lần tín hiệu truyền về chân RC7(Xảy ra ngắt RDA), thì thực hiện đoạn mã:

Code:
output_high(PIN_A0)
delay_ms(100);
output_low(PIN_A0);
delay_ms(100);
Mục đích là tạo ngắt ngoài RB0 cho Pic_Slave. Và tăng biến đếm sản phẩm.

Về code thì đã OK.

Xong khi Em làm mạch và test thì xảy ra hiện tượng chân RBO bị nhiễu mỗi lần cắm Adapter nguồn, hoặc bật công tắc nguồn.
Ngay cả sờ tay vào đường mạch nối tới chân RB0 đó, cũng xảy ra ngắt!
Em nghĩ có thể do mình không phủ mass nên mạch bị nhiễu.

Đây là mạch in của Em.



Bi giờ phải khác phục sao đây các bác! (Em không muốn làm lại mạch! )
Thanks alot!
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.

thay đổi nội dung bởi: Delfy_Coltech, 30-11-2009 lúc 12:18 AM. Lý do: Change sth!
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-11-2009, 08:35 AM   #11
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Dựa trên sơ đồ, mình nghĩ con PIC bên trái của bạn sẽ kéo chân RA0 lên logic 1 hoặc xuống logic 0 để gây ngắt ở con PIC bên phải.

Nhưng vấn đề là khi khởi động chân RA0 là Tris-state, do đó có 1 khoảng thời gian chân RB0 của PIC-phải sẽ lơ lửng nên nhiễu từ môi trường sẽ tác động làm thay đổi mức logic trên chân RB0 gây ra ngắt.

Ngay khi khởi động bạn cần đưa chân RA0 về logic 0 hoặc logic 1.
Tốt hơn, bạn nên hàn 1 con điện trở 10K nối thằng từ RB0 lên Vdd, khi nào cần gây ngắt thì xuất logic 0 ra chân RA0.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-11-2009, 10:48 AM   #12
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Thumbs up Thank U!

Trích:
Nguyên văn bởi bien_van_khat View Post
Dựa trên sơ đồ, mình nghĩ con PIC bên trái của bạn sẽ kéo chân RA0 lên logic 1 hoặc xuống logic 0 để gây ngắt ở con PIC bên phải.

Nhưng vấn đề là khi khởi động chân RA0 là Tris-state, do đó có 1 khoảng thời gian chân RB0 của PIC-phải sẽ lơ lửng nên nhiễu từ môi trường sẽ tác động làm thay đổi mức logic trên chân RB0 gây ra ngắt.

Ngay khi khởi động bạn cần đưa chân RA0 về logic 0 hoặc logic 1.
Tốt hơn, bạn nên hàn 1 con điện trở 10K nối thằng từ RB0 lên Vdd, khi nào cần gây ngắt thì xuất logic 0 ra chân RA0.
Cảm ơn Anh nhé!
Em cũng đã khắc phục được bằng các khởi động MCU trước! Rồi khởi động module LED Drive sau.

Nhưng cách hàn thêm trở của Bác chắc là tối ưu hơn đó! Để Em thử nào.
Many thanks!
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-12-2009, 01:43 AM   #13
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Cảm ơn Anh Biển nha!
Bây giờ mới có thời gian sửa lại!
Tuyệt vời! Đã hết nhiễu nhờ hàn thêm trở cho chân RBO của Slave_Pic.

Mời bác 1 ly cafe nào!

__________________
Mechatronics Department
University of Engineering and Technology, VNUH.

thay đổi nội dung bởi: Delfy_Coltech, 19-12-2009 lúc 01:13 AM. Lý do: ...
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2009, 01:07 AM   #14
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Question [Help] Continue with RDA interrupts question...???

Hi all!
Em gặp một lỗi về thời gian xảy ra ngắt RDA.

Tiếp tục với cái project của Em như ở bài trên.
Tư tưởng như sau:
- Khi có tín hiệu về chân RC7, xảy ra ngắt RDA. Biến đếm tăng lên 1 đơn vị.
--> Tăng biến đếm led, hiển thị LCD.
Code của Em như sau:

Code:
// LCD Display function

VOID LCD_Display()
   {
       LCD_init();
       Printf(LCD_putchar,"START...");
       delay_ms(500);
       LCD_putcmd(0x80);// The first line
       Printf(LCD_putchar,"PRODUCT COUNTER");
       delay_ms(500);
       LCD_putcmd(0xC0); // The second line
       Printf(LCD_putchar,"PRO.NUMBER: ");
    }  
      
// Interrupts function
     
#INT_RDA
    VOID src_rda()
      {               
          ................
          sanpham++;
           // Create interrupts for PIC_Slave
           OUTPUT_HIGH(PIN_A0);
           OUTPUT_LOW(PIN_A0);
        // Clear interrupts flag.   
      RCIF=0x00;
      }
             
//4. Main program
VOID main()
{   
   TRISA=0X00;
   PORTA=0XFF;
   LCD_Display();
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   WHILE(TRUE)    
        
        {     
          delay_ms(100);           
        }
 }
Lỗi Em gặp phải là hàm ngắt không thực thi được ở lần khởi động đầu tiên và phải reset lại Master_Pic thì mới thực hiện được.

Em nghĩ là do hàm LCD_Display().
Khi Em bỏ hàm LCD_Display() trong void main() đi thì ngắt được, nhưng phải đến lần thứ 2 mới xảy ra ngắt (sản phẩm đầu bị bỏ qua không đếm)--> Why?

Các bác cho Em hỏi:
1. Đối với ngắt RDA thì nó cần bao nhiêu ms để khởi tạo xong và phải làm thế nào để khắc phục lỗi trên của Em.
2. Viết lệnh thế nào để dòng thứ 2 của LCD hiển thị số thứ tự sản phẩm chạy qua? (Chú LCD_putchar(sanpham) đặt ở đâu? Vì đặt trong hàm ngắt thì Em thấy có warning.)

Cảm ơn các bác rất nhiều!
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.

thay đổi nội dung bởi: Delfy_Coltech, 19-12-2009 lúc 01:12 AM. Lý do: Change sth...:)
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2009, 10:48 PM   #15
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Up nào! Các hảo huynh đệ đâu hết rùi. Bắt lỗi giúp Em với!
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.
Delfy_Coltech 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à 11:34 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