NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3427 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: مشکل در استفاده از پورت a هم بعنوان adc هم بعنوان ورودی خروجی(atmega16)

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2013
    نوشته ها
    98
    تشکر
    76
    تشکر شده 16 بار در 14 پست

    Exclamation مشکل در استفاده از پورت a هم بعنوان adc هم بعنوان ورودی خروجی(atmega16)

    سلام خدمت دوستان عزیز
    من دارم یه مدار می بندم که توی اون به پایه a.0,a.1 یه سنسور sht وصل کردم و از a.6,a.7 دارم ورودی adc میگیرم
    نمیدونم چرا در حالت عادی دو تا adc جواب میده ولی وقتی همراه sht میذارم توی مدار،سنسور درست کار میکنه ولی دیگه مقدار Adc نمیده...
    دوستان اگه کمک کنن ممنون میشم
    اینم کد برنامه:
    کد:
    Do
    
    Enable Adc
    Start Adc
    Waitms 10
     Hc1 = Getadc(6)
    Tc1 = Getadc(7)
    
    Tc2 = Tc1 / 1023
    Hc2 = Hc1 / 1023
     Tc3 = Tc2 * 80
     Hc3 = Hc2 * 90
      Tc = Round(tc3)
      Hc = Round(hc3)
      Waitms 10
      Stop Adc
      Disable Adc
    
    Locate 4 , 1
    Lcd Tc ; "  "
    
    Locate 4 , 8
    Lcd Hc ; "% "
    
     Gosub Sht1
    loop

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال abbasalifix آواتار ها
    تاریخ عضویت
    Apr 2011
    نام
    عباسعلی محمدنیا
    نوشته ها
    187
    تشکر
    266
    تشکر شده 139 بار در 80 پست

    پیش فرض

    احتمالا توی تعریف ورودی خروجی ها اشتباه کرده باشین .
    پایه avcc رو به +5 ولت و پایه agnd رو به زمین وصل کنید
    برنامه کامل رو بزارین
    نوع سنسور ها رو هم اعلام کنید

  4. #3
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2013
    نوشته ها
    98
    تشکر
    76
    تشکر شده 16 بار در 14 پست

    پیش فرض

    برای سنسورها دارم از sht استفاده میکنم....
    برنامه مربوط به adc همینه که گذاشتم
    بقیه جاهای برنامه کاملا درست کار میکنه فقط نمیدونم چرا مقدار Adc رو هرچقدر که تغییر میدم درست تغغیر نمیکنه و یکی که اصلا تغییر نمیکنه...

  5. #4
    کاربر فعال abbasalifix آواتار ها
    تاریخ عضویت
    Apr 2011
    نام
    عباسعلی محمدنیا
    نوشته ها
    187
    تشکر
    266
    تشکر شده 139 بار در 80 پست

    پیش فرض

    کد:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    هرجور که راحتین - قصدم کپی کردن نبود
    به قسمت کانفیگ های برنامه این کد رو اضافه کنید و همون طور که در بالا گفتم پایه ها رو وصل کنید
    مقدار های خوانده شده چون 10 بیتی هستند متغیرتون باید مثلا اینطوری تعریف بشه
    کد:
    Dim V1 As Word
    برای خوندن مقادیر adc هم میتونید مثل این کد استفاده کنید
    کد:
    V1 = Getadc(0)
    - - - Updated - - -

    چک کنید که مقدار محاسباتی داخل متغییر در برنامه تون از مقدار استاندارد اون بیشتر نباشه

  6. تشکرها از این نوشته :


  7. #5
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2013
    نوشته ها
    98
    تشکر
    76
    تشکر شده 16 بار در 14 پست

    پیش فرض

    سلام نه عزیز جان...من کی همچین حرفی زدم؟؟؟
    اگه ناراحت شدید عذر میخام...
    راستش حوصله بحث پیرامون برنامه رو نداشتم
    انم برنامه(فقط یه کم طولانیه...):
    کد:
    $regfile = "m32def.dat"
    $crystal = 1000000
    
    '----------------------------------------------------------------config lcd
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5 , _
                        , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2
    Cursor Off
    Cls
    Locate 1 , 1
    Lcd "hello"
    Waitms 1000
    Cls
    '----------------------------------------------------------------config adc
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    '-----------------------------------------------------------all config & alias
    Config Portd.0 = Output                                     'portd
     Phoner Alias Portd.0
    Config Portd.3 = Output
     M1 Alias Portd.3
    Config Portd.4 = Output
     M2 Alias Portd.4
    Config Portd.5 = Output
     F1 Alias Portd.5
    Config Portd.6 = Output
     F2 Alias Portd.6
    Config Portd.7 = Output
                               'portb
    
    Config Portb.4 = Output
     Alarm Alias Portb.4
    Config Portb.5 = Output
     Meror Alias Portb.5
    Config Portb.6 = Output
     Dcontrol Alias Portb.6
    Config Portb.7 = Output
     Stoperor Alias Portb.7
    Reset Stoperor
    Reset M1
    Reset M2
    Reset F1
    Reset F2
    Reset Phoner
    Reset Alarm
    Reset Meror
    Reset Dcontrol
    '---------------------------------------------------------------interupt
      On Int0 Heror
    
     Enable Int0
    
     Config Int0 = Rising
    
    Enable Interrupts
    
    '-----------------------------------------------------------dim
    Dim Hc1 As Word
    Dim Tc1 As Word
    Dim Hc2 As Single
    Dim Tc2 As Single
    Dim Hc3 As Single
    Dim Tc3 As Single
    Dim Hc As Word
    Dim Tc As Word
    Dim Tmax As Word
    Dim Tmin As Word
    Dim Hmax As Word
    Dim Hmin As Word
    
    '-----------------------------------------------------------dim sht
    Dim Ctr As Byte
    Dim Dataword1 As Word
    Dim Dataword2 As Word
    Dim Command As Byte
    Dim Temp1 As String * 4
    Dim Temp2 As String * 4
    Dim H1 As String * 4
    Dim H2 As String * 4
    
    
    Dim Calc As Single
    Dim Calc2 As Single
    Dim Rhlinear As Single
    Dim Rhlintemp As Single
    
    Dim Tempc As Single
    Dim Tempf As Single
    Dim C As Single
    Dim D As Single
    Dim E As Single
    
     Dim E1 As Word
     Dim E2 As Word
     Dim Rhlintemp1 As Word
     Dim Rhlintemp2 As Word
    
    Const C1 = -4
    Const C2 = 0.0405
    Const C3 = -0.0000028
    Const T1c = .01
    Const T2 = .00008
    Const T1f = .018
    
    '------------------------------------------------------- sht1
    
     Sck1 Alias Portb.0
    Dataout1 Alias Portb.1
    Datain1 Alias Pinb.1
    Read1 Alias Portb.2
    
    Declare Sub Getit1()
    '------------------------------------------------------- sht2
    
     Sck2 Alias Portc.0
    Dataout2 Alias Portc.1
    Datain2 Alias Pinc.1
    Read2 Alias Portd.7
    
    Declare Sub Getit2()
    '-----------------------------------------------------------start sht1
    Ddrb = &B11111111
    Config Pinb.0 = Output                                      'sck
    Config Pinb.1 = Output                                      'data
    
    Set Dataout1
    For Ctr = 1 To 12
     Set Sck1
     Waitus 2
     Reset Sck1
     Waitus 2
    Next Ctr
    Set Read1
    '-----------------------------------------------------------start sht2
    Ddrc = &B11111111
    Config Pinc.0 = Output                                      'sck
    Config Pinc.1 = Output                                      'data
    
    Set Dataout2
    For Ctr = 1 To 12
     Set Sck2
     Waitus 2
     Reset Sck2
     Waitus 2
    Next Ctr
    Set Read2
    '------------------------------------------------------------main
    Main:
    Do
     Locate 3 , 1
      Lcd "m1:"
     Locate 3 , 8
      Lcd "m2:"
     Locate 3 , 15
      Lcd "tc="
     Locate 4 , 1
      Lcd "f1:"
     Locate 4 , 8
      Lcd "f2:"
     Locate 4 , 15
      Lcd "hc="
    
    
     Hc1 = Getadc(0)
     Tc1 = Getadc(1)
    
       Tc2 = Tc1 / 1023
       Hc2 = Hc1 / 1023
    
        Tc3 = Tc2 * 80
        Hc3 = Hc2 * 90
    
          Tc = Round(tc3)
          Hc = Round(hc3)
    
           Locate 3 , 18
            Lcd Tc ; " "
           Locate 4 , 18
            Lcd Hc ; "% "
    
       Tmax = Tc + 2
       Tmin = Tc - 2
       Hmax = Hc + 2
       Hmin = Hc - 2
    
     Gosub Sht1
      Waitms 10
     Gosub Sht2
      Waitms 10
      If E1 < Tmin Then
       Set M1
       Locate 3 , 4
       Lcd "on "
       End If
      If E1 > Tmax Then
       Reset M1
       Locate 3 , 4
       Lcd "off "
       End If
      If E2 < Tmin Then
       Set M2
       Locate 3 , 11
       Lcd "on "
       End If
      If E2 > Tmax Then
       Reset M2
       Locate 3 , 11
       Lcd "off "
       End If
      If Rhlintemp1 > Hmin Then
       Set F1
       Locate 4 , 4
       Lcd "on "
       End If
      If Rhlintemp1 < Hmax Then
       Reset F1
       Locate 4 , 4
       Lcd "off "
       End If
      If Rhlintemp2 > Hmin Then
       Set F2
       Locate 4 , 11
       Lcd "on "
       End If
      If Rhlintemp2 < Hmax Then
       Reset F2
       Locate 4 , 11
       Lcd "off "
       End If
    
    Loop
    End
    '-------------------------------------------------------------------end main
    '************************************************************
    
    '-------------------------------------------------------------sht1
    Sht1:
    
    Command = &B00000011
     Reset Read1
     Call Getit1
     Set Read1
    
     Tempf = T1f * Dataword1
     Tempf = Tempf - 40
    
     Tempc = T1c * Dataword1
     Tempc = Tempc - 40
    
     C = Tempf - 32
     D = C * 5
     E = D / 9
    E1 = Round(e)
    Temp1 = Fusing(e , "##.#")
    
     Locate 1 , 1
     Lcd "T1=" ; Temp1 ; " "
    
     Command = &B00000101
     Reset Read1
     Call Getit1()
     Set Read1
     Calc = C2 * Dataword1
     Calc2 = Dataword1 * Dataword1
     Calc2 = C3 * Calc2
     Calc = Calc + C1
     Rhlinear = Calc + Calc2
    
     Calc = T2 * Dataword1
     Calc = Calc + T1c
     Calc2 = Tempc - 25
     Calc = Calc2 * Calc
     Rhlintemp = Calc + Rhlinear
    
    Rhlintemp1 = Round(rhlintemp)
    H1 = Fusing(rhlintemp , "##.#")
    
     Locate 2 , 1
     Lcd "h1=" ; H1 ; "% "
     Return
     '----------------------------------------------------------------sht2
     Sht2:
    
     Command = &B00000011
     Reset Read2
     Call Getit2
     Set Read2
    
     Tempf = T1f * Dataword2
     Tempf = Tempf - 40
    
     Tempc = T1c * Dataword2
     Tempc = Tempc - 40
    
     C = Tempf - 32
     D = C * 5
     E = D / 9
    
     E2 = Round(e)
    
     Temp2 = Fusing(e , "##.#")
    
     Locate 1 , 10
     Lcd "T2=" ; Temp2 ; " "
    
     Command = &B00000101
     Reset Read2
     Call Getit2()
     Set Read2
     Calc = C2 * Dataword2
     Calc2 = Dataword2 * Dataword2
     Calc2 = C3 * Calc2
     Calc = Calc + C1
     Rhlinear = Calc + Calc2
    
     Calc = T2 * Dataword2
     Calc = Calc + T1c
     Calc2 = Tempc - 25
     Calc = Calc2 * Calc
     Rhlintemp = Calc + Rhlinear
    
    Rhlintemp2 = Round(rhlintemp)
    H2 = Fusing(rhlintemp , "##.#")
    
     Locate 2 , 10
     Lcd "h2=" ; H2 ; "% "
     Return
    '-------------------------------------------------------------- getit 1
    Sub Getit1()
    
     Local Datavalue As Word
     Local Databyte As Byte
    
     Set Sck1
     Reset Dataout1
     Reset Sck1
     Set Sck1
     Set Dataout1
     Reset Sck1
    
     Shiftout Dataout1 , Sck1 , Command , 1
    
     Ddrb = &B11111101
     Config Pinb.1 = Input
     Set Sck1
     Reset Sck1
     Waitus 10
    
     Bitwait Pinb.1 , Reset
    
     Shiftin Datain1 , Sck1 , Databyte , 1
     Datavalue = Databyte
    
     Ddrb = &B11111111
     Config Pinb.1 = Output
    
     Reset Dataout1
     Set Sck1
     Reset Sck1
    
     Ddrb = &B11111101
     Config Pinb.1 = Input
    
     Shiftin Datain1 , Sck1 , Databyte , 1
     Shift Datavalue , Left , 8
     Datavalue = Datavalue Or Databyte
    
     Dataword1 = Datavalue
    
     Ddrb = &B11111111
     Config Pinb.1 = Output
    
     Reset Dataout1
     Set Sck1
     Reset Sck1
    
     Ddrb = &B11111101
     Config Pinb.1 = Input
    
     Shiftin Datain1 , Sck1 , Databyte , 1
    
     Ddrb = &B11111111
     Config Pinb.1 = Output
    
     Set Dataout1
     Set Sck1
     Reset Sck1
    End Sub
    '------------------------------------------------------------------ getit 2
    Sub Getit2()
    
     Local Datavalue As Word
     Local Databyte As Byte
    
     Set Sck2
     Reset Dataout2
     Reset Sck2
     Set Sck2
     Set Dataout2
     Reset Sck2
    
     Shiftout Dataout2 , Sck2 , Command , 1
    
     Ddrc = &B11111101
     Config Pinc.1 = Input
     Set Sck2
     Reset Sck2
     Waitus 10
    
     Bitwait Pinc.1 , Reset
    
     Shiftin Datain2 , Sck2 , Databyte , 1
     Datavalue = Databyte
    
     Ddrc = &B11111111
     Config Pinc.1 = Output
    
     Reset Dataout2
     Set Sck2
     Reset Sck2
    
     Ddrc = &B11111101
     Config Pinc.1 = Input
    
     Shiftin Datain2 , Sck2 , Databyte , 1
     Shift Datavalue , Left , 8
     Datavalue = Datavalue Or Databyte
    
     Dataword2 = Datavalue
    
     Ddrc = &B11111111
     Config Pinc.1 = Output
    
     Reset Dataout2
     Set Sck2
     Reset Sck2
    
     Ddrc = &B11111101
     Config Pinc.1 = Input
    
     Shiftin Datain2 , Sck2 , Databyte , 1
    
     Ddrc = &B11111111
     Config Pinc.1 = Output
    
     Set Dataout2
     Set Sck2
     Reset Sck2
    End Sub
    '-------------------------------------------------------h1eror
    
    Heror:
    
     Reset M1
     Reset M2
     Reset F1
     Reset F2
     Set Meror
     Set Phoner
     Waitms 50
     Reset Phoner
    
    Set Alarm
    Waitms 500
    Reset Alarm
    
     Cls
     Locate 1 , 1
     Lcd "        EROR        "
     Locate 2 , 1
     Lcd "   HITER - EROR    "
     Locate 3 , 1
     Lcd "        EROR        "
     Locate 4 , 1
     Lcd "   PRES STOP EROR   "
    
      Bitwait Stoperor , Set
    
      Reset Meror
      Cls
      Goto Main
      Return
    مشکل میدونی از کجا بود؟
    وقتی از porta هم بعنوان ورودی خروجی و هم بعنوان adc استفاده میکنی اگه موقع خوندن adc روی پایه های دیگه ولتاژ داشته باشه ،adc رو دچار اشتباه میکنه،فکر میکنم از داخل به هم وصل باشند...
    وقتی داشت دیتا میخوند،من زمانی که پتانسومترو میچرخوندم مقدارولتاژ روی پایه تغییر نمیکرد،چون از سنسور هم ولتاژ میومد روش....
    مدارو عوض کردم و برناه رو مجدد نوشتم و از porta فقط بعنوان adc استفاده کردم...
    مرسی از کمکتون

موضوعات مشابه

  1. خارج کردن پورت com از حالت استفاده (in use)
    توسط sarbaz13 در انجمن برنامه نویسی کامپیوتر/کنترل با کامپیوتر
    پاسخ: 8
    آخرين نوشته: 04-02-2016, 20:22
  2. پاسخ: 3
    آخرين نوشته: 20-02-2015, 17:20
  3. پاسخ: 3
    آخرين نوشته: 28-11-2014, 18:24
  4. استفاده‌ی همزمان از هر دو پورت سریالusart
    توسط fatemehjml در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 10
    آخرين نوشته: 31-03-2011, 01:07

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •