اطلاعیه

Collapse
No announcement yet.

GSM و ارتباط آن با AVR

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : GSM و ارتباط آن با AVR

    نوشته اصلی توسط ngreghbali
    با hyper terminal ارتباط برقرار شده، از اول درست بود، اما چیزی که چک کردم فکر میکنم تو گرفتن دیتا از پورت سریال به میکرو مشکل داره، بنابراین هیچی هم نشون نمیده!
    بابا getchar() کار میکنم ک اینطوریه!
    از دیشب برنامه ای که یکی از دوستان تو پست بالاتر گذاشتن رو اجرا کردم، یه چیزایی نشون میده، اما اس ام اس کامل نیست، مثلا فقط تاریخ رو نشون میده؛ یه قسمت رندوم!
    نمیدونم چکارش کنم دیگه :sad:
    سلام دوست عزیز
    دستور getchar رو بی خیال
    از اینتراپت uart استفاده کن هر چی رو هم که دریافت کردی بریز تو یه آرایه که خودت تعریف میکنی اندازش رو
    بعد محتویات آرایه رو تحلیل کن
    موفق باشی
    برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

    دیدگاه


      پاسخ : GSM و ارتباط آن با AVR

      نوشته اصلی توسط hossein_tomari007
      سلام دوست عزیز
      دستور getchar رو بی خیال
      از اینتراپت uart استفاده کن هر چی رو هم که دریافت کردی بریز تو یه آرایه که خودت تعریف میکنی اندازش رو
      بعد محتویات آرایه رو تحلیل کن
      موفق باشی
      سلام
      ممنونم، بله من همین کارو الان کردم! اس ام اس خوشبختانه دریافت میشه :smile:
      اما متاسفانه اول و آخر اس ام اس این علامت : || میذاره و از خط دوم به اول شروع میکنه به نوشتن :question:

      دیدگاه


        پاسخ : GSM و ارتباط آن با AVR

        نوشته اصلی توسط ngreghbali
        سلام
        ممنونم، بله من همین کارو الان کردم! اس ام اس خوشبختانه دریافت میشه :smile:
        اما متاسفانه اول و آخر اس ام اس این علامت : || میذاره و از خط دوم به اول شروع میکنه به نوشتن :question:
        سلام
        میتونی از راه های زیر به جواب برسی
        اول اینکه موقع نوشتن اس ام اس یه ستاره تایپ کنی بعدش موقع دریافت اس ام اس ستاره رو پیدا کنی و بعدش رو تحلیل کنی
        دوم اینکه اگه به پروتکل خوندن اس ام اس دقت کنی میبینی که یک کاراکتر (-) هستش میتونی اونرو پیدا کنی و بعد 6 کاراکتر دیگه اس ام اسی که نوشتی رو ببینی
        دو تا روش رو خودم تست کردم به جواب رسیدم
        مشکلی بود در خدمتیم
        موفق باشی
        :wow: :rolleyes: :job:
        برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

        دیدگاه


          پاسخ : GSM و ارتباط آن با AVR

          نوشته اصلی توسط ngreghbali
          سلام
          ممنون شما میخوام دما ارسال کنم نمیشه کاراکتر اضافی بذارم، اما با اینتراپتهای یوسارت تونستم اس ام اس رو دریافت کنم
          سلام
          خدا رو شکر که به جواب رسیدید!!!! :applause:
          سوالی هم که کردید متوجه نشدم منظورتون چیه؟؟؟؟؟ که دما رو چجوری میخواهید بخونید؟؟؟؟ oo:
          با خود ماژول؟
          با یه سنسور؟ :surprised:
          چجوری؟
          برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

          دیدگاه


            پاسخ : GSM و ارتباط آن با AVR

            نوشته اصلی توسط hossein_tomari007
            سلام
            خدا رو شکر که به جواب رسیدید!!!! :applause:
            سوالی هم که کردید متوجه نشدم منظورتون چیه؟؟؟؟؟ که دما رو چجوری میخواهید بخونید؟؟؟؟ oo:
            با خود ماژول؟
            با یه سنسور؟ :surprised:
            چجوری؟
            سلام
            اول ممنون که واسه کمکهاتون :smile:
            من با یه ماژول GSM که نقش فرستنده هست دما رو اندازه میگیرم و اس ام اس میکنم به ماژولGSM دیگه ای که تو گیرنده هست! که نمایشش به شکل char هستش، حالا میخوام این عدد char رو به int تبدیل کنم تا بتونم کنترلش کنم. مثلا بگم اگه از 23 درجه کمتر باشه،LED1 روشن بشه، و اگه از 27 بیشتر LED2 روشن بشه!
            اما نمیشه، هرکاریش میکنم درنمیاد :angry:

            دیدگاه


              پاسخ : GSM و ارتباط آن با AVR

              نوشته اصلی توسط SeGMeX
              با چه دستور هایی این کارو انجام میدید که جور در نمیاد .
              سلام
              #define hightemp 26
              #define lowtemp 23
              char,*ptr1 , j=0 ;
              int k,temp=0

              lcd_putchar(*ptr1);
              k=atoi(ptr1);

              while (j<2)
              {
              if (j==0) {temp=k*10;}

              if (j==1) {temp=temp+k;}

              j++;
              }


              }
              delay_ms(2000);
              if( temp < lowtemp ) {PORTB.0=1; PORTB.1=0;}
              if(temp > hightemp) {PORTB.0=0; PORTB.1=1;};

              دیدگاه


                &gps&gsm&bascom&AVR

                سلام خدمت اساتید.
                تا تشکر نکردین برنامه رو کپی نکنید.
                این برنامه واسه ندزدیدن ماشین یا موتور کاربرد داره. آقادزده موقعیتش رو به ما همیشه میگه.
                یه تک زنگ میزنی به سیم کارت رو جی اس ام . میکرو شماره رو آنالیز میکنه ببینه شماره خودته . اگه بود میکرو مشخصات جی پی اس رو میخونه و میفرسته به شمارت.
                تا تشکر نکردین برنامه رو کپی نکنید.
                .
                .
                .
                .
                .
                تا تشکر نکردین برنامه رو کپی نکنید.


                $regfile = "m16def.dat" ' specify the used micro
                $crystal = 8000000
                $baud = 9600 ' used crystal frequency ' use baud rate

                Config Pinb.0 = Output
                Portb.0 = 0

                Wait 2
                Porta.0 = 1
                Wait 2
                Porta.0 = 0

                Dim C As Word
                Dim B As Word
                Dim B1 As Byte
                Dim S As Byte
                Dim S1 As Byte
                Dim R As Byte
                Dim U As Byte
                Dim N As String * 20
                Dim N1 As String * 20
                Dim N2 As String * 6
                Dim N3 As String * 10
                Dim N4 As String * 10
                Dim Mn As String * 30
                Dim Nm As String * 55
                Dim Cc As String * 10
                Dim Ccc As String * 10
                Dim A As Single
                Dim N5 As String * 3
                Dim N6 As String * 3
                Dim N11 As String * 5
                Dim N22 As String * 5
                Dim N10 As String * 1
                Dim N20 As String * 1



                Do
                J:
                Porta.0 = 0
                Input Mn
                N = Mid(mn , 2 , 5)
                If N = "+CLIP" Then
                N1 = Mid(mn , 19 , 4)
                B = Val(n1)
                If B = 3903 Then
                Porta.0 = 1
                Wait 3
                Open "coma.0:9600,8,n,1" For Input As #1
                U = 0
                Do 'gps
                U = U + 1
                Input #1 , Nm
                N = Mid(nm , 2 , 6)
                If N = "$GPRMC" Then N4 = Mid(nm , 47 , 5)
                If N = "$GPGSV" Then N6 = Mid(nm , 13 , 2)
                If N = "$GPGGA" Then
                N1 = Mid(nm , 20 , 4)
                N11 = Mid(nm , 25 , 4 )
                N10 = Mid(nm , 30 , 1) 'N
                C = Val(n11)
                A = C * 0.006
                Cc = Fusing(a , "#.##&quot
                N2 = Mid(nm , 32 , 5)
                N22 = Mid(nm , 38 , 4 )
                N20 = Mid(nm , 43 , 1) 'E
                C = Val(n22)
                A = C * 0.006
                Ccc = Fusing(a , "#.##&quot
                N5 = Mid(nm , 47 , 2)
                A = Val(n4)
                A = A * 1.852
                B = Round(a)
                End If
                Loop Until U > 25
                Close #1

                Print "at+cmgs=" ; Chr(34) ; "09178523903" ; Chr(34)
                Wait 2
                Print N1 ; Chr(39) ; Cc ; Chr(34) ; N10 ; Spc(2) ; N2 ; Chr(39) ; Ccc ; Chr(34) ; N20 ; Spc(2) ; N5 ; Spc(2) ; N6 ; Spc(2) ; B ; "km/h Google Earth" ; Chr(26)
                Wait 12

                Goto J
                Else
                Goto J
                End If
                End If
                If N = "+CMTI" Then
                N1 = Mid(mn , 14 , 2)
                Wait 1
                S1 = 0
                Jjj:
                S = 0
                S1 = S1 + 1
                If S1 > 2 Then Goto J
                Print "AT+CMGR=" ; N1
                Porta.0 = 0
                Jj:
                Input N3
                S = S + 1
                If S > 5 Then Goto Jjj
                N4 = Mid(n3 , 2 , 2)
                If N4 = "64" Then
                N2 = Mid(n3 , 4 , 1)
                '648
                B = Val(n2)
                For R = 1 To B
                Wait 1
                Porta.0 = 1
                Wait 1
                Porta.0 = 0
                Next
                Print "at+cmgd=" ; N1
                Wait 1
                Goto J
                Else
                Print "at+cmgd=" ; N1
                Wait 1
                Goto Jj
                End If
                Else
                Goto J
                End If

                Loop



                دیدگاه


                  پاسخ : GSM و ارتباط آن با AVR

                  نوشته اصلی توسط ngreghbali
                  سلام
                  اول ممنون که واسه کمکهاتون :smile:
                  من با یه ماژول GSM که نقش فرستنده هست دما رو اندازه میگیرم و اس ام اس میکنم به ماژولGSM دیگه ای که تو گیرنده هست! که نمایشش به شکل char هستش، حالا میخوام این عدد char رو به int تبدیل کنم تا بتونم کنترلش کنم. مثلا بگم اگه از 23 درجه کمتر باشه،LED1 روشن بشه، و اگه از 27 بیشتر LED2 روشن بشه!
                  اما نمیشه، هرکاریش میکنم درنمیاد :angry:
                  سلام
                  میتونی از دستور زیر استفاده کنی
                  کد:
                  char ptr[2];
                  a=ptr[0];
                  a=a+ptr[1]*10;
                  بعدش a رو کنترل کنی
                  دستور atoi رو چک کردم کار نکرد.!!!!!!! :surprised:
                  موفق باشی :biggrin:
                  برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                  دیدگاه


                    پاسخ : GSM و ارتباط آن با AVR

                    نوشته اصلی توسط hossein_tomari007
                    سلام
                    میتونی از دستور زیر استفاده کنی
                    کد:
                    char ptr[2];
                    a=ptr[0];
                    a=a+ptr[1]*10;
                    بعدش a رو کنترل کنی
                    دستور atoi رو چک کردم کار نکرد.!!!!!!! :surprised:
                    موفق باشی :biggrin:
                    سلام
                    دستور atio باید کتابخونه ش رو اولش بزارین تا کار کنه که اینه :#include <stdlib.h>
                    با این دستوری که نوشتین چطوری میشه یه عدد رو تبدیل کرد؟؟

                    دیدگاه


                      پاسخ : GSM و ارتباط آن با AVR

                      نوشته اصلی توسط ngreghbali
                      سلام
                      دستور atio باید کتابخونه ش رو اولش بزارین تا کار کنه که اینه :#include <stdlib.h>
                      با این دستوری که نوشتین چطوری میشه یه عدد رو تبدیل کرد؟؟
                      سلام
                      شما میخواهید عدد رو به رشته تبدیل کنید یا رشته رو به عدد؟ :angry:
                      میتونید کل کد هایی که نوشتید رو بزارید ببینیم و بعد جواب رو اگه تونستیم بدیم؟؟؟؟ :eek:
                      برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                      دیدگاه


                        پاسخ : GSM و ارتباط آن با AVR

                        نوشته اصلی توسط hossein_tomari007
                        :biggrin:
                        سلام
                        چه نوع فنی؟
                        سوالتون چیه؟؟؟؟؟
                        بگید من نتونم دوستان حرفه ای هستند :agree:
                        سلام
                        ببینین من برنامه رو نوشتم که از یه عدد بیشتر فن 1و از یه عدد کمتر فن روشن که رو پایه های 0 و 1 پورت b بستم و سر راه فن 5 ولتم یه رله 5 ولت و ترانزیستور و دیود گذاشتم
                        فنی که به پورت B.0 وصله به محضه اینکه روشن میشه، خاموشش میکنه اما رو پورت B.1 این اتفاق نمی افته! حتما برای فنی که به پورت B.0 وصله باید منبع جدا گذاشت تا کار کنه! که من نمیخوام منابع جدا باشه

                        دیدگاه


                          پاسخ : GSM و ارتباط آن با AVR

                          نیازی به تغذیه مستقل برای دو FANآ‌ نیست دایی جان.
                          اگه سخت افزار دو FANآ‌ کاملا مشابه هستند احتمالا مشکل توی برنامه است و ربطی به تغذیه نداره.
                          می تونی برای تست صحت سخت افزار، پورت B.0 رو به ترانزیستور فنی شماره 2 وصل کنی و پورت B.1 رو به فن شماره 1 .
                          اینجوری مطمئن میشی مشکل سخت افزاری نیست.
                          توی برنامه هم اول باید چک کنی ببین هر دو پایه پورت رو بعنوان خروجی تعریف کردی؟ و...
                          با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                          دیدگاه


                            پاسخ : GSM و ارتباط آن با AVR

                            نوشته اصلی توسط ahmadmn
                            نیازی به تغذیه مستقل برای دو FANآ‌ نیست دایی جان.
                            اگه سخت افزار دو FANآ‌ کاملا مشابه هستند احتمالا مشکل توی برنامه است و ربطی به تغذیه نداره.
                            می تونی برای تست صحت سخت افزار، پورت B.0 رو به ترانزیستور فنی شماره 2 وصل کنی و پورت B.1 رو به فن شماره 1 .
                            اینجوری مطمئن میشی مشکل سخت افزاری نیست.
                            توی برنامه هم اول باید چک کنی ببین هر دو پایه پورت رو بعنوان خروجی تعریف کردی؟ و...
                            ممنون دوست عزیز، پورتها خروجی هستن وگفتم که فن یک رو که به پورت B.1 وصل میکنم کار میکنه! دلیلش رو نمیدونم چرا اینطوری شده!

                            دیدگاه


                              پاسخ : GSM و ارتباط آن با AVR

                              نوشته اصلی توسط ahmadmn
                              اگه ممکنه شماتیک و برنامه رو بگذارید تا مشکل پیدا بشه.
                              می تونید از سایت زیر برای پلود عکس استفاده کنید:
                              http://img98.net

                              #include <mega32.h>

                              // Standard Input/Output functions
                              #include <delay.h>
                              // Standard Input/Output functions
                              #include <stdio.h>

                              int i=0;
                              int Temp, hightemp=26, lowtemp=24;
                              char Enter=10;
                              char double_quote=34;
                              char Ctrlz=26;

                              #define ADC_VREF_TYPE 0xE0

                              // Read the 8 most significant bits
                              // of the AD conversion result
                              unsigned char read_adc(unsigned char adc_input)
                              {
                              ADMUX=adc_input|ADC_VREF_TYPE;
                              // Start the AD conversion
                              ADCSRA|=0x40;
                              // Wait for the AD conversion to complete
                              while ((ADCSRA & 0x10)==0);
                              ADCSRA|=0x10;
                              return ADCH;
                              }

                              // Timer 0 overflow interrupt service routine
                              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                              {
                              // Reinitialize Timer 0 value
                              TCNT0=0x9C;
                              // Place your code here
                              i++;
                              if(i==6000)
                              {
                              PORTB.0=1;
                              Temp=read_adc(0);
                              //putchar(Temp);
                              printf("at%c",Enter);
                              delay_ms(500);

                              printf("At+CMGF=1%c",Enter);
                              delay_ms(500);
                              printf("at+cmgs=%c09370660016%c%c",doubl e_quote,double_quote,Enter);
                              delay_ms(100);
                              printf("%2d%c",Temp,Ctrlz);
                              delay_ms(100);
                              i=0;
                              }
                              }



                              // 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=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=Out Func2=Out Func1=Out Func0=Out
                              // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
                              PORTB=0x00;
                              DDRB=0x0F;

                              // 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=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: 10.800 kHz
                              // Mode: Normal top=FFh
                              // OC0 output: Disconnected
                              TCCR0=0x05;
                              TCNT0=0x9C;
                              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=0x01;

                              // USART initialization
                              // Communication Parameters: 8 Data, 1 Stop, No Parity
                              // USART Receiver: On
                              // USART Transmitter: On
                              // USART Mode: Asynchronous
                              // USART Baud rate: 115200
                              UCSRA=0x00;
                              UCSRB=0x18;
                              UCSRC=0x86;
                              UBRRH=0x00;
                              UBRRL=0x05;

                              // Analog Comparator initialization
                              // Analog Comparator: Off
                              // Analog Comparator Input Capture by Timer/Counter 1: Off
                              ACSR=0x80;
                              SFIOR=0x00;

                              // ADC initialization
                              // ADC Clock frequency: 86.400 kHz
                              // ADC Voltage Reference: Int., cap. on AREF
                              // Only the 8 most significant bits of
                              // the AD conversion result are used
                              ADMUX=ADC_VREF_TYPE;
                              ADCSRA=0x87;

                              // Global enable interrupts
                              #asm("sei&quot

                              while (1)
                              {
                              // Place your code here
                              if(Temp>=hightemp) {PORTB.2=1; PORTB.3=0;};
                              if(Temp<=lowtemp) {PORTB.2=0; PORTB.3=1;} ;
                              delay_ms(2000);
                              PORTB.1=1;
                              delay_ms(2000);
                              PORTB.1=0;
                              delay_ms(2000);
                              };
                              }
                              این برنامه است که دما رو میخونه اس ام اس میکنه و باید فنهارو هم روشن کنه که با فن پورت B.3 مدام کار میکنه حتی اس ام اس هم نمیفرسته،اگه قطعش کنم و اس ام اس میفرسته و و فن پورت B.2 به محض اینکه رله به کار میافته و کلا یه ثانیه برق کا مدار رو قطع میکنه :angry: :cry:
                              شماتیکش رو چطوری بذارم براتون؟ از مدار عکس بگیرم؟؟

                              دیدگاه


                                پاسخ : GSM و ارتباط آن با AVR

                                اگر به جای فن ها ، LED بذارم کاملا مدار درست عمل میکنه ، اما به محض اتصال فن داغون میشه

                                دیدگاه

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