اطلاعیه

Collapse
No announcement yet.

hmt,hmr

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

    hmt,hmr

    سلام به همه دوستان ارسال اطلاعات با hmt و دریافت آن توسط hmr انجام میشود اما یک مشکل وجود دارد:
    گاهی اوقات گیرنده نه اطلاعات و حتی نویز را نیز نمیگرد و به صورت 5 ولت خط صاف میشود.
    اگر راهنمایی کنید خوشحال میشوم.

    #2
    پاسخ : hmt,hmr

    شاید گیرنده خوابش برده :icon_razz:
    باید 55 رو بفرستی تا بیدار بشه البته HEX
    ذکات علم یاد دادنه ....

    دیدگاه


      #3
      پاسخ : hmt,hmr

      سلام به دوستانی که تا الان با ارسال دیتا با این ماژول ها مشکل داشتن.
      دوست عزیزی به نام آقای سبحان سروری PDF عالی آماده کردن که تمام ادا اصول این ماژول ها رو داخلش قرار دادن.
      لینک دانلود : http://www.persiangig.com/pages/down...%20SARVARI.pdf
      خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

      دیدگاه


        #4
        پاسخ : hmt,hmr

        از ارسال کد 55 hex استفاده کردم ولی جواب نداد اگر راهنمایی کنید متشکرم. :angry:

        دیدگاه


          #5
          پاسخ : hmt,hmr

          فکر کنم با این حساب احتیاج به یه اسکوپ داری باید اول مطمئن بشی خروجی فرستنده چیزی داری یا نه بعد اونوقت بری سراغ گیرنده
          ایا برنامه فرستنده جوری نیست که دیگه چیزی نفرسته نمیدونم oo: بعد از یه مدتی مثلا...
          یه کار دیگه هم بکنی بد نیست ارتباط با سیم برقرار کن ببین همین مشکل پیش میاد یا نه...

          میشه برنامتو بزاری تا بهتر بشه کمکت کرد
          تو برنامه گیرنده از وقفه سریال استفاده میکنی؟
          ذکات علم یاد دادنه ....

          دیدگاه


            #6
            پاسخ : hmt,hmr

            سلام فرستنده بدون مشکل است.و با سیم هم گیرنده فکر نمیکنم مشکلی داشته باشه ضمنا برنامه مربوط به حرکت ماشین کنترلی است.
            برنامه فرستنده وگیرنده را قرار دادم.



            برنامه گیرنده:

            کد:
            /*****************************************************
            This program was produced by the
            CodeWizardAVR V2.03.4 Standard
            Automatic Program Generator
            © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com
            
            Project : 
            Version : 
            Date  : 2002/01/20
            Author : 
            Company : 
            Comments: 
            
            
            Chip type      : ATmega32
            Program type    : Application
            Clock frequency   : 11.059200 MHz
            Memory model    : Small
            External RAM size  : 0
            Data Stack size   : 512
            *****************************************************/
            
            #include <mega32.h>
            #include <delay.h>
            unsigned int x,y,z;
            char hafeze[2];
            #define RXB8 1
            #define TXB8 0
            #define UPE 2
            #define OVR 3
            #define FE 4
            #define UDRE 5
            #define RXC 7
            
            #define FRAMING_ERROR (1<<FE)
            #define PARITY_ERROR (1<<UPE)
            #define DATA_OVERRUN (1<<OVR)
            #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_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
              if (++rx_counter == RX_BUFFER_SIZE)
               {
               rx_counter=0;
               rx_buffer_overflow=1;
               };
              };
            }
            
            #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_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
            #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_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
              };
            }
            
            #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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
              ++tx_counter;
              }
            else
              UDR=c;
            #asm("sei")
            }
            #pragma used-
            #endif
            
            // Standard Input/Output functions
            #include <stdio.h>
            
            // Timer 0 overflow interrupt service routine
            interrupt [TIM0_OVF] void timer0_ovf_isr(void)
            {
            // Reinitialize Timer 0 value
            TCNT0=0x27;
            // Place your code here
             OCR0=x;
            }
            
            // Timer 0 output compare interrupt service routine
            interrupt [TIM0_COMP] void timer0_comp_isr(void)
            {
            // Place your code here
            
            }
            
            // Timer 1 overflow interrupt service routine
            interrupt [TIM1_OVF] void timer1_ovf_isr(void)
            {
            // Reinitialize Timer 1 value
            TCNT1H=0x03;
            TCNT1L=0x27;
            // Place your code here
            OCR1A=y;
            }
            
            // Timer 1 output compare A interrupt service routine
            interrupt [TIM1_COMPA] void timer1_compa_isr(void)
            {
            // Place your code here
            
            }
            
            // Declare your global variables here
            
            void main(void)
            {
            
            // Declare your local variables here
            // Input/Output Ports initialization
            // Port A initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
            // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 
            PORTA=0x00;
            DDRA=0x1F;
            
            // Port B initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T 
            PORTB=0x00;
            DDRB=0x08;
            
            // Port C 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 
            PORTC=0x00;
            DDRC=0x00;
            
            // Port D initialization
            // Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=Out Func0=In 
            // State7=T State6=T State5=0 State4=T State3=T State2=T State1=0 State0=T 
            PORTD=0x00;
            DDRD=0x22;
            
            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: 11059.200 kHz
            // Mode: Fast PWM top=FFh
            // OC0 output: Inverted PWM
            TCCR0=0x79;
            TCNT0=0x27;
            OCR0=0x28;
            
            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: 11059.200 kHz
            // Mode: Fast PWM top=03FFh
            // OC1A output: Inverted
            // OC1B output: Discon.
            // Noise Canceler: Off
            // Input Capture on Falling Edge
            // Timer 1 Overflow Interrupt: On
            // Input Capture Interrupt: Off
            // Compare A Match Interrupt: On
            // Compare B Match Interrupt: Off
            TCCR1A=0xC3;
            TCCR1B=0x09;
            TCNT1H=0x03;
            TCNT1L=0x27;
            ICR1H=0x00;
            ICR1L=0x00;
            OCR1AH=0x03;
            OCR1AL=0x28;
            OCR1BH=0x00;
            OCR1BL=0x00;
            
            // Timer/Counter 2 initialization
            // Clock source: System Clock
            // Clock value: Timer 2 Stopped
            // Mode: Normal top=FFh
            // OC2 output: Disconnected
            ASSR=0x00;
            TCCR2=0x00;
            TCNT2=0x00;
            OCR2=0x00;
            
            // External Interrupt(s) initialization
            // INT0: Off
            // INT1: Off
            // INT2: Off
            MCUCR=0x00;
            MCUCSR=0x00;
            
            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x17;
            
            // USART initialization
            // Communication Parameters: 8 Data, 1 Stop, No Parity
            // USART Receiver: On
            // USART Transmitter: On
            // USART Mode: Asynchronous
            // USART Baud Rate: 1200
            UCSRA=0x00;
            UCSRB=0xD8;
            UCSRC=0x86;
            UBRRH=0x02;
            UBRRL=0x3F;
            
            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            ACSR=0x80;
            SFIOR=0x00;
            
            // Global enable interrupts
            #asm("sei")
            
            while (1){
               
                 PORTA.4=1;
               printf ("inter f,b,l,s or r for go next prese enter : \n") ;
               hafeze[0] = getchar () ;
               //if(hafeze[0]=='1'){
                //hafeze[0] = getchar () ;
               if ( hafeze[0]=='d' ){if(x>=39&&x<250)x+=10;else x=40;}
                if ( hafeze[0]=='u' ){if(x>=39&&x<250)x-=10;else x=40;}
                 if ( hafeze[0]=='l' ){if(y>=807&&y<1024)y+=10;else y=808;}
                 if ( hafeze[0]=='h' ){if(y>=807&&y<1024)y-=10;else y=808;}
                if ( hafeze[0]=='f' )
                {
                PORTA.0=1;
                PORTA.1=0 ; 
                PORTA.2=1 ;
                PORTA.3=0;
                }
               else if ( hafeze[0]=='b' )
                {
                PORTA.0=0;
                PORTA.1=1 ; 
                PORTA.2=0 ;
                PORTA.3=1;
                }
               else if ( hafeze[0]=='s' )
                {              
                PORTA.0=1;
                PORTA.1=1 ; 
                PORTA.2=1 ;
                PORTA.3=1;
                }
               };
            }  
            
            
            
            
            برنامه فرستنده:
            
             
            /*****************************************************
            This program was produced by the
            CodeWizardAVR V2.03.4 Standard
            Automatic Program Generator
            © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com
            
            Project : 
            Version : 
            Date  : 2002/01/20
            Author : 
            Company : 
            Comments: 
            
            
            Chip type      : ATmega32
            Program type    : Application
            Clock frequency   : 11.059200 MHz
            Memory model    : Small
            External RAM size  : 0
            Data Stack size   : 512
            *****************************************************/
            
            #include <mega32.h>
            
            // Standard Input/Output functions
            #include <stdio.h>
            
            // Declare your global variables here
            char hafeze[2];
            void main(void)
            {
            // Declare your local variables here
            
            // Input/Output Ports initialization
            // Port A 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 
            PORTA=0x00;
            DDRA=0x00;
            
            // 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
            // 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 
            PORTC=0x00;
            DDRC=0x00;
            
            // Port D initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T 
            PORTD=0x00;
            DDRD=0x02;
            
            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: Timer 0 Stopped
            // Mode: Normal top=FFh
            // OC0 output: Disconnected
            TCCR0=0x00;
            TCNT0=0x00;
            OCR0=0x00;
            
            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: Timer 1 Stopped
            // Mode: Normal top=FFFFh
            // OC1A output: Discon.
            // OC1B output: Discon.
            // Noise Canceler: Off
            // Input Capture on Falling Edge
            // Timer 1 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: Timer 2 Stopped
            // Mode: Normal top=FFh
            // OC2 output: Disconnected
            ASSR=0x00;
            TCCR2=0x00;
            TCNT2=0x00;
            OCR2=0x00;
            
            // External Interrupt(s) initialization
            // INT0: Off
            // INT1: Off
            // INT2: Off
            MCUCR=0x00;
            MCUCSR=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: 1200
            UCSRA=0x00;
            UCSRB=0x18;
            UCSRC=0x86;
            UBRRH=0x02;
            UBRRL=0x3F;
            
            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            ACSR=0x80;
            SFIOR=0x00;
            
            while (1)
               {
               hafeze[0]=getchar();
               puts(hafeze);
               };
            }

            دیدگاه


              #7
              پاسخ : hmt,hmr

              ببین با این جواب میده من تست نکردم...

              قسمت While فرستنده:

              while (1)
              {

              putchar(85); //teranmit bit => 1010101 hex => 55 Ascii => 'U'
              delay_ms(200);

              putchar('1'
              delay_ms(200);

              printf("hello"
              delay_ms(200);

              putchar('0'
              delay_ms(200);


              //hafeze[0]=getchar();
              //puts(hafeze);
              };

              گیرنده:
              قسمت وقفه دریافت سریال)


              کد:
              /*****************************************************
              This program was produced by the
              CodeWizardAVR V2.03.4 Standard
              Automatic Program Generator
              © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
              http://www.hpinfotech.com
              
              Project :
              Version :
              Date  : 2002/01/20
              Author :
              Company :
              Comments:
              
              
              Chip type      : ATmega32
              Program type    : Application
              Clock frequency   : 11.059200 MHz
              Memory model    : Small
              External RAM size  : 0
              Data Stack size   : 512
              *****************************************************/
              
              #include <mega32.h>
              #include <delay.h>
              #include <string.h>
              #include <stdlib.h>
              #include <stdio.h>
              
              bit bit_data=0;
              bit bit_control=0;
              char arrey[]={"hello"};
              char pass_rx_data[6];
              
              #define RXB8 1
              #define TXB8 0
              #define UPE 2
              #define OVR 3
              #define FE 4
              #define UDRE 5
              #define RXC 7
              
              #define FRAMING_ERROR (1<<FE)
              #define PARITY_ERROR (1<<UPE)
              #define DATA_OVERRUN (1<<OVR)
              #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)
                {
                 
                 if(data=='1') bit_data=1;
                  
                 if(bit_data)
                  {
                   rx_buffer[rx_wr_index]=data;
                   if(data='0') 
                   {
                   bit_data=0;
                   bit_control=1; 
                   rx_wr_index=0;
                    }
                  }
                
                
                if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
                if (++rx_counter == RX_BUFFER_SIZE)
                 {
                 rx_counter=0;
                 rx_buffer_overflow=1;
                 };
                };
              }
              قسمت While برنامه:

              کد:
              while (1){
                 
                 if(bit_control)
                 { 
                    for(a=1;a<=4;a++)
                    { 
                     pass_rx_data[c]=rx_buffer0[a];   
                     c++;
                     } 
                     c=0;
                  
                  if(strcmp(pass_rx_data ,arrey)==0)
                  { 
                   PORTA.0=1;
                   PORTA.1=0 ;
                   PORTA.2=1 ;
                   PORTA.3=0;
                   }
                   bit_control=0;
                  }
                 };
              ببین اگه مشکلی داشت بگو اصلاح کنم اینو شبیه نوشتم احتمالا ایراد داشته باشه هر جاشم نفهمیدی بگو برات توضیح بدم
              یه توضیح کلی اینکه فرستنده کلمه hello رو میفرسته قبلش 55 رو میفرسته گیرنده هم تو وقفه دریافت سریال هر موقعه کارکتر 1 اومد شروع میکنه دیتاهارو ریختن تو بافرش و همچینکه کارکتر 0 اومد دیگه هیچ چیزی رو قبول نمیکنه

              البته این یه مثاله سادس خیلی بهتر از این میشه برنامه براش نوشت..
              انشا ا... که کار بده
              ذکات علم یاد دادنه ....

              دیدگاه


                #8
                پاسخ : hmt,hmr

                سلام
                فرستنده و گیرنده خیلی قشنگ کار کرد ولی بعد از دریافت اطلاعات موتور کار نکرد. دو سه جای برنامه ایرادای کوچک داشت
                ضمنا نفهمیذم چرا if(bit_data را بدون شرط نوشتید مگه نبایدif(bit_data==1) باشد :eek:

                دیدگاه


                  #9
                  پاسخ : hmt,hmr

                  سلام
                  یعنی الان دیگه مشکلی نداره ؟ دیگه گیرنده اون اشکالی که گفتین رو نداره ؟

                  اگه اون شرط مربوط به PORTA رو اجرا نمیکنه for(a=2;a<=6;a++) رو تغیر بده ببین درست میشه

                  if(bit_data) این با if(bit_data==1) فرقی نداره :icon_razz:
                  ذکات علم یاد دادنه ....

                  دیدگاه


                    #10
                    پاسخ : hmt,hmr

                    سلام خدا رو شکر آن مشکلی که گفته بودم بر طرف شد.
                    ولی هنوز موتور کار نمیکنه الان میخام وقتم رو روی اصلاح برنامه اولی که رو سایت گذاشتم بگذارم. :read:
                    به حر حال از راهنمایی شما ممنونم.
                    یک چند تا سوال هم دارم:
                    ۱)چرا باید خواندن بافر از شماره ۲ـ۶ باشد؟
                    ۲)چرا bit_control را در آخر برنامه صفر کردید؟

                    دیدگاه


                      #11
                      پاسخ : hmt,hmr

                      1) چون تو اولیش 55 و تو دومیش 1 پس دیتایی که ما نیاز داریم تو سومیه که همون 2 میشه اگه از 0 شروع کنیم

                      2)برای اینکه فقط یه بار اجرا بشه ومنتظر بمونه تا دیتای جدید برسه و بیخودی هی زیر برنامه رو چک نکنه راستی یه اشکال دیگه تو برنامه هست اخر برنامه اونجایی که bit_control=0 ; میشه بعدش bit_data=1 کن تا وقفه دریافت شرطش درست بشه گفتم برنامه خیلی اشکال داره اخه تو خوابو بیداری نوشتم :mrgreen:
                      ذکات علم یاد دادنه ....

                      دیدگاه


                        #12
                        پاسخ : hmt,hmr

                        سلام آقا مجید
                        خیلی دوست دارم بدونم کجای برنامت اشکال داره چون چند بار آن را خواندم ولی مشکلی پیدا نکردم.
                        برات آرزوی موفقیت میکنم. :smile:

                        دیدگاه


                          #13
                          پاسخ : hmt,hmr

                          یعنی الان این شرطو اجرا میکنه؟

                          if(strcmp(pass_rx_data ,arrey)==0)
                          {
                          PORTA.0=1;
                          PORTA.1=0 ;
                          PORTA.2=1 ;
                          PORTA.3=0;
                          }
                          ذکات علم یاد دادنه ....

                          دیدگاه


                            #14
                            پاسخ : hmt,hmr

                            نوشته اصلی توسط majid.4206
                            یعنی الان این شرطو اجرا میکنه؟

                            if(strcmp(pass_rx_data ,arrey)==0)
                            {
                            PORTA.0=1;
                            PORTA.1=0 ;
                            PORTA.2=1 ;
                            PORTA.3=0;
                            }
                            نه شرطی که نوشتی اجرا نشد.

                            دیدگاه

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