اطلاعیه

Collapse
No announcement yet.

کتابخانهآ‌ای برای چیپ AD7780-AD7730

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

    پاسخ : کتابخانهآ‌ای برای چیپ AD7730

    سلام احمد آقا.
    میبخشد چند تا سوال دیگه برام پیش امد بازم متشکر میشم که ... :redface:
    1- حداکثر فاصله لودسل از مرکز اندازه گیری چند سانتی متره(ماکزیممش، همون سیم اورجینال روی لود سل؟)
    2- اگه از 74HC4052 استفاده کنیم اثری روی دقت اندازه گیری ما خواهد گذاشت؟
    3- می تونین مداری رو برای استفاده از 74HC4052 پیشنهاد کنین؟
    شرمنده ازاینکه این همه سوال می پرسم. :redface: :redface: :redface:
    ز دست دادن فرصت غصه می آورد.

    دیدگاه


      پاسخ : کتابخانهآ‌ای برای چیپ AD7730

      نوشته اصلی توسط AMB
      سلام احمد آقا.
      میبخشد چند تا سوال دیگه برام پیش امد بازم متشکر میشم که ... :redface:
      1- حداکثر فاصله لودسل از مرکز اندازه گیری چند سانتی متره(ماکزیممش، همون سیم اورجینال روی لود سل؟)
      2- اگه از 74HC4052 استفاده کنیم اثری روی دقت اندازه گیری ما خواهد گذاشت؟
      3- می تونین مداری رو برای استفاده از 74HC4052 پیشنهاد کنین؟
      شرمنده ازاینکه این همه سوال می پرسم. :redface: :redface: :redface:
      سلام دایی
      1- هر لودسلی یه مقدار سیم همراه خودش داره! مقدار طول سیم را ما می تونیم هرچقدر می خوایم اقزایش بدیم اما باید بدونیم که به همون میزان نویز سیستم بیشتر میشه و اعدادمون بیشتر بازی می کنن. اگه سرعت قرائت مهم نباشه می تونیم با فیلتر نرم افزاری(متوسط گیری و روش های دیگه) این نویز رو حذف کنیم.
      2- صددرصد تاثیر میزاره چون هیچ سوئیچ ایده آل، بی نویزی و بی افستی در دنیا وجود نداره. اما مقدارش اونقدر کم هست که قابل قبول باشه.
      3- بفرما:

      با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

      دیدگاه


        پاسخ : کتابخانهآ‌ای برای چیپ AD7730

        سلام به همگی بخصوص استاد عزیز جناب آقای AHMADMN ممنون از راهنمایهاتون من ad7780 رو با کلی بدبختی روی یک pcb کوچولو لحیم کردم و بر طبق توضیحات صفحه هفت datasheet ad7780 آنرا پیکر بندی سخت افزاری کردم.
        -------------------pin config

        1--------------------NC
        2------------------SCK
        3---------------DRDY
        4-------------------NC
        5---------------- VCC
        6-------------INP(+)
        7--------------INP(-)
        8-----------------VCC
        9----------------GND
        10----------------GND
        11--------------- GND
        12-----------------VCC
        13-----------------VCC
        14-----------------VCC
        15----------------GND
        16------------------NC


        از مگا 32 استفاده کردم پایه 2 ad یعنی Sck رو به پایه 8 یعنی PB.7 میکرو که تولید کننده sck هست وصل کردم و پایه 3 ad یعنی Drdy رو هم به پایه PB.6 میکرو یعنی MISO وصل کردم مشکلی که هست ابنه که پایه DRDY/DOUT فقط یه پالس صفر تولید می کنه و بقیه مواقع هم 1 هست اینو روی micro با اسلیسکوپ می بینم رو پایه کلاک هم که 32 تا 1 پدیدار میشه یعنی کلاک ok هست ولی عملاً DOUT ندارم و همش رو منطق یک هست فقط یه پالس کوچک صفر دارم. لذا چهار باری هم که spi رو می خونم 16 بیت اول 1 هست و16 تا دوم 1 لذا دوتا 255 یا 65535 دارم و 2 تا 0 .(به ورودی هر چی میدم خروجی همینه هست که توضیح دادم)
        اینم برنامم هست.البته عملاً میشه گفت بیسیک برنامه c شماست یه سوال دیگر هم این که من فکر می کنم حتی اگر میکرویی در کار نباشد اگر به sck پالس مناسبی وصل بشه باید DRDY/DOUT باید 32 بیت رو بر گردونه درسته استاد؟
        تو رو خدا کمکم کنید.چرا من از اینم جواب نمی گیرک ad7714 رو بیخیال شدم ولی این دیگه باید راه بیفته.
        راستی pcb شما رو هم شنبه میدم درست کنن برام با آنم تست می کنم.

        $regfile = "m32def.dat"
        $crystal = 8000000
        $baud = 9600

        Config Lcd = 16 * 2
        Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.2 , Rs = Porta.0

        Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 0


        Dim Adc_ch1 As Byte
        Dim Adc_ch2 As Byte
        Dim Adc_ch3 As Byte
        Dim Adc_ch4 As Byte
        Dim Adc_all As Word
        Dim I As Byte

        Dim Set_key As Byte

        'Dout Alias Portb.5 'Data send to AD7714 OUT
        'Din Alias Pinb.6 'Dat get From AD7714 IN
        'Sclk Alias Portb.7 'Clock Send to AD7714 SCLCK
        'Drdy Alias Pinb.3 'Data Ready or No DRDY


        Spiinit

        Cls
        Lcd "Starting ADC T01..."
        Waitms 3000
        Cls
        Cursor Off

        Do

        Bitwait Pinb.6 , Reset
        Incr I
        Locate 2 , 1
        Lcd "i=" ; I

        Spiin Adc_ch1 , 1
        Spiin Adc_ch2 , 1
        Spiin Adc_ch1 , 1
        Spiin Adc_ch2 , 1
        ' Adc_all = 0
        'Adc_all = Adc_ch1 * 256
        'Adc_all = Adc_all + Adc_ch2
        Waitms 100

        Home
        Lcd "ADC=" ; Adc_ch1 ; " " ; Adc_ch2 ; " " ; Adc_ch3 ; " " ; Adc_ch4

        Loop

        End
        «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
        آلبرت انشتین

        دیدگاه


          پاسخ : کتابخانهآ‌ای برای چیپ AD7730

          نوشته اصلی توسط AMB
          سلام احمد آقا.
          متشکرو خیلی ممنون که سوالاتمو جواب دادین.
          بازم چند تا سوال؟؟؟
          1- آیا می تونیم SMD ؛74HC4052 رو تو ایران پیدا کنیم و آدرسی ازش دارین؟
          2- 74HC4052 بهتر هستش یا ADG508؟(می تونین توضیح بدین.)
          با تشکر از کمک های احمد آقا سعی میکنم تا آخر امروز PCB ؛ AD7780 رو با پروتکل RS485 بزارم.
          سلام دایی
          1- خوشبختانه اینجا داره: http://payaelectronicscomplex.com/Products.aspx?KeyP=hc4052&keyG=&keyD=& keyP1=&keyP2=
          2- بجای 74HC4052 میشه از ADG509A استفاده کرد اما این آی سی یه عیب کوچولو داره و اون اینه که باید ولتاژی بالای 10.8 ولت برای تغذیه اون استفاده کنید. خود من 74HC4052 رو ترجیح میدم. هم بخاطر تغذیه 5 ولتش هم ارزونتر بودن و هم اینکه این 74HC4052 همیشه در حال بروز شدنه اما ADG509A سالهاست که دیگه تغییری در طراحیش ایجاد نمیشه.
          با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

          دیدگاه


            پاسخ : کتابخانهآ‌ای برای چیپ AD7730

            نوشته اصلی توسط farshchian
            سلام به همگی بخصوص استاد عزیز جناب آقای AHMADMN ممنون از راهنمایهاتون من ad7780 رو با کلی بدبختی روی یک pcb کوچولو لحیم کردم و بر طبق توضیحات صفحه هفت datasheet ad7780 آنرا پیکر بندی سخت افزاری کردم.
            -------------------pin config

            1--------------------NC
            2------------------SCK
            3---------------DRDY
            4-------------------NC
            5---------------- VCC
            6-------------INP(+)
            7--------------INP(-)
            8-----------------VCC
            9----------------GND
            10----------------GND
            11--------------- GND
            12-----------------VCC
            13-----------------VCC
            14-----------------VCC
            15----------------GND
            16------------------NC


            از مگا 32 استفاده کردم پایه 2 ad یعنی Sck رو به پایه 8 یعنی PB.7 میکرو که تولید کننده sck هست وصل کردم و پایه 3 ad یعنی Drdy رو هم به پایه PB.6 میکرو یعنی MISO وصل کردم مشکلی که هست ابنه که پایه DRDY/DOUT فقط یه پالس صفر تولید می کنه و بقیه مواقع هم 1 هست اینو روی micro با اسلیسکوپ می بینم رو پایه کلاک هم که 32 تا 1 پدیدار میشه یعنی کلاک ok هست ولی عملاً DOUT ندارم و همش رو منطق یک هست فقط یه پالس کوچک صفر دارم. لذا چهار باری هم که spi رو می خونم 16 بیت اول 1 هست و16 تا دوم 1 لذا دوتا 255 یا 65535 دارم و 2 تا 0 .(به ورودی هر چی میدم خروجی همینه هست که توضیح دادم)
            اینم برنامم هست.البته عملاً میشه گفت بیسیک برنامه c شماست یه سوال دیگر هم این که من فکر می کنم حتی اگر میکرویی در کار نباشد اگر به sck پالس مناسبی وصل بشه باید DRDY/DOUT باید 32 بیت رو بر گردونه درسته استاد؟
            تو رو خدا کمکم کنید.چرا من از اینم جواب نمی گیرک ad7714 رو بیخیال شدم ولی این دیگه باید راه بیفته.
            راستی pcb شما رو هم شنبه میدم درست کنن برام با آنم تست می کنم.

            $regfile = "m32def.dat"
            $crystal = 8000000
            $baud = 9600

            Config Lcd = 16 * 2
            Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.2 , Rs = Porta.0

            Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 0


            Dim Adc_ch1 As Byte
            Dim Adc_ch2 As Byte
            Dim Adc_ch3 As Byte
            Dim Adc_ch4 As Byte
            Dim Adc_all As Word
            Dim I As Byte

            Dim Set_key As Byte

            'Dout Alias Portb.5 'Data send to AD7714 OUT
            'Din Alias Pinb.6 'Dat get From AD7714 IN
            'Sclk Alias Portb.7 'Clock Send to AD7714 SCLCK
            'Drdy Alias Pinb.3 'Data Ready or No DRDY


            Spiinit

            Cls
            Lcd "Starting ADC T01..."
            Waitms 3000
            Cls
            Cursor Off

            Do

            Bitwait Pinb.6 , Reset
            Incr I
            Locate 2 , 1
            Lcd "i=" ; I

            Spiin Adc_ch1 , 1
            Spiin Adc_ch2 , 1
            Spiin Adc_ch1 , 1
            Spiin Adc_ch2 , 1
            ' Adc_all = 0
            'Adc_all = Adc_ch1 * 256
            'Adc_all = Adc_all + Adc_ch2
            Waitms 100

            Home
            Lcd "ADC=" ; Adc_ch1 ; " " ; Adc_ch2 ; " " ; Adc_ch3 ; " " ; Adc_ch4

            Loop

            End
            دایی جان گلم
            تو داری این آی سی رو واسه خودت تست می کنی؟ خب چرا؟ اگه این آی سی مشکلی داشت که بچه های سایت الان نمیومدن باهاش مدار بسازن و من باید ورشکست می شدم و میرفتم قاز می چروندم!!!
            دوم اینکه به ورودی های آی سی چی وصل کردی؟ یعنی چه ولتاژی به پایه های AINآ‌ دادی؟
            سوم اینکه این ای سی بدون میکرو به چه دردی می خوره؟ می خوای با اون دیتاهای سریال چیکار کنی؟
            چهارم اینکه بیسیک من چندان خوب نیست!
            پنجم اینکه کم کم لحیم کارت بهتر میشه.
            و ششم اینکه نگران نباش دایی. من روزی 2 تا ار این آی سی ها استفاده می کنم و اگه کار نمی کرد ...
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه


              پاسخ : کتابخانهآ‌ای برای چیپ AD7730

              سلام استاد AHMADMN عزیز و بزرگوار
              ممنون از لطف و توجهتون
              وقتی این آیسی رو آنالوگ دیوایس تو همین سالهای اخیر طراحی کرده و بزرگواری چون شما با این همه تجربه آنرا به تازه کارایی چون من معرفی کرده پس قطعاً این آیسی OK هست ولی مشکل سواد من هست و این که می خوام با کمک شما بزرگواران واقعاً کار با اونو یاد بگیرم و الا صرف این که کارم راه بیفته و برنامه شما رو پروگرم کنم و pcb شما رو بکار ببرم گرچه کار منو راه می اندازه ولی روش درست یادگیری نیست من خودم دیتا شیت ها رو خوندم نمیگم زبانم خوبه ولی فکر میکنم متوجه داستان شدم ولی نمی دونم مشکل کارم کجاست من می خوام بیس کارو یاد بگیرم البته با کمک دوستان خوبی مثل شما نمی خوامم این آیسی بدون میکرو بکار ببرم ولی منظورم از آن سوالات این بود تا ببینم داستانو متوجه شدم یا نه؟من به ورودی ها ولتاژ 0 تا 2.5 رو میدم ولی خروجی ثابته . استاد برنامه بیسیکم ترجمه کد c شماست من c رو هم بلدم ولی با بیسیک راحتترم در ضمن می خوام اینو با مگا 32 راه بندازم کریستال میکروم برعکس کریستال دقیق شما یه کریستال 8 مگا هرتز هست. چیزی که منو دچار مشکل کرده اینه که sck از میکرو به AD7780 میاد ولی آن تو جواب از پایه DRDY/DOUT فقط یه پالس Low برای آماده شدن دیتا میده ولی بعدش وقتی این پینو چک می کنم و می خوام و قتی low هست 4 بایت داده رو بخونم هیچ دیتایی موجود نیست و همش اسیلوسکوپ سطح منطقی یک رو نشون میده تو مدارم از هیج مقاومت و خازنی استفاده نکردم و فقط با دوتا سیم اونو به میکرو وصل کرم که بالا نحوه اتصال پایه ها رو گفتم ورودیو رو هم که عرض کردم.
              راستی هیچکدوم از این آی سی های آنالوگ دیوایس تو Proteous نیست راهی برای افزودن آنها وجود داره یا نه؟
              در ضمن اگر میشه یه شماتیک ساده از کار خودتون رو بصورت عکس بگذارین تا افراد تازه کار مثل من متوجه بشن .
              من دوست دارم ماهیگیری یاد بگیرم استاد نه ماهی مفتو مجانی تو این پروژه انشاالله ترسم از smd و لحیم کردن آنها به کمک شما کم میشه.
              راستی استاد شما هفت شهر عشق رو گشتین ولی من هنوز اندر خم یک کوچه ام لذا نیاز به راهنمایی شما اساتید دارم تا تو این کوچه پس کوچه ها گم نشم و یک چیزایی یاد بگیرمو به بقیه هم یاد بدیم.
              سپاسگزار از لطف و توجه شما :smile:
              «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
              آلبرت انشتین

              دیدگاه


                پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                اول باید یه آفرین بگم دایی جان :applause:
                و اینو اضافه کنم که من هم الکترونیک رو از مدارایی یاد گرفتم که ساختم و کار نکردن! همین دنبال عیب مدار گشتن بود که مجبورم کرد کلا تئوری بخونم و آزمایشات متعدد انجام بدم و فوتای کوزه گری رو یاد بگیرم.
                البته من نمی دونستم می خوای یاد بگیری و فکر می کردم فقط می خوای کارت راه بیفته.

                آی سی AD7780 به این نحو کار می کنه:
                ولتاژ دو پایه ورودی یعنی AIN+ و AIN- به یک تقویت کننده تفاضلی دقیق (Instrumentation Amplifier) میره و در عدد 1 یا 128 ضرب میشه.
                مقدار بهره این تقویت کننده توست پایه GAIN آی سی تعیین میشه. اگه این پایه رو به VCCآ‌ وصل کنیم بهره تقویت کننده 1 و اگه اونو به GND وصل کنیم بهره تقویت کننده 128 میشه.
                در کاربردهایی مثل لودسل که ولتاژ خروجیشون بسیار کمه حتما باید از بهره 128 برای تقویت ولتاژ استفاده کنیم.
                اما در در جایی که ولتاژ ما بالاست و نیازی به تقویت بیشتر نداریم باید بهره رو 1 بگذاریم.
                نکات مهم در قسمت ورودی:
                1- این آی سی چه در حالت بهره 128 و چه در حالت بهره 1 تفاضل ولتاژ ورودی ها رو می خونه و اگه ولتاژ دو ورودی اختلافی نداشته باشن عدد صفر خواهیم خوند.
                2- تمامی آی سی های آنالوگ مشکلی بنام CMMR و اشباع دارند که می توانید آنها را بیشتر مطالعه کنید. CMMR و اشباع به زبان ساده یعنی ما نمی تونیم هر ولتاژی که دلمون خواست به ورودی یک مدار آنالوگ مثل پ امپ یا ADCآ‌ یا ... بدیم.پس چکار کنیم؟ همیشه باید ولتاژ های ورودی ما حول VCC/2 باشد. یعنی در همین AD7780 که تغذیه ما 5 ولت است ولتاژ ها وردی ما باید حول 2.5 ولت باشد. پس ولتاژ ورودی صفر یعنی هردو پایه AIN+ و AIN- ولتاژ 2.5 ولت دارند. زیاد شدن ولتاژ ورودی یعنی AIN+ بیشتر از 2.5 یا AIN- کمتر از 2.5 ولت دارد و کم شدن ولتاژ عکس این است. هیچوقت نباید ولتاژهای AIN+ یا AIN- را به VCC یا GND وصل کنیم.
                می تونید در دیتاشیت آی سی در جدول SPECIFICATIONS این موارد را ببینید.

                ولتاژ ورودی بعد از تقویت وارد یک مبدل آنالوگ به دیجیتال 24 بیتی از نوع سیگما-دلتا می شود. این نوع مبدلها بااینکه سرعت پایینی دارند در عوض دقت بالایی دارند. نتیجه تبدیل وارد یک رجیستر 32 بیتی می شود که 24 بیت آن دیتا و 8 بیت آن استاتوس تبدیل می باشد. مثلا اگر در حین تبدیل خطایی رخ دهد یکی از بیتهای استاتوس تغییر می کند.
                در بسیاری از مواقع رجیستر 8 بیتی استاتوس بکار نمی آید اما در حین رفع عیب این رجیستر بسیار بدرد بخور است.
                سرعت تبدیل را می توانیم توسط پایه FILTER بین 10 یا 16 نمونه در ثانیه تغییر دهیم. بدیهیست دقت ما وقتی که سرعت 16 است کمتر از زمانیست که سرعت 10 است.
                بنابراین در جاهایی که دقت اهمیت دارد باید پایه FILTER را به VCC وصل کنیم تا سرعت 10 نمونه در ثانیه شود.
                صفر کردن پایه PDRST آی سی را از کار می اندازد و انرا ریست هم می کند بنابراین در حالت کارکرد نرمال باید این پایه را به VCCآ‌وصل کنیم.
                از این پایه برایکاهش جریان تغذیه آی سی و قطع تغذیه لودسل هم می توان استفاده کرد که از حوصله این بحث خارج است.

                وقتی کار تبدیل انالوگ به دیجیتال تمام شد پایه DOUT/RDY ای سی صفر می شود تا به میکرو اصلاع دهد کار تبدیل تمام شد. البته باید این پایه را بایک مقاومت 10 کیلواهم به VCCآ‌ وصل کنیم یعنی پول پ کنیم.
                وقتی میکرو این پایه را خواند و دید که صفر بود، 100 میلی ثانیه وقت دارد تا دیتا را بخواند و گرنه دیتا از دست می رود و دیتای جدید جایگزین ان می شود.
                برای خواندن دیتا که شامل 24 بیت مقدار تبدیل و 8 بیت استاتوس می باشد میکرو باید 32 کلاک به پایه SCLK آی سی بدهد و بعد از لبه پایین رونده هر کلاک مقدار دیتا را از پایه DOUT/RDY بخواند.
                پس حتما باید قبل از اعمال کلاکها پایه SCLK یک باشد. این بدان معناست که میکرو باید داخل برنامه خود پایه SCLK را در حالت نرمال یک کنید و کلاکهای آن روی لبه پایین رونده تنظیم شود.
                اگر فصل SPI میکرو را بخوانید این تنظیمات را فرا می گیرید. اگر هم از SPIآ‌ نرم افزاری استفاده می کنید کافیست اول برنامه SCLK را یک کنید و در روتین خواند AD7780 سی و دو بار SCLK را صفر کنید و پایه DOUT/RDY را بخوایند و بعد SCLK را یک کنید.

                اگر مشکل لحیمکاری نداشته باشید و نکات بالا را رعایت کنید این ای سی بدون آزار و اذیت کار می کند :biggrin:
                با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                دیدگاه


                  پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                  سلام مهندس جان
                  ممنون از توضیحات خوبتون واقعاً دستتون درد نکنه استاد با اجازتون من برنامه شما رو یه مقدار تغییرات دادم و تو محیط کد ویژن کامپایل کردم pin drdy/dout آیسی ad7780 رو هم با یک مقاومت 10 کیلو به vcc زدم بقیه تنظیمات هم که مثل قبل هست و پایه sck آیسی ad7780 رو به پایه PB.7 یا همون SCK میکرو مگا 32 وصل کردم Drdy آیسی ad7780 رو به هم به پایه PB.6 یا همون MISO وصل کردم. یعنی کلاً دو پایه از ad7780 به میکرو وصل شده حال اینکه تو خروجی کلاک 32 تا 0 پدیدار میشه و غیر از آن 1 هست ولی drdy با سرعت بسیار زیادی یک پالس صفر تولید می کند بقیه مواقع هم یک هست مگر نه اینکه این آیسی ad7780 نهایت باید با سرعت 10 هرتز این 0 رو باید تولید کند و سپس داده بفرستد ولی متاسفانه ظاهراً داده سند نمی شود. با چهارتا مقاومت یکسان و یه پتانسیومتر سعی کردم برای ورودی یک ولتاژ تفاضلی از 0 تا 2 ولت حول 2.5 ولت تولید کنم ولی متاسفانه خروجی با سرعت بسیار زیادی تغییرات دارد برخی اوقات 32767 رو نشون میده برخی اوقات هم یه سری اعداد متغییر بی ربط، واقعاً دیگه نمی دونم مشکل کارم کجاست استاد.
                  اگر میشه شما شماتیک خودتونو بصورت عکس بگذارین ، فکر کنم برای من و دیگران کمک کننده باشه. در ضمن من برای منبع خودم از خروجی USB استفاده کردم . راستی چطور می تونم در داخل صفحات عکس پلود کنم که شما شماتیکم رو تو همین صفحات ببینید.
                  بازم ممنون


                  اینم کد برنامه


                  /************************************************** ***
                  This program was produced by the
                  CodeWizardAVR V2.03.5 Evaluation
                  Automatic Program Generator
                  © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
                  http://www.hpinfotech.com

                  Project : AD7780
                  Version : 1.0.1
                  Date : 2010/08/27
                  Author : Farshchian
                  Company : GSI
                  Comments:


                  Chip type : ATmega32L
                  Program type : Application
                  Clock frequency : 4.000000 MHz
                  Memory model : Small
                  External RAM size : 0
                  Data Stack size : 512
                  ************************************************** ***/

                  #include <mega32.h>

                  // Alphanumeric LCD Module functions
                  #asm
                  .equ __lcd_port=0x1B ;PORTA
                  #endasm
                  #include <lcd.h>

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

                  // SPI functions
                  #include <spi.h>

                  //Delay Function
                  #include <delay.h>

                  #define ADC_RDY PINB.6
                  #define RX_BUF_SIZE 1

                  // Declare your global variables here
                  unsigned char ADC_STATUS;

                  //************************************************** ******
                  unsigned int PRES_READ_DATA(void)
                  {
                  unsigned int adc_val;
                  adc_val=spi(0);
                  adc_val=adc_val*256+spi(0);
                  spi(0);
                  ADC_STATUS=spi(0);
                  return(adc_val);
                  };
                  //************************************************** ******


                  void main(void)
                  {

                  // Declare your local variables here
                  unsigned int force;
                  char data[16];

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

                  // 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: 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: 9600
                  UCSRA=0x00;
                  UCSRB=0x18;
                  UCSRC=0x86;
                  UBRRH=0x00;
                  UBRRL=0x19;

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

                  // SPI initialization
                  // SPI Type: Master
                  // SPI Clock Rate: 2*1000.000 kHz
                  // SPI Clock Phase: Cycle Half
                  // SPI Clock Polarity: High
                  // SPI Data Order: MSB First
                  SPCR=0x58;
                  SPSR=0x01;

                  // LCD module initialization
                  lcd_init(16);

                  lcd_clear();
                  lcd_putsf("Starting ADC T5C"
                  delay_ms(3000);
                  lcd_clear();

                  while(1)
                  {
                  //********************************************
                  if(ADC_RDY==0)
                  {
                  force=PRES_READ_DATA();

                  lcd_gotoxy (0,0);
                  sprintf(data,"Data = %u ",force);
                  lcd_puts(data);
                  };
                  //*********************************************
                  }
                  }
                  «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
                  آلبرت انشتین

                  دیدگاه


                    پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                    سلام دایی
                    برای پلود عکس می تونید از پلودسنتر خود سایت یعنی ecapic.ir استفاده کنید.
                    یه جای کارو درست نگرفتی دایی:
                    این AD7780 نیست که داده میفرسته به میکرو بلکه این میروست که با دادن هر کلاک یه بیت داده رو از درون AD7780 بیرون می کشه.
                    اشکال اصلی این برنامه اینه که پورت SPI اشتباه تنظیم شده. SPCR باید مقدار 0x5C داشته باشه نه 0x58
                    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                    دیدگاه


                      پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                      سلام استاد
                      ممنون که جواب میدین. چند تا سوال دیگه هم با اجازتون دارم.
                      1-مگه وقتی میکرو میخواد بیتی رو از رجیستر Ad7780 واکشی کنه اینطور نیست که بالاخره باید یه تغییر وضعیتی رو باید دیتکت کنه و بخونه ؟یا اینکه داستان واکشی از ریجیستر فرق می کنه؟
                      2- یعنی میخوام بدونم این پین Dout /DRDY آیسی AD7780 وقتی یک LOW می دهد و اعلام آماده بودن داده تبدیل شده در ریجیستر داده را می دهد وضعیت این پایه چطوری باید باشد؟
                      ((من که بعد از یک LOW با اسلیسکوپ آنرا در وضعیت High می بینم ولی خودم فکر می کردم که باید بعد از آن low اول که اعلام آمادگی ad7780 است باید دیتا رو بصور 0و1 از طریق همین پایه ارسال کنه که ظاهراً شما می فرمایید طریقه ارسال این آیسی اینطور نیست))
                      3-اگر میشه در مورد نحوه اینکه میکرو چطوری محتوای ریجیستر را تشخیص میده و دیتا رو می خونه وقتی هیچ تغییر وضعیتی توی پین DRDY/DOUT نیست توضیح بیشتر بدهید.
                      4- مگر نباید پین Dout /DRDY آیسی AD7780 در سریعترین حالت با سرعت 16 هرتز در ثانیه یک LOW مبنی بر آماده بودن داده بدهد؟ پس چرا این پایه با سرعت خیلی بیشتری این اعلام آمادگی را می دهد؟
                      در مورد برنامه هم چشم دوباره تصحیحش می کنم. ممنون بخاطر را هنمایی های خوبتون.
                      «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
                      آلبرت انشتین

                      دیدگاه


                        پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                        من فهمیدم مشکل از کجاست که یه خورده گیج شدی دایی جان
                        مشکل از دو کاره بودن این پایه است. یعنی این پایه AD7780 دو منظوره است. هم میکرو رو از پایان تبدیل باخبر می کنه. هم دیتا با کلاک های میکرو از این پایه خارج میشه.
                        در آی سی های دیگه مثل AD7730 رو اگه ببینید پایه RDY و Dout دو پایه جدا بودند وبه دو پایه مستقل میکرو هم وصل می شدند.
                        اما در AD7780 هر دو کار بر عهده یک پایه RDY/Dout گذاشته شده.
                        کنترل پایه RDY/Dout در حین تبدیل ولتاژ به عدد دست AD7780 است و آنرا یک نگه می دارد. وقتی کار تبدیل تمام شد AD7780 پایه RDY/Dout را صفر می کند و منتظر می ماند تا میکرو اولین کلاک را بدهد.
                        اولین لبه پایین رونده کلاک میکرو باعث می شود کنترل پایه RDY/Dout از دست AD7780 خارج شود و بجای اطلاع رساندن از وضعیت تبدیل، بیت اول دیتا خارج شود. کلاک های بعدی بیت های دیگر دیتا را خارج می کنند و این عمل تا 32 بیت ادامه می یابد.
                        بعد از کلاک سی و دوم و خارج شدن بیت آخر دوباره پایه RDY/Dout تحت کنترل AD7780 قرار گرفته و 1 می شود تا کار تبدیل ولتاژ به عدد تمام شود و....
                        با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                        دیدگاه


                          پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                          ممنون استاد تا اینجا رو خوب فهمیدم ولی می خوام ببینم وقتی میکرو اولین لبه پایین رونده رو فرستاد و کنترل پایه Drdy را تا 32 کلاک به دست گرفت، تا 32 بیت را بخواند وضعیت پایه DRDY/DOUT چگونه است؟ آیا همواره 1 است یا بسته به 32 بیت داده این پایه هم وضعیت 0 و 1 به خود می گیرد؟ این قسمت برایم گنگ است یعنی می خواهم نحوه Polling داده توسط میکرو را یدانم که چگونه است آیا تو این حالت در عرض 32 کلاک میکرو عدد را با تغییر وضعیت پایه DRDY/DOUT تشخیص می دهد یا اینکه این پایه وضعیت ثابتی دارد و نحوه و اکشی داده طور دیگری است ؟ در شکل منظورمو توضیح دادم.

                          خیلی ممنون استاد
                          «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
                          آلبرت انشتین

                          دیدگاه


                            پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                            دمت دایی جان
                            معلومه که شکل دومه. به ازای هر کلای یک بیت از دیتا میاد که معلوم نیست صفر یا یک باشه.
                            البته شکل دوم را بخواهیم دقیق بکشیم دیتا فقط در لبه پایین رونده کلاک تغییر می کنه اما تو اونو در لبه های بالارونده تغییر دادی!
                            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                            دیدگاه


                              پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                              ممنون استاد
                              بله تو شکل اشتباه لپی شده منظورم همون لبه پایین رونده بود ولی باور کنین من تو شکل مثل شکل اول خروجی رو می بینم آن Low شدنش هم شاید با سرعت چندین KHZ هست نمی دونم دیگه مشکل کارم کجاست شما نظری خاصی ندارین؟ متاسفانه هنوز موفق نشدم برم جمهوری PCB شما رو بدم درست کنن با آن تست کنم. من کار می کنم بیشتر مطالعه می کنم بازم مزاحمتون می شم.
                              بابت همه کمکهای خوبتون سپاسگزارم
                              «اگر واقعیات با نظریات هماهنگی ندارند، واقعیتآ‌ها را تغییر بده.»
                              آلبرت انشتین

                              دیدگاه


                                پاسخ : کتابخانهآ‌ای برای چیپ AD7730

                                دایی جان
                                اسیلسکوپ وسیله ای برای دیدن سیگنالهای پریودیک است. برای یک دیتای دیجیتال که دائما تغییر می کند اسیلسکوپ مناسب نیست. بلکه باید مقدار آنرا روی نمایشگر یا ا¾PC دید و گفت چرا اینقدر است!
                                با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                                دیدگاه

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