اطلاعیه

Collapse
No announcement yet.

راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

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

    راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

    سلام به همگی و خسته نباشید
    میخواستم از دوستانی که تو زمینه ی برنامه نویسی فعالترن خواهش کنم یکم راهنمایی کنن که چه جوری میشه برای ارسال تصویر از کارت حافظه به فرستنده توی atmega64 برنامه نوشت ؟ آیا باید عکسو تغییر داد ؟ تبدیل به کد کرد؟
    ممنون میشم کمکم کنین چون دیگه نمیدونم چی کار باید بکنم
    :angry:
    قدر آئینه بدانید در آن وقت که هست
    نه در آن لحظه که افتاد و شکست...

    #2
    پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

    چه جوری میخای ارسال کنی؟ با چه ماژول یا ارتباطی
    چه عکسی رو میخای انتقال بدی؟

    و در مورد این که کد کنی یا خیر لازمه بدونی توی مموری به صورت بایت بایت ذخیره میشه و نیاز به کد کد کردنشون نداری!
    انجام پروژه هاي برنامه نويسي اندرويد
    [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    دیدگاه


      #3
      پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

      سلام
      ماژول ارتباطی ما زیگبی پرو هستش تصویرمون هم یه تصویر عادی سیاه سفیده که قراره از کارت حافظه که توش ذخیره شده توسط یه دستور تو میکرو بره به ماژول و ماژول فرستنده بفرسته به ماژول گیرنده.... :question:
      قدر آئینه بدانید در آن وقت که هست
      نه در آن لحظه که افتاد و شکست...

      دیدگاه


        #4
        پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

        سلام دوستان
        منم یه جفت ماژول ارسال دیتا دارم می خوام عکس رنگی رو بفرسم به یه میکرو دیگه بعد اون روی ال سی دی نمایش بده بعد اونم بریزه توی mmc
        عکس رو هم توی mmc فرستنده معمولی ریخته باشم
        شاید هم یه اهنگ بفرسه؟

        دیدگاه


          #5
          پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

          مشکل عمده ای که این وسط پیش اومده اینه که نگاه شما از بالا به پایین هست. در صورتیکه اینجا با یک نگاه از پایین به بالا مشکلتون براحتی حل میشه. اصلا شما به اینکه میخوایین تصویر بفرستین یا موسیقی کاری نداشته باشین. آیا امکانش رو دارین که چند بایت مثلا 16 بایت رو از یک فرستنده به یک گیرنده بفرستین و مطمئن باشین که درست به مقصد رسیده یا نه؟ اگر این مدل یا بهتره بگیم پروتکل رو پشتیبانی کردین بعد پیاده سازی بقیه کارها فقط یه کمی کد نویسی داره. شما نباید سر خوندن یا نوشتن اطلاعات mmc مشکلی داشته باشین. حالا بجای تابعی که این عمل خوندن یا نوشتن اطلاعات mmc رو انجام میده تابعی رو صدا کنین که دریافت یا ارسال اطلاعات از طریق ماجول رو انجام بده. چون از دید برنامه شما فقط صرف خوندن و نوشتن اطلاعات هست. از کجا مهم نیست. این مسئله؛ مسئله اون کسی هست که نوشتن یا خوندن رو انجام میده.

          نوشتن این پروتکل و تست اش در کلیه شرایط احتمالی مهمترین قسمت داستانه. بقیه اش خیلی مهم نیست.

          دیدگاه


            #6
            پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

            سلام
            برای دریافت وظبظ ان فعلا توی خود حافظه فلش باید چی بنوسیم مثلا یه دستگاه ظبط صدا مقدار adc رو با چه دستوری روی حافظه فلش ذخیره کنم؟
            با تشکر

            دیدگاه


              #7
              پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

              خوب اینکه راحته. اولا باید از چیزی مثل کتابخونه ff استفاده کنی.
              دوم اینکه باید نرخ نمونه برداری ثابتی رو استفاده کنی. مثلا فرض کن 5 کیلو هرتز. یعنی هر 200 میکرو ثانیه یک نمونه.
              سوم اینکه نمونه برداری باید از طریق استفاده از وقفه انجام بشه تا در طی زمان نمونه برداری بتونی به کارهای دیگه برسی.
              چهارم اینکه باید از تکنیک double buffering استفاده کنی تا در زمانی که یک سری اطلاعات رو در mmc قرار میدی بتونی بطور همزمان نمونه برداری رو ادامه بدی.
              پنجم اینکه برای بالا بردن سرعت باید بافری با مضرب 512 بایت استفاده کنی تا حداقل بار زمانی به دوش برنامه ذخیره کننده اطلاعات گذاشته بشه.
              ششم باید حتما این مسئله رو چک کنی که اگر قبل از ذخیره بافر قدیمی بافر جدید پر شد بفهمی که یک جای کار عیب داره. چون قطعی در زمان نمونه برداری پیش میاد و صدا خود بخود قطعی پیدا میکنه.

              دیدگاه


                #8
                پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                سلام
                باتشکر از پاسختون
                من با بسکام کار میکنم
                به فرض من نوشتم
                do
                waitms 1
                a=getadc
                loop
                حالا با چه دستوری باید متغیر a رو ذخیره کنم؟

                دیدگاه


                  #9
                  پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64


                  کسی بلد نبود تو این کد نویسی مخصوص کمکم کنه به خدا ضروریه ها ......
                  مشکل من کدیه که برای این کار باید بنویسم
                  قدر آئینه بدانید در آن وقت که هست
                  نه در آن لحظه که افتاد و شکست...

                  دیدگاه


                    #10
                    پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                    ولله این بار هزارمه که میگم من بیسیک بلد نیستم. :cry2:
                    ولی ایده کلی میتونه یه چیزی مثل این باشه. (حالا برنامه اش کامپایل نمیشه گیر ندین ها. من فقط خواستم ایده رو نشونتون بدم)

                    فرض میکنیم که شما مقدار ADC رو دارین بطور 8 بیتی میخونین. ضمنا بقول خودتون هر 1 میلی ثانیه یکبار قراره این نمونه گیری انجام بشه:


                    Dim DataArrayA(512) As Byte
                    Dim DataArrayB(512) As Byte
                    Dim IndexA As Word
                    Dim IndexB As Word
                    Dim ReadArray As Byte
                    Dim FrameReady As Byte

                    ReadArray = 0
                    WriteArray= 0
                    IndexA = 0
                    IndexB = 0
                    FrameReady = 0

                    Do
                    While FrameReady = 0 Do Loop
                    If WriteArray = 0 Then
                    WriteToFile(DataArrayA, IndexA)
                    IndexA = 0
                    Else
                    WriteToFile(DataArrayB, IndexB)
                    IndexB = 0
                    EndIf
                    FrameReady = 0
                    Loop

                    Timer0: // Timer0 ISR routine called every 1ms
                    Dim b As Byte
                    b = ReadADC
                    If ReadArray = 0 Then
                    DataArrayA(IndexA) = B
                    IndexA = IndexA + 1
                    If IndexA = 512 Then
                    WriteArray = 0
                    ReadArray = 1
                    FrameReady = 1
                    EndIf
                    Else
                    DataArrayB(IndexB) = B
                    IndexB = IndexB + 1
                    If IndexB = 512 Then
                    WriteArray = 1
                    ReadArray = 0
                    FrameReady = 1
                    EndIf
                    EndIf
                    Return


                    دیدگاه


                      #11
                      پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                      سلام
                      خیلی خیلی ممنون از پاسختون
                      ولی من از برنامه هیچی نفهمیدم :cry2:
                      میشه یه توضیح بدین راجب برنامه

                      دیدگاه


                        #12
                        پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                        ببینین! اصل مشکل سر اینه که با نرخ 1 کیلو هرتز قراره نمونه گیری انجام بشه. از طرفی این اطلاعات در جایی ذخیره بشه. معمولا ذخیره یک بایت با چند بایت اطلاعات خیلی فرقی در زمانش نمیکنه. از طرفی اگر قرار باشه مستقیما بعد از خوندن؛ ذخیره انجام بشه ممکنه زمان ذخیره کردن از خیلی بیشتر از 1 میلی ثانیه طول بکشه و اطلاعات از دست بره.
                        پس میاییم برای رفع این مشکل از دو تا آرایه استفاده میکنیم. A و B. در هر لحظه اطلاعات فقط داخل یکی از این آرایه ها ضبط میشه. در یک روال دیگه (مثلا روال اصلی برنامه) مرتب چک میکنیم که اگه آرایه آخری که قرار بود پر بشه آماده شده اطلاعاتش رو در mmc ذخیره میکنیم. در طی این زمان اطلاعات در آرایه دوم ذخیره میشه. و بعدش دوبار آرایه اول و به همین ترتیب.

                        درست مثل یک الاکلنگ.
                        حسن اساسی این کار اینه که در زمانی که نوشتن انجام میشه بافری برای پر شدن موجود هست. ضمنا حجم بافر برای کار روی mmc باید مضربی از 512 بایت (طول یک سکتور) باشه تا مینیمم زمان دسترسی به mmc رو داشته باشیم. حالا تنها اگر به دلایلی اطلاعات رو نشد در طی زمانی که بافر بعدی پر میشه در mmc ذخیره کنیم؛ اطلاعات از دست میره. اما زمان پر شدن یک آرایه معادل با حجم آرایه تقسیم بر حجم یک نمونه هست که اینجا شده 512 تا ضربدر سرعت نمونه گیری که میشه 512 میلی ثانیه.

                        دیدگاه


                          #13
                          پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                          ممنون از ایدتون خودش خیلی مفید بود :agree:
                          قدر آئینه بدانید در آن وقت که هست
                          نه در آن لحظه که افتاد و شکست...

                          دیدگاه


                            #14
                            پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                            سلام
                            شما برنامه رو خیلی خوب توضیح دادی ولی من نفهمیدم
                            خوب
                            Dim DataArrayA(512) As Byte
                            Dim DataArrayB(512) As Byte
                            Dim IndexA As Word
                            Dim IndexB As Word
                            Dim ReadArray As Byte
                            Dim FrameReady As Byte

                            ReadArray = 0
                            WriteArray= 0
                            IndexA = 0
                            IndexB = 0
                            FrameReady = 0

                            Do
                            While FrameReady = 0 Do Loop برای چی هست
                            If WriteArray = 0 Then برای چی هست
                            WriteToFile(DataArrayA, IndexA) برای چی هست
                            IndexA = 0 برای چی هست
                            Else
                            WriteToFile(DataArrayB, IndexB) برای چی هست
                            IndexB = 0 برای چی هست
                            EndIf
                            FrameReady = 0
                            Loop

                            Timer0: // Timer0 ISR routine called every 1ms
                            Dim b As Byte
                            b = ReadADC
                            If ReadArray = 0 Then برای چی هست
                            DataArrayA(IndexA) = B برای چی هست
                            IndexA = IndexA + 1 برای چی هست
                            If IndexA = 512 Then برای چی هست
                            WriteArray = 0
                            ReadArray = 1
                            FrameReady = 1
                            EndIf
                            Else
                            DataArrayB(IndexB) = B برای چی هست
                            IndexB = IndexB + 1 برای چی هست
                            If IndexB = 512 Then برای چی هست
                            WriteArray = 1
                            ReadArray = 0
                            FrameReady = 1
                            EndIf
                            EndIf
                            Return

                            ببخشید ازیت کردم


                            دیدگاه


                              #15
                              پاسخ : راهنمایی نوشتن برنامه ای در مورد ارسال تصویر به وسیله ی atmega64

                              اولا اذیتی نبود!
                              ثانیا خوب میگفتین "کل برنامه برای چی هست"!!!

                              طبق توضیحات من؛ قرار بود دو تا بافر داشته باشیم. نمونه برداری هم 8 بیتی صورت میگیره. پس دو تا بافر بصورت آرایه از جنس byte میخواییم. حجمشم که قبلا توضیح دادم چرا.
                              غیر از اینا یک سری متغیر کمکی میخواییم که من متاسفانه نمیدونستم چطوری به بسکام حالی کنم که volatile هستن. بخاطر همین گفتم نمونه کد.

                              در روال وقفه چک میکنیم اگر بنا بر این هست که اطلاعات خونده شده در آرایه A قرار بگیره این آرایه رو پر میکنیم و در غیر اینصورت آرایه B رو. با اضافه کردن هر نمونه به آرایه فوق تعداد نمونه های ذخیره شده رو یکی زیاد میکنیم و وقتی این تعداد به 512 یعنی طول بافر (دقت کنین: حجمش نه! گرچه اینجا حجم هر آرایه مساوی با طولش هست) رسید اولا جای آرایه خوندن و نوشتن رو عوض میکنیم. و ثانیا به برنامه اصلی اطلاع میدیم که یک بافر برای نوشتن حاضره.
                              در برنامه اصلی هم برای همیشه:
                              اول صبر میکنیم که خوندن یک بافر تموم بشه (یعنی اطلاعاتی برای نوشتن حاضره. و آرایه های خوندن و نوشتن هم جابجا شدن) بعد اطلاعات مربوطه رو در فایل یا هر جای دیگه توسط روال فرضی WriteFile قرارمیدیم. بعدش برای ابتدای حلقه خودمون متغیری رو که نشون میده یک بافر آماده نوشتن هست رو ریست میکنیم.

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

                              احتمالا یکی دو تا باگ ریز دیگه هم داره. اونم با خودتون تا متوجه بشین اذیت کردن یعنی چه!!! :icon_razz: :icon_razz:

                              دیدگاه

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