Đây là bài tập trong chương trình học của lớp C5, được chuyển sang mục "Chương trình học và tài liệu" vì có nhiều trao đổi hữu ích.
Qua buổi học thứ bảy tuần rồi, các bạn đã học qua bài I2C. Mọi hướng dẫn liên quan đến chủ đề này, các bạn có thể tìm trong TUT I2C và các link được dẫn trong TUT.
Bài giảng trong clip, các bạn download tại:
Để giao tiếp với DS1307, các bạn cần phải xem qua datasheet của nó. Datasheet đã dịch có tại:
Dù sao, mình cũng khuyên các bạn tự download bản tiếng Anh nhé ;)
Sample code quá trình ghi:
Sample code quá trình đọc:
Bài tập cho các bạn:
1. Giao tiếp với DS1307, ghi và đọc và hiển thị thời giac thực lên LCD.
2. Sử dụng Module còn lại của mạch I2C&TRIAC, thực hành kích Triac và đóng cắt tải AC. Có thể kết hợp đóng cắt có hẹn giờ với giờ đọc được từ DS1307. Báo tình trạng tải qua Led hoặc LCD. Các bạn chỉ cần cho chân điều khiển lên 1 là kích được Triac. Xem kĩ schematic để biết chỗ cắm VCC, GND, chân điều khiển, chỗ vào ra của dây nối tải AC.
Note: Các bạn cần cẩn thận khi làm việc trực tiếp với điện AC 220V nha.
3. Bài này nhằm tận dụng thời gian nghỉ khá dài của các bạn ;) (nghe đồn thi một mạch xong nghỉ mà ) ) . Chúng ta sẽ làm luôn phần UART: sử dụng Terminal làm giao diện trên máy tính, ghi và đọc thời gian từ DS1307 thông qua PIC .
Phần code của UART khá đơn giản, các bạn download 2 file uart.c và uart.h đính kèm. Việc giao tiếp với máy tính được thực hiện qua các hàm:
Các hàm này tương tự LCD, chắc cũng không cần giải thích thêm nhé
Như vậy, phần code UART không khó, cái khó chính là mạch phần cứng giao tiếp. Các bạn đọc kĩ bài này nhé:
http://www.payitforward.edu.vn/forum/threads/49/
Có nhiều giải pháp cho các bạn, mình đề xuất là nếu dùng PL2303 thì tự làm mạch, nếu dùng FT232 thì đi mua cho khỏe nhé.
Có mạch rồi, kết nối như thế nào thì còn tùy phần cứng của bạn. Phía PIC thì cần 2 chân TX (C6), RX (C7) (main có module UART đó), qua mạch giao tiếp vào máy tính. Máy tính sẽ nhận mạch giao tiếp của bạn như một cổng COM, các bạn vào Run >> devmgmt.msc để biết là COM số mấy (cắm vô rút ra là biết). Nhớ cài driver cho chip giao tiếp nhé
Phía máy tính, ta dùng Terminal để giao tiếp. Bản mới nhất, các bạn có thể tìm ở:
Hoặc download bản cũ mình đang dùng:
Thiết đặt cho Terminal (phù hợp với uart.h & uart.c) như sau:
Rồi, kết thúc "hướng dẫn BT3" :p . Các bạn làm bài, xong thì nén hết folder projects lại rồi nộp tới email: pif.picc5@gmail.com với cú pháp sau ở chủ đề thư:
À, xin nhắc lại, lớp mình vẫn điểm danh theo bài tập, các bạn nhớ làm bài đầy đủ. Danh sách chia nhóm và theo dõi bài tập, các bạn download ở:
Trong quá trình làm bài, có gì thắc mắc các bạn cứ lên forum hỏi. Ở đây luôn có những thành viên nhiệt tình trả lời cho các bạn
Cuối cùng, chúc các bạn thi giữa kì vui vẻ và may mắn! )
Qua buổi học thứ bảy tuần rồi, các bạn đã học qua bài I2C. Mọi hướng dẫn liên quan đến chủ đề này, các bạn có thể tìm trong TUT I2C và các link được dẫn trong TUT.
Bài giảng trong clip, các bạn download tại:
Code:
http://www.mediafire.com/?7g4wbp9aamz0d2l
HTML:
http://www.payitforward.edu.vn/forum/threads/15/
Sample code quá trình ghi:
Code:
void clock_write()
{
/// Input data:
sec = 0x00 ; // CH=0 (bit7, clock-counting) ; seconds = 00
min = 0x00 ; // minutes = 00
hour = 0x15 ; // hour-mode (bit 6) = 0 -> 24-hour ; hours = 10
day = 0x03 ; // day = tuesday; define sunday = 0x00 or 0x01
date = 0x20 ; // date = 20
month = 0x03 ; // month = 03
year = 0x12 ; // year = 2012
///..
/// Writing..
//Send Start condition
i2c_start();
//Send Slave address + WRITE command
i2c_write((SLAVE_ADD<<1)|WRITE);
// ((SLAVE_ADD<<1)| WRITE) = ((0x68<<1)|0) = 0xD0
//Send register address (register of Slave – the first register need to read data)
i2c_write(0x00);
//write data
i2c_write(sec); // write to 0x00
i2c_write(min); // write to 0x01
i2c_write(hour); // write to 0x02
i2c_write(day); // write to 0x03
i2c_write(date); // write to 0x04
i2c_write(month); // write to 0x05
i2c_write(year); // write to 0x06
//Send Stop condition
i2c_stop();
///..
}
Code:
void clock_read()
{
//Send Start condition
i2c_start();
//Send Slave address + WRITE command
i2c_write((SLAVE_ADD<<1)|WRITE);
// ((SLAVE_ADD<<1)| WRITE) = ((0x68<<1)|0) = 0xD0
//Send register address (register of Slave – the first register need to read data)
i2c_write(0x00);
//ReStart condition
i2c_stop();
i2c_start();
//Send Slave address + READ command
i2c_write((SLAVE_ADD<<1)|READ);
// ((SLAVE_ADD<<1)| READ) = ((0x68<<1)|1) = 0xD1
//read data
sec = i2c_read(0); //read from 0x00 & ACK
min = i2c_read(0); //read from 0x01 & ACK
hour = i2c_read(0); //read from 0x02 & ACK
day = i2c_read(0); //read from 0x03 & ACK
date = i2c_read(0); //read from 0x04 & ACK
month = i2c_read(0); //read from 0x05 & ACK
year = i2c_read(1); //read from 0x06 & NACK
//Send Stop condition
i2c_stop();
}
1. Giao tiếp với DS1307, ghi và đọc và hiển thị thời giac thực lên LCD.
2. Sử dụng Module còn lại của mạch I2C&TRIAC, thực hành kích Triac và đóng cắt tải AC. Có thể kết hợp đóng cắt có hẹn giờ với giờ đọc được từ DS1307. Báo tình trạng tải qua Led hoặc LCD. Các bạn chỉ cần cho chân điều khiển lên 1 là kích được Triac. Xem kĩ schematic để biết chỗ cắm VCC, GND, chân điều khiển, chỗ vào ra của dây nối tải AC.
Note: Các bạn cần cẩn thận khi làm việc trực tiếp với điện AC 220V nha.
3. Bài này nhằm tận dụng thời gian nghỉ khá dài của các bạn ;) (nghe đồn thi một mạch xong nghỉ mà ) ) . Chúng ta sẽ làm luôn phần UART: sử dụng Terminal làm giao diện trên máy tính, ghi và đọc thời gian từ DS1307 thông qua PIC .
Phần code của UART khá đơn giản, các bạn download 2 file uart.c và uart.h đính kèm. Việc giao tiếp với máy tính được thực hiện qua các hàm:
Code:
void uart_init();
void uart_putc(char c);
void uart_puts(const char *s);
char uart_getc(); // Get 1 char from RX, result stored as function's name
void uart_gets(char *s); // Get string from RX
Như vậy, phần code UART không khó, cái khó chính là mạch phần cứng giao tiếp. Các bạn đọc kĩ bài này nhé:
http://www.payitforward.edu.vn/forum/threads/49/
Có nhiều giải pháp cho các bạn, mình đề xuất là nếu dùng PL2303 thì tự làm mạch, nếu dùng FT232 thì đi mua cho khỏe nhé.
Có mạch rồi, kết nối như thế nào thì còn tùy phần cứng của bạn. Phía PIC thì cần 2 chân TX (C6), RX (C7) (main có module UART đó), qua mạch giao tiếp vào máy tính. Máy tính sẽ nhận mạch giao tiếp của bạn như một cổng COM, các bạn vào Run >> devmgmt.msc để biết là COM số mấy (cắm vô rút ra là biết). Nhớ cài driver cho chip giao tiếp nhé
Phía máy tính, ta dùng Terminal để giao tiếp. Bản mới nhất, các bạn có thể tìm ở:
Code:
http://www.virtualserialport.com/products/serial-port-terminal/
Code:
http://www.mediafire.com/?xd6gnf15b7765ox
Code:
Port: COMx // xem trong [I]Run >> devmgmt.msc[/I]
Baudrate: 19200
Data bits: 8
Parity: None
Stopbits: 1
Flow control: None
[C5] [BT10] [N.] _Họ tên_ ...
Nhớ đổi N. thành N1, N2, N3 ,... .Giữ nhóm như cũng nhé :oÀ, xin nhắc lại, lớp mình vẫn điểm danh theo bài tập, các bạn nhớ làm bài đầy đủ. Danh sách chia nhóm và theo dõi bài tập, các bạn download ở:
Code:
http://www.mediafire.com/?cmf7229cwsd4hvy
Cuối cùng, chúc các bạn thi giữa kì vui vẻ và may mắn! )
Attachments
-
1.6 KB Views: 45