Thông báo

Collapse
No announcement yet.

đo điện áp, không đọc được giá trị adc

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

  • đo điện áp, không đọc được giá trị adc

    hi, chào mọi người.
    em đang làm cái vol kế sử dụng 89c52 với ADC0808 để đo điện áp 0 đến 50v DC.
    em đang trong quá trình chạy mô phỏng, và khi làm mô phỏng thì em chưa hiển thị điện điện áp lên LCD, theo như chạy mô phỏng thì em đoán ADC chưa gữi tín hiện cho VDK nên chưa hiển thị được.
    anh/chị xem giúp em có sai chỗ nào không ạ !

    file mô phỏng :http://upfile.vn/download/b71dd64b-7...e-f86419c8750d
    file code :http://upfile.vn/download/e8bb3073-4...f-bccd17b692f5
    sơ đồ mạch :http://i.upanh.com/rcbrgd
    Đây là code của em :
    Code:
    #include<AT89x52.h>
    #define	LCD	P2
    #define	RS	P0_5
    #define	RW	P0_6
    #define	E	P0_7
    
    
    #define KA		P3_0
    #define KB		P3_1
    #define KC		P3_2
    #define ALE		P3_3
    #define START	P3_4
    unsigned int ADC  ;
    unsigned char j,tr,ch,dv;
    unsigned char mtr,mch,mdv;
    unsigned char code hang1[16]={"hello"};
    unsigned char code hang2[16]={"HOANG DUC"};
    
    void delay(unsigned int x)
    {
     	unsigned int y;
    	for(y=0;y<x;y++){};
    }
    //==================================================
    // ham ma ki tu
    void mdk()
    {
    	RS=0;	RW=0;	E=1;	E=0;	delay(200);
    }
    //=======================================
    // ham  ma dieu khien
    void mkt()
    {
    	RS=1;	RW=0;	E=1;	E=0;	delay(200);	
    }
    //=====================================
    //ham khoi tao LCD
    void khoitao_lcd()
    {
    	LCD=0x38;	mdk();
    	LCD=0x38;	mdk();	delay(200); 	
    	LCD=0x06;	mdk();	delay(200); 
    	LCD=0x0c;	mdk();	delay(200); 
    	LCD=0x01;	mdk();
    }
    //=================================
    // chuyen doi  gia tri ADC sang ma ASCII
    void giaima_lcd()
    {
    	dv= ADC%10;		ADC = ADC/10;
    	ch= ADC%10;		tr	= ADC/10;
    
    	dv= dv +0x30;	ch= ch +0x30;	tr= tr +0x30;
    
    }
    //=============================================
    //hien thi 2 hang ki tu co dinh
    void hienthi_lcd()
    {
    	unsigned char i;
    	LCD=0x80;	mdk();
    	for(i=0;i<16;i++)
    	{
    		LCD=hang1[i];	mkt();
    	}
    
    	LCD=0xc0;	mdk();
    	for(i=0;i<16;i++)
    	{
    		LCD=hang2[i];	mkt();
    	}
    }
    //===================================
    // hien thi dien ap ra LCD
    void hienthi_dienap()
    {
    	LCD=0xCD;		mdk();
    	LCD= tr;		mkt();
    	LCD= ch;		mkt();
    	LCD= dv;		mkt();
    }
    
    //=======================================================
    // cho phep ADC chuyen doi
    void chuyedoi_adc()
    {
    	START=1;	ALE=1;	START=0;	ALE=0;
    }
    //==============================================
    //chuong trinh chinh
    void main()
    {
    //	unsigned char i;
    	
    	khoitao_lcd();
    	hienthi_lcd();
    	KA=0;		KB=0;		KC=0;
    	while(1)
    	{	
    		ADC=P1;	
    		giaima_lcd();
    		hienthi_dienap();
    	}
    }
    Last edited by mctrjnh; 28-10-2013, 23:41.

  • #2
    mọi người xem giúp em với !

    Comment


    • #3
      Nguyên văn bởi mctrjnh Xem bài viết
      hi, chào mọi người.
      em đang làm cái vol kế sử dụng 89c52 với ADC0808 để đo điện áp 0 đến 50v DC.
      em đang trong quá trình chạy mô phỏng, và khi làm mô phỏng thì em chưa hiển thị điện điện áp lên LCD, theo như chạy mô phỏng thì em đoán ADC chưa gữi tín hiện cho VDK nên chưa hiển thị được.
      anh/chị xem giúp em có sai chỗ nào không ạ !

      sơ đồ mạch :http://i.upanh.com/rcbrgd
      Đây là code của em :
      ..............

      //================================================== =====
      // cho phep ADC chuyen doi
      void chuyedoi_adc()
      {
      START=1; ALE=1; START=0; ALE=0;
      }
      //==============================================
      //chuong trinh chinh
      void main()
      {
      // unsigned char i;

      khoitao_lcd();
      hienthi_lcd();
      KA=0; KB=0; KC=0;
      while(1)
      {
      ADC=P1;
      giaima_lcd();
      hienthi_dienap();
      }
      }
      [/CODE]
      Không thấy gọi hàm chuyedoi_adc() thì ADC không biến đổi là đúng...
      Nhớ sau khi gọi hàm này thì tạo trễ khoảng 120us rồi mới đọc KQ từ P1 về .... chờ nó "xào nấu" xong đã mới ăn được.
      Hôm nay trời nắng chang chang.
      Mèo con đi học chẳng mang thứ gì.
      Chỉ mang một cái bút chì.
      Và mang một mẩu bánh mì con con.

      Comment


      • #4
        Nguyên văn bởi Acxen_lupine Xem bài viết
        Không thấy gọi hàm chuyedoi_adc() thì ADC không biến đổi là đúng...
        Nhớ sau khi gọi hàm này thì tạo trễ khoảng 120us rồi mới đọc KQ từ P1 về .... chờ nó "xào nấu" xong đã mới ăn được.
        uhm, cảm ơn bạn ! mình đã thử lại rồi những vẫn không hiện thị được, nó vẫn như cũ !

        Comment


        • #5
          Nguyên văn bởi mctrjnh Xem bài viết
          uhm, cảm ơn bạn ! mình đã thử lại rồi những vẫn không hiện thị được, nó vẫn như cũ !
          Post cả file mạch demo lên ... cho ae dễ thử giúp bạn chứ, có phải thầy bói đâu mà ngồi đoán lỗi hết cho bạn được.
          Chẳng hạn: clock ADC phải đặt khoảng 500k-600kHz...

          Muốn thử code đúng chưa thì tạm ngắt cái ADC - P1 ra, cho cái switch gạt vào - P1, tạo tín hiệu giả lập 8 bit cho nó đã.
          Hôm nay trời nắng chang chang.
          Mèo con đi học chẳng mang thứ gì.
          Chỉ mang một cái bút chì.
          Và mang một mẩu bánh mì con con.

          Comment


          • #6
            Nguyên văn bởi Acxen_lupine Xem bài viết
            Post cả file mạch demo lên ... cho ae dễ thử giúp bạn chứ, có phải thầy bói đâu mà ngồi đoán lỗi hết cho bạn được.
            Chẳng hạn: clock ADC phải đặt khoảng 500k-600kHz...

            Muốn thử code đúng chưa thì tạm ngắt cái ADC - P1 ra, cho cái switch gạt vào - P1, tạo tín hiệu giả lập 8 bit cho nó đã.
            hjhj.... e thử rồi, khi thay bằng các mức logic thì VDK đọc được giá trị, chứng tỏ ADC có vấn đề, nhưng hiện tại em vẫn chưa tìm ra. E đã up lại rồi ah, anhh xem giúp em nnha !

            Comment


            • #7
              Nguyên văn bởi mctrjnh Xem bài viết
              hjhj.... e thử rồi, khi thay bằng các mức logic thì VDK đọc được giá trị, chứng tỏ ADC có vấn đề, nhưng hiện tại em vẫn chưa tìm ra. E đã up lại rồi ah, anhh xem giúp em nnha !
              Biết ngay mà, bơm clock ADC sai, bơm single pulse thì chạy thế nào. Phải bơm như hình dưới:
              Click image for larger version

Name:	untitled.JPG
Views:	1
Size:	55.1 KB
ID:	1387704

              Còn vấn đề nữa là ADC_data nối vào P1 bị ngược bit cao - bit thấp, phải lộn lại.
              Hôm nay trời nắng chang chang.
              Mèo con đi học chẳng mang thứ gì.
              Chỉ mang một cái bút chì.
              Và mang một mẩu bánh mì con con.

              Comment


              • #8
                đo tới 50V hả bác? ADC đo từ Vref- đến Vref+, Vref+ 5V tối đa thì phải.

                Comment


                • #9
                  Nguyên văn bởi Acxen_lupine Xem bài viết
                  Biết ngay mà, bơm clock ADC sai, bơm single pulse thì chạy thế nào. Phải bơm như hình dưới:
                  [ATTACH=CONFIG]77093[/ATTACH]

                  Còn vấn đề nữa là ADC_data nối vào P1 bị ngược bit cao - bit thấp, phải lộn lại.
                  em sửa lại rồi ! như thế này phải không anh ?
                  Click image for larger version

Name:	Capture.PNG
Views:	1
Size:	31.3 KB
ID:	1387737Click image for larger version

Name:	Capture.PNG
Views:	1
Size:	31.3 KB
ID:	1387737
                  em chỉnh rồi mà cung hok hiện điện !

                  Comment


                  • #10
                    up .up...up.....

                    Comment


                    • #11
                      nếu về phần clock cấp cho adc thì bác lấy đại 1 bit nào đó trong 4 pỏt của 8051 rồi CPL với timer interrupt mode auto reload. vậy cho lành

                      Comment


                      • #12
                        Nguyên văn bởi condonhan Xem bài viết
                        đo tới 50V hả bác? ADC đo từ Vref- đến Vref+, Vref+ 5V tối đa thì phải.
                        Cho dù Vref+ có là 0.5V đi chăng nữa thì vẫn có thể đo được 5000V nhé.


                        Nguyên văn bởi mctrjnh Xem bài viết
                        up .up...up.....
                        Úp cái gì mà úp, đã chỉ tận nơi rồi: Clock là 500kHz. Thế mà vẫn làm sai, đặt là 500Hz...
                        Hôm nay trời nắng chang chang.
                        Mèo con đi học chẳng mang thứ gì.
                        Chỉ mang một cái bút chì.
                        Và mang một mẩu bánh mì con con.

                        Comment


                        • #13
                          Nguyên văn bởi Acxen_lupine Xem bài viết
                          Cho dù Vref+ có là 0.5V đi chăng nữa thì vẫn có thể đo được 5000V nhé.

                          vậy Vref là 5v mình có độ phân giải là 0.019v. với độ phân giải này mình có thể phát hiển điện áp thay đổi nhỏ nhất(0.1, 0.2.......1v) của điện áp 50v là bao nhiêu anh ?


                          Úp cái gì mà úp, đã chỉ tận nơi rồi: Clock là 500kHz. Thế mà vẫn làm sai, đặt là 500Hz...
                          Em thử rồi, cũng không được, em thử với tần số 1Mhz thì nó làm nó chạy được rồi ạ !

                          Comment


                          • #14
                            cho em hỏi anh mctrinh và Acxen_lupine 1 chút ạ. em cũng làm đồ án vdk để đo diện áp nhưng không hiểu sao code của em viết vẫn hiển thị bình thường nhưng khi em thay đổi giá trị ở điện áp đấu vào Vin của ADC(ở pot-HG) thì điện áp hiển thị lên LCD cứ loạn lên, anh giúp em với,mp.zipbai tap dai.zipmp.zipbai tap dai.zip

                            Comment


                            • #15
                              Nguyên văn bởi buihiep Xem bài viết
                              cho em hỏi anh mctrinh và Acxen_lupine 1 chút ạ. em cũng làm đồ án vdk để đo diện áp nhưng không hiểu sao code của em viết vẫn hiển thị bình thường nhưng khi em thay đổi giá trị ở điện áp đấu vào Vin của ADC(ở pot-HG) thì điện áp hiển thị lên LCD cứ loạn lên, anh giúp em với,[ATTACH]77845[/ATTACH][ATTACH]77846[/ATTACH][ATTACH]77845[/ATTACH][ATTACH]77846[/ATTACH]
                              mình cũng đang làm về vấn đề này nên cũng không rõ nửa ! nhờ anh Acxen_lupine giải thích giúp bạn ấy !
                              Anh Acxen_lupine cho em hỏi thêm là về các kỹ thuật đo điện áp gồm có những kỹ thuật nào nói chung. và Đo điện áp DC có những kỹ thuật nào vậy anh ?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X