Thông báo

Collapse
No announcement yet.

LM35 và AVR

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

  • LM35 và AVR

    Tôi muốn đo nhiệt độ dùng LM35 giao tiếp với bộ ADC của ATmega16L.Tuy nhiên tôi đang gặp khó khăn về lắp mạch và lập trình.Xin mọi người giúp đỡ.Cám ơn nhiều.

  • #2
    Cái này có ví dụ trong Codevision rồi cậu ơi, cậu vào ví dụ xem thử nhé

    Comment


    • #3
      Tôi đưa chân OUT của LM35 vào kênh 0 (chân AD0) của ADC.
      Chương trình như sau:
      //real_time_hut@yahoo.com
      //khai bao thu vien
      #include<mega16.h>
      #include<stdio.h>
      #include <delay.h>

      //khai bao bien toan cuc
      unsigned int temp;

      //mau ham
      void khoi_tao_serial(void);
      void khoi_tao_ports(void);
      void khoi_tao_ADC(void);
      unsigned int doc_ADC(void);

      void main(void)
      {

      khoi_tao_ports();
      khoi_tao_serial();
      khoi_tao_ADC();

      while(1) //vong lap chinh
      {

      temp=~doc_ADC();
      temp=380*(temp/1024); //Vref=3.8V
      //10mV ung voi 1 do C

      printf("%i\n\r",temp);
      delay_ms(100); //cap nhat du lieu sau 100ms

      }
      }

      unsigned int doc_ADC(void)
      {
      unsigned int value;

      ADCSRA = ADCSRA | 0x40; // bat dau chuyen doi

      while( (ADCSRA & 0x10) == 0 ); // cho cho den khi chuyen doi //thanh cong

      value = ADCW; //lay gia tri ADC
      ADCSRA = ADCSRA | 0x10; // xoa co

      return value;
      }

      void khoi_tao_serial(void) //9600/8/N/1
      {
      UCSRA=0x02;
      UCSRB=0xD8;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x67;
      }

      void khoi_tao_ports(void)
      {
      DDRC = 0xFF; // PortC lam cong ra
      PORTC = 0x00;
      }

      void khoi_tao_ADC(void)
      {
      ADMUX = 0x00; // chon kenh 0
      ADMUX = ADMUX | 0x40; // chon dien ap nguong
      ADMUX = ADMUX | 0x20;

      ADCSRA = 0x07; // chon tan so thach anh
      ADCSRA = ADCSRA | 0x80; // cho phep ADC hoat dong
      }
      Last edited by digi_pow; 13-10-2006, 22:07.

      Comment


      • #4
        bat chuong trinh HyperTerminal len và quan sat nhiet do.
        Chuc bac thanh công.

        Comment


        • #5
          chờ 2 tuần nữa nhé. tôi sẽ giúp từ a->z
          |

          Comment


          • #6
            tôi gửi bạn đoạn code
            ;=====================
            ;last edition 28/9/06;
            ;=====================
            .include "m16def.inc"
            .org 0x000
            rjmp main
            .org 0x01C
            rjmp ADC_Complete
            main:
            ;Dat con tro ngan xep
            ldi temp,HIGH(RAMEND)
            out SPH,temp
            ldi temp,LOW(RAMEND)
            out SPL,temp
            ldi temp,0xFF
            out DDRB,temp ;ra led 7 thanh
            out DDRC,temp ;dk nhiet do
            out DDRD,temp ;ra led 7 thanh
            ldi temp,0b11111100 ;chi dung 2 bit 0,1 de lam dau vao co`n lai la` da^`u ra
            out DDRA,temp

            ;Dat clk cho ADC
            ldi temp,0b11011110 ;tan so 125 KHz 110
            out ADCSRA,temp
            ;===================
            ;Chon MUX va Vref
            ;AREF Internal Vref turn of; Mux 0:00000
            ldi temp,0b01100000 ;
            out ADMUX,temp
            sei ;Cho phep ngat
            ;wait interrupt
            loop:
            rjmp loop
            ;============
            ; ISR ;
            ;============
            ADC_Complete:

            ;dk nhiet do
            ;Calling: convert; display, control
            clr rdivL
            clr rdivH
            in rdivL,ADCL
            in rdivH,ADCH
            rcall Convert
            rcall Display
            rcall Control
            reti
            còn lại bạn làm tiếp nhé
            Bạn phải viết chương trình đổi số 10bit sang BCD để hiển thị
            |

            Comment


            • #7
              Nguyên văn bởi digi_pow Xem bài viết
              Tôi đưa chân OUT của LM35 vào kênh 0 (chân AD0) của ADC.
              Chương trình như sau:
              //real_time_hut@yahoo.com
              //khai bao thu vien
              #include<mega16.h>
              #include<stdio.h>
              #include <delay.h>

              //khai bao bien toan cuc
              unsigned int temp;

              //mau ham
              void khoi_tao_serial(void);
              void khoi_tao_ports(void);
              void khoi_tao_ADC(void);
              unsigned int doc_ADC(void);

              void main(void)
              {

              khoi_tao_ports();
              khoi_tao_serial();
              khoi_tao_ADC();

              while(1) //vong lap chinh
              {

              temp=~doc_ADC();
              temp=380*(temp/1024); //Vref=3.8V
              //10mV ung voi 1 do C

              printf("%i\n\r",temp);
              delay_ms(100); //cap nhat du lieu sau 100ms

              }
              }

              unsigned int doc_ADC(void)
              {
              unsigned int value;

              ADCSRA = ADCSRA | 0x40; // bat dau chuyen doi

              while( (ADCSRA & 0x10) == 0 ); // cho cho den khi chuyen doi //thanh cong

              value = ADCW; //lay gia tri ADC
              ADCSRA = ADCSRA | 0x10; // xoa co

              return value;
              }

              void khoi_tao_serial(void) //9600/8/N/1
              {
              UCSRA=0x02;
              UCSRB=0xD8;
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x67;
              }

              void khoi_tao_ports(void)
              {
              DDRC = 0xFF; // PortC lam cong ra
              PORTC = 0x00;
              }

              void khoi_tao_ADC(void)
              {
              ADMUX = 0x00; // chon kenh 0
              ADMUX = ADMUX | 0x40; // chon dien ap nguong
              ADMUX = ADMUX | 0x20;

              ADCSRA = 0x07; // chon tan so thach anh
              ADCSRA = ADCSRA | 0x80; // cho phep ADC hoat dong
              }
              sao mình dùng terminal của protues lại không thấy gì nhỉ??? mình nối 2chân RXD và TXD tương ứng với 2 chân RXD và TXD của vi diều khiển. mình copy code của bạn vào mà vẫn không được. ai biết chỉ giúp mình cái.
              cảm ơn nhiều.
              Never forget who you are!

              Comment


              • #8
                hihi mình làm được rồi tại set sai tần số dao động
                Never forget who you are!

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X