Thông báo

Collapse
No announcement yet.

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
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • 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


    • 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


      • 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


        • 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


          • à 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


            • 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


              • Thank linhnc308 billion times

                Comment


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

                  Comment


                  • 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, 15:46.

                    Comment


                    • 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


                      • 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


                        • 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


                          • 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


                            • 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


                              • 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, 14: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...
                                X