PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Hướng dẫn thiết kế đồng hồ số+ nhiệt độ dùng PIC 16F877a+ DS1307+LM335 (http://www.picvietnam.com/forum/showthread.php?t=11714)

hiepkhachhanh7 03-03-2012 01:57 PM

pic
 
hhhhhhuhkihydhlkhghfhg

hiepkhachhanh7 03-03-2012 01:58 PM

Trích:

Nguyên văn bởi dinhvanphuc (Post 51219)
Mình mới vừa làm xong một mạch đồng hồ và nhiệt độ hiển thị trên led 7 đoạn
Mình gửi sản phẩm của mình và code CCS, file hex, sơ đồ capture, layout cho mọi người xem thử.
Đây có lẽ là đề tài đã quá cũ rồi nhưng mình muốn đưa lên cho những ai mới làm thì tham khảo ( mình cũng amatuer lắm).
Vì mình làm đồng hồ trên tấm meka và đóng thành hộp nên mình muốn đưa các nút bấm và LM335 lên thành tấm meka nên trong mạch mình vẽ nhiều các jack cắm một chân.
Mặc trước mình làm những con led đơn để nó sáng chơi và mình hẹn giờ nó sáng từ lúc 18h đến 6h. Để làm việc này thì mình dùng lệnh if, nếu giờ lớn hơn 6h và nhỏ hơn 17h thì tắt led. Vì mình dùng nguồn 12v và mắc 6 đoạn led song song với nhau. Mỗi đoạn led mình dùng 3 con led siêu sáng và trở, dòng qua led khoảng 15mA nên dòng qua 6 đoạn là 6*15=90mA. Mình dùng BJT 2SC2073 để điều khiển, đầu anode của 6 đoạn led nối lên +12v, đầu katode nối đến cực C của BJT, cực E nối mass, cực B của BJT nối qua trở R rồi vào một port của PIC. Cách tính trở R này như sau: Vì dòng Ic=90mA và giả sử beta của BJT bằng 100 thì Ib=90/100=0.9mA. Suy ra, R=(5-0.7)/0.9= 4.7K.
Để biết sơ đồ chân của LM335 như thế nào thì các bạn tra datasheet của nó và cách mắc chân luôn.
Nếu bạn nào có ý muốn làm thì cứ liên hệ, mình sẵn lòng giúp ( mình cũng tham khảo trên mạng thôi).

hhhhhhhhhhh

dinhvanphuc 07-03-2012 10:09 PM

Co gi ban gui mail cho minh qua email dinhvanphuc08dt4@gmail.com

dinhvanphuc 08-03-2012 12:12 AM

huong dan
 
1 Attachment(s)
Vì đồng hồ này mình làm là có hiển thị và điều khiển riêng nên mình mới làm các jack cắm. Bây giờ mình chỉ có nhiệm vụ là xác định jack nào cắm vào nơi nào trên mạch hiển thị nữa là xong.
Bạn nhìn vào sơ đồ capture mà mình gửi kèm theo thì:
- Chân RD0 có nhiệm vụ chọn chế độ điều chỉnh giờ và nối với jack J25.
- Chân RD1 có nhiệm vụ tăng thời gian và nối với jack J26.
- Chân RD2 có nhiệm vụ giảm thời gian và nối với Jack J23.
- Chân RD3 có nhiệm vụ reset và nối với Jack J24.
Vậy 4 jack này các bạn nối với 4 nút bấm. Nút bấm có 4 chân, các bạn coi 2 chân chéo nhau thì ok. Một chân nối với J23,24,25,26. Chân còn lại nối với âm nguồn. Giữa hai chân này các bạn mắc song song với tụ 104 để chống nhảy phím khi bấm hoặc trong chương trình ta đưa delay vào cũng được.

- Các jack nối với các chân RE0,1 có tác dụng là ta muốn đưa thêm ứng dụng như đèn, chuông báo thức. Cái này các bạn có thể tự do thiết kế như thế nào mình muốn.

- Port B mình nối với các chân từ a-g của led 7 đoạn. Ở đây mình dùng led anode chung. Với a nối với RB0,...., g nối với RB7.

Hiển thị theo kiểu quét led nên cần các chân điều khiển, Chính là chân Vcc của led 7 đoạn. Giờ mình bắt đầu nối chân như sau:

Mình nói sơ qua thiết kế của mình, đồng hồ mình hiển thị được giờ phút giây, ngày tháng năm nên mình có các thuật ngữ như sau:
Giây đơn vị, giây chục, phút đơn vị, phút chục, giờ đơn vị, giờ chục, ngày đơn vị, ngày chục, tháng đơn vị, tháng chục, năm hàng trăm, năm chục, năm đơn vị, nhiệt độ đơn vị, nhiệt độ chục, trong đó:

- Giây đơn vị được điều khiển bởi chân RC0 tức là jack J15.
- Giây chục được điều khiển bởi chân RA1 tức là jack J20.
- Phút đơn vị được điều khiển bởi chân RA2 tức là Jack J19.
- Phút hàng chục được điều khiển bởi chân RA3 tức là jack J18.
- Giờ đơn vị được điều khiển bởi chân RA4 tức là jack J17.
- Giờ chục được điều khiển bởi chân RA5 tức là jack J16.
- Ngày đơn vị được điều khiển bởi chân RD4 tức là jack J8.
- Ngày chục được điều khiển bởi chân RD5 tức là jack J9.
- Tháng đơn vị được điều khiển bởi chân RC1 tức là jack J14.
- Tháng chục được điều khiển bởi chân RE2 tức là jack J28.
- Năm đơn vị được điều khiển bởi chân RC5 tức là jack J13.
- Năm chục được điều khiển bởi chân RC6 tức là jack J12.
- Năm hàng trăm được điều khiển bởi chân RC7 tức là Jack J21.
- Nhiệt độ hàng đơn vị được điều khiển bởi chân RD6 tức là Jack J10.
- Nhiệt độ hàng chục được điều khiển bởi chân RD7 tức là Jack J11.
Riêng số 2 trong năm 2000 thì ta nối chân Vcc lên 5v, các chân a,b,g,e,d xuống Mass.
Chữ độ C thì ta quay ngược led 7 đoạn lại và nối chân Vcc lên 5V, chân a,b,c,d xuống mass.

Ngoài ra, nếu các bạn nối các chân ko đúng như trên thì các bạn chỉ việc sửa lại code ( chỗ khai báo các biến ấy) là được, đừng có tháo ra hàn lại.

Chân RA0 tức là jack J4 thì ta nối đến chân số 2 của IC LM335.

Con2 tức J5 là đế pin 3V.
Con2 tức J27 là domino nối nguồn 5V, 3A. Vì mình dùng led loại lớn nên mình dùng dòng lớn, các bạn cẩn thận chứ nếu để nguồn thấp là dễ bị cháy Pic đó.

Nếu các bạn có thắc mắc gì thì các bạn cứ post lên và đồng thời gửi mail cho mình để mình biết để mình trả lời ( nếu mình biết).
Chúc các bạn may mắn

dinhvanphuc 08-03-2012 12:21 AM

Còn về giá trị điện trở thì mình làm như sau:
- Điện trở nối từ nguồn xuống chân reset thì mình dùng 10K
- Điện trở mà nối từ các chân của PIC ra transistor thì mình dùng là 1K. Bình thường các bạn phải tính để cho có đủ dòng phân cực để transistor dẫn, mình dùng 1K là ok.
- Điện trở treo thì mình dùng là 4,7K.
- Điện trở mà nối từ nguồn xuống chân Vcc trong IC LM335 thì mình dùng biến trở tinh chỉnh 10K. Điện trở này có tác dụng là mình muốn thay cài đặt nhiệt độ ban đầu cho đúng nhiệt độ ban đầu thì mình thay đổi giá trị điện trở thì thay đổi dòng vào IC LM335.
- Thạch anh dùng cho Pic là 4Mhz, còn thạch anh dùng cho DS1307 là 32768Khz.
- Tụ gốm là 33pF chỗ gần thạch anh.
- Mình dùng transistor pnp là A1013 để đảm bảo công suất tốt nhất.

- Ngoài ra, để chống nhiễu thì các nút bấm mình mắc song song với tụ 104, nguồn 5V cấp cho Pic tách riêng với nguồn cấp cho LED 7 đoạn, nếu tốt hơn nữa thì mình nên hàn một sợi dây vào miếng nhôm của thạch anh và nối xuống mass.

anh_comdr 17-03-2012 10:40 PM

có ai giúp mình viết đoạn code hiển thị nhiệt độ,nếu thấp hơn 25 độ C thì tự động bật đèn led ko ?

phamtinh.dt 18-03-2012 12:59 AM

bạn phúc này cho mỗi file dns thiếu file opj thì có trời ocard nào mở đc

phamtinh.dt 18-03-2012 01:03 AM

nhưng vẫn cảm ơn vì cho cái hình :D

sieutosy 02-04-2012 05:28 PM

em cũng muốn làm về đồng hồ vạn niên. nếu làm với led đơn thì sơ đồ nguyên lý sẽ như nào ạ ?
anh dinhvanphuc giúp em với !!
cảm ơn a nhiều

dinhvanphuc 03-04-2012 12:50 AM

Nếu làm bằng led đơn thì cơ chế cũng như led 7 đoạn thôi.
Giờ ta chỉ thay 7 đoạn led trong led 7 đoạn thành 7 đoạn led được ghép bằng led đơn thôi.
Giả sử bạn muốn làm một thanh led 7 đoạn từ 10 con led đơn và nguồn Vcc là 5v thì bạn cần 5 nhánh song song, mỗi nhánh có 2 led đơn nối tiếp và nối tiếp với trở.
Giá trị của trở được tính là R=(5-2.2*2)/15mA.
Bạn làm 7 lần như vậy thì ta được một led 7 đoạn làm từ led đơn rồi đấy

sieutosy 03-04-2012 02:51 PM

ồ hóa ra là như vậy ?
thank a nhiều nha

sieutosy 03-04-2012 06:19 PM

các bác xem hộ e code (code nháy led đơn) này lỗi ở đâu ma e lại không chuyển sang duôi hex được vậy ?
bác nào giúp em với!
thank!

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

void main()
{
// Thiet lap che do cho PORTB
TRISB = 0x00; // Tat ca PORTB deu la cong xuat du lieu
PORTB = 0xFF; // Tat het cac LED
While(1)
{
PORTB = 0; // Cho các LED sáng
delay_ms(250); // Tạo thời gian trễ 250ms
PORTB = 0xFF;
delay_ms(250);
}
}

bnthang 03-04-2012 08:50 PM

Trích:

Nguyên văn bởi sieutosy (Post 55541)
các bác xem hộ e code (code nháy led đơn) này lỗi ở đâu ma e lại không chuyển sang duôi hex được vậy ?
bác nào giúp em với!
thank!

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

void main()
{
// Thiet lap che do cho PORTB
TRISB = 0x00; // Tat ca PORTB deu la cong xuat du lieu
PORTB = 0xFF; // Tat het cac LED
While(1)
{
PORTB = 0; // Cho các LED sáng
delay_ms(250); // Tạo thời gian trễ 250ms
PORTB = 0xFF;
delay_ms(250);
}
}

Bạn bỏ dòng code #include <def_877a.h> đi xem sao

thienha89 03-04-2012 10:48 PM

Help Me >>>>>SOS >> Nhờ các Pro chỉ giáo >>em còn 1 tháng để làm đồ án thui
 
tình hình là mình đang làm đồ án về cái mạch có Khối Sim 548C + Khối RS232 + PIC16F877A
>>>>Hoạt động của mạch là : có một cái điện thoại nhắn tin vào MẠch sim 548C>>>>>>> Trên khối mạch Sim 548C có một cái sim điện thoại để nhận tin nhắn >>>>>> Khi khối sim vừa nhận tin nhắn xong thì lập tức chip 16f877A sẽ đẩy tin nhắn đấy lên MÁy Tính thông qua truyền thông RS232

>>> Trên máy tính có một Giao diện lập trình bằng C# sẽ nhận tin nhắn và xử lí tin nhắn đó:
Có 2 sự lựa chọn để xử lí tin nhắn

1- dựa vào tin nhắn để xác định vị trí của điện thoại nhắn tin nhắn đó >>>> Cái này nghe hơi ảo (((((( mình ko biết cso làm được ko)))))
2--dựa vào tin nhắn để đưa ra một cảnh báo nào đó ((((( ví dụ như nội dung tin nhắn là số : 40 >>>>>> thì ở trến giao diện máy tính mình đặt là mức 30 >>>> khi nhắn nội dung tin nhắn quá số 40 thì giao diện sẽ hiện cảnh báo )) >>>>>>>>> Cái này nghe khả thi hơn

sieutosy 04-04-2012 03:27 PM

e bỏ đi rồi nhưng khi e Build để compile chuyển đổi sang đuôi hex thi lại báo lỗi
undefined identifier TRISB, PORTB
E mới học pic nên chưa thành thạo lắm.
bác nào chỉ dùm e với,
thank


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

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