اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط SRF02

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

    مشکل در ارتباط SRF02

    سلام من برنامه ارتباط USART با سنسور SRF02 رو نوشتم اما جواب نگرفتم
    کسی میدونه مشکل چیه؟
    کد:
         /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 7/17/2014
    Author : WWW.PARANDCO.COM
    Company : PARAND
    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>
    
    #ifndef RXB8
    #define RXB8 1
    #endif
    
    #ifndef TXB8
    #define TXB8 0
    #endif
    
    #ifndef UPE
    #define UPE 2
    #endif
    
    #ifndef DOR
    #define DOR 3
    #endif
    
    #ifndef FE
    #define FE 4
    #endif
    
    #ifndef UDRE
    #define UDRE 5
    #endif
    
    #ifndef RXC
    #define RXC 7
    #endif
    
    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<DOR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)
    
    // USART Receiver buffer
    #define RX_BUFFER_SIZE 8
    char rx_buffer[RX_BUFFER_SIZE];
    
    #if RX_BUFFER_SIZE <= 256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
      {
      rx_buffer[rx_wr_index++]=data;
    #if RX_BUFFER_SIZE == 256
      // special case for receiver buffer size=256
      if (++rx_counter == 0) rx_buffer_overflow=1;
    #else
      if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
      if (++rx_counter == RX_BUFFER_SIZE)
       {
       rx_counter=0;
       rx_buffer_overflow=1;
       }
    #endif
      }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index++];
    #if RX_BUFFER_SIZE != 256
    if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #endif
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 8
    char tx_buffer[TX_BUFFER_SIZE];
    
    #if TX_BUFFER_SIZE <= 256
    unsigned char tx_wr_index,tx_rd_index,tx_counter;
    #else
    unsigned int tx_wr_index,tx_rd_index,tx_counter;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
      {
      --tx_counter;
      UDR=tx_buffer[tx_rd_index++];
    #if TX_BUFFER_SIZE != 256
      if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    #endif
      }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
      {
      tx_buffer[tx_wr_index++]=c;
    #if TX_BUFFER_SIZE != 256
      if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
    #endif
      ++tx_counter;
      }
    else
      UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    // Declare your global variables here
    unsigned char b;
    unsigned char c;
    unsigned char a;
    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=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=1 State4=1 State3=T State2=T State1=T State0=T 
    PORTD=0x30;
    DDRD=0x30;
    
    // 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
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0xD8;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    
    // 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;
    
    // Global enable interrupts
    #asm("sei")
    
    PORTD.4=0;
    PORTD.5=1;
    while (1)
       {
       // Place your code here
        {      
                 
            putchar (0);     
            delay_ms(50);
            putchar (84);
            a= getchar();
            b= getchar();
            c=a*256;
            c=c+b;     
                    
            if(c<1)
            {      
             PORTD.4=1;            
             delay_ms(50);
             PORTD.4=0;      
             delay_ms(50);
            }
        } 
        }
        }
    هر اقدام بزرگی ابتدا محال به نظر میرسد

    #2
    پاسخ : مشکل در ارتباط SRF02

    کسی کار نکرده؟
    هر اقدام بزرگی ابتدا محال به نظر میرسد

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط SRF02

      کدتون اشتباه هست.

      اول باید آدرس را بفرستید و بعد command را که میشه همون 84. تا اینجاش را درست نوشتید البته به جز اون تاخیر بینشون که فکر نمیکنم نیاز باشه(توی دیتاشیت چیزی نگفته)

      بعد باید یه تاخیر بیشتر از 70 میلی ثانیه بزنید تا عملیات اندازه گیری انجام بشه.

      بعدش باید دوباره آدرس و کامند 94 را بفرستید و بعد از اون 2 بایت برای شما ارسال میشه.

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط SRF02

        الان درست شدش؟



        putchar (0);
        putchar (84);
        delay_ms(70);
        putchar (0);
        putchar (84);
        a= getchar();
        b= getchar();
        c=a*256;
        c=c+b;

        if(c<3)
        {
        PORTD.4=1;
        delay_ms(50);
        PORTD.4=0;
        delay_ms(50);
        }
        هر اقدام بزرگی ابتدا محال به نظر میرسد

        دیدگاه


          #5
          1

          1
          هر اقدام بزرگی ابتدا محال به نظر میرسد

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط SRF02

            ...
            هر اقدام بزرگی ابتدا محال به نظر میرسد

            دیدگاه


              #7
              پاسخ : مشکل در ارتباط SRF02

              کسی میدونه مشکل چیه؟؟؟؟؟؟
              هر اقدام بزرگی ابتدا محال به نظر میرسد

              دیدگاه


                #8
                پاسخ : مشکل در ارتباط SRF02

                برای دریافت باید کامند 94 را بفرستید نه 84

                دیدگاه


                  #9
                  پاسخ : مشکل در ارتباط SRF02

                  الان درسته؟
                  کد:
                           
                        
                          putchar (0);     
                          putchar (84);
                          delay_ms(70);
                          putchar (0);     
                          putchar (94);
                          a= getchar();
                          b= getchar();
                          c=a*256;
                          c=c+b;     
                                  
                          if(c<3)
                          {      
                           PORTD.4=1;            
                           delay_ms(50);
                           PORTD.4=0;      
                           delay_ms(50);
                          }
                  هر اقدام بزرگی ابتدا محال به نظر میرسد

                  دیدگاه


                    #10
                    پاسخ : مشکل در ارتباط SRF02

                    قاعدتا بله.

                    دیدگاه


                      #11
                      پاسخ : مشکل در ارتباط SRF02

                      کارنکردش :sad: :angry: :angry: :angry: :cry2: :cry2:
                      هر اقدام بزرگی ابتدا محال به نظر میرسد

                      دیدگاه


                        #12
                        پاسخ : مشکل در ارتباط SRF02

                        کسی نظری نداره؟؟؟؟
                        هر اقدام بزرگی ابتدا محال به نظر میرسد

                        دیدگاه

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