اطلاعیه

Collapse
No announcement yet.

حافظه eeprom میکرو مگا 16

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

    حافظه eeprom میکرو مگا 16

    با سلام
    تا چند متغیر از نوع single میشه برای میکرو مگا 16 تعریف کرد.
    من تو برنامم 8 متغیر از نوع eram single تعریف کردم دو متغیر اول درست کار میکنند و لی بقیه هنگام نمایش روی ال سی دی این رو نشون میده: nan- یا 0.0-
    میشه راهنمایی کنید مشکل از کجاست ?
    با تشکر

    #2
    پاسخ : حافظه eeprom میکرو مگا 16

    $regfile = "m16def.dat"
    $crystal = 4000000
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , Rs = Portb.5 , E = Portb.4

    Config Lcd = 16 * 2
    Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
    Deflcdchar 1 , 32 , 32 , 31 , 32 , 32 , 31 , 32 , 32
    Cursor Off
    'keys
    Config Portc.0 = Input
    Config Portc.1 = Input
    Config Portc.2 = Input
    Config Portc.7 = Input
    'led
    Config Portc.3 = Output
    Config Portc.4 = Output
    Config Portc.5 = Output

    Config Portc.6 = Output


    'Config Debounce = 500 'Comm. Anode
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    'Config Timer0 = Timer , Prescale = 1024
    'Enable Timer0
    'Enable Interrupts

    Dim K As Single , G As Single , Ke As Eram Single , Ge As Eram Single
    Dim Tol1 As Single , Tol2 As Single , Tol3 As Single , Tol4 As Single , Tol5 As Single , Tol6 As Single
    Dim Tol1e As Eram Single , Tol2e As Eram Single , Tol3e As Eram Single , Tol4e As Eram Single , Tol5e As Eram Single , Tol6e As Eram Single
    Dim A1 As Word , A2 As Word , A3 As Word , A4 As Word , A5 As Word , A6 As Word

    Dim Temp1 As Single , Temp2 As Single , Temp3 As Single , Temp4 As Single , Temp5 As Single , Temp6 As Single

    Dim X As Word
    Config Single = Scientific , Digits = 1




    Declare Sub Submain
    Declare Sub Settempon
    Declare Sub Settempoff

    Declare Sub Getdata
    Declare Sub Set1
    Declare Sub Set2
    Declare Sub Set3
    Declare Sub Set4
    Declare Sub Set5
    Declare Sub Set6


    Start Adc
    '******************************************** ****************



    Goto Getdata


    Sub Getdata
    Tol1 = Tol1e
    Tol2 = Tol2e
    Tol3 = Tol3e
    Tol4 = Tol4e
    Tol5 = Tol5e
    Tol6 = Tol6e
    K = Ke
    G = Ge

    Do

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Settempon
    End If


    Temp1 = 0
    Temp2 = 0
    Temp3 = 0
    Temp4 = 0
    Temp5 = 0
    Temp6 = 0

    For X = 1 To 30

    A1 = Getadc(0)
    Temp1 = Temp1 + A1

    A2 = Getadc(1)
    Temp2 = Temp2 + A2

    A3 = Getadc(2)
    Temp3 = Temp3 + A3

    A4 = Getadc(3)
    Temp4 = Temp4 + A4

    A5 = Getadc(4)
    Temp5 = Temp5 + A5

    A6 = Getadc(5)
    Temp6 = Temp6 + A6

    Waitms 10
    Next

    Temp1 = Temp1 / 30
    Temp2 = Temp2 / 30
    Temp3 = Temp3 / 30
    Temp4 = Temp4 / 30
    Temp5 = Temp5 / 30
    Temp6 = Temp6 / 30

    Temp1 = Temp1 / 4
    Temp2 = Temp2 / 4
    Temp3 = Temp3 / 4
    Temp4 = Temp4 / 4
    Temp5 = Temp5 / 4
    Temp6 = Temp6 / 4

    Temp1 = Temp1 + Tol1
    Temp2 = Temp2 + Tol2
    Temp3 = Temp3 + Tol3
    Temp4 = Temp4 + Tol4
    Temp5 = Temp5 + Tol5
    Temp6 = Temp6 + Tol6

    Locate 1 , 1


    Lcd Temp1 ; " " ; Temp2 ; " " ; Temp3

    Locate 2 , 1
    Lcd Temp4 ; " " ; Temp5 ; " " ; Temp6


    If K < Temp1 Or K < Temp2 Or K < Temp3 Or K < Temp4 Or K < Temp5 Or K < Temp6 Then
    Portc.6 = 1

    End If

    Loop
    End Sub








    '******************************************** ****************



    '******************************************** ****************
    '******************************************** ******

    '******************************************** ******************

    '******************************************** ******************
    '******************************************** ******************
    '******************************************** ****************
    Sub Settempon
    Cursor Off
    Cls
    Locate 1 , 1

    Lcd "set temp on"
    Locate 2 , 1
    Lcd "Temp on="
    K = Ke

    Do

    If Pinc.1 = 0 And K < 999 Then K = K + 1
    If K < 0 Then K = 0

    If Pinc.2 = 0 And K > 0 Then K = K - 1




    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Settempoff
    End If









    Locate 2 , 12
    Lcd K ; Chr(0) ; "c"
    Ke = K
    Loop
    End Sub


    '******************************************** ****************

    Sub Settempoff
    Cursor Off
    Cls
    Locate 1 , 1

    Lcd "set temp off"
    Locate 2 , 1
    Lcd "Temp off="
    G = Ge
    Do

    If Pinc.1 = 0 And G < 999 Then G = G + 1
    If G < 0 Then G = 0

    If Pinc.2 = 0 And G > 0 Then G = G - 1

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set1
    End If







    Locate 2 , 13
    Lcd G ; Chr(0) ; "c"

    Ge = G
    Loop
    End Sub


    '******************************************** ****************
    Sub Set1
    Cursor Off
    Cls
    Tol1 = Tol1e
    Do
    Locate 1 , 1

    Lcd "sensor1 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set2
    End If

    If Pinc.1 = 0 And Tol1 < 10 Then Tol1 = Tol1 + 0.1


    If Pinc.2 = 0 And Tol1 > -10 Then Tol1 = Tol1 - 0.1

    Waitms 10




    Lowerline

    Lcd Tol1

    Tol1e = Tol1

    Loop
    End Sub
    '******************************************** ********************************

    Sub Set2
    Cursor Off
    Cls
    Tol2 = Tol2e
    Do
    Locate 1 , 1

    Lcd "sensor2 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set3
    End If

    If Pinc.1 = 0 And Tol2 < 10 Then Tol2 = Tol2 + 0.1


    If Pinc.2 = 0 And Tol2 > -10 Then Tol2 = Tol2 - 0.1

    Waitms 10



    Lowerline

    Lcd Fusing(tol2 , "#.#&quot ; ; Chr(0) ; "c" ; " "



    Tol2e = Tol2

    Loop
    End Sub

    '******************************************** ********************************

    Sub Set3
    Cursor Off
    Cls
    Tol3 = Tol3e
    Do
    Locate 1 , 1

    Lcd "sensor3 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set4
    End If

    If Pinc.1 = 0 And Tol3 < 10 Then Tol3 = Tol3 + 0.1


    If Pinc.2 = 0 And Tol3 > -10 Then Tol3 = Tol3 - 0.1

    Waitms 10



    Lowerline

    Lcd Fusing(tol3 , "#.#&quot ; ; Chr(0) ; "c" ; " "


    Tol3e = Tol3
    Loop
    End Sub


    '******************************************** ********************************

    Sub Set4
    Cursor Off
    Cls
    Tol4 = Tol4e
    Do
    Locate 1 , 1

    Lcd "sensor4 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set5
    End If

    If Pinc.1 = 0 And Tol4 < 10 Then Tol4 = Tol4 + 0.1


    If Pinc.2 = 0 And Tol4 > -10 Then Tol4 = Tol4 - 0.1

    Waitms 10




    Lowerline

    Lcd Fusing(tol4 , "#.#&quot ; ; Chr(0) ; "c" ; " "


    Tol4e = Tol4
    Loop
    End Sub


    '******************************************** ********************************

    Sub Set5
    Cursor Off
    Cls
    Tol5 = Tol5e
    Do
    Locate 1 , 1

    Lcd "sensor5 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Set6
    End If

    If Pinc.1 = 0 And Tol5 < 10 Then Tol5 = Tol5 + 0.1


    If Pinc.2 = 0 And Tol5 > -10 Then Tol5 = Tol5 - 0.1

    Waitms 10


    Lowerline

    Lcd Fusing(tol5 , "#.#&quot ; ; Chr(0) ; "c" ; " "


    Tol5e = Tol5
    Loop
    End Sub


    '******************************************** ********************************

    Sub Set6
    Cursor Off
    Cls
    Tol6 = Tol6e
    Do
    Locate 1 , 1

    Lcd "sensor6 setting"

    If Pinc.0 = 0 Then
    Bitwait Pinc.0 , Set
    Goto Getdata
    End If

    If Pinc.1 = 0 And Tol6 < 10 Then Tol6 = Tol6 + 0.1


    If Pinc.2 = 0 And Tol6 > -10 Then Tol6 = Tol6 - 0.1

    Waitms 10
    Lowerline

    Lcd Fusing(tol6 , "#.#&quot ; ; Chr(0) ; "c" ; " "

    Tol6e = Tol6

    Loop
    End Sub

    دیدگاه


      #3
      پاسخ : حافظه eeprom میکرو مگا 16

      شما اینارو تو اول کدت اضاف کنی احتمالا مشکل حل می شه

      کد:
      $swstack=100
      $hwstack=100
      $framesize=100
      البته اینایی که گفتم قانون داره همینجوری نیست ولی چون الان جاش نیست همینها رو اضاف کن که کار کنه اگر حل شد یه سرچ تو سایت بزنی کامل می فهمی چون توضیح داده که چیه ولی هر وقت که زیر برنامه داری باید این سه دستور رو بنویسی
      همانطور که مایل نیستم بنده کسی باشم، حاضر نیستم آقای کسی باشم. کسانی که مخالف آزادی دیگرانند، خود لیاقت آزادی را ندارند.((آبراهام لینکن))

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

      [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

      دیدگاه


        #4
        پاسخ : حافظه eeprom میکرو مگا 16

        سلام
        این کدهایی که فرمودید هم اضافه کردم ولی بازهم همونطوریه . حتی برنامه رو عوض کردم و متغیر ها رو به صورت عادی تعریف کردم و از دستور های writeeeprom , readeeprom استفاده کردم ولی بازهم مشکل داره . دو متغیر اول رو درست نشون میده ولی به متغیر سومی که میرسه دوباره همون nan رو نشون می ده. اشکال از چیه ؟

        دیدگاه


          #5
          پاسخ : حافظه eeprom میکرو مگا 16

          با سلام.
          منم موقع استفاده از حافظه ایپرام چنین مشکلی برام پیش اومد ؛
          برا حلش هم داخل برنامه یه قسمت اضافه کردم که خود میکرو موقع شروع به کار برنامه برا اولین بار خودش یه مقدار پیش فرض برا متغیرهای اییپرام قرار میداد.

          دیدگاه

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