اطلاعیه

Collapse
No announcement yet.

ad7705

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

    ad7705

    از دوستان کسی تا الان با این adc 16 بیتی کار کرده؟

    سخت افزارم مثل دیتا شیتش هست برنامم به صورت زیر:
    کد:
    $regfile = "m88def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Cls
    Enable Interrupts
    Config Int0 = Falling
    Enable Int0
    On Int0 Drdy
    Dim Q As Byte
    Dim Chek_spi As Byte
    Dim Send_byte As Byte
    Dim Send_word As Word
    Dim Recive_data As Word
    Dim Get_data_l As Byte
    Dim Get_data_h As Byte
     Dim Mid_var As Word
    Ddrb = &B00101100
    Portb = &B00101000
    Spcr = &H3F
    Spcr = &H7F
    Q = Spsr
    Q = Spdr
    Send_byte = &H20
     Spdr = Send_byte
     Chek_spi = Spsr And &H80
      While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
     Waitms 1
    
    
     Ddrb = &B00101100
    Portb = &B00101000
    Spcr = &H3F
    Spcr = &H7F
    Q = Spsr
    Q = Spdr
    Send_byte = &H08
     Spdr = Send_byte
     Chek_spi = Spsr And &H80
      While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
     Waitms 1
    
    
    Ddrb = &B00101100
    Portb = &B00101000
    Spcr = &H3F
    Spcr = &H7F
    Q = Spsr
    Q = Spdr
    Send_byte = &H10
     Spdr = Send_byte
     Chek_spi = Spsr And &H80
      While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
     Waitms 1
    
    
    Ddrb = &B00101100
    Portb = &B00101000
    Spcr = &H3F
    Spcr = &H7F
    Q = Spsr
    Q = Spdr
    Send_byte = &H40
     Spdr = Send_byte
     Chek_spi = Spsr And &H80
      While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
     Waitms 1
    
     Dim Count As Byte
        Dim Count2 As Byte
        Cls
    Do
    
    Loop
    
    End
    
    Drdy:
      Locate 2 , 1
     Lcd Count
     Incr Count
    
     Ddrb = &B00101100
    Portb = &B00101000
    Spcr = &H3F
    Spcr = &H7F
    Q = Spsr
    Q = Spdr
    Send_byte = &H38
     Spdr = Send_byte
     Chek_spi = Spsr And &H80
      While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
    
     Ddrb = &B00010000
    Portb = &B00010000
    Spcr = &H2F
    Spcr = &H6F
     Chek_spi = Spsr And &H80
     While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
     Get_data_l = Spdr
    
     Chek_spi = Spsr And &H80
     While Chek_spi = 0
     Chek_spi = Spsr And &H80
     Wend
      Get_data_h = Spdr
    
      Mid_var = Get_data_h
     Shift Mid_var , Left , 8
      Recive_data = Get_data_l + Mid_var
    
    Home
    Lcd Recive_data
    Locate 1 , 10
      Lcd "hi"
    Return
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    #2
    پاسخ : ad7705

    سلام دوست عزیز
    من تقریبا 5 سال قبل سه تا توزین ب***** با یک ورژن بالاترش کار کردم
    البته اگه اشتباه نکرده باشم با بسکام کدش کردین. بنده با C کار میکنم
    البته بعضی وقتها توی پروژه هام از VB استفاده میکنم.
    اگه تونستم برنامش رو که توی C نوشتم براتون پیداش میکنم ، حالا چون
    من از برنامتون درست سر در نمیارم لااقل بگید اشکالش مربوط به چی
    میشه.

    اینم توی دستگاه:
    افتادگی آموز اگر طالب علمی
    هرگز نخورد آب زمینی که بلند است

    دیدگاه


      #3
      پاسخ : ad7705

      من برنامه رو با توضیحات در زیر میارم :
      کد:
      [color=red][left]
      $regfile = "m88def.dat"
      $crystal = 8000000
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
      Cls
      [color=red]تا اینجای برنامه نوع میکرو ، کریستال و lcd تعریف شده[/color] 
      
      Enable Interrupts
      Config Int0 = Falling
      Enable Int0
      On Int0 Drdy
      [color=red]پایه ddry رو به int0 وصل کردم تا هروقت دیتای معتبری در data register قرار داده بشه این اینتراپت فراخوانی بشه .اگر دیتای معتبری در دیتا رجیستر وجود داشته باشد این پایه صفر میشود.
      اینتراپت هم حساس به لبه پایین رونده تعریف شده و در سخت افزارم به این پایه میکروpd.2 یه مقاومت pullup قرار دادم
      [/color]
       
      
      Dim Q As Byte
      Dim Chek_spi As Byte
      Dim Send_byte As Byte
      Dim Send_word As Word
      Dim Recive_data As Word
      Dim Get_data_l As Byte
      Dim Get_data_h As Byte
      Dim Count As Byte
          Dim Count2 As Byte
       Dim Mid_var As Word
      [color=red]متغیر های تعریف شده در برنامه[/color]
      
      
      
      
      Ddrb = &B00101100
      Portb = &B00101000
      Spcr = &H3F
      Spcr = &H7F
      Q = Spsr
      Q = Spdr
      [color=red]کانفیگ کردن میکرو به عنوان مستر [/color]
      
      
      
      Send_byte = &H20
       Spdr = Send_byte
       Chek_spi = Spsr And &H80
        While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
       Waitms 1
      [color=red]با نوشتن 20 هگز در communication register عمل بعدی را نوشتن در clock register تعیین کردم[/color]
      
      
      
      
      
       Ddrb = &B00101100
      Portb = &B00101000
      Spcr = &H3F
      Spcr = &H7F
      Q = Spsr
      Q = Spdr
      Send_byte = &H08
       Spdr = Send_byte
       Chek_spi = Spsr And &H80
        While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
       Waitms 1
      [color=red]نوشتن 80 هگز در [/color][color=red]clock register[/color] 
      
      
      
      
      Ddrb = &B00101100
      Portb = &B00101000
      Spcr = &H3F
      Spcr = &H7F
      Q = Spsr
      Q = Spdr
      Send_byte = &H10
       Spdr = Send_byte
       Chek_spi = Spsr And &H80
        While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
       Waitms 1
      [color=red]با نوشتن 10 هگز در communication register عمل بعدی را نوشتن در setup register تعیین کردم
      [/color]
      
      
      
      Ddrb = &B00101100
      Portb = &B00101000
      Spcr = &H3F
      Spcr = &H7F
      Q = Spsr
      Q = Spdr
      Send_byte = &H40
       Spdr = Send_byte
       Chek_spi = Spsr And &H80
        While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
       Waitms 1
      [color=red]با نوشتن 80 هگز در setup register  ایسی در مد self calibration کانفیگ شده[/color]
      
      
       
          Cls
      Do
      
      Loop
      
      End
      
      روتین اینتراپت [/left][/color][left]
      Drdy:
        Locate 2 , 1
       Lcd Count
       Incr Count
      [color=red]در اول اینتراپت دستور نمایش مقدار یک متغیر را قرار دادم تا تعداد دفعاتی که برنامه وارد اینتراپت میشود مشخص شود
      [/color]
      
       Ddrb = &B00101100
      Portb = &B00101000
      Spcr = &H3F
      Spcr = &H7F
      Q = Spsr
      Q = Spdr
      Send_byte = &H38
       Spdr = Send_byte
       Chek_spi = Spsr And &H80
        While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
      [color=red]با نوشتن 38 هگز در کامنیکیشن رجیستر عمل بعدی را خواندن از دیتا رجیستر تعیین کردم
      [/color]
      
       Ddrb = &B00010000
      Portb = &B00010000
      Spcr = &H2F
      Spcr = &H6F
       Chek_spi = Spsr And &H80
       While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
       Get_data_l = Spdr
      
       Chek_spi = Spsr And &H80
       While Chek_spi = 0
       Chek_spi = Spsr And &H80
       Wend
      [color=red]میکرو را در مد slave کانفیگ کردم  
      [/color]
      Get_data_h = Spdr
      
        Mid_var = Get_data_h
       Shift Mid_var , Left , 8
        Recive_data = Get_data_l + Mid_var
      [color=red]چون دیتا رجیستر 16 بیتی هست دو بار عمل خواندن از دیتا رجیستر را نوشتم و پس از دریافت دو بایت ان را به word تبدیل کردم و در اخر نمایش عبارت hi را در خط دوم lcd قرار دادم تا مشخص شود برنامه به این خط برنامه میرسد یا نه 
      [/color]Home
      Lcd Recive_data
      Locate 1 , 10
        Lcd "hi"
      
      Return
      [/left]
      و روی lcd فقط مقدار 0 در خط دوم نشون داده میشه یعنی برنامه فقط یک بار وارد اینتراپت میشه و همون جا گیر میکنه حالا چرا این اتفاق می افته من که سر در نیاوردم

      اگه برنامه c رو هم پیدا کنید و برام بزارید واقعا ممنون میشم
      با سپاس فراوان از وقتی که گداشتید
      چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

      دیدگاه


        #4
        پاسخ : ad7705

        سلام دوست عزیز
        ببینید این طور که از برنامتون متوجه شدم ، شما هر دو عمل اندازه گیری و نمایش رو
        در داخل روتین اینتراپت انجام میدید.
        اگه اینطوریه مقدار خوانده شده از A/D رو بریزید تو یک متغییر Public و در داخل لوپ
        اصلی برنامه این متغییرو نمایش بدید.منظورم دقیقا" اینه که روتین اینتراپت رو خلوت کنید
        و فقط مقدارو بریزید تو متغییر و بلافاطله از اینتراپت خارج بشید.
        افتادگی آموز اگر طالب علمی
        هرگز نخورد آب زمینی که بلند است

        دیدگاه


          #5
          پاسخ : ad7705

          سلام دوست عزیز
          برنامه c تون رو پیدا نکردین
          چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

          دیدگاه


            #6
            پاسخ : ad7705

            سلام دوست من
            پیداش کردم ولی! پروژه رو چند سال پیش با AD7715 و 8955 کار کرده بودم ،
            برنامه رو میزارم اینجا ولی تحلیلش با خودت ، یعنی اینکه انتظار آموزش C و
            خواندن دوباره دیتا شیت AD7715 رو از من نداشته باش چون باور کن زیاد وقت ندارم(بهونه پیرا).
            لطفا" یه خورده همت کن ، منم باهاتم.
            AD7715.C
            AD7715.H


            افتادگی آموز اگر طالب علمی
            هرگز نخورد آب زمینی که بلند است

            دیدگاه


              #7
              پاسخ : ad7705

              من چاره ای جز جواب گرفتن ندارم حالا تو c یا بیسیک بالاخره باید خروجی بگیرم

              در مورد اینکه گفتین روتین اینتراپت رو خلوت کنم برنامه رو به شکل زیر تغییر دادم :

              Dim Drdy_word As Word
              قسمتی که در روتین اینتراپت وجود داشت را به حلقه اصلی برنامه اوردم وشرط اجرا شدنش صفر نبودن متغیر drdy_word هست که در صورت برقراری این شرط از این متغیر یکی کم میشه
              و در حقیقت با هروارد شدن به اینتراپت یک بار هم این روتین در حلقه اصلی برنامه اجرا میشود
              کد:
              Do
               If Drdy_word <> 0 Then
               Decr Drdy_word
               Locate 2 , 1
               Lcd Count
               Incr Count
              
               Ddrb = &B00101100
              Portb = &B00101000
              Spcr = &H3F
              Spcr = &H7F
              Q = Spsr
              Q = Spdr
              Send_byte = &H38
               Spdr = Send_byte
               Chek_spi = Spsr And &H80
                While Chek_spi = 0
               Chek_spi = Spsr And &H80
               Wend
              
               Ddrb = &B00010000
              Portb = &B00010000
              Spcr = &H2F
              Spcr = &H6F
               Chek_spi = Spsr And &H80
               While Chek_spi = 0
               Chek_spi = Spsr And &H80
               Wend
               Get_data_l = Spdr
              
               Chek_spi = Spsr And &H80
               While Chek_spi = 0
               Chek_spi = Spsr And &H80
               Wend
                Get_data_h = Spdr
              
                Mid_var = Get_data_h
               Shift Mid_var , Left , 8
                Recive_data = Get_data_l + Mid_var
              
              Home
              Lcd Recive_data
              Locate 1 , 10
                Lcd "hi"
                End If
              Loop
              
              End
              [color=red]روتین وقفه ، با هر بار وارد شدن به وقفه به متغیرdrdy_word یکی اضافه میشود [/color]                            
              
              Drdy:
               Incr Drdy_word
              Return
              ولی متاسفانه هیچی رو lcd نمایش داده نمیشود یعنی نه دیتای تبدیل شده و نه عبارت هایی که تو حین برنامه نوشتم
              چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

              دیدگاه


                #8
                پاسخ : ad7705

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

                دیدگاه


                  #9
                  پاسخ : ad7705

                  من برنامم رو به شکل زیر تغییر دادم
                  حالا خوشبختانه دیتا رو lcd نشون داده میشه ولی یه دیتای نادرست
                  واین به این معنی که ایسی درست کانفیگ نشده ولی اینکه کجای کار اشتباه ....
                  ونیازمند یاری سبزتان ....
                  کد:
                  [left]$regfile = "m88def.dat"
                  $crystal = 1000000
                  Config Lcd = 16 * 2
                  Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
                  Cls
                  
                  Dim Ch2 As Word
                  Dim Ch3 As Word
                  Dim Podatki_out As Byte
                  Dout Alias Portb.4                     'podatki AD7714 OUT
                  Din Alias Pinb.3                      'podatki AD7714 IN
                  Sclk Alias Portb.5                     'Clockad7714 Clk
                  Drdy Alias Pind.2
                  
                  
                  
                  Podatki_out = &H20
                  Shiftout Dout , Sclk , Podatki_out , 1 , 8
                  
                  Podatki_out = &H08
                  Shiftout Dout , Sclk , Podatki_out , 1 , 8
                  
                  Podatki_out = &H10
                  Shiftout Dout , Sclk , Podatki_out , 1 , 8
                  
                  Podatki_out = &H40                     'LO filter vrednost nastavljen na 50Hz (384 110000000)
                  Shiftout Dout , Sclk , Podatki_out , 1 , 8
                  
                  
                  Do
                  
                  
                  
                  Bitwait Drdy , Reset
                  Locate 2 , 1
                   Lcd "drdy=0"
                  
                  Waitus 10
                  Podatki_out = &H38
                  Shiftout Dout , Sclk , Podatki_out , 1 , 8
                  Waitus 10
                  Shiftin Din , Sclk , Ch3 , 1 , 16
                  Waitus 10
                  
                  
                  
                  Home
                  Lcd "ch3: "
                  Lcd Ch3
                  Loop
                  [/left]
                  چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                  دیدگاه


                    #10
                    پاسخ : ad7705

                    حالا که دارم برای چندمین بار تست میکنم میبینم فقط 0 و 65535 رو نشون میده
                    حتی برنامه ای که اخر دیتا شیتش هست هم نتونست کمکم کنه
                    دیگه دارم سرگیجه میگیرم ......
                    دلم میخواد تا میتونم به این ایسی بدوبیراه بگم .... :angry:
                    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                    دیدگاه


                      #11
                      پاسخ : ad7705

                      دوست عزیزم
                      نوشته اصلی توسط mikla
                      حالا که دارم برای چندمین بار تست میکنم میبینم فقط 0 و 65535 رو نشون میده
                      حتی برنامه ای که اخر دیتا شیتش هست هم نتونست کمکم کنه
                      دیگه دارم سرگیجه میگیرم ......
                      دلم میخواد تا میتونم به این ایسی بدوبیراه بگم .... :angry:
                      باور کن این شکلک که گذاشتی خیلی دلم میخواست که دوباره اطلاعات و نحوه راه اندازی این آی سی رو بخونم ولی والا شرمندم
                      وقت ندارم . یعنی اونوقت مجبورم دوباره جزئیاتو بخونم و رو یه برد بورد تستش کنم. امیدوارم که از من دلخور نشی البته فردا یه
                      به دیتا شیتش میندازم شاید شما یه چیزی رو از قلم انداخته باشی.
                      افتادگی آموز اگر طالب علمی
                      هرگز نخورد آب زمینی که بلند است

                      دیدگاه


                        #12
                        پاسخ : ad7705

                        نوشته اصلی توسط CNC_IR
                        دوست عزیزم

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

                        دیدگاه


                          #13
                          پاسخ : ad7705

                          کد:
                          برنامه ای که اخر دیتا شیت ایسیad7705 هست رو تو کد ویژن نوشتم تو دیتاشیت از میکرو کنترلر 68hc11 استفاده شده ، پایه های ارتباط spi این میکرو روی پورت d اون قرار داره و به ترتیب زیر:
                          68hc11
                          pd.5=ss   
                           pd.4=sck  
                           pd.2=miso  
                          pd.3=mosi
                          و از اونجایی که من از مگا 88 استفاده میکنم تنها تغییری که تو برنامه دادم مربوط به تعریف پایه های spi هست (در مگا 88 پایه های ارتباط spi روی پورت b قرار دارد )
                          
                          والبته دستورات نمایش روی  lcd 
                          
                          [left]#include <mega88.h>
                          
                          // Alphanumeric LCD Module functions
                          #asm
                            .equ __lcd_port=0x0B ;PORTD
                          #endasm
                          #include <lcd.h>
                          #include <math.h>
                          #include <stdio.h>
                          #define num_samples 100
                          #define max_reg_length 2
                          writetoreg(int);
                          read(int,char);
                          
                          char store[num_samples*max_reg_length+30];
                          char *datapointer=store;
                          char a;
                          char b; 
                          unsigned int recive_data;
                          void main(void)
                          {
                          #pragma optsize-
                          CLKPR=0x80;
                          CLKPR=0x00;
                          #ifdef _OPTIMIZE_SIZE_
                          #pragma optsize+
                          #endif
                          
                          DDRC=0x04;
                          PORTC|=0x04;
                          writetoreg(0x20);
                          writetoreg(0x0c);
                          writetoreg(0x10);
                          writetoreg(0x40);
                          while(PORTC&0x10);
                          while(1){
                          for(a=0;a<num_samples;a++);
                           { writetoreg(0x38);
                           read(num_samples,2);
                            }
                           
                           }; 
                           }
                          
                          
                          writetoreg(int byteword)
                           {
                          int q;
                          SPCR=0X3F;
                          SPCR=0X7F;
                          DDRB=0X28;
                          q=SPSR;
                          q=SPDR;
                          PORTC&=0xfb;
                          SPDR=byteword;
                          while(!(SPSR & 0x80));
                          PORTC|=0X4;
                          }
                          read(int amount,char reglength)
                          { 
                           char lcd_buf[16];
                          int q;
                          SPCR=0X3F;
                          SPCR=0X7F;
                          DDRB=0X20;
                          while(PORTC&0X10);
                          PORTC&=0xfb;
                          for(b=0;b<reglength;b++)
                          {SPDR=0;
                          while(!(SPSR&0X80));
                          //*datapointer++=SPDR; 
                           recive_data=SPDR; 
                          
                           lcd_init(16); 
                          
                            sprintf(lcd_buf,"data=%d",recive_data);
                          
                            lcd_puts(lcd_buf);
                          }
                          PORTC|=0X4;
                          }
                           
                           [/left]
                          
                          [color=red]و نتیجه به شرح زیر می باشد:
                          روی پایه sck  پالس داریم ولی نامرتب
                          پایه drdy یا صفر نمیشه یا مدام پالس داره و این پاسها زمانی اتفاق می افته که چند بار میکرو رو ریست کنم و وقتی پالس روی پایه drdy داریم دایم زمینه و پالسها یک لحظه این پایه رو مثبت میکنه
                          
                          و نمایشگر lcd هم دیتاهایی مثل 255 و 127و 24و 251 و 48و .. رو رفرش میکنه در صورتی که ولتاژ انالوگ ورودی 0.4 ولت با ولتاژ رفرنس 1.2 ولت و در این شرایط دیتایی که باید نمایش داده بشه حدود 24575  
                          البته من خیلی وقت که با c برنامه ننوشتم و احتمال میدم یه جای کا رو اشتباه کرده باشم[/color]
                          چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                          دیدگاه


                            #14
                            پاسخ : ad7705

                            کد:
                             :applause: :applause: :applause: :applause:
                            بالاخره جواب داد البته با کمک فایلی که از سایت [color=red]iran_led[/color] دانلود کردم (این فایل شامل یه برنامه در مورد ران کردن ad7715 هست)
                            اینم برنامه البته تو کدویژن امیدوارم به کارتون بیاد 
                            
                            
                            
                            
                            [left]#include <mega88.h>
                            
                            #asm
                             .equ __lcd_port=0x0B ;PORTD
                            #endasm
                            /////////////////////
                            	#include <lcd.h>
                            	#include <delay.h>
                            	#include <stdio.h>
                                #include <spi.h> 
                                #include <stdlib.h>
                            //////////////////// 
                                #define ADC_RESET PORTB.1
                                #define ADC_CS  PORTB.2
                                #define ADC_DRDY PINB.0
                                #define high   1
                                #define low    0
                            //////////////////////
                             void adc_init(void);    
                            unsigned int read_spi();
                            // Declare your global variables here
                               char lcd[16];  
                               unsigned char Watchdog; 
                            // Watchdog Timer initialization
                            // Watchdog Timer Prescaler: OSC/16
                            
                            void main(void)
                            {
                            
                            
                            // Crystal Oscillator division factor: 1
                            CLKPR=0x80;
                            CLKPR=0x00;
                            
                            // Port B initialization
                            // Func0=In Func1=In Func2=In Func3=Out Func4=Out Func5=Out Func6=In Func7=Out 
                            // State0=T State1=T State2=T State3=0 State4=0 State5=0 State6=T State7=0 
                            PORTB=0x00;
                            DDRB=0x2E;
                            
                            // Port C initialization
                            // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
                            // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
                            PORTC=0x00;
                            DDRC=0x00;
                            
                            // Port D initialization
                            // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
                            // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
                            PORTD=0x00;
                            DDRD=0x00;
                            
                            // Port E initialization
                            // Func0=In Func1=In Func2=In 
                            // State0=T State1=T State2=T 
                            
                            // Crystal Oscillator division factor: 1
                            CLKPR=0x80;
                            CLKPR=0x00;
                            
                            // Timer/Counter 0 initialization
                            // Clock source: System Clock
                            // Clock value: Timer 0 Stopped
                            // Mode: Normal top=FFh
                            // OC0 output: Disconnected
                            
                            // 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
                            TCCR1A=0x00;
                            TCCR1B=0x00;
                            TCNT1H=0x00;
                            TCNT1L=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
                            
                            // External Interrupt(s) initialization
                            // INT0: Off
                            // INT1: Off
                            // INT2: Off
                            // Interrupt on any change on pins PCINT0-7: Off
                            // Interrupt on any change on pins PCINT8-15: Off
                            
                            
                            // Analog Comparator initialization
                            // Analog Comparator: Off
                            // Analog Comparator Input Capture by Timer/Counter 1: Off
                            // Analog Comparator Output: Off
                            ACSR=0x80;
                            
                            // SPI initialization
                            // SPI Type: Master
                            // SPI Clock Rate: 1000.000 kHz
                            // SPI Clock Phase: Cycle Start
                            // SPI Clock Polarity: High
                            // SPI Data Order: MSB First
                            SPCR=0x5D;
                            SPSR=0x00;
                            
                            
                            
                            
                            lcd_init(16);
                            
                            while (1)
                               {
                                 adc_init();
                                while(1)
                                   {
                                   float resultf;
                                   char data[16];
                                   lcd_clear();
                                   lcd_gotoxy(5,0);
                                   lcd_putsf("DATA:");
                                   lcd_gotoxy(3,1);
                                   resultf=read_spi(); 
                                   //resultf=read_spi()/0.65535*0.01250;
                                   ftoa(resultf,2,data);
                                   sprintf(lcd," %s",data);
                                   lcd_puts(lcd);
                                  delay_ms(500) ;
                                  Watchdog|=0x01;
                                   }
                               
                               
                               
                               
                                
                               };
                            }
                            
                            ////////SPI initializing     
                            void adc_init(void)
                            {
                                lcd_clear();   
                            	lcd_gotoxy(3,0);
                            	lcd_putsf("Please wait");
                            	ADC_RESET=low; 
                               
                            	ADC_CS=low;	
                            	ADC_RESET=high;	
                            	ADC_CS=high;
                            	delay_ms(3000);
                                ADC_CS=low;
                            	spi( 0x20 );
                            	ADC_CS=high;	
                            	ADC_CS=low;			
                            	spi( 0x0c);     
                            	ADC_CS=high;			
                            	ADC_CS=low;			
                            	spi( 0x10);    
                            	ADC_CS=high;
                            	ADC_CS=low;			
                            	spi( 0x44);     
                            	ADC_CS=high;
                                lcd_gotoxy(3,1);
                                lcd_putsf("Calibrated");
                                delay_ms(1000);
                                lcd_clear();
                            }
                            /////////////////////
                            unsigned int read_spi()
                                  
                             {
                             unsigned result;
                             while ( ADC_DRDY);
                             while (! ADC_DRDY );
                             while ( ADC_DRDY );
                             ADC_CS=low;
                             spi(0x38);
                             ADC_CS=high;
                             ADC_CS=low;
                             result=(unsigned) spi(0)<<8;
                             ADC_CS=low;
                             result|=spi(0);
                             result=(unsigned) ((unsigned long) result);
                             return result;
                            
                                   }[/left]
                            چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                            دیدگاه


                              #15
                              پاسخ : ad7705

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

                              دیدگاه

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