در میکروکنترلر ها توسط

باسلام خدمت دوستان

می خوام سنسور دمای tc 72  با mega8 با روش spi  ارتباط برقرار کنه ودما رو نشون بده.

هرکاری می کنم فقط Temp میاد.

کد های زیر رو نوشتم(تو code vision):

PORTB.2=1;//select the chip
           ( delay_ms(50
            SPDR=0X08
            (while(!SPSR.7
            SPDR=0X00
           ( while(!SPSR.7
            PORTB.2=0
          ( delay_ms(200
            PORTB.2=1
            (x=spi(0x02
            PORTB.2=0
          ( sprintf(lcd,"Temp=%f",x
            lcd_clear
            (lcd_puts(lcd

1 پاسخ

0 امتیاز
توسط jahandideh

با سلام و دورد

من خودم قبلا باهاش کار نکردم ولی کد زیر را برای PIC  دیدم.
به تنظمیات SPI کد دقت کنید .

لازم نیست همه جا CS را LOW کنید و دوباره High

همچنین مقدار spi که float نیست شما در sprintf نوع را f انتخاب کردین اگر هم لازم بود اعداد اعشاری بنویسید از قسمت کانفیگ کدویژن sprintf را روی float تنظیم کنید.

قسمت های اضافی کد زیر را در نظر نگیرید ولی آخرای کد را بیتشر دقت کنید با قسمت کانفیگ .

اگر نتونستید اطلاع بدید خودم بنویسم بفرستم. enlightened

کد زیر برای16F876A هست:


#include <16F876A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) 

#define clk      pin_c3                   // set pin clock is using
#define din      pin_c5                   // set pin data in is using
#define cs       pin_b2                   // set pin load/cs is using

int16 temp1;

void main()
{

    output_low(clk);                      // set clk line low 
      delay_us(1);
    output_low(din);                      // set data line in low
      delay_us(1);
    output_low(cs);                       // set load/cs line high
      delay_us(1);
   
                             

     setup_adc_ports(NO_ANALOGS);
     // Configure TC72 temperature sensor
     setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_XMIT_L_TO_H | SPI_CLK_DIV_16);

   while(1)
   {
      
      output_high(cs);                     // set cs line high
      delay_us(1); 
         spi_write(0x80);                 // Write Address
      delay_us(1);
      spi_write(0x00);             // Continuous mode
      delay_ms(150);                // Delay 150ms to let it complete conversion
   
      spi_write(0x02);              // Point to MSB temp register
      delay_us(1);
        temp1=spi_read(0);                // read temp
       delay_us(1); 
      output_low(cs);
      
      printf("Temperature is: %lu\n\r",temp1);
   
      }
   }


 

...