Hỏi về làm mạch thật atmega8 với lm35

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • haiau59
    Thành viên mới
    • Mar 2009
    • 6

    #1

    Hỏi về làm mạch thật atmega8 với lm35

    Mạch mình mắc như mô phỏng proteus.Nếu chưa hiển thị led 7 thanh thì nhiệt đo được truyền về máy tính thì được dù vẫn chưa ổn định nhưng có vẻ là đúng.Nhưng khi cả hiện thị lên led 7 thanh thì nhiệt độ cứ nhảy lung tung mà không ổn định.Mình không hiểu tại sao lại thế?Và cho mình hỏi thêm là làm sao để đo nhiệt độ được ổn định.Phần mạch mình không được tốt.Mong các bạn giúp đỡ.Cảm ơn các bạn trước.hình ảnh mạch và code mình để theo link sau.
    http://www.mediafire.com/?gjbnu0gm2zy
    hi,mình chưa biết gửi ảnh lên diễn đàn
  • haiau59
    Thành viên mới
    • Mar 2009
    • 6

    #2
    Đây là ảnh proteus.và mình mắc mạch giống như ảnh dưới.(phần mạch mình kém lắm).phần nhận nhiệt độ đo truyền vào máy tính mà chưa hiển thị led7 thanh thì mình làm được.còn cứ hiện cả led 7 thanh thì bắt đầu nhiệt độ đo được bắt đầu nhảy loạn lên.các bạn giúp mình với.

    Comment

    • haiau59
      Thành viên mới
      • Mar 2009
      • 6

      #3
      Mình post luon code để các bạn tiện giúp mình với

      Code:
      #include <mega8.h>
      #include <delay.h>
      #include <math.h> 
      //UART
      #define RXCIE 7
      #define UDRE 5
      #define RXEN 4
      #define TXEN 3
      #define URSEL 7
      #define UCSZ1 2
      #define UCSZ0 1
      //ADC
      #define REFS1 7
      #define REFS0 6
      #define ADEN 7
      #define ADSC 6
      #define ADIF 4
      #define ADPS2 2
      #define ADPS0 0
      // Declare your global variables here
      unsigned char data_rec;
      unsigned char data_read_adc;
      unsigned char tempature;
      void uart_init(unsigned int ubrr)
      {                          
       UBRRH=(unsigned char)(ubrr>>8);
       UBRRL=(unsigned char)ubrr;
       UCSRB |=(1<<RXCIE)|(1<<TXEN)|(1<<RXEN);
       UCSRC |=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
      }
      void uart_tran(unsigned char data)
      {
       while(!(UCSRA&(1<<UDRE)));
       UDR=data;
      }
      interrupt [USART_RXC] void uart_intr()
      {
       data_rec=UDR; 
       if(data_rec)
       PORTC.4=1;
       else
       PORTC.4=0;
      }
      void adc_init()
      {
       ADMUX |=(1<<REFS1)|(1<<REFS0);
       ADCSRA |=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS0);
      } 
      //DOC ADC BANG THAM DO
      unsigned int read_adc(unsigned char channel)
      {
       ADMUX |=channel;
       ADCSRA |=(1<<ADSC);
       while(!(ADCSRA&(1<<ADIF)));
       return ADCW;
      }
      void display_7seg(unsigned char data)
      {
       unsigned char chuc,dvi;
       chuc=data/10;
       dvi=data-chuc*10;
       PORTD=(chuc<<4);
       PORTB=dvi;
      }
      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=0xff;
      
      // Port C initialization
      // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTC=0x00;
      DDRC=0x1E;
      
      // 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=0xf0;
      
      uart_init(51);
      adc_init();
      //timer0_init();
      #asm("sei");
      while (1)
            {
            data_read_adc=read_adc(0);
            tempature=(unsigned char)(floor((float)256*data_read_adc/1024));
            display_7seg(tempature);
            uart_tran(tempature);
            delay_ms(1000);
            };
      }

      Comment

      • linhvinhhoa
        Thành viên mới
        • May 2010
        • 3

        #4

        Comment

        • hoangdai
          Thành viên tích cực
          • Nov 2005
          • 2720

          #5
          Chỉ đơn giản là điện áp tham chiếu chưa đc ổn định, nên giảm điện áp này để nâng cao chính xác.


          Add: 97 Quán Nam - Lê Chân - Hải Phòng.
          Tel: 031 518648 Phone: 0904 283 505

          Comment

          • haiau59
            Thành viên mới
            • Mar 2009
            • 6

            #6
            Bạn có thể nói rõ hơn được không?điện áp tham chiếu ở đây mình chọn là tham chiếu nội 2,56v.vậy mình có thể mắc thêm phần tử gì để ổn định khi đo.quả thật là cứ khi cắm thêm led và là nó bắt đầu đo lung tung.bạn có thể giúp mình về mạch không?vừa có thể đo được nhiệt độ mà hiển thị được lên led 7 thanh.code thì mình có thể chứ mạch thì mình không rõ lắm.cảm ơn bạn.

            Comment

            • hoangdai
              Thành viên tích cực
              • Nov 2005
              • 2720

              #7
              Chân AREF là chân điện áp tham chiếu, bạn cần ổn định điện áp chân này. Thường dùng diode ổn áp hoặc có thêm cuộn cảm chặn ở đầu vào chân này. Có thể dùng ngưỡng 5v hay 3.3V tùy bạn. Mình dùng LM35 mãi rồi, ko hề nhảy lung tung đâu. Bạn cũng nên xem lại thuật toán.


              Add: 97 Quán Nam - Lê Chân - Hải Phòng.
              Tel: 031 518648 Phone: 0904 283 505

              Comment

              • haiau59
                Thành viên mới
                • Mar 2009
                • 6

                #8
                Có lẽ bạn bảo mình chọn điện áp tham chiếu ngoài ở chân AREF.Mình sẽ thử nhưng nguồn cấp chân AREF chắc là nguồn riêng khác với nguồn cho vdk àh bạn?
                Còn sau đây là các bước mình đã làm có gì bạn xem giúp mình với:
                -phần truyền nhận giao tiếp máy tính thì được rồi,còn mỗi phần đo nhiệt độ
                -chọn điện áp tham chiếu:mình chọn tham chiếu nội 2,56v ,trong datasheet mega8 thi có 3 chế độ chọn điện áp tham chiếu:điện áp tham chiếu nội,AVCC,AREF.
                -Việc cách đọc nhiệt độ:cứ 1s thì đọc một lần,đọc xong thì hiển thị led 7 thanh và truyền về máy tính
                Code:
                while (1)
                      {
                      data_read_adc=read_adc(0);
                      tempature=(unsigned char)(floor((float)256*data_read_adc/1024));
                      display_7seg(tempature);
                      uart_tran(tempature);
                      delay_ms(1000);
                      };
                -Về phần mạch mình hỏi phần đo nhiệt độ
                +dao động ngoài thạch anh 8Mhz,tụ 22u
                +hiển thị led dùng 74ls47 để giải mã BCD sang 7 thanh
                +kênh adc0 đọc nhiệt độ
                +chân AREF mình mắc một tụ vì theo datasheet bảo nếu chọn tham chiếu nội thì mắc thêm(một chân tụ với aref,1 chân với đất-không biết đúng không).
                Nói chung là mình mắc giống mạch mô phỏng ở trên.bạn có thể sửa giúp mình hoặc có thể gợi ý cho mình cách làm của bạn không(cụ thể càng tốt)hay cho mình xin sơ đồ mạch.vì mình nghĩ cái này bạn cũng làm nhiều rồi.mình cảm ơn.
                Last edited by haiau59; 08-06-2010, 08:44.

                Comment

                • phuchiepjsc
                  Thành viên tích cực
                  • Jul 2009
                  • 418

                  #9
                  Nguyên văn bởi linhvinhhoa Xem bài viết
                  Của khỉ gì đây hả bố ? Khoe hàng à ?

                  Comment

                  • haiau59
                    Thành viên mới
                    • Mar 2009
                    • 6

                    #10
                    Mình mong các bạn đừng spam nữa.Nếu bạn nào biết thì giúp mình với.Đây là lần đầu mình làm mạch thật thấy nó khác với mô phỏng quá.Mong các bạn giúp đỡ cho cái mạch bài của mình..Mình cảm ơn!

                    Comment

                    • achut
                      Thành viên chính thức
                      • Feb 2008
                      • 67

                      #11
                      To : HAIAU59

                      Mong rằng file này sẽ giúp được bạn

                      Comment

                      • achut
                        Thành viên chính thức
                        • Feb 2008
                        • 67

                        #12
                        To : HAIAU59
                        Attached Files

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...