Thông báo

Collapse
No announcement yet.

Vấn đề về mạch đo nhiệt độ bằng atmega8l và lm35?

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

  • Vấn đề về mạch đo nhiệt độ bằng atmega8l và lm35?

    tình hình là tui đã làm theo hướng dẫn dưới đây:
    Mạch đo nhiệt độ dùng AT8 và LM35

    đưa vào mạch mô phỏng thì chạy đúng nhưng khi đưa vào mạch thật thì chạy ko được, nó chỉ hiển thị "nhiet do la: 375" rồi nó thay đổi 375 thành 499? trong khi mạch mô phỏng thì hiển thị đúng là "nhiet do la: 45" khi cho lm35 ở 45 độ, thay đổi giá trị lm35 thì lcd sẽ thay đổi đúng theo.

    bác nào biết trường hợp này xin chỉ giúp với

    Thanks

  • #2
    mọi người có vẻ yêu mến con LM35 này nhỉ ... sao không dùng DS18B20 mạch vừa nhẹ nhàng , dễ dàng hơn không !
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Chắc là do LM35 găm vào đầu khi nó được dùng phổ biến trong trường học + thuyền thống. LM35 khó dùng, chính xác kém độ nhạy kém hơn, tốn ADC, cồng kềnh. Nhưng các này phù hợp với giảng dạy vì nó trực quan. DS18b20 ít dùng vì không phổ biến ? hay mọi người đọc datasheet nó khó hiểu nhỉ ???

      Comment


      • #4
        Nguyên văn bởi vuhapassall Xem bài viết
        Chắc là do LM35 găm vào đầu khi nó được dùng phổ biến trong trường học + thuyền thống. LM35 khó dùng, chính xác kém độ nhạy kém hơn, tốn ADC, cồng kềnh. Nhưng các này phù hợp với giảng dạy vì nó trực quan. DS18b20 ít dùng vì không phổ biến ? hay mọi người đọc datasheet nó khó hiểu nhỉ ???
        đơn giản chỉ là vì nó là cái cơ bản để giảng dạy cách dùng ADC, 18B20 thuộc loại giao tiếp nâng cao dành cho SV tự nghiên cứu chứ mà dạy hết tất cả các thể loại giao tiếp phổ biến thì biết bao giờ mới hết môn

        Comment


        • #5
          các bác nói DS18B20 dễ sử dụng, hay hơn,... vậy có thể cho vài ví dụ được ko? vì tui đang tìm hiểu avr đến phần ADC nó chỉ dùng LM35, lúc đưa vào phần mềm mô phỏng thì ok, khi đưa vào mạch thật thì ko ổn, ko biết có phải do mạch ko? nhưng mạch mô phỏng được lắp giống mạch thật mà @@!

          Comment


          • #6
            DS18b20 không chắc hay hơn, nếu để học tập thì mình nghĩ LM35 hay hơn vì nó trực quan, tìm hiểu về ADC, cân chỉnh... Nhưng nếu dùng cho thực tế thì sẽ thấy DS1b20 có nhiều điều hay hơn. Ví dụ thì có rất nhiều trên mạng. Mình nghĩ bạn nên xem và chỉnh lại phần cứng, từ việc đo nguồn, tín hiệu LM35 đến kiểm tra giá trị ADC rồi đến code, xem ổn không, mình nghĩ là do phần cứng thôi

            Comment


            • #7
              code thì thấy phần mềm mô phỏng chạy ổn rồi, LM35 thì tui đã đo tín hiệu đầu ra ok (lấy lửa hơ nó thì nó thay đổi tốt), tui định làm cái đo nhiệt độ để có thể sử dụng thực tế luôn đó mà, tìm hiểu luôn điều chỉnh điện áp bằng cách đo nhiệt độ luôn

              Comment


              • #8
                Chủ thớt hỏi một đằng, các bác bu vào chém mỗi người một nẻo, đã chẳng có người nào hỗ trợ đúng chỗ lại còn vẽ ra đến ds18b20 (Lưu ý mọi ý kiến đều né tiền bối Quế Dương ra vì tiền bối thượng thừa rồi). Các bác tự bản thân có hiểu rõ mọi cơ chế của con ds18b20 ko hay là vứt cái thư viện vào dùng và mù tịt rồi phán cứ như thánh. Đồng ý là đẳng cấp của ds18b20 hơn hẳn LM35, nhưng nó ko thích hợp cho người mới, chưa kể bạn chủ thớt đang muốn tìm hiểu ADC mà.
                Bạn chủ thớt làm ko được bởi vì nguyên do sau đây:
                _Bạn có chú ý là tại mục thiết lập ADC mục Use 8 bit ko được tick vào, điều đó có nghĩa là mặc định ADC 10 bit được dùng -> giá trị ADC max là 1024.
                _Mình trích tí code dẫn chứng cái sai ở đây:
                adc_vIn = (float)adc_data[0]*5/1024; // doc gia tri dien ap Vadc In
                nhietDo = adc_vIn*100; // quy doi ra nhiet do
                Giả sử tại 62.5 độ
                Lm35 xuất 2.5V -> ADC 10 bit đọc được là 512 -> suy ra nhiệt độ là: 512 x 5 / 1024 x 100 = 250 độ (trên đời này lắm thằng hài hước)
                Nhưng với ADC 8 bit thì khác -> ADC đọc được chỉ 128 -> suy ra nhiệt độ là : 128 x 5 / 1024 x 100 = 62.5 độ (thế này có đúng hơn ko??)
                Vậy đó bạn nhận ra vấn đề chưa??? chỉ do bạn thiết lập ADC sai thôi, mà chính xác ko phải do bạn là do cái thằng viết cái bài hướng dẫn vô trách nhiệm đó.Bạn chỉ đơn giản tick vào Use 8 bit là xong.
                Ngoài ra mình có tí góp ý là cái giá trị ADC cũng như số nhiệt độ hiển thị là số nguyên nên hạn chế không dùng float trong tính toán, bỏ (float) đi. Đồng thời bạn nên làm những ứng dụng cơ bản trước đi, ví dụ khi cấp 5V vào chân ADC với 8 bit thì giá trị đọc được phải là 255 còn với 10 bit là 1024 rồi xuất LCD kiểm chứng thì sẽ dễ nắm bắt vấn đề hơn là thọt ngay vô con nhiệt độ.
                Và lưu ý mô phỏng chỉ là mô phỏng thôi, nó không có đủ chức năng detect tất cả mọi sai sót của mọi con IC trên đời này, sau này khi lên đến đẳng cấp phải thiết kế những mạch dự án lớn thì Proteus ko thể sử dụng và đáp ứng được nữa. Đừng phụ thuộc và quá tin vào mô phỏng.
                Last edited by hoahauvn2; 21-01-2014, 17:44.
                Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
                Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

                Comment


                • #9
                  Nguyên văn bởi lion080889 Xem bài viết
                  code thì thấy phần mềm mô phỏng chạy ổn rồi, LM35 thì tui đã đo tín hiệu đầu ra ok (lấy lửa hơ nó thì nó thay đổi tốt), tui định làm cái đo nhiệt độ để có thể sử dụng thực tế luôn đó mà, tìm hiểu luôn điều chỉnh điện áp bằng cách đo nhiệt độ luôn
                  Chúc thành công
                  Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
                  Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

                  Comment


                  • #10
                    rất cám ơn bác, bác chỉ rất cụ thể, nhưng tui có vấn đề như thế này ko biết có phải do mạch tui lắp hay do IC lỗi ko? đã sửa lại như bác nói, nhưng tui ko truyền tín hiệu vào chân ADC mà adc_data[0] vẫn hiểu là 255 (tui xuất thử ra LCD rồi), ko biết mặc định nó lấy nguồn nuôi vào hay ko? khi nối chân truyền tín hiệu vào thì vẫn ko thấy có thay đổi gì cả.

                    vấn đề trên bác có biết tại sao ko? để tối mai tui sẽ chụp lại các bước tui đã làm và cả mạch thật để bác xem thử, mạch thì tui làm giống trang ở trên thôi

                    Comment


                    • #11
                      Nguyên văn bởi lion080889 Xem bài viết
                      rất cám ơn bác, bác chỉ rất cụ thể, nhưng tui có vấn đề như thế này ko biết có phải do mạch tui lắp hay do IC lỗi ko? đã sửa lại như bác nói, nhưng tui ko truyền tín hiệu vào chân ADC mà adc_data[0] vẫn hiểu là 255 (tui xuất thử ra LCD rồi), ko biết mặc định nó lấy nguồn nuôi vào hay ko? khi nối chân truyền tín hiệu vào thì vẫn ko thấy có thay đổi gì cả.

                      vấn đề trên bác có biết tại sao ko? để tối mai tui sẽ chụp lại các bước tui đã làm và cả mạch thật để bác xem thử, mạch thì tui làm giống trang ở trên thôi
                      Thân chào bạn, sau khi đọc kỹ cái bài hướng dẫn trên cái link của bạn mình thấy bài hướng dẫn đó thiếu nhiều thứ quá, bởi lẽ khi theo cách thiết lập như trên hướng dẫn thì họ chỉ dùng 1 chân ADC0 đó là chân 23 của VĐK, vì thế tất cả các chân còn lại trong PortC nếu ko có tác vụ dùng làm chân Input thì phải được thiết lập là chân Output 1 mức tín hiệu cố định (mình thường dùng mức 0), vì mặc định thiết lập ban đầu của Codevision là tất cả các Port ở trạng thái Out nên ban đầu bạn cần vào mục Port của codevision thiết lập chính xác chức năng các Port. Trong trường hợp chân ADC0 của bạn đang tác vụ mà các chân cùng PortC ở trạng thái Input ko có tín hiệu vào thì nhiễu lung tung lên và sẽ treo VĐK.
                      Tương tự chân nhận tín hiệu ADC nếu bạn để khơi khơi mà ko cấp tín hiệu vào nó thì nó sẽ nhiễu linh tinh và cuối cùng là treo, lúc đó theo kinh nghiệm của mình thì nó sẽ đọc ra giá trị cao nhất của ADC với 8 bit là 255, đấy là vấn đề bạn gặp đấy khi treo thì nó báo 255, sau đó cấp tín hiệu khác vào cũng chả ý nghĩa gì vì nó đã treo cứng ngắc rồi, chỉ có nước reset thôi.
                      Thêm một kinh nghiệm nho nhỏ là chân ADC bạn nên nối thêm 1 con điện trở khoảng 100K Ohm nối xuống GND, để khi trong trường hợp Test mà bạn ngắt nguồn cấp tín hiệu ADC thì chân ADC sẽ được kéo xuống GND và ko làm treo VĐK.
                      Mọi kiến thức cơ bản là vậy đó, bạn từ từ nghiện cứu đi, mà sắp Tết rồi, bạn có định làm nó trước Tết ko???? Tết đến làm nó ko xong cũng mất vui nhỉ
                      Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
                      Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

                      Comment


                      • #12
                        Nguyên văn bởi lion080889 Xem bài viết
                        tình hình là tui đã làm theo hướng dẫn dưới đây:
                        Mạch đo nhiệt độ dùng AT8 và LM35

                        đưa vào mạch mô phỏng thì chạy đúng nhưng khi đưa vào mạch thật thì chạy ko được, nó chỉ hiển thị "nhiet do la: 375" rồi nó thay đổi 375 thành 499? trong khi mạch mô phỏng thì hiển thị đúng là "nhiet do la: 45" khi cho lm35 ở 45 độ, thay đổi giá trị lm35 thì lcd sẽ thay đổi đúng theo.

                        bác nào biết trường hợp này xin chỉ giúp với

                        Thanks
                        up cái code bạn viết lên đây

                        Comment


                        • #13
                          tui đã làm theo lời [MENTION=171082]hoahauvn2[/MENTION] nhưng vẫn ko chạy đúng, đưa vào protues cũng chạy ko đúng luôn, ko biết có làm sai bước nào ko nữa, tui up hình lên cho mọi người xem giúp giúm nha.

                          PHP Code:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V2.05.0 Professional
                          Automatic Program Generator
                          © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com

                          Project : 
                          Version : 
                          Date    : 1/23/2014
                          Author  : NeVaDa
                          Company : 
                          Comments: 


                          Chip type               : ATmega8L
                          Program type            : Application
                          AVR Core Clock frequency: 8.000000 MHz
                          Memory model            : Small
                          External RAM size       : 0
                          Data Stack size         : 256
                          *****************************************************/

                          #include <mega8.h>
                          #include <stdlib.h>
                          #include <delay.h>

                          // Alphanumeric LCD Module functions
                          #include <alcd.h>

                          #define FIRST_ADC_INPUT 0
                          #define LAST_ADC_INPUT 0
                          unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
                          #define ADC_VREF_TYPE 0x20

                          // ADC interrupt service routine
                          // with auto input scanning
                          interrupt [ADC_INTvoid adc_isr(void)
                          {
                          static 
                          unsigned char input_index=0;
                          // Read the 8 most significant bits
                          // of the AD conversion result
                          adc_data[input_index]=ADCH;
                          // Select next ADC input
                          if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                             
                          input_index=0;
                          ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE 0xff))+input_index;
                          // Delay needed for the stabilization of the ADC input voltage
                          delay_us(10);
                          // Start the AD conversion
                          ADCSRA|=0x40;
                          }

                          // Declare your global variables here
                          float adc_vIn;
                          int nhietDo
                          unsigned char thongBao[3];

                          void main(void)
                          {
                          // Declare your local variables here

                          // Input/Output Ports initialization
                          // Port B initialization
                          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                          PORTB=0x00;
                          DDRB=0x00;

                          // Port C initialization
                          // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In 
                          // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=T 
                          PORTC=0x00;
                          DDRC=0x7E;

                          // Port D initialization
                          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                          PORTD=0x00;
                          DDRD=0x00;

                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 0 Stopped
                          TCCR0=0x00;
                          TCNT0=0x00;

                          // Timer/Counter 1 initialization
                          // Clock source: System Clock
                          // Clock value: Timer1 Stopped
                          // Mode: Normal top=0xFFFF
                          // OC1A output: Discon.
                          // OC1B output: Discon.
                          // Noise Canceler: Off
                          // Input Capture on Falling Edge
                          // Timer1 Overflow Interrupt: Off
                          // Input Capture Interrupt: Off
                          // Compare A Match Interrupt: Off
                          // Compare B Match Interrupt: Off
                          TCCR1A=0x00;
                          TCCR1B=0x00;
                          TCNT1H=0x00;
                          TCNT1L=0x00;
                          ICR1H=0x00;
                          ICR1L=0x00;
                          OCR1AH=0x00;
                          OCR1AL=0x00;
                          OCR1BH=0x00;
                          OCR1BL=0x00;

                          // Timer/Counter 2 initialization
                          // Clock source: System Clock
                          // Clock value: Timer2 Stopped
                          // Mode: Normal top=0xFF
                          // OC2 output: Disconnected
                          ASSR=0x00;
                          TCCR2=0x00;
                          TCNT2=0x00;
                          OCR2=0x00;

                          // External Interrupt(s) initialization
                          // INT0: Off
                          // INT1: Off
                          MCUCR=0x00;

                          // Timer(s)/Counter(s) Interrupt(s) initialization
                          TIMSK=0x00;

                          // USART initialization
                          // USART disabled
                          UCSRB=0x00;

                          // Analog Comparator initialization
                          // Analog Comparator: Off
                          // Analog Comparator Input Capture by Timer/Counter 1: Off
                          ACSR=0x80;
                          SFIOR=0x00;

                          // ADC initialization
                          // ADC Clock frequency: 1000.000 kHz
                          // ADC Voltage Reference: AREF pin
                          // Only the 8 most significant bits of
                          // the AD conversion result are used
                          ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE 0xff);
                          ADCSRA=0xCB;

                          // SPI initialization
                          // SPI disabled
                          SPCR=0x00;

                          // TWI initialization
                          // TWI disabled
                          TWCR=0x00;

                          // Alphanumeric LCD initialization
                          // Connections specified in the
                          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                          // RS - PORTB Bit 0
                          // RD - PORTB Bit 1
                          // EN - PORTB Bit 2
                          // D4 - PORTB Bit 4
                          // D5 - PORTB Bit 5
                          // D6 - PORTB Bit 6
                          // D7 - PORTB Bit 7
                          // Characters/line: 16
                          lcd_init(16);

                          // Global enable interrupts
                          #asm("sei")

                          while (1)
                                {
                                
                          // Place your code here
                                  
                          adc_vIn = (float)adc_data[0]*5/1024// doc gia tri dien ap Vadc In
                                  
                          nhietDo adc_vIn*100// quy doi ra nhiet do
                                  
                          itoa(nhietDo,thongBao); // chuyen kieu de hien thi ra LCD

                                  
                          lcd_clear(); 
                                  
                          lcd_putsf("Nhiet do la: ");
                                  
                          lcd_puts(thongBao); // hien thi nhiet do ra LCD
                                  
                          delay_ms(500);
                                }

                          thanks
                          Attached Files

                          Comment


                          • #14
                            Nguyên văn bởi lion080889 Xem bài viết
                            tui đã làm theo lời [MENTION=171082]hoahauvn2[/MENTION] nhưng vẫn ko chạy đúng, đưa vào protues cũng chạy ko đúng luôn, ko biết có làm sai bước nào ko nữa, tui up hình lên cho mọi người xem giúp giúm nha.

                            thanks
                            OK tối nay mình thử trực tiếp luôn rồi ngày mai báo kết quả lại cho bạn
                            Last edited by hoahauvn2; 25-01-2014, 23:17.
                            Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
                            Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

                            Comment


                            • #15
                              Nguyên văn bởi lion080889 Xem bài viết
                              tui đã làm theo lời [MENTION=171082]hoahauvn2[/MENTION] nhưng vẫn ko chạy đúng, đưa vào protues cũng chạy ko đúng luôn, ko biết có làm sai bước nào ko nữa, tui up hình lên cho mọi người xem giúp giúm nha.

                              PHP Code:
                              /*****************************************************
                              This program was produced by the
                              CodeWizardAVR V2.05.0 Professional
                              Automatic Program Generator
                              © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
                              http://www.hpinfotech.com

                              Project : 
                              Version : 
                              Date    : 1/23/2014
                              Author  : NeVaDa
                              Company : 
                              Comments: 


                              Chip type               : ATmega8L
                              Program type            : Application
                              AVR Core Clock frequency: 8.000000 MHz
                              Memory model            : Small
                              External RAM size       : 0
                              Data Stack size         : 256
                              *****************************************************/

                              #include <mega8.h>
                              #include <stdlib.h>
                              #include <delay.h>

                              // Alphanumeric LCD Module functions
                              #include <alcd.h>

                              #define FIRST_ADC_INPUT 0
                              #define LAST_ADC_INPUT 0
                              unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
                              #define ADC_VREF_TYPE 0x20

                              // ADC interrupt service routine
                              // with auto input scanning
                              interrupt [ADC_INTvoid adc_isr(void)
                              {
                              static 
                              unsigned char input_index=0;
                              // Read the 8 most significant bits
                              // of the AD conversion result
                              adc_data[input_index]=ADCH;
                              // Select next ADC input
                              if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                                 
                              input_index=0;
                              ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE 0xff))+input_index;
                              // Delay needed for the stabilization of the ADC input voltage
                              delay_us(10);
                              // Start the AD conversion
                              ADCSRA|=0x40;
                              }

                              // Declare your global variables here
                              float adc_vIn;
                              int nhietDo
                              unsigned char thongBao[3];

                              void main(void)
                              {
                              // Declare your local variables here

                              // Input/Output Ports initialization
                              // Port B initialization
                              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                              PORTB=0x00;
                              DDRB=0x00;

                              // Port C initialization
                              // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In 
                              // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=T 
                              PORTC=0x00;
                              DDRC=0x7E;

                              // Port D initialization
                              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                              PORTD=0x00;
                              DDRD=0x00;

                              // Timer/Counter 0 initialization
                              // Clock source: System Clock
                              // Clock value: Timer 0 Stopped
                              TCCR0=0x00;
                              TCNT0=0x00;

                              // Timer/Counter 1 initialization
                              // Clock source: System Clock
                              // Clock value: Timer1 Stopped
                              // Mode: Normal top=0xFFFF
                              // OC1A output: Discon.
                              // OC1B output: Discon.
                              // Noise Canceler: Off
                              // Input Capture on Falling Edge
                              // Timer1 Overflow Interrupt: Off
                              // Input Capture Interrupt: Off
                              // Compare A Match Interrupt: Off
                              // Compare B Match Interrupt: Off
                              TCCR1A=0x00;
                              TCCR1B=0x00;
                              TCNT1H=0x00;
                              TCNT1L=0x00;
                              ICR1H=0x00;
                              ICR1L=0x00;
                              OCR1AH=0x00;
                              OCR1AL=0x00;
                              OCR1BH=0x00;
                              OCR1BL=0x00;

                              // Timer/Counter 2 initialization
                              // Clock source: System Clock
                              // Clock value: Timer2 Stopped
                              // Mode: Normal top=0xFF
                              // OC2 output: Disconnected
                              ASSR=0x00;
                              TCCR2=0x00;
                              TCNT2=0x00;
                              OCR2=0x00;

                              // External Interrupt(s) initialization
                              // INT0: Off
                              // INT1: Off
                              MCUCR=0x00;

                              // Timer(s)/Counter(s) Interrupt(s) initialization
                              TIMSK=0x00;

                              // USART initialization
                              // USART disabled
                              UCSRB=0x00;

                              // Analog Comparator initialization
                              // Analog Comparator: Off
                              // Analog Comparator Input Capture by Timer/Counter 1: Off
                              ACSR=0x80;
                              SFIOR=0x00;

                              // ADC initialization
                              // ADC Clock frequency: 1000.000 kHz
                              // ADC Voltage Reference: AREF pin
                              // Only the 8 most significant bits of
                              // the AD conversion result are used
                              ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE 0xff);
                              ADCSRA=0xCB;

                              // SPI initialization
                              // SPI disabled
                              SPCR=0x00;

                              // TWI initialization
                              // TWI disabled
                              TWCR=0x00;

                              // Alphanumeric LCD initialization
                              // Connections specified in the
                              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                              // RS - PORTB Bit 0
                              // RD - PORTB Bit 1
                              // EN - PORTB Bit 2
                              // D4 - PORTB Bit 4
                              // D5 - PORTB Bit 5
                              // D6 - PORTB Bit 6
                              // D7 - PORTB Bit 7
                              // Characters/line: 16
                              lcd_init(16);

                              // Global enable interrupts
                              #asm("sei")

                              while (1)
                                    {
                                    
                              // Place your code here
                                      
                              adc_vIn = (float)adc_data[0]*5/1024// doc gia tri dien ap Vadc In
                                      
                              nhietDo adc_vIn*100// quy doi ra nhiet do
                                      
                              itoa(nhietDo,thongBao); // chuyen kieu de hien thi ra LCD

                                      
                              lcd_clear(); 
                                      
                              lcd_putsf("Nhiet do la: ");
                                      
                              lcd_puts(thongBao); // hien thi nhiet do ra LCD
                                      
                              delay_ms(500);
                                    }

                              thanks
                              sai rồi nhé, bạn đang chạy ADC 8 bit nên kết quả nó ra bị sai. Khi khai báo ADC thì phải bỏ ko chọn ô 8 bits

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X