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)
-   -   Học PIC16F877A qua đề tài Lịch Vạn Niên (http://www.picvietnam.com/forum/showthread.php?t=1437)

tinhthanthep 25-08-2007 02:39 PM

Học PIC16F877A qua đề tài Lịch Vạn Niên
 
1 Attachment(s)
Chào các bạn!
Hiện mình đã làm xong mạch Lịch Vạn niên sử dụng PIC16F877A. Mình sẽ lần lượt post các chương trình thử nghiệm trên mạch này. Qua Project này các bạn sẽ làm chủ được con PIC16F877A và trình dịch MikroC, một trình biên dịch rất dễ sử dụng cho người mới bắt đầu học.
Đây là sơ đồ mạch nguyên lý:

tinhthanthep 25-08-2007 02:47 PM

1 Attachment(s)
Dùng PIC16F877A với chuẩn nạp chương trìng bootloader-ICSP của Picvietnam. Thạch anh 20MHz, tụ 1uF lọc nhiễu.

tinhthanthep 25-08-2007 02:52 PM

1 Attachment(s)
Có 4 nút bấm Mode, Set, Up, Down dùng để cài đặt và xem thông tin của lịch vạn niên. Hiển thị bằng màn hình LCD 16x2 cắm qua hàng Jump LCDDISPLAY. Có nút gạt để chọn backlight của LCD. 3 LED đơn mắc ở cổng E dùng để chỉ thị các chế độ.

tinhthanthep 25-08-2007 02:58 PM

1 Attachment(s)
Nhiệt độ môi trường được lấy từ con LM335. Thông qua việc sử dụng LM335 bạn sẽ hiểu được cách sử dụng modul ADC của PIC. Thời gian thực được lấy từ con DS1307, mở rộng thêm bộ nhớ ngoài bằng con 24C04 với 256B, qua cách giao tiếp với 2 con IC này bạn học thêm được cách dùng giao tiếp I2C. Gắn thêm cái loa Speaker vào chân PWM để học cách sử dụng mô đul PWM của PIC.
Như vậy đến đây mạch của ta đã hoàn chỉnh để có thể làm một cái lịch vạn niên hiển thị ngày tháng năm, giờ phút giây, nhiệt độ môi trường, báo giờ chuông. Còn lại là khả năng bay bổng của các bạn bằng phần mềm.

tinhthanthep 25-08-2007 03:01 PM

1 Attachment(s)
Còn nốt cái nguồn cho mạch chạy. Nguồn đầu vào là một cái adapter 9V DC rất phổ biến , cắm vào cái nguồn này đầu ra sẽ là 5VDC cho mạch chạy.

tinhthanthep 25-08-2007 03:11 PM

1 Attachment(s)
Như vậy là mạch nguyên lý đã xong. Mạch in hôm nào chụp ảnh post cho các bạn xem sau. Giờ là bắt tay vào viết chương trình. Đầu tiên bạn lên mạng hỏi thằng google xem hiện giờ MikroC mới nhất là phiên bản nào và tải nó về. Nếu nó hỏi key thì lại nhờ anh google tìm hộ cho cái key. Sau khi cài đặt Trình biên dịch xong thì bạn làm theo các hướng dẫn của file đính kèm theo đây để bắt đầu viết một chương trình cho project.

tinhthanthep 25-08-2007 03:14 PM

Nếu bạn nào hỏi thằng google mãi không được thì mess cho mình mình gửi cả softwave và crack cho nhá.

falleaf 25-08-2007 05:29 PM

Cảm biến nhiệt độ các bạn cố thể dùng các dòng MCP97xx 98xx của Microchip cho thiết kế của mình. Cảm biến nhiệt độ là một phần thiết kế rất quan trọng trong các thiết kế.

Chúc vui.

congduc_1984 26-08-2007 06:59 PM

Hay quá !
 
Chương trình này bạn tự viết phải ko ?Làm sao bạn viết được như vậy?
Tớ tham gia vào Pic là vì muốn học cách lập trình và thiết kế các loại ic này ,nhưng căn bản của mình chỉ hạn chế ở những mạch điện tử thông dụng ko rành về ic nhớ và các loại ic xử lý .
Bây giờ minh muốn học nó thì phải bắt đầu từ đâu vậy .Bạn có thể hướng dẫn cho mình được ko (tất nhiên là có phí học rồi) ,nếu bạn quá bận thì có thể chỉ mình chổ học được ko ?
Mình ở giữa TP.BIÊN HÒA và THỦ ĐỨC
Cảm ơn các bạn nhiều .
Mail "virut_goocky_07@yahoo.com.vn"
Phone :0919310478

tinhthanthep 27-08-2007 04:33 PM

Project1: I/O PORT

Chương trình đầu tiên ta học về cách làm việc với các cổng I/O. Ở đây ta có cổng E mắc với các Led đơn. Ta làm chương trình nháy Led đơn theo thứ tự như sau: 100,010,001,100.... Mỗi lần nháy cách nhau 250ms.

void MAIN() {
PORTE = 0; // Xóa dữ liệu cổng E
TRISE = 0; // ĐỊnh nghĩa cổng E là Output
ADCON1 = 0xE; // Định nghĩa cổng E là I/O Port.

Loop: // Nhãn vòng lặp
PORTE.F0 = 1; // Bật Led 1
PORTE.F1 = 0; // Tắt Led 2
PORTE.F2 = 0; // Tắt Led 3
Delay_ms(250); // Trễ 250ms
PORTE.F0 = 0; // Tắt Led 1
PORTE.F1 = 1; // Bật Led 2
PORTE.F2 = 0; // Tắt Led 3
Delay_ms(250); // Trễ 250ms
PORTE.F0 = 0; // Tắt Led 1
PORTE.F1 = 0; // Tắt Led 2
PORTE.F2 = 1; // Bật Led 3
Delay_ms(250); // Trễ 250ms
goto Loop; // Lặp lại chu trình nháy.
}

Sau khi viết xong các bạn dịch sang file hex bằng cách ấn tổ hợp phím Ctrl + F9. Rồi đem file hex này nạp vào PIC16F877A là mạch chạy ngon lành.

tinhthanthep 27-08-2007 05:13 PM

Bây giờ các bạn lại muốn cả 3 đền nhấp nháy cùng một lúc, khoảng thời gian nhấp nháy là 250ms thì chương trình sẽ như thế này:

void MAIN() {
PORTE = 0; // Xóa dữ liệu cổng E
TRISE = 0; // ĐỊnh nghĩa cổng E là Output
ADCON1 = 0xE; // Định nghĩa cổng E là I/O Port.

Loop: // Nhãn vòng lặp
PORTE = ~PORTE; // Đảo trạng thái cổng E
Delay_ms(250); // Trễ 250ms
goto Loop; // Lặp lại chu trình nháy.
}

linhnc308 27-08-2007 06:04 PM

@ Tinhthanthep: Cậu có file Crack chủa MikroC ver 6 không? Nếu có gửi cho tôi với nhé (cả soft và crack thì càng hay, còn không mình files crack cũng được).
email: linhnc308@gmail.com
YM: linhnc308
Thank.
Topic của bạn rất hữu ích với những người mới học.

tinhthanthep 29-08-2007 03:56 PM

Đã gửi software và crack phiên bản 6.2.1.0 cho linhnc308.
Nếu bạn nào muốn làm cái mạch này để học con PIC16F877A thì liên hệ với mình , mình cho mượn film để đi làm mạch in cho đỡ tốn xèng. Diện tích mạch PCB là 1dm2. Mạch in 2 lớp có phủ flux và mạ bạc ở viện điện tử là 62k/dm2

minhtienbk 30-08-2007 03:12 PM

,anh cho xem cái chương trình ấy , đang làm đồng hồ lại thành chớp LED :)

tinhthanthep 30-08-2007 04:56 PM

Trích:

Nguyên văn bởi minhtienbk (Post 11058)
,anh cho xem cái chương trình ấy , đang làm đồng hồ lại thành chớp LED :)

Mình hướng dẫn các bạn học từ cái cơ bản đầu tiên, đến cuối cùng sẽ là một chương trinh lịch vạn niên hoàn chỉnh. Chứ viết cả chương trình lớn lên đây chắc những người đọc xong cái hiểu ngay thì cũng không cần đến cái project của mình lắm. :D

Tiếp theo chúng ta làm bài toán đọc phím bấm. Ta có tất cả 4 phím bấm là MODE, SET, UP, DOWN tương ứng nằm ở các chân RB1, RB2, RB3 và RB4. Bài toán lần này như sau: Bấm phím RB1 thì LED 1 sáng...Bấm phím RB3 thì LED3 sáng, bấm phím RB4 thì tắt hết các đèn. Chương trình sẽ như sau:

void MAIN() {
PORTB = 0; // Xoá dữ liệu cổng B
TRISB = 0xFF; // Định nghĩa cổng B là input

PORTE = 0;
TRISE = 0;
ADCON1 = 0xE;

Loop:
if (PORTB.F1 == 0) { // Kiểm tra nút ấn RB1 có bấm không? Nếu bấm thì
PORTE = 0x00; // Tắt hết đèn cổng E
PORTE.F0 = 1; // Bật đèn LED1
}
if (PORTB.F2 == 0) { // Kiểm tra nút ấn RB2 có bấm không? Nếu bấm thì
PORTE = 0x00; // Tắt hết đèn cổng E
PORTE.F1 = 1; // Bật đèn LED2
}
if (PORTB.F3 == 0) { // Kiểm tra nút ấn RB3 có bấm không? Nếu bấm thì
PORTE = 0x00; // Tắt hết đèn cổng E
PORTE.F2 = 1; // Bật đèn LED3
}
if (PORTB.F3 == 0) PORTE = 0x00; // Kiểm tra nút ấn RB3 có bấm không? Nếu bấm thì Tắt hết đèn cổng E
goto Loop; // Lặp lại vòng lặp kiểm tra nút bấm

}


Múi giờ GMT. Hiện tại là 05:41 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