Thông báo

Collapse
No announcement yet.

giúp em adc của avr

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

  • giúp em adc của avr

    Code:
    #include <mega16.h>
    
    #include <delay.h>
    
    #define ADC_VREF_TYPE 0x00
    unsigned int read_adc(unsigned char adc_input)
    {ADMUX=adc_input|ADC_VREF_TYPE;
    ADCSRA=0x40; //01000000        ADSC=1 duoc giu trong suot qua trinh chuyen doi
    while((ADCSRA&0x10)==0)
    ADCSRA|=0X10;
    return ADCW;
    } 
    void main(void)
    {unsigned i=0;
    DDRA=0x00; 
    PORTA=0x00;
    
    DDRB=0XFF;
    PORTB=0X00;
    
    DDRD=0XFF;
    PORTD=0X00;
    
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0X87;  //10000111  he so chia xung nhip den bo adc la 128,ADEN=1 adc duoc sd
    while(1)
    {i=read_adc(0);
    PORTB=i&0xff;
    PORTD=i>>8;
    delay_ms(500);
    }
    }
    e mới tìm hiểu về avr,h đến phần adc e có viết theo 1 code mẫu đọc adc tại PINA.0 dịch thành công nhưng khi mô phỏng lại ko chạy. các bác giúp e xem còn thiếu và sai ở chỗ nào vs nhé. thanks các b nhiều
    Nguyễn Huy Biên - 01649 802 694
    gmail :

  • #2
    mình có cái này bạn đọc thử coi giúp đ gì ko nha, đọc nhiệt độ từ lm35 hiển thị lcd
    5.rar

    Comment


    • #3
      Nguyên văn bởi ptit_et Xem bài viết
      mình có cái này bạn đọc thử coi giúp đ gì ko nha, đọc nhiệt độ từ lm35 hiển thị lcd
      5.rar
      vâng. cám ơn bác. em đọc bài của bác rồi, nhưng em thấy ADC nó ko tự update nhiệt độ, như vậy có phải là quá trình đọc adc của bác ko liên tục ko ah? nó chỉ đọc 1 lần đầu tiên rồi ngừng ko đọc nữa.
      em cond gà mờ lắm, mong các bác giúp đỡ
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #4
        ủa sao ko
        cái delay_ms() vậy là để update nhiệt độ đó, nó sẻ tự cập nhật lại mà bạn thử = mô phỏng hay lám mạch thật vậy nếu mạch thật bạn phải nối avrf với avcc lên 5v nữa nha

        Comment


        • #5
          Nguyên văn bởi ptit_et Xem bài viết
          ủa sao ko
          cái delay_ms() vậy là để update nhiệt độ đó, nó sẻ tự cập nhật lại mà bạn thử = mô phỏng hay lám mạch thật vậy nếu mạch thật bạn phải nối avrf với avcc lên 5v nữa nha
          vâng. e mới chỉ làm trên mô phỏng thôi bác ahj
          Nguyễn Huy Biên - 01649 802 694
          gmail :

          Comment


          • #6
            vậy là bạn tăng giảm nhiệ độ mà nó ko tự cập nhật lên ak sao kì vậy

            Comment


            • #7
              vâng. e tăng giảm nhưng nó ko tự cập nhật. nếu bác có time xem giúp e cái code trên của em. đọc adc từ chân A0 và xuất ra PORTB va PORTD.
              Em mô phỏng nó cung ko chạy. thanks bác
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #8
                Code:
                /*****************************************************
                This program was produced by the
                CodeWizardAVR V2.05.3 Standard
                Automatic Program Generator
                © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                http://www.hpinfotech.com
                
                Project : 
                Version : 
                Date    : 06/07/2012
                Author  : PerTic@n
                Company : If You Like This Software,Buy It
                Comments: 
                
                
                Chip type               : ATmega16
                Program type            : Application
                AVR Core Clock frequency: 16,000000 MHz
                Memory model            : Small
                External RAM size       : 0
                Data Stack size         : 256
                *****************************************************/
                
                #include <mega32.h>
                
                #include <delay.h>
                
                #define ADC_VREF_TYPE 0x00
                unsigned int read_adc(unsigned char adc_input)
                {ADMUX=adc_input|ADC_VREF_TYPE;
                ADCSRA|=(1<<ADSC);//TAI SAO CH0 NAY VIET ADCSRA=0x40 LAI KO DUOC??ADSC=1 duoc giu trong suot qua trinh chuyen doi
                while((ADCSRA&0x10)==0)
                ADCSRA|=(1<<ADIF);//0X10; VA CA DAY NUA ADCSRA=0X10??
                return ADCW;
                }
                void main(void)
                {unsigned i=0;
                DDRA=0x00; 
                PORTA=0x00;
                
                DDRB=0XFF;
                PORTB=0X00;
                
                DDRD=0XFF;
                PORTD=0X00;
                
                ADMUX=ADC_VREF_TYPE;
                ADCSRA=0X87;  //10000111  he so chia xung nhip den bo adc la 128,ADEN=1 adc duoc sd
                while(1)
                {i=read_adc(0);
                PORTB=i&0xff;
                PORTD=i>>8;
                delay_ms(500);
                }
                }
                sau 1 thời gian tìm hiểu thì nó cũng đã chạy xong có 2 chỗ trên em vẫn còn tắc mắc. mong các b giúp đỡ
                Nguyễn Huy Biên - 01649 802 694
                gmail :

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X