Thông báo

Collapse
No announcement yet.

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

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

  • 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

  • #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


    • #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


      • #4

        Comment


        • #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


          • #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


            • #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


              • #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, 09:44.

                Comment


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

                  Comment


                  • #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


                    • #11
                      To : HAIAU59

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

                      Comment


                      • #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...
                        X