اطلاعیه

Collapse
No announcement yet.

کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

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

    کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

    سلام

    توضیحات پروژه :

    یک برد داریم که ورودی پالس یک دستگاه رو میخونه و اون رو به صورت اعشار در دو رقم صحیح و دو رقم اعشار در می آورد و در ادامه این برد به چهار استپ موتور اتصال دارد و هر استپ موتور به یک زنجیر اتصال دارد که روی هر زنجیر اعداد 0 تا 9 حک شده حال دستگاه به این صورت کار می کند ابتدا وقتی دستگاه روشن می شود موتور ها حرکت می کنند و به یک نقطه برخورد کرده و بعد یکم برعکس می چرخند و روی نقطه 0 صفر قرار می گیرند در ادامه پالس وارد شده و یک عدد اعشاری چهار رقمی می دهد و موتورها به ترتیب حرکت کرده و روی عدد مربوطه قرار می گیرند در پایان یک جک عمل کرده آن عدد را روی جنس مربوطه حک می کند تا اینجا برنامه نویسی من مشکلی نداشته و برد و دستگاه من درست کار می کند . مشکل من در ادامه کار است دیگر قرار نیست موتور ها حرکت کنند و روی صفر قرار بگیرند بلکه باید با ورود ÷الس بعدی و عدد اعشار دیگر برنامه خود تشخیص داده و موتور ها رو بر روی عدد مورد نظر قرار دهد مثال در پالس اول عدد اعشار 14/25 رو نشان می دهد حرکت موتور ها مشکلی ندارد با select case ان را انجام دادم و روی عدد مورد نظر قرار گرفت در پالس دوم عدد مربوطه مثلا 25/50 شد حال موتور ها بدین صورت باید حرکت کنند عدد 1 به 2 تبدیل شده پس موتور مربوطه به مقدار یک عدد جلو می رود و به ترتیب اعداد دیگر هم همین طور باید کنترل شوند .

    من برنامه مربوطه را قرار می دهم لطفا اگر کسی می تواند کمک کند حتی اگر ایده هم دارید برای من بنویسید .




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

    Config Timer1 = Counter , Edge = Falling , Capture Edge = Rising , Noise Cancel = 0
    Config Porta = Output
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    Config Portf = Output
    Config Porte = Output
    Config Pind.5 = Input
    Config Portd.7 = Output
    Config Portd.4 = Input
    Config Portd.6 = Input
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Porte.4 , Db5 = Porte.5 , Db6 = Porte.6 , Db7 = Porte.7 , E = Portb.7 , Rs = Portb.6
    Dim A1 As Word
    Dim A2 As Single
    Dim A3 As String * 1
    Dim A4 As Single
    Dim A5 As Word
    Dim A6 As Word
    Dim A7 As String * 10
    Dim A8 As String * 10
    Dim A9 As String * 10
    Dim A10 As String * 10
    Dim A11 As Word
    Dim A12 As Byte
    Dim A13 As Single
    Dim A14 As Single
    Dim A15 As Word
    Dim T1 As String * 10
    Dim T2 As String * 10
    Dim T3 As String * 10
    Dim T4 As String * 10
    Dim A16 As String * 10
    Dim T As String * 10
    Dim D1 As Byte , I As Byte , C As Byte , X As Byte
    Dim D2 As Byte , I1 As Byte , C1 As Byte , X1 As Byte
    Dim D3 As Byte
    Dim D4 As Byte
    Dim O As Byte
    Dim Kl As Byte


    Do
    Goto Mahdi

    Kardan:
    Enable Interrupts
    On Icp1 Q1
    Goto Main
    Loop
    End 'end program

    Mahdi:
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until Pind.5 = 1
    Waitms 200
    X = 0
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C
    Waitms 20
    Next I
    Incr X
    Loop Until X = 1
    X = 0
    Waitms 200


    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until Pind.5 = 1
    X = 0
    Waitms 200
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C
    Waitms 20
    Next I
    Incr X
    Loop Until X = 1
    X = 0
    Waitms 200



    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until Pind.5 = 1
    X = 0
    Waitms 200
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C
    Waitms 20
    Next I
    Incr X
    Loop Until X = 1
    X = 0
    Waitms 200



    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until Pind.5 = 1
    X = 0
    Waitms 200
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C
    Waitms 20
    Next I
    Incr X
    Loop Until X = 1
    X = 0
    Waitms 200
    Goto Kardan




    Main:
    Counter1 = 0
    Do

    If Pind.4 = 1 Then
    Enable Icp1
    Elseif Pind.4 = 0 Then
    Disable Capture1
    If Portd.6 <> 0 Then
    Print A1
    Lcd A1
    Waitms 100
    End If

    End If

    Loop
    Q1:
    A1 = Capture1
    Print A1
    Lcd A1 ; " Palse"
    Counter1 = 0

    A2 = A1 / 40

    A3 = Fusing(a2 , "##.###&quot

    A4 = Val(a3)

    A5 = A4 * 1000
    A6 = A5 + 1
    A7 = Str(a6)
    A8 = Format(a7 , "00.000&quot
    A9 = Right(a8 , 3)
    A10 = Left(a8 , 2)
    A11 = Val(a9)
    A12 = Val(a10)

    Select Case A11

    Case 0 To 124 :
    A11 = 00
    Case 125 To 374 :
    A11 = 25
    Case 375 To 624:
    A11 = 50
    Case 625 To 874 :
    A11 = 75
    Case 875 To 999 :
    A11 = 00
    Incr A12
    End Select

    A13 = A11 / 100
    A14 = A12 + A13
    Locate 2 , 1
    Lcd A14

    A15 = A14 * 100

    A16 = Str(a15)
    T = Format(a16 , "0000&quot
    Locate 2 , 8
    Lcd T

    T1 = Mid(t , 4 , 1)
    T2 = Mid(t , 3 , 1)
    T3 = Mid(t , 2 , 1)
    T4 = Mid(t , 1 , 1)
    D1 = Val(t1)
    D2 = Val(t2)
    D3 = Val(t3)
    D4 = Val(t4)

    Select Case D4
    Case 1 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 4
    X = 0

    Case 2 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 9
    X = 0

    Case 3 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 13
    X = 0

    Case 4 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 18
    X = 0

    Case 5 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 22
    X = 0

    Case 6 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 26
    X = 0

    Case 7 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 30
    X = 0

    Case 8 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 34
    X = 0

    Case 9 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portb = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 38
    X = 0
    End Select


    Select Case D3
    Case 1 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 4
    X = 0

    Case 2 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 9
    X = 0

    Case 3 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 13
    X = 0

    Case 4 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 18
    X = 0

    Case 5 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 22
    X = 0

    Case 6 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 26
    X = 0

    Case 7 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 30
    X = 0

    Case 8 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 34
    X = 0

    Case 9 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portd = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 38
    X = 0
    End Select


    Select Case D2
    Case 1 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 4
    X = 0

    Case 2 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 9
    X = 0

    Case 3 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 13
    X = 0

    Case 4 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 18
    X = 0

    Case 5 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 22
    X = 0

    Case 6 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 26
    X = 0

    Case 7 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 30
    X = 0

    Case 8 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 34
    X = 0

    Case 9 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Portc = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 38
    X = 0
    End Select



    Select Case D1

    Case 1 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 4
    X = 0

    Case 2 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 9
    X = 0

    Case 3 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 13
    X = 0

    Case 4 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 18
    X = 0

    Case 5 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 22
    X = 0

    Case 6 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 26
    X = 0

    Case 7 :

    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 30
    X = 0

    Case 8 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 34
    X = 0

    Case 9 :
    Do
    For I = 0 To 3
    C = Lookup(i , Table2)
    Porta = C

    Waitms 20
    Next
    Incr X
    Loop Until X = 38
    X = 0
    End Select


    Do
    For I = 0 To 3
    C = Lookup(i , Table1)
    Portf = C

    Waitms 5
    Next
    Incr X
    Loop Until X = 7
    X = 0
    Waitms 300
    Set Portd.7
    Waitms 200
    Reset Portd.7

    Cls


    Goto Mahdi
    Return


    Table1:
    Data &B00000001 , &B00000010 , &B00000100 , &B00001000

    Table2:
    Data &B00001000 , &B00000100 , &B00000010 , &B00000001



    #2
    پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

    شما باید هشت تا متغیر بایتی تعریف کنی چهار تا برای نگهداری ارقام فعلی و چهار تا برای نگهداری ارقام قبلی و چهار تا متغیر integer هم برای حاصل تفریق ارقام فعلی از ارقام قبلی (برای جداسازی ارقام هم از تقسیم متوالی بر 10 استفاده کن)

    بقیه اش هم معلومه دیگه اگه مثلا یه متغیر integer مقدارش منفی شد باید با select case جهت چرخش رو عوض کنی کلا همه چی با select case انجام میشه
    مثلا اگر متغیر integer یک بود در اینجهت و این مقدار بچرخ اگر 2 بود در اینجهت و این مقدار و ...
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    دیدگاه


      #3
      پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

      میشه یک مثال ساده برای یک عدد که قرارپشت سر هم بیاد برام بزارید

      دیدگاه


        #4
        پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

        مثلا برای 14.25 و رقم بعدی 25.01 که شما اعشارشون رو بر میداری که میشن 1425 و 2501 و با تقسیم متوالی بر ده توی هشت تا متغیر بایتی ذخیره میکنید ( باید بعد از هر تقسیم باقیمانده را ذخیره کنی و در آخرین تقسیم خارج قسمت رو)
        بعد ارقام متناظر رو ار هم کم میکنید که حاصل میشه
        -4 و -2 و 1 و 1 به ترتیب ارقام اعشاری و صحیح هستند.
        حالا با select case عدد متناظر با موتور مربوطه را تقسیم بندی میکنید
        مثلا برای -4 باید در جهت عکس و به اندازه 4 واحد بچرخد که روی 1 خواهد ایستاد
        برای -2 باید در جهت عکس و 2 واحد بچرخد که روی 0 خواهد ایستاد
        برای 1 باید در جهت معمولی و به اندازه یک واحد بچرخد و الی آخر ...
        شما با select case تمام حالتهای ممکن برای یک رقم را که فکر کنم 19 حالت میشه رو باید تشکیل بدین و عدد مربوط به هر موتور رو با این روش دیکد کنبد
        من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
        آلبرت اینشتین
        منبع: http://fa.wikiquote.org

        دیدگاه


          #5
          پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

          سلام
          ممنون که دارید کمکم می کنید
          من با select case و چیزهایی رو که گفتی مشکل ندارم مشکل من در ابتدای کار است من قبل از راهنمایی شما به گرفتن هشت متغییر هم رو آوردم حتی گفتم از حافظه eeprom استفاده کنم ولی مغز من یاریم نکرد که چگونه این کار رو کنم . میشه در اونجا که گفتید شما 4 تا متغییر برای ارقام فعلی و 4 تا برای ارقام قبلی در نظر بگبیرم چگونه برای برنامه تعریف کنم این رو مهم تعریف کردن ارقام فعلی و قبلی رو میگم در برنامه من همین طور که میبینی پالس بر 40 تقیسم میشه و بعد یک رقم اعشار میده که 4 تا متغیر براش تعریف کردم وهر کدام با کیس سلکت کارش رو انجام میده این عدد کارش تمام شد و در متغییر D4 ریخته شد ه من خودم گفتم میریزم در حافظه ایپرام و بعد با یه متغیر دیگر فرا میخونمش مثلا 4X (( یک عدد از 4 رقم مثال می زنم )) ولی در ادامه دیدم باز نمیشه چرا وقتی اول کار مثلا d4 رو صفر قرار میگیرد بعد میشه یه عدد ی بعد این عدد در حافظه قرار میگیره با نام d4 بعد فرا میخونیش با x4 ببخشید بعد ش رو نتونستم برای خودم حلاجی کنم و گیج شدم میشه بی زحمت یه برنامه بنوسید و نشان بدید ریختن و نگهداشتن این اعداد رو در متغیر و بعدش تفریق کردن آن را ممنون میشم از تون . نباید زیاد این کار سخت باشد ولی مغز من گیر پاش کرده یاری نمی کند .





          دیدگاه


            #6
            پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

            خواهش میکنم

            مثلا فرض کنیم متغیر a1 یک متغیر single مربوط به عدد قبلی (با دو رقم اعشار) و متغیر b1 یک متغیر single مربوط به عدد فعلی (با دو رقم اعشار)است. اگر a و b دو متغیر word باشند . پس داریم:

            کد:
            dim c as byte,d as byte,e as byte,f as byte,g as byte,h as byte,i as byte,j as byte,quotient as word,k as integer,l as integer,m as integer, n as integer,a1 as single,b1 as single
            
            a=a1*100 'برای از بین بردن اعشار
            b=b1*100
            
            f=a mod 10         ' تفکیک ارقام a
            quotient= a/10
            e=quotient mod 10
            quotient=quotient/10
            d=quotient mod 10
            c= quotient/10
            
            j=b mod 10          'تفکیک ارقام b
            quotient= b/10
            i=quotient mod 10
            quotient=quotient/10
            h=quotient mod 10
            g= quotient/10
            
            k=g-c                ' تفریق ارقام تفکیک شده از هم 
            l=h-d
            m=i-e
            n=j-f
            
            select case k           'برای تعیین چرخش موتور اول که رقم دهگان عدد صحیح را نمایش میدهد
            case -9
            case -8
            .
            .
            case 0
            case 1
            case 2
            .
            .
            .
            case 9
            select case l            'برای تعیین چرخش موتور دوم که رقم یکان عدد صحیح را نمایش میدهد
            select case m           'برای تعیین چرخش موتور سوم که رقم دهگان عدد اعشاری را نمایش میدهد
            select case n           'برای تعیین چرخش موتور چهارم که رقم یکان عدد اعشاری را نمایش میدهد
            من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
            آلبرت اینشتین
            منبع: http://fa.wikiquote.org

            دیدگاه


              #7
              پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

              باز هم از شما تشکر می کنم
              من جواب شما رو قبلا چند بار بهش رسیدم و کار شما رو انجام دادم
              ولی یه موضوع رو شما اینجا فراموش کردی
              اونم بار اول است وقتی موتور ها رو صفر قرار دارند و یک پالس خوانده می شود دیگر یک عدد اعشار داریم 2 تا رقم نداریم که در جواب شما قرار گیرند اون موقع باید چیکار کرد همه هم و غم من تو این سوال است و ذهنم و مشغول کرده

              دیدگاه


                #8
                پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

                نوشته اصلی توسط rayanelectronic
                باز هم از شما تشکر می کنم
                من جواب شما رو قبلا چند بار بهش رسیدم و کار شما رو انجام دادم
                ولی یه موضوع رو شما اینجا فراموش کردی
                اونم بار اول است وقتی موتور ها رو صفر قرار دارند و یک پالس خوانده می شود دیگر یک عدد اعشار داریم 2 تا رقم نداریم که در جواب شما قرار گیرند اون موقع باید چیکار کرد همه هم و غم من تو این سوال است و ذهنم و مشغول کرده
                خب مغلومه دیگه !
                کافیه a1 را برابر 0 و a2 را برابر مقدار خوانده شده قرار دهید و برای دفعه بعدی
                a1=a2 و a2 را برابر مقدار خوانده شده قرار دهید و الی آخر
                من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                آلبرت اینشتین
                منبع: http://fa.wikiquote.org

                دیدگاه


                  #9
                  پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

                  کد:
                  /*****************************************************
                  This program was produced by the
                  CodeWizardAVR V2.05.3 Standard
                  Automatic Program Generator
                  :copyright: Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                  [URL]http://www.hpinfotech.com[/URL]
                   
                  Project :
                  Version :
                  Date    : 08/17/2016
                  Author  : farah
                  Company :
                  Comments:
                   
                   
                  Chip type               : ATmega32
                  Program type            : Application
                  AVR Core Clock frequency: 8.000000 MHz
                  Memory model            : Small
                  External RAM size       : 0
                  Data Stack size         : 512
                  *****************************************************/
                   
                   
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <mega32.h>
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <delay.h>
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <stdio.h>
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <alcd.h>
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL]  <stdlib.h>
                   
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  HX711_DOUT  PINB.0   
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  HX711_SCK   PORTB.1
                   
                   
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  C0 PIND.4
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  C1 PIND.5
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  C2 PIND.6
                  [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define"]#define[/URL]  C3 PIND.7
                   
                   
                  void Delay__hx711_us(void)
                  {
                      [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=asm"]#asm[/URL] ("nop")
                      [URL="http://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=asm"]#asm[/URL] ("nop")
                  }
                   
                  unsigned long HX711_Read(void)  
                  {
                      unsigned long count;
                      unsigned char i;
                       
                        HX711_DOUT=1;
                        Delay__hx711_us();
                        HX711_SCK=0;
                        count=0;
                        while(HX711_DOUT);
                        for(i=0;i<24;i++)  //gain --> 128
                          {
                              HX711_SCK=1;
                              count=count<<1;
                              HX711_SCK=0;
                              if(HX711_DOUT)
                                  count++;
                          }
                                    HX711_SCK=1;
                        count=count & 0xfff000; // taeen deghat
                                    Delay__hx711_us();
                                    HX711_SCK=0; 
                                    return(count);
                  }
                   
                  flash char shift[4]={0xFE,0xFd,0xFb,0xF7};
                  flash char layout[16]={'c','2','3','/',
                                         '1','5','6','*',
                                         '4','8','9','-',
                                         '7','0','#','+'};
                  char keypad();
                   char buffer[10]; 
                  void main(void)
                  {
                   
                   char mux; 
                   int i;
                   char sh=0;
                   char s[10];
                   PORTD=0xF0;
                     DDRD=0x0F;
                    
                  // Alphanumeric LCD initialization
                  // Connections are specified in the
                  // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                  // RS - PORTA Bit 0
                  // RD - PORTA Bit 1
                  // EN - PORTA Bit 2
                  // D4 - PORTA Bit 4
                  // D5 - PORTA Bit 5
                  // D6 - PORTA Bit 6
                  // D7 - PORTA Bit 7
                  // Characters/line: 16
                      lcd_init(16);
                      DDRB = 1<<DDB1 ;
                     
                      lcd_putsf("   HX711  ");
                      delay_ms(2000);
                      lcd_clear();
                   
                  while (1)
                        {
                             
                         lcd_gotoxy(0,0);
                         sprintf(buffer,"w=%u",HX711_Read());    
                             lcd_puts(buffer);
                            delay_ms(250);
                                 mux=0;
                                 for(i=0;i<16;i++)  
                                  {
                                 
                                    sh= keypad(); 
                                    lcd_gotoxy(i,1);
                                    mux=mux*10+sh;
                                    lcd_putchar(sh);       
                                   if(sh=='#')
                                   {
                                    itoa(mux,s);
                                    lcd_puts(s);
                                   }
                                   if(sh=='c')
                                    { lcd_clear();
                                     
                                    break;
                                    } 
                                 
                                 }   
                          
                        }
                  }
                   
                  char keypad()
                    {
                      int row=0,column=-1,position=0,k;
                      
                      while(1)
                        {     
                          for(row=0;row<4;row++)
                          {
                            PORTD=shift[row];
                            if(C0 == 0){column=0;} 
                            if(C1 == 0){column=1;}
                            if(C2 == 0){column=2;}
                            if(C3 == 0){column=3;}
                         
                               if(column!=-1) 
                                  {
                                    position=(row*4)+column;
                                    while(C0 == 0){}
                                    while(C1 == 0){}
                                    while(C2 == 0){}
                                    while(C3 == 0){}
                                    column=-1;
                                         delay_ms(50);
                                         k=layout[position];
                                          return k;
                                          
                                  }
                          }
                          }
                    }
                  تو این برنامه میخوام کیپو و سنسور hx711را به atmega32وصل کنم.....کیپد و سنسور جدا جدا جواب میدن...ولی وقتی هر دو رو وصل میکنم ..میکرو فقط میتونه یک بار وزنو بخونه...هر تغییزی هم دادم نشد
                  جدیدترین ویرایش توسط اشکان غفارزاده; ۲۲:۴۰ ۱۳۹۵/۰۵/۳۰.

                  دیدگاه


                    #10
                    پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

                    با سلام
                    پروژ] دانشجویی یا قراره صنعتی باشه ؟
                    چون نمونه کد خواندن HX711 صرفا برای تست روی سایت گذاشته شده و باید تغییراتی مطابق دیتاشیت در اون ایجاد بشه.
                    احتمالا این که با هم کار نمی کنن یه جای برنامه میکرو گیر می کنه. حلقه ای یا چیزی. یه ٍLED بزارید تو حلقه اصلی تا از روند برنامه مطمئن بشین.
                    البته ببخشید وقت تست و رفع ایراد نمونه کد نیس و به صورت کلی مباحث رو گفتم.
                    چرا ناراحتی پاتریک!
                    + امروز ی بچه دیدم سرچهارراه گل میفروخت
                    - از دیدنش ناراحت شدی؟
                    + نه
                    پس چی ناراحتت کرده
                    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                    ------------------------------------------------------------------------------------------------------
                    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                    ------------------------------------------------------------------------------------------------------
                    محصولات

                    دیدگاه


                      #11
                      پاسخ : کمک در برنامه نویسی از برنامه نویسان حرفه ای در مورد پروژه ام حتی با یک ایده

                      سلام.صنعتیه...جز کالیبره کردن loadcell مشکل دیگه ای هم داره برنامه hx711....اگه فرصت داشتید مشکل برنامه بگید ممنون

                      دیدگاه

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