Thông báo

Collapse
No announcement yet.

[SPI] Giúp đỡ giao tiếp adc mcp3204 với pic24fj128ga010

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [SPI] Giúp đỡ giao tiếp adc mcp3204 với pic24fj128ga010

    Minh đang tìm cách giao tiếp MCP3204 với pic24fj128ga010
    rồi đưa data vào ram nội
    nhưng chưa được
    bạn nào giúp minh với
    đang cần gấp
    cám ơn trước

  • #2
    Con chip MCP3204 là ADC với giao tiếp SPI nên rất thích hợp dùng với PIC. Việc giao tiếp trở nên dễ dàng vì PIC đã hỗ trợ phần cứng giao tiếp SPI.
    Bạn xem kỹ datasheet của MCP3204 nhất là đoạn từ trang 19 phần nói về serial communication để hiểu rõ các giao tiếp, xem các hình để hiểu cách thức cấp xung clock.
    Lập trình giao tiếp với MCP3204 sử dụng SPI của PIC. Hàm dạng SPI_Read(), SPI_Write()
    Tùy vào trình biên dịch là CCS hay MPLAB mà tên hàm SPI sẽ khác. Bạn thử tìm thêm qua google xem đã có project nào dùng chip này chưa.

    Dưới đây là một thư viện giao tiếp cho MCP3204 dùng ngôn ngữ C của trình biên dịch CCS, lưu lại với tên file mcp3204lib.c rồi thêm vào project, gọi hàm để dùng
    Code:
    #define MCP3204_CLK  PIN_B0
    #define MCP3204_DOUT PIN_B1
    #define MCP3204_DIN  PIN_B2
    #define MCP3204_CS   PIN_B3
    
    void adc_init() {
       output_high(MCP3204_CS);
    }
    
    void write_adc_byte(BYTE data_byte, BYTE number_of_bits) {
       BYTE i;
    
       delay_us(2);
       for(i=0; i<number_of_bits; ++i) {
          output_low(MCP3204_CLK);
          if((data_byte & 1)==0)
                output_low(MCP3204_DIN);
          else
                output_high(MCP3204_DIN);
          data_byte=data_byte>>1;
          delay_us(50);
          output_high(MCP3204_CLK);
          delay_us(50);
       }
    }
    
    BYTE read_adc_byte(BYTE number_of_bits) {
       BYTE i,data;
    
       data=0;
       for(i=0;i<number_of_bits;++i) {
          output_low(MCP3204_CLK);
          delay_us(50);
          shift_left(&data,1,input(MCP3204_DOUT));
          output_high(MCP3204_CLK);
          delay_us(50);
       }
       return(data);
    }
    
    long int read_analog_mcp(BYTE channel, BYTE mode) {
       int l;
       long int h;
        BYTE ctrl_bits;
    
       delay_us(200);
    
        if(mode!=0)
            mode=1;
    
       output_low(MCP3204_CLK);
       output_high(MCP3204_DIN);
       output_low(MCP3204_CS);
    
        if(channel==1)                    // Change so MSB of channel #
            ctrl_bits=4;                //        is in LSB place
        else if(channel==3)
            ctrl_bits=6;
        else if(channel==4)
            ctrl_bits=1;
        else if(channel==6)
            ctrl_bits=3;
        else
            ctrl_bits=channel;
    
        ctrl_bits=ctrl_bits<<1;
    
        if(mode==1)                        // In single mode
            ctrl_bits |= 1;
        else                                // In differential mode
            ctrl_bits &= 0xfe;
    
        ctrl_bits=ctrl_bits<<1;        // Shift so LSB is start bit
        ctrl_bits |= 1;
    
       write_adc_byte( ctrl_bits, 7);    // Send the control bits
    
       h=read_adc_byte(4);
       l=read_adc_byte(8);
    
       output_high(MCP3204_CS);
    
       return((h<<8)|l);
    }
    
    long int read_analog( BYTE channel )    // Auto specifies single mode
    {
       long int temp;
    
       if(channel<4)
          temp=read_analog_mcp( channel, 1);
       else
          temp=0;
    
        return temp;
    }
    
    void convert_to_volts( long int data, char volts[6]) {
       BYTE i, d, div_h, div_l;
       long int temp,div;
       
       div=4095/5;
    
       if(data>=4090)
          data=4095;
    
       for(i=0;i<=4;i++) {
         temp=data/div;
       
         volts[i]=(BYTE)temp+'0';
    
         if(i==0) {
           volts[1]='.';
           i++;
         }
         temp=div*(BYTE)temp;
         data=data-temp;
         div=div/10;
       }
       volts[i]='\0';
    }
    Last edited by linhnc308; 25-11-2008, 09:03. Lý do: Sửa ý sai, cảm anh Nam đã nhắc nhở.
    Ethernet-RS232, PIC Webserver, RFID Reader
    CallerID, Cảnh báo BTS, ...
    0988006696
    linhnc308@gmail.com
    http://linhnc308.blogspot.com

    Comment


    • #3
      Cám ơn đã trả lời về đề tài này
      nhưng mình viết trong MPLAB nhưng dịch bị báo lỗi
      mình cũng có tìm project nhưng ko có
      mong bạn giúp mình nhiều hơn
      cám ơn về code của bạn
      minh sẽ xem lại

      Comment


      • #4
        bạn nào biết cách ghi data 8bit vào bộ nhớ ram nội của pic 24 không
        giúp minh với

        Comment


        • #5
          Nguyên văn bởi tkhanh Xem bài viết
          Cám ơn đã trả lời về đề tài này
          nhưng mình viết trong MPLAB nhưng dịch bị báo lỗi
          mình cũng có tìm project nhưng ko có
          mong bạn giúp mình nhiều hơn
          cám ơn về code của bạn
          minh sẽ xem lại
          Tôi đã nói rõ với bạn là code trên dùng cho trình biên dịch CCS. Bạn viết code bằng C trên CCS thì thêm thư viện đó vào là có thể giao tiếp được.
          Nếu muốn dùng IDE là MPLAB thì trong lựa chọn trình biên dịch của MPLAB, bạn vẫn phải chọn là CCS thì mới dịch được.
          Nếu muốn dùng C18 thì bạn phải viết lại thư viện cho MC3204, có thể dựa theo code cho CCS tôi đã đưa ra./
          Ethernet-RS232, PIC Webserver, RFID Reader
          CallerID, Cảnh báo BTS, ...
          0988006696
          linhnc308@gmail.com
          http://linhnc308.blogspot.com

          Comment


          • #6
            Nguyên văn bởi linhnc308 Xem bài viết
            Tôi đã nói rõ với bạn là code trên dùng cho trình biên dịch CCS. Bạn viết code bằng C trên CCS thì thêm thư viện đó vào là có thể giao tiếp được.
            Nếu muốn dùng IDE là MPLAB thì trong lựa chọn trình biên dịch của MPLAB, bạn vẫn phải chọn là CCS thì mới dịch được.
            Nếu muốn dùng C18 thì bạn phải viết lại thư viện cho MC3204, có thể dựa theo code cho CCS tôi đã đưa ra./

            bác ơi cho em hỏi về lệnh
            shift_left(&data,1,input(MCP3204_DOUT));
            trong code bác đưa
            em ko hiểu hàm này lắm
            bác giải thích hộ em với
            thanks bác nhiều

            Comment


            • #7
              Nguyên văn bởi linhnc308 Xem bài viết
              ...
              Nếu muốn dùng C18 thì bạn phải viết lại thư viện cho MC3204, có thể dựa theo code cho CCS tôi đã đưa ra./
              Sao lại C18! Đang nói về PIC24 thì phải dùng MPLAB C Compiler for PIC24 MCUs chứ.

              Thân,
              Biển học mênh mông, sức người có hạn

              Comment


              • #8
                @tkhanh: shift_left(&data,1,input(MCP3204_DOUT)); là lệnh dịch trái 1 bit. Nó sẽ dịch bít đang có tại chân MCP3204_DOUT đưa vào biến data. Nếu đã cài CCS thì mở ra xem phần help Build-in function ý.

                @A Nam: Vâng, em lại nhầm nữa. Tại vì em chỉ làm với CCS và cũng chỉ dùng PIC 16F/18F chứ chưa phải dùng đến con dòng 24F hay 30F nào. Tiêu chí của em là cứ PIC nào rẻ và đủ chức năng thì em dùng. Nên cũng không rõ compiler cho loại này là gì,chắc là C30 vì em thấy MC có C18, C30 và C32 thì phải.
                Ethernet-RS232, PIC Webserver, RFID Reader
                CallerID, Cảnh báo BTS, ...
                0988006696
                linhnc308@gmail.com
                http://linhnc308.blogspot.com

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                • vi van pham
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi vi van pham
                  Cám ơn những lời chúc tốt đẹp của em.

                  Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                  Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                  hôm nay, 02:00
                • nhathung1101
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi nhathung1101
                  Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                  Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                  Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                  Hôm qua, 22:18
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                  Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                  Hôm qua, 14:51
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                  Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                  Hôm qua, 14:39
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                  Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                  Hôm qua, 14:28
                • bqviet
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi bqviet
                  Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                  21-02-2025, 20:26
                • mèomướp
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi mèomướp
                  Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                  21-02-2025, 12:32
                • vi van pham
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi vi van pham
                  Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                  Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                  20-02-2025, 21:31
                • bqviet
                  Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                  bởi bqviet
                  Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                  20-02-2025, 17:22
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                  Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                  20-02-2025, 11:52
                Đang tải...
                X