اطلاعیه

Collapse
No announcement yet.

در خواست یه پروژه در مورد sim908

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

    در خواست یه پروژه در مورد sim908

    سلام به همه دوستان!
    یه پروژه میخوام که از طریق پورت سریال gsm ماژول sim908 موقعیت و ساعت و ... را بگیره و بعد در صورت سوئیچ شدن یکی از پایه ها اطلاعات را به یه شماره ارسال کنه!
    میکرویی هم که استفاده میکنم atmega8 هست.
    سورس را هم به زبون c میخوام اگه زحمتی نیست!
    ممنون میشم کمکم کنید!
    البته خودم هم یه کارایی کردم! ولی جواب نداد!
    ببینید
    کد:
    #include <mega8.h>
    #include <stdio.h>
    #include <delay.h>
    char Enter=13;
    char double_quote=34;
    char Ctrlz=26;
    char txt;
    void main()
    {
    PORTD=0x00;
    DDRD=0x00;
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x26;
    DDRC=0XFF;
     
     printf("AT+CGPSPWR=1%c",Enter);
     delay_ms(200);
     printf("AT+CGPSRST=0%c",Enter);
     delay_ms(200);
     printf("AT+CGPSOUT=255%c",Enter);
     delay_ms(200);
     
     while(1){
     printf("AT+CGPSINF=32%c",Enter);
     delay_ms(100);
     txt=getchar();
     
     if(txt!=""){
     
     printf("at%c",Enter);
     delay_ms(500);
     printf("AT+CMGF=1%c",Enter);
     delay_ms(500);
     printf("at+cmgs=%c09372780864%c%c",double_quote,double_quote,Enter);
     delay_ms(100);
     printf(txt+"%c",Ctrlz);
     delay_ms(100);
      }
     }

    #2
    پاسخ : در خواست یه پروژه در مورد sim908

    یعنی هیچ کسی نمیونه این کار را بکنه؟

    دیدگاه


      #3
      پاسخ : در خواست یه پروژه در مورد sim908

      با سلام
      به شخصه با این نوع سوال پرسیدن مشکل دارم، شما برادر عزیز اگه کار فرما هستی باید به سبک و سیاق خودش یه نفر رو پیدا کنی تا کار رو انجام بده، شرایط خودشو داره این کار
      اما اگه انجام دهنده هستی( که به نظرم شما اینی) خب باید به هر پروژه و مسئله به عنوان سوالی برای حل نگاه کنی و علم خودتو حین انجام کار ببری بالا. روی صحبتم فقط با شما نیست، خیلی دیدم که کسانی که کار برقی می کنند موردی به اسم صبر رو در کار ندارند. اگه پروژه شما به مشکل خورده، برگردید عقب، سخت افزار رو چک کنید، برنامه نمونه بنویسید ببینید سخت افزار درسته، اگه اشکال داشت تعمیر کنید. اگه نه، حالا بریم سراغ نرم افزار، فیل رو باید تکه تکه کرد و خورد، کد رو بشکنید و تکه تکه پیاده و تست و حتما عیب یابی و رفع عیب کنید. اینجاست که مواردی پیش میاد که اعصاب خورد کنه، صبر می خواد، باید اینقدر زیر یه خم بگیری تا حل شه، و البته تنها نیستین، میاین فروم و اول سرچ میکنید بیینید مشکل حل میشه یا نه، اگه نشد شرح مشکل میدین تا یه نفر که تجربه کار شما رو داره، بیاد و راهنمایی کنه، اگرم نبود خودتون بشین ادم با تجربه و مشکل رو با صبر و کار حل کنید. و این طور با هر پروژه و با هر مشکل ادم کار ازموده تری میشین. اینکه بیاین کل پروژه رو بخواین؟؟!! نمیدونم ولی پاک کردن صورت مسئله هست.
      اما در مورد پروژه کار ساده ای هست،
      1-اول وقفه سریال رو فعال کنید و تست کنید دیتا رو می تونید تو اون بخونید.
      2- تو وقفه با پردازش اطلاعات دریافتی بافر مورد نظر که قراره ساعت و مکان رو ذخیره کنه،مدیریت کنید.
      3-در while برنامه چک کنید ببینید پایه مورد نظر اوضاعش چیه،
      4-در صورت بر قراری شرایط مورد نظر اقدام لازم( ارسال پیامک) رو انجام بدین.
      موفق باشین
      The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

      دیدگاه


        #4
        پاسخ : در خواست یه پروژه در مورد sim908

        نوشته اصلی توسط hessam2013
        با سلام
        به شخصه با این نوع سوال پرسیدن مشکل دارم، شما برادر عزیز اگه کار فرما هستی باید به سبک و سیاق خودش یه نفر رو پیدا کنی تا کار رو انجام بده، شرایط خودشو داره این کار
        اما اگه انجام دهنده هستی( که به نظرم شما اینی) خب باید به هر پروژه و مسئله به عنوان سوالی برای حل نگاه کنی و علم خودتو حین انجام کار ببری بالا. روی صحبتم فقط با شما نیست، خیلی دیدم که کسانی که کار برقی می کنند موردی به اسم صبر رو در کار ندارند. اگه پروژه شما به مشکل خورده، برگردید عقب، سخت افزار رو چک کنید، برنامه نمونه بنویسید ببینید سخت افزار درسته، اگه اشکال داشت تعمیر کنید. اگه نه، حالا بریم سراغ نرم افزار، فیل رو باید تکه تکه کرد و خورد، کد رو بشکنید و تکه تکه پیاده و تست و حتما عیب یابی و رفع عیب کنید. اینجاست که مواردی پیش میاد که اعصاب خورد کنه، صبر می خواد، باید اینقدر زیر یه خم بگیری تا حل شه، و البته تنها نیستین، میاین فروم و اول سرچ میکنید بیینید مشکل حل میشه یا نه، اگه نشد شرح مشکل میدین تا یه نفر که تجربه کار شما رو داره، بیاد و راهنمایی کنه، اگرم نبود خودتون بشین ادم با تجربه و مشکل رو با صبر و کار حل کنید. و این طور با هر پروژه و با هر مشکل ادم کار ازموده تری میشین. اینکه بیاین کل پروژه رو بخواین؟؟!! نمیدونم ولی پاک کردن صورت مسئله هست.
        اما در مورد پروژه کار ساده ای هست،
        1-اول وقفه سریال رو فعال کنید و تست کنید دیتا رو می تونید تو اون بخونید.
        2- تو وقفه با پردازش اطلاعات دریافتی بافر مورد نظر که قراره ساعت و مکان رو ذخیره کنه،مدیریت کنید.
        3-در while برنامه چک کنید ببینید پایه مورد نظر اوضاعش چیه،
        4-در صورت بر قراری شرایط مورد نظر اقدام لازم( ارسال پیامک) رو انجام بدین.
        موفق باشین

        شما درست میگید دوست عزیز
        اما شما که نمیدونی من چقدر در بدری سره این پروژه کشیدم!
        الان 5 ماه دارم به این ور میرم!
        تا حالا دو تا sim900a و یه sim900 و sim908 خریدم ولی با همش به همین مشکل برخوردم!
        من خودم برنامه نویس هستم و هم تحت سیستم و هم تحت نت کار میکنم!
        تو گوگل بنویس "حسین قاهری" خودت میبینی!
        پس اگه بگی این پروژه را فقط برای کار راه انداختن میخوام بی انصافیه!
        بگذریم!
        حالا چندتا سوال دارم!
        من وقتی با پورت سریال gsm قسمت gps ماژولم را فعال میکنم، بعدش اطلاعات برگشتی gps را باید از tx پورت gsm بگیرم یا tx پورت gps؟
        شما گفتید که "-اول وقفه سریال رو فعال کنید و تست کنید دیتا رو می تونید تو اون بخونید."
        خوب این یعنی چی! اگه میشه با کد بگید! من شاید باید 100 بار ماژول را با مبدل usb 2 ttl به کامپیوتر وصل کنم تا یه بارش جواب بده!
        هر وقت وصل میکنم هیچ چیزی نمیتونم بنویسم!
        مبدل را عوض کردم ، روی چندتا ماژول تست کردم ، با یه کامپیوتر دیگه تست کردم و کلا هر کاری بگی کردم ولی نشد!
        الان کد زیر را ببین!
        کد:
        #include <mega8.h>
        #include <stdio.h>
        #include <delay.h>
        char Enter=13;
        char double_quote=34;
        char Ctrlz=26;
        char txt;
        void main()
        {
        PORTD=0x00;
        DDRD=0x00;
        UCSRA=0x00;
        UCSRB=0x18;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x26;
        DDRC=0XFF;
        DDRD.4=1;
         
         printf("AT+CGPSPWR=1%c",Enter);
         delay_ms(200);
         printf("AT+CGPSRST=1%c",Enter);
         delay_ms(200);
         printf("AT+CGPSOUT=255%c",Enter);
         delay_ms(200);
         
         PORTD.4=1;
         delay_ms(200);
         PORTD.4=0;
         
         while(1){
         printf("AT+CGPSINF=32%c",Enter);
         delay_ms(1000);
         
         PORTD.4=1;
         delay_ms(200);
         PORTD.4=0;
         
         txt=getchar();
          
         
         PORTD.4=1;
         delay_ms(200);
         PORTD.4=0;
         
         printf("at%c",Enter);
         delay_ms(500);
         printf("AT+CMGF=1%c",Enter);
         delay_ms(500);
         printf("at+cmgs=%c09372780864%c%c",double_quote,double_quote,Enter);
         delay_ms(100);
         printf(txt+"%c",Ctrlz);
         delay_ms(100);
          
         
         PORTD.4=1;
         delay_ms(70);
         PORTD.4=0;
         delay_ms(70);
         PORTD.4=1;
         delay_ms(70);
         PORTD.4=0;
         }
        }
        من پورت سریال میکرو را به پورت سریال gsm ماژول وصل کردم!
        تو قسمت ارسال sms مشکلی نداره ولی از gps مقداری بر نمیگرده!
        اگه به کد دقت کرده باشی ، باید مقدار برگشتی gps را sms کنه!
        حال sms میاد ولی خالی! یه دوبار هم یه عدد مثل 80864 فرستاد!
        یعد اومد rx میکرو را دادم به tx قسمت gps ماژول که در این حالت اصلا sms را هم ارسال نکرد!
        ممنون میشم راهنمایی کنید!

        دیدگاه


          #5
          پاسخ : در خواست یه پروژه در مورد sim908

          نوشته اصلی توسط hosseinghaheri
          من خودم برنامه نویس هستم و هم تحت سیستم و هم تحت نت کار میکنم!
          تو گوگل بنویس "حسین قاهری" خودت میبینی!
          پس اگه بگی این پروژه را فقط برای کار راه انداختن میخوام بی انصافیه!
          بگذریم!
          قصد جسارت نداشتم.
          من وقتی با پورت سریال gsm قسمت gps ماژولم را فعال میکنم، بعدش اطلاعات برگشتی gps را باید از tx پورت gsm بگیرم یا tx پورت gps؟
          این دست شماست، میتونید رو یک پورت دریافت کنید، یا اینکه پورت دیباگ رو به جی پی اس اختصاص بدین، شما با دستور printf("AT+CGPSOUT=255%c",Enter); حالت دوم رو فعال کردین. که به همون یدونه بذارین بمونه ، یعنی این خط اخیر رو از برنامه حذف کنید.( مگا8 یدونه پورت سریال داره)
          شما گفتید که "-اول وقفه سریال رو فعال کنید و تست کنید دیتا رو می تونید تو اون بخونید."
          خوب این یعنی چی! اگه میشه با کد بگید! من شاید باید 100 بار ماژول را با مبدل usb 2 ttl به کامپیوتر وصل کنم تا یه بارش جواب بده!
          اگه منظورتون اینه که وقفه چیه(نمیدونم درست متوجه شده باشم) این یک توضیح مختصر
          http://www.eca.ir/forum2/index.php?t...2096#msg672096
          اما درباره کد، متاسفانه من مدتی میشه که دیگه با avr و به طبع اون کدویژن کار نمی کنم و ندارم نرم افزار رو تا کد رو بهتون بدم، اما(تا اونجا که یادمه تو کد ویژن) شما باید در ویزارد وقفه دریافت یوزارت رو فعال کنین و برنامه خودش ISR رو براتون در کد قرار میداد. بقیه کار هم که همه جا یکسانه،شما کد مورد نظرتون رو تو ISR میذارین تا هر وقت کاراکتری دریافت شد خودکار اجرا شه.
          هر وقت وصل میکنم هیچ چیزی نمیتونم بنویسم!
          مبدل را عوض کردم ، روی چندتا ماژول تست کردم ، با یه کامپیوتر دیگه تست کردم و کلا هر کاری بگی کردم ولی نشد!
          عجیبه، حتی یه AT ساده؟ اولین چیزی که به ذهن میرسه مشکل در سخت افزار و یا اتصالات هست.

          و اما در مورد برنامه، من چند بار دیگه هم تو انجمن گفتم، مطمئن ترین راه برای ارتباط با sim90x استفاده از وقفه هست، چون ماژول سنکرون با میکرو نیست، و استفاده از delay میتونه همه چیز رو خراب کنه، مثلا
          کد:
           printf("AT+CGPSINF=32%c",Enter);
           delay_ms(1000);
          شما بعد ارسال دستور 1 ثانیه صبر می کنین، کاری که sim908 انجام نمیده و شروع میکنه به فرستادن و شما یا اصلا چیزی نمی خونین یا اخرشو در بهترین حالت می خونین.
          این که تو ارسال اس ام اس مشکل ندارین، یعنی ماژول و ارتباط با میکرو ok هست، و خب تو کد هم خوبه تو این قسمت، میفرسته، صبر کافی،بعدش دستور بعدی تا ارسال ctrl+z و تمام، کار می کنه چون نیاز به دریافت جواب نداره، اما نکته اینجاست ارسال باید در شرایط خاص باشه الان تو کد اینطور نیست و مدام تو لوپ هست میتونه مشکل زا باشه.، به نظرم ارسال 80864 که اخر شماره تلفنتون هم هست اتفاقی نیست و به خاطر همین تو لوپ بودن میتونه به وجود اومده باشه
          نکته بعدی، getchar فقط یک کاراکتر می خونه، نه یک جمله، پس باید از gets استفاده کنید.
          یعد اومد rx میکرو را دادم به tx قسمت gps ماژول که در این حالت اصلا sms را هم ارسال نکرد!
          و در اخر ارتباط usart همیشه tx یکی به rx دیگری وصل میشه
          امیدوارم مفید بوده باشه.
          The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

          دیدگاه


            #6
            پاسخ : در خواست یه پروژه در مورد sim908

            ممنونم!
            دستور gets را گذاشتم ولی واسه کامپایل ارور داد!
            while را به این دلیل گذاشتم که موقعیت من توی همون بار اول ممکنه بدست نیاد! حالا حذفش میکنم!

            درکل با توجه به این چیزایی که گفتید کد این شکلی شد ولی به دستور gets گیر میده و کامپایل نمیکنه!
            کد:
            #include <mega8.h>
            #include <stdio.h>
            #include <delay.h>
            char Enter=13;
            char double_quote=34;
            char Ctrlz=26;
            char txt;
            
            
            void main()
            {
            PORTD=0x00;
            DDRD=0x00;
            UCSRA=0x00;
            UCSRB=0x18;
            UCSRC=0x86;
            UBRRH=0x00;
            UBRRL=0x26;
            DDRC=0XFF;
            DDRD.4=1;
             
             printf("AT+CGPSPWR=1%c",Enter);
             delay_ms(200);
             printf("AT+CGPSRST=1%c",Enter);
             delay_ms(200);
             
             //printf("AT+CGPSOUT=255%c",Enter);
             //delay_ms(200);
            
             printf("AT+CGPSINF=0%c",Enter);
             txt=gets();
             
             printf("at%c",Enter);
             delay_ms(500);
             printf("AT+CMGF=1%c",Enter);
             delay_ms(500);
             printf("at+cmgs=%c09372780864%c%c",double_quote,double_quote,Enter);
             delay_ms(100);
             printf(txt+"%c",Ctrlz);
             delay_ms(100);
            
            }

            دیدگاه


              #7
              پاسخ : در خواست یه پروژه در مورد sim908

              دوست عزیز while باید باشه، همیشه باید باشه وگرنه میکرو یکبار اجرا میکنه و تمام، while جز لاینفک برنامه میکرو هست، روش دیگری پیدا کنید برای کنترل ارسال
              از gets دارین اشتباه استفاده میکنین،
              کد:
              char *gets(char *str, unsigned char len)
              The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

              دیدگاه


                #8
                پاسخ : در خواست یه پروژه در مورد sim908

                نوشته اصلی توسط hessam2013
                دوست عزیز while باید باشه، همیشه باید باشه وگرنه میکرو یکبار اجرا میکنه و تمام، while جز لاینفک برنامه میکرو هست، روش دیگری پیدا کنید برای کنترل ارسال
                از gets دارین اشتباه استفاده میکنین،
                کد:
                char *gets(char *str, unsigned char len)
                شرمنده هی سوال میکنم اما توی دستور char * gets داخل پرانتز دو تا متغییر میخواد!
                خب من این جا باید چی وارد کنم!

                دیدگاه


                  #9
                  پاسخ : در خواست یه پروژه در مورد sim908

                  ارگومان اول اشاره گر به رشته مقصد هست و دومی تعداد کاراکتری که می خواین بخونین،
                  بازم میگم این روش خوبی برای دریافت نیست، برین سراغ وقفه دریافت
                  The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                  دیدگاه


                    #10
                    پاسخ : در خواست یه پروژه در مورد sim908

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

                    دیدگاه


                      #11
                      پاسخ : در خواست یه پروژه در مورد sim908

                      نوشته اصلی توسط hosseinghaheri
                      شما که مگید برم سراغ وقفه دریافت. خوب من هیچ اطلاعتی در این زمینه ندارم.
                      خوب یاد میگیرین دیگه :smile:
                      میشه اینطور گفت
                      1-وقفه ماهیتش چیه؟ اصلا یعنی وقفه یعنی چی؟(خیلی اجمالی هم بدونید بسه)
                      2-وقفه دریافت سریال چیست؟(جوابش سادست: هر وقت یه کاراکتر بیاد به یوزارت، وقفه میده)
                      3-وقفه تو میکرو و کامپایلر من چطور تعریف میشه؟
                      تمام، 2 که هیچی برای یک هم قبلا لینک دادم، اگه بیشتر می خواین، جستجو کنین، برای سومی هم جستجو در اینترنت یا اگه کتابی چیزی دارین، بعدش کد رو در تابع وقفه مینویسین و خلاص.
                      The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                      دیدگاه


                        #12
                        پاسخ : در خواست یه پروژه در مورد sim908

                        نوشته اصلی توسط hessam2013
                        خوب یاد میگیرین دیگه :smile:
                        میشه اینطور گفت
                        1-وقفه ماهیتش چیه؟ اصلا یعنی وقفه یعنی چی؟(خیلی اجمالی هم بدونید بسه)
                        2-وقفه دریافت سریال چیست؟(جوابش سادست: هر وقت یه کاراکتر بیاد به یوزارت، وقفه میده)
                        3-وقفه تو میکرو و کامپایلر من چطور تعریف میشه؟
                        تمام، 2 که هیچی برای یک هم قبلا لینک دادم، اگه بیشتر می خواین، جستجو کنین، برای سومی هم جستجو در اینترنت یا اگه کتابی چیزی دارین، بعدش کد رو در تابع وقفه مینویسین و خلاص.
                        ممنون از راهنمایت! حداقل الان از سردرگمی درومدم!.
                        سرچ کردم و این کد را پیدا کردم.
                        کد:
                        #include <mega32.h>
                        
                        int n = 0;
                        
                        
                        #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 == '#')
                            {
                                n = 1;
                            }
                            else if (data == 'A')
                            {
                                n = 2;
                            }
                            else
                            {
                                n = 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_
                        #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
                        #include <stdio.h>
                        
                        
                        void main(void)
                        {
                        PORTA=0x00;
                        DDRA=0xFF;
                        
                        
                        UCSRA=0x00;
                        UCSRB=0x90;
                        UCSRC=0x86;
                        UBRRH=0x00;
                        UBRRL=0x19;
                        
                        
                        #asm("sei")
                        
                        while (1)
                           {
                            if (n == 1)
                            {
                                PORTA.0 = 1;
                            }
                            else if (n == 2)
                            {
                                PORTA.1 = 1;
                            }
                            
                        
                           };
                        }
                        یه چیزایی ازش فهمیدم!
                        ولی هنوز نمیدونم چطوری باید ازش استفاده کنم!
                        اگه میشه و زحمتی نیست، شما این وقفه را بیا روی کد خودم پیاده کن!
                        دارم دیوونه میشم! به هر دری میزنم جواب نمیده!
                        تا چند روز دیگه هم باید پروژه را تحویل بدم!

                        دیدگاه


                          #13
                          پاسخ : در خواست یه پروژه در مورد sim908

                          کسی این کار را واسه من بکنه؟

                          دیدگاه

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