Thông báo

Collapse
No announcement yet.

Adc_voi_pic_16f877a

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

  • Adc_voi_pic_16f877a

    Chào các bác!
    các bác cho em hỏi ti!
    em dùng pic16f877a nhưng em gặp vấn đề là!
    khi đọc ADC một kênh thì làm được!
    nhưng khi em muốn đọc nhiều hơn 1 kênh (2,3 kênh hoặc nhiều hơn) thì em không làm được!
    mong các bác chỉ giúp!
    các bác có đoạn code nào thì porst lên cho em với!
    thanks!@

  • #2
    PIC16F877 chỉ có 1 Modul ADC. Khi bạn cần chuyển đổi các chân tín hiệu vào cần đo ( Kênh ) thì bạn cần chú ý đến mấy thanh ghi cơ bản sau là ổn : Thanh ghi TRISx tương ứng với chân mà bạn chọn chân đó là tín hiệu Analog cần đo. Giá trị TRISx này cần phải set lên 1. Tiếp đến là các thanh ghi ADCON0 và ADCON1. khi bạn đọc kênh khác thì bạn phải chắc chắn là các thanh ghi trên đã được xác lập với giá trị thích hợp.
    Tốt nhất bạn nên Post code lên thì sẽ rõ hơn.

    Kích từ, điều tốc, nhiệt độ , mức dầu, bảo vệ, đo mực nước, thông báo lũ...cho nhà máy Thủy Điện

    Comment


    • #3
      Nguyên văn bởi tran truong Xem bài viết
      Chào các bác!
      các bác cho em hỏi ti!
      em dùng pic16f877a nhưng em gặp vấn đề là!
      khi đọc ADC một kênh thì làm được!
      nhưng khi em muốn đọc nhiều hơn 1 kênh (2,3 kênh hoặc nhiều hơn) thì em không làm được!
      mong các bác chỉ giúp!
      các bác có đoạn code nào thì porst lên cho em với!
      thanks!@
      Đã trả lời một câu hỏi tương tự ở picvietnam rồi, bạn xem ở đây nhé (post #7 và #8):
      http://www.picvietnam.com/forum//showthread.php?p=18426

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

      Comment


      • #4
        Đoạn code sau khi thay đổi trị CHANEL bạn sẽ thay đổi kênh ADC


        HTML Code:
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        	;CAC BIEN DUNG CHO ADC
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        CHANEL				;BIEN LUU TRI SO CHANEL :	.0	.1	.2	.3	.4	
        TEMP_ISR			;Bien trung gian
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        .
        .
        .
        .
        .
        .
        
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        							;CHUONG TRINH DOC ADC : READ_ANALOG
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        READ_ANALOG
        
        					MOVLW	.4
        					MOVWF	PCLATH
        					MOVF	CHANEL, W				;THIET LAP CHANEL TREN ADCON0
        					CALL	TABLE_CHANEL
        
        					MOVWF	ADCON0		
        					BSF		ADCON0,ADON				;DAT ADC O CHE DO : ON
        					MOVLW	.70
        					MOVWF	TEMP_ISR
        ACQUILOOP			DECFSZ	TEMP_ISR,F
        					GOTO	ACQUILOOP
        					BSF		ADCON0,GO				;SET BIT COLAYMAU : GO =1
        CONVERTLOOP			BTFSC	ADCON0,GO				;CHO DEN KHI PHAN CUNG XOA BIT COLAYMAU : GO =0
        					GOTO	CONVERTLOOP
        					BSF		STATUS,RP0				;QUA BANK1
        					MOVF	ADRESL,W				;LAY GIA TRI KET QUA BYTE THAP VAO W
        					BCF		STATUS,RP0				;TRO VE BANK0
        					MOVWF	L_BYTE					;LUU W VAO L_BYTE
        					MOVF	ADRESH,W
        					MOVWF	H_BYTE					;LUU GIA TRI BYTE CAO VAO H_BYTE
        					BCF		ADCON0,ADON				;DAT ADC VE CHE DO : OFF
        
        
        EXIT_ANALOG			RETURN
        
        
        
        				ORG	400
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ;									PHU LUC
        ;	CAC BANG DUNG TRONG TINH TOAN:
        ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        TABLE_CHANEL
        					ADDWF	PCL, F
        					RETLW	B'10000000'		;CHANEL=0
        					RETLW	B'10001000'		;CHANEL=1
        					RETLW	B'10010000'		;CHANEL=2
        					RETLW	B'10100000'		;CHANEL=3
        					RETLW	B'10101000'		;CHANEL=4

        Comment


        • #5
          Vâng cảm ơn các bác!
          em thử làm xem sao????

          Comment


          • #6
            setup_adc_ports(AN0_AN1_AN3);
            setup_adc(ADC_CLOCK_INTERNAL);

            Nếu muốn đọc toàn bộ, thì dùng lệnh setup_adc(ALL_ANALOG).
            Lệnh trên cho CCS sẽ setup Adc đọc 3 kênh.
            Đọc giá trị từng kênh:
            Code:
            set_adc_channel(0);  // chọn kênh 0
            delay_us(10);
            adc0 = read_adc();
            
            set_adc_channel(1);  // chọn kênh 1
            delay_us(10);
            adc1 = read_adc();
            Bám vào phần Help của CCS để nắm hết các lệnh, hàm.
            Ethernet-RS232, PIC Webserver, RFID Reader
            CallerID, Cảnh báo BTS, ...
            0988006696
            linhnc308@gmail.com
            http://linhnc308.blogspot.com

            Comment


            • #7
              Vâng!
              nhưng em có đoạn code thế này! Em dùng 6 kênh analog còn chân ra2 làm vref-, ra3 làm vref+; không biết sai ở đâu mà không sao đọc được! khi hiển thị lên lcd thì chỉ thấy hiện các số cố định. khi thay đổi biến trở đê thay đổi điện áp đầu vào thì vẫn không có hiện tượng gì????
              các bác giúp em với!
              thanks!
              Code:
              #include <16f877a.h>
              #include <def_877a.h>
              #device *16ADC =8
              #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
              #use delay(clock=8000000)
              #include <lcd_lib_4bit.c>
              #include <math.h> 
              
              float value1,value2;
              int16 a,b;
              int8 a1,a2,a3,a4,b1,b2,b3,b4;
              void main()
              {
              trisa=0x3f;
              trise=0x07;
              
                setup_adc_ports(AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF );
              //  setup_adc(ADC_CLOCK_INTERNAL);
               setup_adc(ADC_CLOCK_DIV_2); 
              while(1)
              {
               set_adc_channel(0);
                 delay_ms(1);
               value1 = (float)read_adc();
               delay_ms(1);
               a=(int16)(value1*5000)/255;
               a1= a/1000+48;
               a2=(a-a1*1000)/100+48;
               a3=(a-a1*1000-a2*100)/10+48;
               a4= (int8)a%10+48;
               lcd_putcmd(0x80);
                  lcd_putchar(a1);
                  lcd_putchar(a2);
                  lcd_putchar(a3);
                  lcd_putchar(a4);
               set_adc_channel(2);
                 delay_ms(1);
              value2 = (float)read_adc();
                delay_ms(1);
               b=(int16)(value2*5000)/255; 
               b1= b/1000+48;
               b2=(b-b1*1000)/100+48;
               b3=(int8)(b-b1*1000-b2*100)/10+48;
               b4= (int8)b%10+48;
                lcd_putcmd(0xC0);
                  lcd_putchar(b1);
                  lcd_putchar(b2);
                  lcd_putchar(b3);
                  lcd_putchar(b4);
                  delay_ms(300);
               lcd_putcmd(0x01); 
              }
              }
              Last edited by tran truong; 29-08-2008, 23:20.

              Comment

              Về tác giả

              Collapse

              tran truong Tìm hiểu thêm về tran truong

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

              Collapse

              • tuyennhan
                Trả lời cho Tiếng Anh cho người Việt
                bởi tuyennhan
                Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                hôm nay, 07:44
              • 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
              Đang tải...
              X