|
Tài trợ cho PIC Vietnam |
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 |
|
Ðiều Chỉnh | Xếp Bài |
|
13-05-2008, 05:41 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
Hỏi về DS1307
Em đang làm cái bài tập lớn trongddos cần 1 phần hiển thị thời gian, em dùng CCS, có bác nào biết cách khởi tao giá trị thời gian ban đầu cho DS1307 không ạ, cho em kinh nghiệm với, em định gán nó vào biến rồi i2c_write vào mà không đc, cho ra led đồng hồ không chạy.Giúp em với nhé các bác
|
13-05-2008, 05:51 PM | #2 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
cho em đoạn code lúc ví dụ mnhf thiết lập cho đồng hồ bây giwof là 16h ngày 13-05-08 ấy nha các bác.
Chờ hồi âm... |
15-05-2008, 03:32 PM | #3 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
chán quá không ai giúp em được ah, chắc tịa ulongf này nhiều chú ý quá :
|
15-05-2008, 04:46 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 5
: |
Thuật toán ghi DS1307: start i2c
ghi 0xD0 ghi địa chỉ start ghi 0xD0 ghi giây, phút, giờ, ngày... stop i2c Đấy là VDK của bạn hỗ trợ giao tiếp I2C, nếu không thì bạn phải xây dựng chương trình riêng. Chúc thành công |
17-05-2008, 10:35 PM | #5 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
|
20-05-2008, 01:28 AM | #6 | |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
Trích:
- Start_i2c(); - ghi 0xD0 // Write - ACK rùi mới ghi đia chỉ - tiếp ACK , rùi ghi tiếp giá trị - stop_i2c(); trình tự của u : sau khi ghi điạ chỉ xong , start lại . Vậy start chỗ này có ý nghĩa gì ?Tui ko bit các hàm start_i2c(0, stop_i2c() của CCS nằm ở đâu cả , nên ko hỉu trong 2 hàm đó ng ta viết cái gì ? |
|
16-05-2008, 08:21 PM | #7 |
Đệ tử 2 túi
Tham gia ngày: Dec 2006
Nơi Cư Ngụ: HN
Bài gửi: 39
: |
có sẵn thư viện cho CCS C cho bạn đây.
Have fun thay đổi nội dung bởi: HTAluvBeBeo, 18-05-2008 lúc 08:04 PM. |
17-05-2008, 10:26 PM | #8 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
bạn ơi nhầm link rồi
|
18-05-2008, 10:10 AM | #9 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 5
: |
Bạn đưa code lên tôi mới biết được bạn sai ở chỗ nào chứ?
|
18-05-2008, 08:04 PM | #10 |
Đệ tử 2 túi
Tham gia ngày: Dec 2006
Nơi Cư Ngụ: HN
Bài gửi: 39
: |
|
22-05-2008, 11:10 AM | #11 |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
có ai bit 2 hàm start_i2c() stop_i2c() viết gì ko ? nó ko chỉ đơn thuần là khởi động & kết thúc gửi nhận data phải ko ? để bit chi tiết 2 hàm này , vào đâu để xem chúng ?
|
13-06-2008, 04:10 PM | #12 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 11
: |
làm mãi mà vẫn khong thiết lập được chán ghê, có bác nào giúp cho tiểu đệ 1 đoạn code để khởi taịo cho ds1307 giá trị đầu và nó chạy luôn mà không cần nút chỉnh bên ngoài không nhỉ? Em dung pic 16F877a và CCS
|
15-06-2008, 12:02 PM | #13 | |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
Trích:
Code:
#include <16F877A.h> #fuses NOPROTECT,HS,NOWDT,NOLVP,NODEBUG,NOPUT #use delay(clock =20000000) #use i2c(master,fast,sda=PIN_C4,scl=PIN_C3) #define mode RE0 #define change RE1 #define IR RE2 // 0 1 2 3 4 5 6 7 8 9 unsigned char const maled[10] = {0x01,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80,0x04}; unsigned char sec,min,hour,dow,date,month,year; // bien data trong RTC unsigned char day1,day2,month1,month2,year1,year2,hour1,hour2,min1,min2,sec1,sec2; // bien xuat data unsigned char hour_wait1,hour_wait2,min_wait1,min_wait2; unsigned char i=0; unsigned int var_IR=0; //------------ham thu tin hieu Sony------------------------ void scan_IR() { if (!IR) { delay_ms(1); if(!IR){ RB1= RB2 = 1 ; // tat 2 led while(!IR) continue ; // trong khi IR van muc 0 thi wait de doi sang muc 1 while(IR) continue ; // neu IR chuyen sang muc 1 thi wait tiep delay_us(750); for(i=1;i<=12;i++) { //if(IR==0){ bit_set(var_IR,i) ; }; //if(IR!=0){ bit_clear(var_IR,i); }; if(IR==0){ (var_IR ||0x01)<<i; }; if(IR!=0){ (var_IR ||0x01)<<i; }; while(!IR) continue ; while(IR) continue ; delay_us(750); }; }; }; } void test_IR() { for(i=0;i<=12;i++) { if(bit_test(var_IR,i)==1) {RB1 = 0 ;delay_ms(1000); // bat led day1 RB1 = 1 ;delay_ms(1000); }; if(bit_test(var_IR,i)==0) {RB2 = 0;delay_ms(1000); // bat led day2 RB2 = 1;delay_ms(1000); }; }; } //++++++++++++++++++++++++++++++++++++++++++++++++++++ //------------ cac ham lien quan den RTC-------------------- void init_time() { I2C_start(); // gui bit start I2C_write(0xD0); // gui lenh write I2C_write(0x07); // den dia chi 07H de I2C_write(0x10); // cau hinh cho thanh ghi 07H I2C_stop(); I2C_start(); I2C_write(0xD0); I2C_write(0x00); // dia chi 00h I2C_write(0x00); // nap gia tri cho thanh ghi giay = 0 , dong thoi xoa bit CH I2C_write(0x01); // cho thanh ghi phut = 1 I2C_write(0x11); // chon mode 24h cho thanh ghi gio & nap gia tri la 11h I2C_write(0x02); // thu 2 I2C_write(0x15); // ngay 15 I2C_write(0x06); // thang 6 I2C_write(0x08); // nam 2008 , nhap gia tri 2 so cuoi cua nam i2c_read(0); I2C_stop(); } void up_date1307() { } void update_time() {I2C_start(); I2C_write(0xD0); // gui lenh ghi I2C_write(0x00); // dia chi bat dau I2C_start(); I2C_write(0xD1); // gui lenh doc sec=i2c_read(1); min=i2c_read(2); hour=i2c_read(3); dow =i2c_read(4); date=i2c_read(5); month=i2c_read(6); year=i2c_read(7); i2c_read(0); i2c_stop(); sec1 = sec & 0x0F; sec2 = (sec & 0xF0)>>4; min1 = min & 0x0F; min2 = (min & 0xF0)>>4; hour1 = hour & 0x0F; hour2 = (hour & 0xF0)>>4; day1 = date & 0x0F ; day2 = (date & 0xF0)>>4; month1= month & 0x0F ; month2= (month & 0xF0)>>4; year1 = year & 0x0F ; year2 = (year & 0xF0)>>4; } #int_ext void read_time() { I2C_start(); I2C_write(0xD0); I2C_write(0x00); // xoa bit CH I2C_start(); I2C_write(0xD1); sec = I2C_read(0x00); I2C_stop(); if(sec==0) update_time(); sec1 = sec & 0x0F;// lay 4 bit thap sec2 = (sec & 0xF0) >> 4 ; } void display() { PORTD = maled[sec1] ;RC6=0 ; delay_us(50); RC6=1 ; PORTD = maled[sec2] ;RC5=0 ; delay_us(50); RC5=1 ; PORTD = maled[min1] ;RC2=0 ; delay_us(50); RC2=1 ; PORTD = maled[min2] ;RC1=0 ; delay_us(50); RC1=1 ; PORTD = maled[hour1];RB7=0 ; delay_us(50); RB7=1 ; PORTD = maled[hour2];RC0=0 ; delay_us(50); RC0=1 ; PORTD = maled[day1]; RB2=0 ; delay_us(50); RB2=1 ; PORTD = maled[day2]; RB1=0 ; delay_us(50); RB1=1 ; PORTD = maled[month1];RB4=0; delay_us(50); RB4=1 ; PORTD = maled[month2];RB3=0; delay_us(50); RB3=1 ; PORTD = maled[year1];RB6=0 ; delay_us(50); RB6=1 ; PORTD = maled[year2];RB5=0 ; delay_us(50); RB5=1 ; } main() { set_tris_A(0b0000000); PORTA = 0b00001111; set_tris_B(0b00000001); PORTB = 0b11111111; // tat led 1-9 set_tris_C(0b00011000); PORTC = 0b11100111; set_tris_D(0x00); PORTD = 0xFF; set_tris_E(0xFF); PORTE = 0xFF; delay_ms(500); init_time(); GIE = 1; // cho phep ngat xay ra enable_interrupts(int_ext); ext_int_edge(H_to_L); while(1) {display(); }; } thay đổi nội dung bởi: Mr.Bi, 15-06-2008 lúc 12:07 PM. |
|
16-06-2008, 11:49 PM | #14 |
Đệ tử 1 túi
Tham gia ngày: Jul 2007
Bài gửi: 22
: |
Trong void init_time() bạn viết là:
Code:
I2C_write(0x15); Nếu muốn ghi khởi tạo là ngày 15 thì phải viết là Code:
I2C_write(15); Code:
I2C_write(0x0F); |
16-06-2008, 11:52 PM | #15 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|