Công cụ học tập và phát triển cho PIC - Hoàn toàn miện phí

Collapse
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • tc8051
    Thành viên tích cực
    • Mar 2008
    • 263

    #106
    Anh Linh đừng giận chị Lanhuong thế chứ.
    Có lẻ chị ấy chỉ đùa tí để chọc anh thôi.
    Mình thấy chị ấy nói chuyện cũng dễ thương lắm mà.(Ko biết chính xác ko nũa hay chỉ là cảm tính thôi.Vì chưa có diệp đọc bài chị ấy nhiều.Hahaha).
    Chúc cả nhà cuối tuần vui vẻ!

    Comment

    • tallht
      Thành viên mới
      • Apr 2008
      • 361

      #107
      Nguyên văn bởi tc8051 Xem bài viết
      cảm ơn anh tallht nhe.
      Nhưng mình mở file anh ko được rồi anh ơi.
      Ko biết do máy mình hay sao ấy.
      Nó thường mở các file ko được và báo các hộp thoại liên kết ổ đĩa c gì đó.
      bạn mở ổ c ra tìm trong file thư mục của mplab cái file p16f877a.inc là ok mà!
      SỰ HỌC LÀ MÃI MÃI......!!!!

      Comment

      • linhnc308
        Moderator
        • Aug 2005
        • 1084

        #108
        Nguyên văn bởi tc8051 Xem bài viết
        Anh Linh đừng giận chị Lanhuong thế chứ.
        Có lẻ chị ấy chỉ đùa tí để chọc anh thôi.
        Mình thấy chị ấy nói chuyện cũng dễ thương lắm mà.(Ko biết chính xác ko nũa hay chỉ là cảm tính thôi.Vì chưa có diệp đọc bài chị ấy nhiều.Hahaha).
        Chúc cả nhà cuối tuần vui vẻ!
        Ai nói anh giận nào. A rất khâm phục chị LH vì những gì mà chị ấy làm được. Anh thấy mình còn kém cỏi, phải học tập nhiều. Những ý tưởng, những vấn đề LH đưa ra rất gần với thực tế. Điều đó rất quan trọng và là cái mà anh cần phải học. Không ai giận ai gì cả, chỉ là cùng nhau góp sức cho diễn đàn phát triển và thực sự có ích.
        Ethernet-RS232, PIC Webserver, RFID Reader
        CallerID, Cảnh báo BTS, ...
        0988006696
        linhnc308@gmail.com
        http://linhnc308.blogspot.com

        Comment

        • sonbinh1507
          Thành viên mới
          • Sep 2008
          • 29

          #109
          thank bac linhnc308 nhieu. do em dang lam do an tot nghiep kit thuc tap pic nen can nhieu tai lieu ve pic. ma thời giantimf hiểu píc thì có hạn nên phải nhờ các bác đi trước. em còn một vấn đè nữa là bác linhnc308 có biết ở đâu bán con pic 18f2550 không, chỉ em mua mới. em tìm ở chợ nhật tảo không thấy.

          Comment

          • sonbinh1507
            Thành viên mới
            • Sep 2008
            • 29

            #110
            à mà bác linh ơi. đề tài cỉa em giao tiếp với 24c04 chỉ đơn giản là ghi một dữ liệu vàn 24c04. ví dụ như trên bàn phím số hex nhấn số 1, số 1 đó lưu vao 24c04. tắt nguồn và mở lại thì lấy dữ liệu trong eeprom ra hiển thi ra ngoài, ví du led ma trân hay lcd,7doan... bác có thể gợi ý không

            Comment

            • daominhchien
              Thành viên tích cực
              • Jul 2008
              • 452

              #111
              linhnc308 nhiệt tình quá mà các cao thủ đâu hết chả thấy fót bài, chỉ tiếc tui k0 bít gì về Pic...
              Tôi thích cái cầu kỳ của kỹ thuật
              Nhưng ghét mọi phức tạp trong tính cách con người

              Comment

              • Xtronic
                Thành viên mới
                • Sep 2008
                • 6

                #112
                Thank linhnc308 billion times

                Comment

                • sonbinh1507
                  Thành viên mới
                  • Sep 2008
                  • 29

                  #113
                  co ve các bac cung khong biêt nhiu ve giao tiep eeprom nhi. em lai cang khong. hic hic

                  Comment

                  • Xtronic
                    Thành viên mới
                    • Sep 2008
                    • 6

                    #114
                    mình đang cần sử dụng 1 con DS1337 (clock), và sử dụng PIC16f877 để giao tiếp, mình cần đọc thời gian từ DS1337. mình sử dụng IAR Embeded Workbench software. trong đoạn code dưới mình đả thay đổi tên PortB0, PortB1 thành scl và sda trong thư viện của con PIC, khi compile không thấy có lổi gì nhưng không thể giao tiếp giửa DS1337 và PIC16f877.
                    Có bác nào biết em sai ơ đâu ko ạ? Thank in advance!
                    Code:
                    #include <io16f877.h>
                    #define ACK 0
                    #define NACK 1
                    #define ADDRTC 0x68          /* I2C slave address*/
                    #define DS1337
                    
                    
                    //#define scl RB0;
                    //#define sda RB1;
                    
                    void I2C_start();
                    void I2C_stop();
                    void I2C_write(unsigned char d);
                    unsigned char I2C_read(unsigned char);
                    
                    void initialize(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char);
                    
                    void clock_read(unsigned char, unsigned char, unsigned char, unsigned char);
                    
                    void I2C_start()
                     {
                     sda = 1; scl = 1;
                     sda=0;
                     }
                    
                    void I2C_stop()
                     {
                     sda = 0; sda = 0; sda = 0; sda = 0;
                     scl = 1; scl = 1; sda = 1; 
                     }
                     
                    void I2C_write(unsigned char d)
                     {
                     unsigned char i;
                        scl = 0;
                     for(i=1; i<=8; i++)
                       {
                       sda = (d>>7);
                       scl = 1;
                       d = d<<1;
                       scl = 0;
                       }
                       sda = 1;//don't understand....
                       scl = 0;
                       scl = 1;
                       // if(sda) prinf("Ack bit missing")->????????????????????????????????
                       scl = 0;
                     }
                     
                    unsigned char I2C_read(unsigned char b)
                      {
                      unsigned char d, i;
                        sda = 1;
                        scl = 0;
                        for(i=1; i<=8; i++)
                           {
                           scl = 1;
                           d = d<<1;
                           d = d | (unsigned char) sda;
                           scl = 0;
                           } 
                           sda = b;
                           scl = 0;
                           scl = 1;
                           if (b == NACK) sda = 1;/*sda = 1 if next cycle is reset*/
                           scl = 0;
                           sda = 1;
                           return d;
                      } 
                     
                    void initialize(unsigned char yr, unsigned char mn,  unsigned char dt, unsigned char dy,  unsigned char hr, unsigned char min,  unsigned char sec)
                      {
                      I2C_start();
                      I2C_write(ADDRTC);
                      I2C_write(0x00);
                      I2C_write(0x00);
                      I2C_stop();
                      
                      I2C_start();
                      I2C_write(ADDRTC);
                      I2C_write(0x00);
                      I2C_write(sec);
                      I2C_write(min);
                      I2C_write(hr);
                      I2C_write(dy);
                      I2C_write(dt);
                      I2C_write(mn);
                      I2C_write(yr);
                      
                      I2C_start();
                      I2C_write(ADDRTC);
                      I2C_write(0x0e);
                      I2C_write(0x20);
                      I2C_write(0);
                      
                      I2C_stop();
                      }  
                    
                    void clock_read(unsigned char s, unsigned char m, unsigned char h, unsigned char dd)
                      {
                        I2C_start();
                        I2C_write(ADDRTC);
                        I2C_write(0);
                        I2C_write(ADDRTC|1);
                        s = I2C_read(ACK);
                        m = I2C_read(ACK);
                        h = I2C_read(ACK);
                        dd = I2C_read(NACK);
                        
                      }
                    void main()
                    {
                    unsigned char s, m, h, dd;
                    unsigned char sec = 0, min = 0, hr = 0, dy = 1, dt = 1, mn = 01, yr = 0;
                    initialize(yr,mn,dt,dy,hr,min,sec);
                    TRISC = 0x00;
                    //TRISD = 0xFF;
                    while(1)
                      { 
                         clock_read(s,m,h,dd);
                          if(s > 3) RC0 = 1;
                          else RC0 = 0;
                      }//end while
                    
                    }//end main
                    Last edited by linhnc308; 24-09-2008, 14:46.

                    Comment

                    • Zz_Bi_zZ
                      Thành viên tích cực
                      • Nov 2007
                      • 766

                      #115
                      Nguyên văn bởi sonbinh1507 Xem bài viết
                      à mà bác linh ơi. đề tài cỉa em giao tiếp với 24c04 chỉ đơn giản là ghi một dữ liệu vàn 24c04. ví dụ như trên bàn phím số hex nhấn số 1, số 1 đó lưu vao 24c04. tắt nguồn và mở lại thì lấy dữ liệu trong eeprom ra hiển thi ra ngoài, ví du led ma trân hay lcd,7doan... bác có thể gợi ý không
                      trong PIC có sẵn bộ eeprom tích hợp oy , * u 0 lấy ra dùng mà phải mua thêm 24cxx ?

                      Comment

                      • sonbinh1507
                        Thành viên mới
                        • Sep 2008
                        • 29

                        #116
                        bài tập ma các bác. em đang làm đồ án tốt nghiệp có giao tiếp với 24cxx nên mới hỏi các bác. mong các bác giúp đỡ

                        Comment

                        • linhnc308
                          Moderator
                          • Aug 2005
                          • 1084

                          #117
                          bài tập ma các bác. em đang làm đồ án tốt nghiệp có giao tiếp với 24cxx nên mới hỏi các bác. mong các bác giúp đỡ
                          Để làm được cũng không quá khó. Trong 24Cxx lấy một địa chỉ làm nơi ghi dữ liệu. Ví dụ:
                          DATA_ADDR = 0x00

                          Trong chương trình, đầu tiên check DATA_ADDR xem có bằng 0xFF hay không, nếu bằng thì hiển thị giá trị 0, nếu khác thì hiển thị giá trị đọc được từ EEPROM.
                          Mặc đinh khi chưa ghi vào EEPROM thì giá trị đọc tại địa chỉ DATA_ADDR là 0xFF

                          // main
                          temp = read_24Cxx(DATA_ADDR);
                          If(temp != 0xFF)
                          {
                          // Hiển thị giá trị temp lên LCD, hay LED7
                          }
                          else // Chưa có dữ liệu, mặc định hiển thị 0
                          {
                          temp = 0;
                          // hiển thị lên LCD
                          write_24Cxx(DATA_ADDR,0); // hàm ghi data vào 24Cxx, bạn tự xây dựng hàm
                          }
                          Ethernet-RS232, PIC Webserver, RFID Reader
                          CallerID, Cảnh báo BTS, ...
                          0988006696
                          linhnc308@gmail.com
                          http://linhnc308.blogspot.com

                          Comment

                          • Xtronic
                            Thành viên mới
                            • Sep 2008
                            • 6

                            #118
                            bác nào đã dùng DS1337 giúp em với, em không hiểu tại sao đọc giá trị của giây từ DS1337 nó ở trong khoảng từ 0->80(hay 81, 82 gì đó), và giá trị của Phút sẻ tăng 1 khi giá trị giây vượt qua 80. sau đây là code của em, em sử dụng MiKroC viết cho PIC16F778
                            Thank các bác trước.

                            Code:
                            #define DS1337_HWAddress 0xD0      // Hardware address of the RTC
                            #define DS1337_Port      PORTC     // Data port for the DS1337
                            #define DS1337_SCLPin    0x03      // SCL port for the DS1337
                            #define DS1337_SDAPin    0x04      // SDA port for the DS1337
                            #ifndef HIGH
                            #define HIGH 1
                            #endif // HIGH
                            
                            
                            unsigned char DS1337_Read(unsigned char Addr)
                            {
                              unsigned char AddrBuff;
                            
                              AddrBuff=DS1337_HWAddress;
                              Soft_I2C_Start();                       // Issue I2C start signal
                              Soft_I2C_Write(AddrBuff);               // Send hardware address for writting
                              Soft_I2C_Write(Addr);                   // Send the data address
                              Soft_I2C_Start();
                              AddrBuff.F0=HIGH;                       // Configure the data direction bit for reading
                              Soft_I2C_Write(AddrBuff);               // Send device address
                              AddrBuff=Soft_I2C_Read(0x00);           // Read the byte from the slave and NACK to end comms
                              Soft_I2C_Stop();                        // Free up the bus
                            
                              return(AddrBuff);
                            }
                            void DS1337_Write(unsigned char Addr, unsigned char Data)
                            {
                              Soft_I2C_Start();                       // Issue I2C start signal
                              Soft_I2C_Write(DS1337_HWAddress);       // Send hardware address for writting
                              Soft_I2C_Write(Addr);                   // Send low byte of the data address
                              Soft_I2C_Write(Data);                   // Send the data
                              Soft_I2C_Stop();                        // Free the bus
                            
                              return;
                            }
                            void init_clock(unsigned char bSec,unsigned char bMin, unsigned char bStd, unsigned char bDat, unsigned char bMon, unsigned char bYear)
                            {
                              bSec = (((bSec / 10) << 4) & 0xF0) + ((bSec-(bSec / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x00, bSec);
                              bMin = (((bMin / 10) << 4) & 0xF0) + ((bMin-(bMin / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x01, bMin);
                              bStd = (((bStd / 10) << 4) & 0xF0) + ((bStd-(bStd / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x02, bStd);
                            
                              bDat = (((bDat / 10) << 4) & 0x30) + ((bDat-(bDat / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x04, bDat);
                              bMon = (((bMon / 10) << 4) & 0x10) + ((bMon-(bMon / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x05, bMon);
                              bYear = (((bYear / 10) << 4) & 0xC0) + ((bYear-(bYear / 10) * 10) & 0b00001111);
                              DS1337_Write( 0x06, bYear);
                            
                              //delay_ms( 2000);
                            }
                            void main()
                            {
                            unsigned char sec;
                            TRISB = 0xFF ; //portB as input.
                            TRISC = 0xFF;
                            TRISD = 0x00 ; //portD as output.
                            PORTD = 0; //clear Port D
                            Soft_I2C_Config(&DS1337_Port, DS1337_SDAPin, DS1337_SCLPin);
                            init_clock(0,0,0,18,7,8);
                            
                            while(1)
                            {
                             PORTD.F0=PORTB.F0;
                             sec=DS1337_Read(0);
                             if(sec<=62)
                             PORTD.F1=0;
                             else PORTD.F1=1;
                            }//end while
                            }//end main

                            Comment

                            • MinhHa
                              Thành viên tích cực
                              • Jul 2005
                              • 1113

                              #119
                              khoảng từ 0->80(hay 81, 82 gì đó),
                              89 chứ nhỉ?
                              Kiểm tra lại nhé. 89 là đúng đấy chứ sai gì đâu. Nó theo BCD mà
                              Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

                              Biến tần
                              Máy giặt
                              Lò vi sóng
                              Bếp từ.
                              Tủ lạnh.
                              Điều hòa

                              Comment

                              • Xtronic
                                Thành viên mới
                                • Sep 2008
                                • 6

                                #120
                                thank bác MinhHa!em check lại thì thằng second đúng là tầm 89. em thay unsigned char sec bằng int secsec=DS1337_Read(0); bằng sec=(int)DS1337_Read(0); nhưng hiện tượng vẫn thế. bác có cách j giúp em với, con clock của em 1 phút = gần 90 giây. Thank for reply!
                                Last edited by Xtronic; 04-10-2008, 13:59.

                                Comment

                                Về tác giả

                                Collapse

                                linhnc308 Tìm hiểu thêm về linhnc308

                                Bài viết mới nhất

                                Collapse

                                Đang tải...