اطلاعیه

Collapse
No announcement yet.

مشکل در ماژول SRF02

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : مشکل در ماژول SRF02

    چرا دیگه. همون دیتاشیتا که اول پست گذاشتم بخونید. این در واقع ادرس +1 هستش که باید بنوییسید
    چیزی را بگو که بتوانی بنویسی
    چیزی را بنویس که بتوانی امضا کنی
    چیزی را امضا کن که بتوانی به آن عمل کنی (ناپلئون)

    دیدگاه


      #32
      پاسخ : مشکل در ماژول SRF02

      نوشته اصلی توسط Soroosh Moghimi
      من می خواهم با پروتکل i2c کار بکنم .
      اول از همه باید ببینیم که آدرس اولتراسونیک چند است . برای این کار به دیتا شیت srf02 نیاز داریم:
      http://m32.ir/up/2011/07/2011/08/SRF02.pdf
      وقتی srf را روشن می کنیم چراغ روی آن اول یکبار روشن می شود و سپس چند بار چشمک می زند(ممکن است حتی چشمک نزند). تعداد این چشمک ها را باید بشماریم بعد در دیتاشیت اون باید نگاه کنیم ادرس srf به ازای این تعداد چشمک(short flash ) چقدر است . مثلا اگر یک بار چشمک بزند ادرس ان 226 است.
      حالا میریم سراغ کد :
      اول از همه باید کتابخانه را اینکلود کنیم:
      #include <i2c.h>
      بعد باید مشخص کنیم که دو پایه ی scl و sda روی کدام پایه های میکرو باشند. برای مثال ما پایه های 0 و 1 پورت d را انتخاب میکنیم:
      #asm
      .equ __i2c_port=0x12 ;PORTD
      .equ __sda_bit=1
      .equ __scl_bit=0
      #endasm
      خوب حالا باید اول ادرس اولتراسونیک را فراخوانی کنیم و سپس باید خروجی آن را به سانتی متر تنظیم کنیم و در خواست دریافت اطلاعات بکنیم . خروجی srf به صورت دو بایت است که ما این دوبایت را د ردو رجیستر bit1 و bit2 میریزیم.
      برنامه مربوط به راه اندازی اولتراسونیک به صورت کلی به شکل زیر می باشد:
      #include <i2c.h>
      #asm
      .equ __i2c_port=0x12 ;PORTD
      .equ __sda_bit=1
      .equ __scl_bit=0
      #endasm
      char bit1,bit2;
      int ultra;
      i2c_start ();
      i2c_write (226); //srf adress
      i2c_write (0);
      i2c_write (0x51); // unit=cm
      i2c_stop ();
      i2c_start ();
      i2c_write (226); // srf adress
      i2c_write (2); // data request
      i2c_start ();
      i2c_write (227); // srf adress +1
      bit1=i2c_read (1); // high value data reg
      bit2=i2c_read (0); // low value data reg
      i2c_stop ();
      ultra=bit1;
      ultra=ultra*256+bit2;
      اگر سوالی داشتید من درخدمتم :nice: :nerd:
      موفق باشید :nerd:
      سلام مهندس من از برنامه شما استتفاده کردم اما جواب نداد


      کد:
        /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.05.0 Evaluation
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project : 
      Version : 
      Date  : 2/9/2015
      Author : Freeware, for evaluation and non-commercial use only
      Company : 
      Comments: 
      
      
      Chip type        : ATmega8
      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 <delay.h>
      #include <stdlib.h>
      // I2C Bus functions
      #asm
        .equ __i2c_port=0x15 ;PORTC
        .equ __sda_bit=0
        .equ __scl_bit=1
      #endasm
      #include <i2c.h>
      
      // Alphanumeric LCD Module functions
      #include <alcd.h>
      char s1[];
      char bit1,bit2;
      int ultra;
      // Declare your global variables here
      
      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=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=0x00;
      
      // 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 disabled
      ADCSRA=0x00;
      
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
      
      // TWI initialization
      // TWI disabled
      TWCR=0x00;
      
      // I2C Bus initialization
      i2c_init();
      
      // 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);
      
      while (1)
         {
         // Place your code here
       {      
        i2c_start ();
            i2c_write (226); //srf adress
            i2c_write (0);
            i2c_write (0x51); // unit=cm
            i2c_stop ();
      i2c_start ();
            i2c_write (226); // srf adress
            i2c_write (2); // data request
            i2c_start ();
            i2c_write (227); // srf adress +1
            bit1=i2c_read (1); // high value data reg
            bit2=i2c_read (0); // low value data reg
            i2c_stop ();
            ultra=bit1;
            ultra=ultra*256+bit2; 
           itoa(ultra,s1); 
            lcd_clear();
            lcd_puts(s1);
            delay_ms(10);
       }
         
        }
           }
      هر اقدام بزرگی ابتدا محال به نظر میرسد

      دیدگاه

      لطفا صبر کنید...
      X