PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-05-2010, 12:56 PM   #1
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
cần giải đáp thắc mắc gấp!mong các cao thủ giúp đỡ

em đang làm bài mạch đèn giao thông với PIC6f877a và thạch anh 20M!Dưới là sơ đồ quét led hiển thị thời gian dành cho các hướng của em.
Thuật toán của em là dùng ngắt RB0 định thì 1s để giảm biến count
void ngat_ngoai()
{

--count;

}
sau đó sẽ xuất giá trị
#separate void hienthi1( int x)
{
//int t1,t2;
t1=x/10;
t2=x%10;


portb=0x02;
porta=t1;
delay_ms(5);
portb=0x00;

portb=0x04;
porta=t2;
delay_ms(5);
portb=0x00;

}
tuy khi làm trên mô phỏng thì thời gian đếm đúng là 1s nhưgn khi vào mạch thật thì nó lại chạy nhanh hơn rất nhiều lần khiến em trong hàm ngắt phải cho đếm đến 30 mới đc gần 1s!!Có cao thủ nào có nhiều kinh nghiệm làm mạch thật mong giúp đỡ em để tuần sau em nộp btl
File Kèm Theo
File Type: rar 7seg.rar (19.7 KB, 11 lần tải)

thay đổi nội dung bởi: chuot chui, 13-05-2010 lúc 08:33 PM.
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2010, 08:23 PM   #2
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
Trích:
while(1)
{
if(mode==0)
{ temp=0x93;
xuat(temp);
count=dox-1;


while(mode==0)
{ //xuat(temp);
// delay_ms(800);
hienthi(count+xanh+vang+dox,count);
if (count+1==0)
mode++;
// enable_interrupts(int_timer1);

}
}
if(mode==1)
{ temp=0xC2;
xuat(temp);
count=xanh-1;
while(mode==1)
{//xuat(temp);
// delay_ms(800);
hienthi(count+vang+dox,count);
if (count+1==0) mode++;
// enable_interrupts(int_timer1);

}
}
if(mode==2)
{ temp=0xA3;
xuat(temp);
count=vang-1;
while(mode==2)
{ //xuat(0x21);
//delay_ms(800);
OUTPUT_B(0X07);
hienthi1(count+dox);
if (count+1==0) mode++;
// enable_interrupts(int_timer1);

}
}
if(mode==3)
{ temp=0x93;
xuat(temp);
OUTPUT_B(0x01);
count=dox-1;
while(mode==3)
{//xuat(temp);
//delay_ms(800);
hienthi(count,count+xanh+vang+dox);
if (count+1==0) mode++;
// enable_interrupts(int_timer1);

}
}
if(mode==4)
{ temp=0x19;
xuat(temp);
count=xanh-1;
while(mode==4)
{//xuat(temp);
// delay_ms(800);
hienthi(count,count+vang+dox);
if (count+1==0) mode++;
// enable_interrupts(int_timer1);

}

}
if (mode==5)
{ temp=0x95;
xuat(temp);
count=vang-1;
while(mode==5)
{ //xuat(temp);
// delay_ms(800);
OUTPUT_B(0x19);
hienthi2(count+dox);
if(count+1==0) mode++;
// enable_interrupts(int_timer1);
}
}
if (mode==6)mode=0;

}
đây là hàm main em dùng qued led!những cái râu ria ko cần post!ở đây em dùng DS1307 định thì 1s nhưng khi em sử dụng ngắt timer1 định thì thì nó vẫn như thế nên ko thể là do con DS1307 được!tạm thời các bác cứ bỏ qua con DS 1307 đi vif em chưa dùng gì đến nó cả!mà cũng thông báo luôn khi dùn ngắt địng thì 1s này chỉ để nháy tắt bật led thì lại đúng 1s thật!thật khó hiểu quá

thay đổi nội dung bởi: chuot chui, 13-05-2010 lúc 08:48 PM.
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2010, 08:50 PM   #3
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
mẹ cha ơi~ko ai trả lời sao!!chắc toàn cao thủ code chứ ko chịu làm mạch thật
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2010, 11:26 PM   #4
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Trích:
Nguyên văn bởi chuot chui View Post
mẹ cha ơi~ko ai trả lời sao!!chắc toàn cao thủ code chứ ko chịu làm mạch thật
Bạn muốn được trả lời, giúp đỡ thì ít ra cũng phải có đủ cả schematic mô phỏng + code luôn chứ, chỉ có phần mô phỏng không thế kia chắc chỉ 'siêu cao thủ' mới 'khám' ra bệnh cho bạn.
PIC không chạy sai theo cấu hình OSC như chỉ dẫn trong datasheet đâu, chỉ có bạn config + code không đúng thôi.

Regards
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 01:09 AM   #5
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Không ai có nhiệm vụ phải trả lời cho những kẻ xấc xuợc và ngạo mạng như bạn. Trong tầm mắt của bạn thì có lẽ chuyện này là khó nhưng nhiều và rất nhiều nguời không nghĩ như vậy. Thì giờ của mọi nguời là tiền bạc. Không ai rỗi hơi đâu đi trả lởi cho những kẻ đòi hỏi và không biết chịu khó tìm tòi như bạn đâu. Cho dù không ai trả lời bạn nhưng nếu bạn chịu học hành đến nơi đến chốn suy nghĩ cặn kẽ thì cũng có câu trả lời thôi.
Làm đuợc cái mạch chẳng có gì đâu bạn ơi! chưa đáng là gì để la lói đòi hỏi vậy đâu.
tiếp thu ý kiến của các bác!
em chẳng có ý gì xấc xược đâu! chỉ nghĩ là các bác chưa bao h gặp qua cái lỗi này nên ko ai trả lời thôi
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 03:19 PM   #6
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
Trích:
Nguyên văn bởi ngocthanh07 View Post

Xin đuợc hỏi con số 3036 của bạn đuợc tính bằng cách nào ?.


em tính thế này 1s=(65536-3036)x4/20Mx8x10

65536=2^16 là giá trị tối đa đếm của thanh ghi timer1
8:tỉ số chia tần
10:ta cho biến count đếm 10 lần để đc 1s
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 01:16 AM   #7
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
đây là code modul em đã test mạch!trong này em đã chỉnh lại cho mo fỏng đúng 1s (như lí thuyết em nghĩ) nhưng trong thực tế thì nó chỉ là 1/30s!em không hiểu chỗ này mong các bác chỉ giáo cho!
File Kèm Theo
File Type: rar New Folder (6).rar (23.5 KB, 15 lần tải)
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 09:44 AM   #8
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
bác ơi!em tính toán đúng 1s dùng timer1 mà vẫn thế bác ạ!vì em cho thử nháy led thì vẫn đúng 1s mà!code em để trên là đang dùng ngắt ngoài RB0 do chân SOUT của DS1307 tạo xung 1HZ!nhưng vào mạch thật thì lại sai khác!các bác có thể xem hộ em phâng quét led có chỗ nào trục trặc không mà sai thế !
thanks!
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 10:29 AM   #9
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
:
Mô phỏng proteus ko thể thể hiện được thời gian thực hiện lệnh của PIC. Tức là proteus thực hiện 1 lệnh có thể nhanh hơn hoặc chậm hơn so với PIC.

Do đó
Trích:
khi làm trên mô phỏng thì thời gian đếm đúng là 1s nhưgn khi vào mạch thật thì nó lại chạy nhanh hơn rất nhiều lần
là điều đương nhiên.

Để người khác có thể giúp bạn được thì bạn cần cung cấp thông tin nhiều nhất có thể. Thử nghĩ bạn có mạch có code còn ko làm nó chạy được thì người khác chỉ nghe bạn mô tả:
Trích:
Nguyên văn bởi chuot chui View Post
bác ơi!em tính toán đúng 1s dùng timer1 mà vẫn thế bác ạ!vì em cho thử nháy led thì vẫn đúng 1s mà!code em để trên là đang dùng ngắt ngoài RB0 do chân SOUT của DS1307 tạo xung 1HZ!nhưng vào mạch thật thì lại sai khác!các bác có thể xem hộ em phâng quét led có chỗ nào trục trặc không mà sai thế !
thanks!
sẽ giúp bạn như thế nào???

Các bạn mới tham gia chịu khó đọc thread bên dưới chữ ký của mình một lần để biết cách đặt câu hỏ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 15-05-2010, 03:13 PM   #10
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
Trích:
Nguyên văn bởi bien_van_khat View Post

Để người khác có thể giúp bạn được thì bạn cần cung cấp thông tin nhiều nhất có thể. Thử nghĩ bạn có mạch có code còn ko làm nó chạy được thì người khác chỉ nghe bạn mô tả:

sẽ giúp bạn như thế nào???
em đã đưa code và mạch test mô phỏng lên rồi mà!

Vậy em xin bác nào đã từng chạy quét led mạch thật mà chạy đúng 1s cho em xin cái code và mạch để em so sánh!! Vấn đề của em hiện tại là chưa hiểu qued led theo đúng 1s thì chịu ảnh hưởng của cái gì và khi sử dụng ngắt 1s thì sử dụng như thế nào cho nó đúng!

Theo lời bác bien_van_khat nói thì mô phỏng có thể thực hiện thời gian chênh lệch so với của pic nhưng vào trường hợp của em thì em thấy như vậy thì chênh lệch quá lớn!!???liệu có đúng ko??
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2010, 12:56 AM   #11
ngocthanh07
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 44
:
Ừh, xin lỗi bạn, mình dùng PIC khác nên nhầm. Bạn bỏ QUOTE cái đoạn nhầm đó của mình nhé,
Thank.
Chúc bạn sớm tìm ra nguyên nhân.
ngocthanh07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2010, 01:11 AM   #12
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
cảm ơn bác!!em biết cái lỗi này nghe chừng cũng vô lí!nó còn hài hước hơn khi sau vài ngày ko sửa code mà mạch lại chạy đúng đc!em cũng đến pó tay cái vụ này!

Thôi nhân tiện đây được trao đổi với các tiền bối đi trước,bây h em thấy mình gà quá lí thuyết với mạch thực tế thật cần nhiều hiểu biết hơn là đơn giản chỉ ngồi code và mô phỏng!thế nên không biết các bác có nhã hứng thử post một số chương trình của mình và kể một số lỗi gặp khi làm mạch thật để coi đó là kinh nghiệm cho đàn em sau này không??
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2010, 04:13 PM   #13
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Trích:
Nguyên văn bởi chuot chui View Post
cảm ơn bác!!em biết cái lỗi này nghe chừng cũng vô lí!nó còn hài hước hơn khi sau vài ngày ko sửa code mà mạch lại chạy đúng đc!em cũng đến pó tay cái vụ này!

Thôi nhân tiện đây được trao đổi với các tiền bối đi trước,bây h em thấy mình gà quá lí thuyết với mạch thực tế thật cần nhiều hiểu biết hơn là đơn giản chỉ ngồi code và mô phỏng!thế nên không biết các bác có nhã hứng thử post một số chương trình của mình và kể một số lỗi gặp khi làm mạch thật để coi đó là kinh nghiệm cho đàn em sau này không??
Sao lại vô lý, code của bạn sai ở phần setup cho timer 1, nên timing của nó không đúng là phải rồi:
Code:
setup_timer_1(T1_INTERNAL||T1_DIV_BY_8);
Rút kinh nghiệm của việc nhầm lẫn giữa phép toán bit OR(|) và phép kiểm toán luận lý OR(||).

Regards
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2010, 04:28 PM   #14
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
Trích:
Nguyên văn bởi cskiller View Post
Sao lại vô lý, code của bạn sai ở phần setup cho timer 1, nên timing của nó không đúng là phải rồi:
Code:
setup_timer_1(T1_INTERNAL||T1_DIV_BY_8);
Rút kinh nghiệm của việc nhầm lẫn giữa phép toán bit OR(|) và phép kiểm toán luận lý OR(||).

Regards
cảm ơn bác!lời bác dạy chí phải!em chủ quan quá do nhìn mô phỏng và nháy đèn vàng đúng 1s nên ko kiểm tra lại !!

Tiện thể em xin hỏi các bác :hiện nay như mạch em đưa ở trên thì em điều khiển hiển thị led 7 thanh từ port b thông qua 1 con tran C828 và điện trở 10k giảm dòng.Tuy nhiên em chỉ hiển thị được các số từ 1 đến 9 mà thiếu mất số 0@em đo điện áp khi cho hiển thị 0 thì dòng của tran quá bé ! em không biết bây h

thay đổi nội dung bởi: chuot chui, 18-05-2010 lúc 02:24 AM.
chuot chui vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2010, 03:18 PM   #15
chuot chui
Đệ tử 2 túi
 
Tham gia ngày: Feb 2010
Bài gửi: 27
:
chán quá!cái trên thì thôi em khắc phục đc cho đếm đúng 1 s!nhưng h cái code kia nạp vào mạch của em lại không hiện số 0 ở led 7 đoạn dù các số từ 1==>9 vẫn hiện rõ nét!các bác thử cho em ý tưởng gì về lỗi này không?
chuot chui 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à 07:11 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