Thông báo

Collapse
No announcement yet.

Các vấn đề ADC/DAC trong PIC

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

  • #31
    chào các Anh!Nhờ mấy Anh chỉ dùm : khi đẩy dữ liệu từ pic8f4550 thông qua việc đọc ADC lên mấy tính để vể đò thị bầng C#.Em xin hỏi mấy Anh là dữ liệu đó sau khi đẩy vào máy tính thì nằm ở đâu và lấy như thế nào để vẻ ?Anh nào có tài liệu xin gửi cho Em với qua gmail : letanminhqn@gmail.com Em cảm ơn các Anh nhiều.

    Comment


    • #32
      cac bac ai co tai lieu noi ve con pic 18f4520 ko? cho e voi . e dang lam bao cao tot ngiep.ma khong co tai lieu ve no. tim mai chang dc. bac nao co cho em voi nha! tai lieu noi ve chac nang cac chan cua no ay.e dang can gap wa sap fai nop mat roi.

      Comment


      • #33
        ai có gửi giúp em vào mail nhé!
        doquangdtvt@gmail.com

        Comment


        • #34
          mấy bác cho em hỏi con pic của em cứ nạp là nó đơ,nghĩa là nó vẫn chạy chương trình cũ,vậy ko xóa được hả các bác?

          Comment


          • #35
            Nguyên văn bởi luckystart Xem bài viết
            mấy bác cho em hỏi con pic của em cứ nạp là nó đơ,nghĩa là nó vẫn chạy chương trình cũ,vậy ko xóa được hả các bác?
            kiểm tra lại kết nối mạch nạp coi, phần mêm có nhận được PIC không.

            Comment


            • #36
              Mọi người xem giúp em code ADC trên 12F683

              Em viết code này cho con 12F683 nhưng hình như là nó ko đọc được giá trị ADC! Em đã thử mô phỏng trên máy tính nhưng nó vẫn vậy, kể cả nạp vào mạch chạy thử!
              Code:
              #include <12F683.h>
              #device  *=16 ADC = 10
              #fuses NOMCLR, INTRC_IO,NOWDT,NOPROTECT, NOPUT, NOPROTECT, NOBROWNOUT, NOCPD
              #use delay (clock=8000000)
              int16  var1;
              
              
              void main()
              {
                 setup_oscillator(OSC_8MHZ);
                 SETUP_ADC(ADC_CLOCK_DIV_2);
                 SETUP_ADC_PORTS(sAN1|VSS_VDD );
                 delay_us(10);
                 var1 = 0;
                 while (true)
                 {
                       SET_ADC_CHANNEL(sAN1);
                       delay_us(10);
                       var1 = READ_ADC(ADC_START_AND_READ);
                       delay_us(10);
                       if (var1 >= 500)
                       {
                          output_high(pin_a4);
                          delay_ms(100);
                          output_low(pin_a4);
                       }
                       else
                       {
                          output_high(pin_a2);
                          delay_ms(200);
                          output_low(pin_a2);
                       }
                 }
              }

              Comment


              • #37
                sử dụng pic để điều rộng xung pwm
                1, khởi tạo chân xuất pwm
                set_pwm_1(pwm)
                2, setting chu kỳ xung
                setup_timer1(a,b,c) // chuky = (4/f)*(a)(b+1)
                3, phat xung pwm
                set_pwm_duty(value) // độ rộng xung = (1/f)*value*a , suy ra độ rộng xung (max) khi chu kỳ = độ rộng xung , suy ra value = 4*(b+1)
                OK ---> VẬY LÀ BẠN ĐÃ TÌM ĐƯỢC VALUEMIN = 0 , VALUEMAX = 4*(B+1) NHÉ !!
                TỪ ĐÓ ĐƯA VÀO VÒNG LẶP FOR(J = 0 ; J < VALUEMAX ; J++)
                {
                SET_PWM_DUTY(J) ;
                DELAY_MS(10) ;
                }
                CHÚC THÀNH CÔNG ,

                Comment


                • #38
                  các bạn cho mình hỏi mình có thể dùng MCP4922 để tạo mạch DAC ngõ ra 0-10V ko?

                  Comment


                  • #39
                    mọi người giúp phần adc hiển thị nhiệt độ ra led 7 seg hoặc lcd

                    e đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ là dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.(E lập trình bằng C18)

                    phần code hiển thị ra led 7 thanh:
                    Code:
                    #include "p18f4620.h"
                    #include "delays.h"
                    #include "adc.h"
                    #pragma config OSC=HS, WDT=OFF
                    
                    const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                    int a,b,n,doC,dvi,chuc,tram;
                    void convert(int a)
                    {
                    tram=a/100;
                    a=a%100;
                    chuc=a/10;
                    dvi=a%10;
                    }
                    void hienthi() // quet led
                    {
                    for(n=0;n<10;n++)
                    {
                    PORTB=dig[dvi];
                    PORTD=0x01;       //bat led 1
                    Delay100TCYx(20);  // tre 100us
                    PORTB=dig[chuc];
                    PORTD=0x02;        // bat led 2
                    Delay100TCYx(20);
                    PORTB=dig[tram];
                    PORTD=0x04;         // bat led 3
                    Delay100TCYx(20);
                    }
                    }
                     void main(void)
                    {
                    TRISB=0;  // chon cong B la cong ra
                    TRISD=0;   // chon cong D la cong ra
                    TRISAbits.TRISA0=1;  // chon cong A la cong vao
                    ADCON0=0x03;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
                    ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
                    ADCON2bits.ACQT2=1;         //
                    ADCON2bits.ACQT1=0;         //
                    ADCON2bits.ACQT0=0;         //3 bits lua chon thoi gian thu thap du lieu TAD
                    ADCON2bits.ADCS2=1;         //
                    ADCON2bits.ADCS1=0;         //
                    ADCON2bits.ADCS0=1;         //3 bits lua chon tan so chuyen doi
                    Delay10TCY();
                    
                    
                    b = ReadADC();
                    doC = (b-558.558)/2.048;  //tùy ADC 8bit hay 10 bit  tính toán giá tri
                    a = doC;
                    convert((int)a);
                    Delay10TCY();
                    while(1)
                    {
                    b = ReadADC();
                    doC = (b-558.558)/2.048;
                    convert((int)a);
                    hienthi();
                    }
                    }
                    và phần ra LCD
                    Code:
                    #include "p18f4620.h"
                    #include "delays.h"
                    #include "adc.h"
                    #pragma config OSC=HS, WDT=OFF
                    
                    char b,doC;
                    long s;
                    unsigned char i,li,lj,s1[10];
                    
                    #define rs LATDbits.LATD0
                    #define rw LATDbits.LATD1
                    #define en LATDbits.LATD2
                    
                    void delay (unsigned char time )             // ham co tac dung delay thoi gian lon
                    	{
                    	    for ( li=0 ; li<80; li++ )
                    		for ( lj=0 ; lj<time; lj++)
                    		{}
                    	}
                    
                    
                    	void lenh_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
                    	{
                    		LATC=s;
                    		rs=0;			                        // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
                    		rw=0;
                    		en=1;
                    		delay(1);
                    		en=0;
                    		delay(1); 
                    	} 
                    
                    
                    	void data_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
                    	{
                    		LATC=s;
                    		TRISD=0xF8 ;		   					// cho 3 bit thap nhat duoc lam cong ra
                    		rs=1;			            // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
                    		rw=0;
                    		en=1;
                    		delay(1);
                    		en=0;
                    	}
                    void main(void)
                    {
                    INTCON=0x00;
                    TRISAbits.TRISA0=1;                      //cong A0 lam dau vao tu cam bien
                    TRISC=0x00;                              //cong C lam cong ra du lieu
                    TRISD=0xF8;                              //3 bit thap nhat lam cong ra dieu khien
                    		lenh_LCD(0x38);					 // dua ra LCD gia tri hang cot la 5*7
                    		lenh_LCD(0x0E);		    		 // hien con tro
                    	//	lenh_LCD(0x01);					 // xoa man hinh LCD
                    ADCON0=0x03;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
                    ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
                    ADCON2bits.ACQT2=1;         //
                    ADCON2bits.ACQT1=0;         //
                    ADCON2bits.ACQT0=0;         //3 bits lua chon thoi gian thu thap du lieu TAD
                    ADCON2bits.ADCS2=1;         //
                    ADCON2bits.ADCS1=0;         //
                    ADCON2bits.ADCS0=1;         //3 bits lua chon tan so chuyen doi
                    Delay10TCY();
                    
                    
                    b = ReadADC();
                    doC == (b-558.558)/2.048;  //tùy ADC 8bit hay 10 bit  tính toán giá tri
                    s1[i]==doC;
                    while(1)
                    {  lenh_LCD(0x01);
                       delay(500);
                       data_LCD(s1[i]);
                       data_LCD('d');
                       data_LCD('o');
                       data_LCD('C');
                       delay(500);
                    }
                    }
                    mạch mô phỏng ở file đính kèm
                    Attached Files

                    Comment


                    • #40
                      Nó không chạy được bởi vì tống cả một đống mã nguồn vào, thay vì thử từng mô-đun nhỏ một, lại cộng thêm việc chạy mô phỏng chứ không phải mạch thật. Kiểu làm như vậy thì không bao giờ (trừ trường hợp cực kỳ may mắn) thành công được.
                      Phần mềm tự do hoặc không dùng máy tính nữa !.

                      Comment


                      • #41
                        bác nói rõ hơn đc k,e mới học nên chưa biết nhiều
                        mô phỏng thành công chút xíu thì mới làm mạch thật chứ!

                        Comment


                        • #42
                          Nguyên văn bởi eethn Xem bài viết
                          e đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ là dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.(E lập trình bằng C18)

                          phần code hiển thị ra led 7 thanh:
                          Code:
                          #include "p18f4620.h"
                          #include "delays.h"
                          #include "adc.h"
                          #pragma config OSC=HS, WDT=OFF
                          
                          const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                          int a,b,n,doC,dvi,chuc,tram;
                          void convert(int a)
                          {
                          tram=a/100;
                          a=a%100;
                          chuc=a/10;
                          dvi=a%10;
                          }
                          void hienthi() // quet led
                          {
                          for(n=0;n<10;n++)
                          {
                          PORTB=dig[dvi];
                          PORTD=0x01;       //bat led 1
                          Delay100TCYx(20);  // tre 100us
                          PORTB=dig[chuc];
                          PORTD=0x02;        // bat led 2
                          Delay100TCYx(20);
                          PORTB=dig[tram];
                          PORTD=0x04;         // bat led 3
                          Delay100TCYx(20);
                          }
                          }
                           void main(void)
                          {
                          TRISB=0;  // chon cong B la cong ra
                          TRISD=0;   // chon cong D la cong ra
                          TRISAbits.TRISA0=1;  // chon cong A la cong vao
                          ADCON0=0x03;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
                          ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
                          ADCON2bits.ACQT2=1;         //
                          ADCON2bits.ACQT1=0;         //
                          ADCON2bits.ACQT0=0;         //3 bits lua chon thoi gian thu thap du lieu TAD
                          ADCON2bits.ADCS2=1;         //
                          ADCON2bits.ADCS1=0;         //
                          ADCON2bits.ADCS0=1;         //3 bits lua chon tan so chuyen doi
                          Delay10TCY();
                          
                          
                          b = ReadADC();
                          doC = (b-558.558)/2.048;  //tùy ADC 8bit hay 10 bit  tính toán giá tri
                          a = doC;
                          convert((int)a);
                          Delay10TCY();
                          while(1)
                          {
                          b = ReadADC();
                          doC = (b-558.558)/2.048;
                          convert((int)a);
                          hienthi();
                          }
                          }
                          và phần ra LCD
                          Code:
                          #include "p18f4620.h"
                          #include "delays.h"
                          #include "adc.h"
                          #pragma config OSC=HS, WDT=OFF
                          
                          char b,doC;
                          long s;
                          unsigned char i,li,lj,s1[10];
                          
                          #define rs LATDbits.LATD0
                          #define rw LATDbits.LATD1
                          #define en LATDbits.LATD2
                          
                          void delay (unsigned char time )             // ham co tac dung delay thoi gian lon
                          	{
                          	    for ( li=0 ; li<80; li++ )
                          		for ( lj=0 ; lj<time; lj++)
                          		{}
                          	}
                          
                          
                          	void lenh_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
                          	{
                          		LATC=s;
                          		rs=0;			                        // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
                          		rw=0;
                          		en=1;
                          		delay(1);
                          		en=0;
                          		delay(1); 
                          	} 
                          
                          
                          	void data_LCD (unsigned char s)				// ham dua 1 lenh ra ngoai LCD
                          	{
                          		LATC=s;
                          		TRISD=0xF8 ;		   					// cho 3 bit thap nhat duoc lam cong ra
                          		rs=1;			            // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh
                          		rw=0;
                          		en=1;
                          		delay(1);
                          		en=0;
                          	}
                          void main(void)
                          {
                          INTCON=0x00;
                          TRISAbits.TRISA0=1;                      //cong A0 lam dau vao tu cam bien
                          TRISC=0x00;                              //cong C lam cong ra du lieu
                          TRISD=0xF8;                              //3 bit thap nhat lam cong ra dieu khien
                          		lenh_LCD(0x38);					 // dua ra LCD gia tri hang cot la 5*7
                          		lenh_LCD(0x0E);		    		 // hien con tro
                          	//	lenh_LCD(0x01);					 // xoa man hinh LCD
                          ADCON0=0x03;                //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh
                          ADCON1=0x0E;                //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref-
                          ADCON2bits.ACQT2=1;         //
                          ADCON2bits.ACQT1=0;         //
                          ADCON2bits.ACQT0=0;         //3 bits lua chon thoi gian thu thap du lieu TAD
                          ADCON2bits.ADCS2=1;         //
                          ADCON2bits.ADCS1=0;         //
                          ADCON2bits.ADCS0=1;         //3 bits lua chon tan so chuyen doi
                          Delay10TCY();
                          
                          
                          b = ReadADC();
                          doC == (b-558.558)/2.048;  //tùy ADC 8bit hay 10 bit  tính toán giá tri
                          s1[i]==doC;
                          while(1)
                          {  lenh_LCD(0x01);
                             delay(500);
                             data_LCD(s1[i]);
                             data_LCD('d');
                             data_LCD('o');
                             data_LCD('C');
                             delay(500);
                          }
                          }
                          mạch mô phỏng ở file đính kèm
                          Trước hết mới học PIC18F thì cần giải quyết các vấn đề sau :
                          - Hiển thị ra led7D hoặc LCD 1 con số nào đó bất kỳ , vd 1234 . Nếu ok thì có nghĩa hàm display_LCD() hoặc hàm hienthi() k sai . Còn nếu k hiển thị đc thì
                          1) Nếu LCD , chỉnh biến trở chỗ chân Vo để hiện thấy 1 dòng đen (Có khi chỉnh xong thấy đc số 1234 hiển thị mừng hết lớn ấy nhẩy) .
                          2) Ktra đc mạch các chân RS , RW , E , các đường mạch chân d0-d7 có dính chỗ nào k ?
                          3) Viết chương trình nhấp nháy 0-1 các chân RS , E ,RW , các chân d0-d7 xem VDK đã xuất dữ liệu đc k , đúng k ? Nếu k đúng thì xem lại khai báo set_tris_port hoặc khả năng lập trình HT_PIC có vấn đề
                          4) Nếu Led7d , kiểm tra việc dùng hàm quét led vậy đúng k ? tốt nhất dùng delay để kiểm tra , trước khi dùng timer để quét để đảm bảo việc bật tắt các chân và xuất dữ liệu là đồng bộ .

                          Sau khi khắc phục lỗi hàm hiển thị , thì chuyển sang kiểm tra hàm read_adc() , hoặc các khai báo khởi tạo ADC trứoc khi read_adc()

                          Làm như rứa còn chưa ăn tiền đc ai , quất đống code rầm rầm vô đó , biết sai chỗ nào mà lần . đúng là điếc k sợ súng

                          Comment


                          • #43
                            phần hiển thị e đã test rồi,thử riêng chạy ok luôn.E nghĩ do cấu hình adc có vấn đề gì đó ,vẫn đang nghiên cứu theo datasheet của nó mà

                            Comment


                            • #44
                              mà cái này biết khi nào là 8bit khi nào là 10 nhĩ thấy khi khai báo thì chỉ có 2 kiểu là cạnh trái và cạnh phải của 2 thanh ghi ADRESH và ADRESL thôi mà

                              Comment


                              • #45
                                các bác cho em hỏi tần số lấy mẫu của ADC trong Pic có thay đổi được không, nếu thay đổi được thì phải làm như thế nào vậy ạ? Em chưa dùng Pic bao giờ mong các bác chỉ giáo, em đang cần chức năng AD này để làm trên FPGA.
                                Thanks alot !

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X