Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z programem Nawijarki cewek AVT-896

11 Sty 2009 14:24 4187 2
  • Poziom 12  
    Witam
    Mam taki problem.
    Zbudowałem ostatnio automatyczną nawijarkę cewek z zestawu AVT, i wszystko było by ładnie pięknie gdyby nie to, że za żadne skarby nie mogę dobrać silników (układ zlicza obroty albo co 1/2 obrotu albo w innym silniku co np 2 obroty).
    Stwierdziłem, że najlepiej będzie sprawdzić ile kroków potrzebuje dany silnik na wykonanie pełnego obrotu i zmienić to w programie.
    I tu pojawił się problem, w źródle zamieszczonym na stronie AVT jest błąd.
    Program załadowany do procesora w zestawie działa poprawnie, natomiast pobrany ze strony i po skompilowaniu nie obsługuje drugiego silnika.
    W związku z tym miałbym prośbę do Szanownych kolegów o pomoc.
    Może będzie ktoś w stanie powiedzieć mi co i gdzie należy dopisać aby układ zaczął poprawnie działać.
    Tu jest opis tej nawijarki AVT-896 i kod żródłowy (ten błędny)
    Code:
    $large
    
    Config Sda = P3.1
    Config Scl = P3.0
    Config Lcd = 16 * 1a
    Cursor Off
    I2csend 112 , 0
    Dim R As Byte
    Dim Directionflag As Bit
    Dim Layers As Byte
    Dim Warstwa As Word
    Dim Srednica As Byte
    Dim Motor1 As Byte
    Dim Turns As Long
    Dim Turning As Long

    Declare Sub 1 Turn
    Declare Sub Programowanie
    Declare Sub Work
    Declare Sub Wybor
    Declare Sub 1turn_motor2
    S1 Alias P3.7
    S2 Alias P3.5
    S3 Alias P3.4
    S4 Alias P3.3


    Cls
    Lcd "AVT-xxx"
    Wait 1
    Cls
    Lcd "Programowanie"
    Wait 2
    Cls

    Turns = 24
    Srednica = 10
    Warstwa = 10

    Sub Programowanie
    Cls
    Lcd "Zwoje:" ;
    Do
    Locate 1 , 11
    Lcd "     "
    Locate 1 , 11
    Lcd Turns
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Turns
    End If
    Set S2
    If S2 = 0 Then
    Decr Turns
    If Turns = 5 Then
    Turns = 6
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop
    Cls
    Lcd "Warstwa:" ;
    Do
    Locate 1 , 11
    Lcd "     "
    Locate 1 , 11
    Lcd Warstwa
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Warstwa
    End If
    Set S2
    If S2 = 0 Then
    Decr Warstwa
    If Warstwa = 5 Then
    Warstwa = 6
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop
    Cls
    Lcd "Srednica:" ;
    Waitms 250
    Do
    Locate 1 , 11
    Lcd "     "
    Locate 1 , 11
    Lcd Srednica
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Srednica
    If Srednica = 101 Then
    Srednica = 100
    End If
    End If
    Set S2
    If S2 = 0 Then
    Decr Srednica
    If Srednica = 0 Then
    Srednica = 1
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop
    Call Wybor
    End Sub


    Sub Work
    Cls
    Lcd "Working...";
    For Turning = 1 To Turns
    Locate 1 , 12
    Lcd Turning
    Call 1turn
    Next R
    I2csend 112 , 0
    Call Wybor
    End Sub

    Sub Wybor
    Cls
    Lcd "GO- S4, Prg.- S3"
    Waitms 250
    Do
    Set S4 : Set S3
    If S3 = 0 Then
    Call Programowanie
    End If
    If S4 = 0 Then
    Call Work
    End If
    Loop
    End Sub


    Sub 1turn
    For R = 1 To 25
    Motor1 = 128
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Next R
    End Sub

    Sub 1turn_motor2
    For R = 1 To 25
    Motor1 = 128
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    I2csend 112 , Motor1
    Waitms 7
    Next R
    End Sub
  • Poziom 28  
    Na silniku powinno być napisane ile stopni/krok. Zazwyczaj 1.8st/krok czyli pełen obrót to 200kroków.
  • Poziom 12  
    Problem w tym, że żaden z silników które posiadam nie pasuje do tego co jest ustawione w programie, dlatego chciałem zamiast kupować następne silniki (licząc, że któryś w końcu przypasuje) zmienić ilość kroków w programie i to mi się udało, problem w tym że drugi silnik nie działa.
    Nie znam się niestety na programowaniu ale z tego co widze w programie źródłowym nie ma nic co by uruchamiało ten silnik.

    Ok problem rozwiązany. Otrzymałem włąśnie poprawny kod z serwisy AVT. Przy okazji jakby ktoś napotkał podobny problem tu jest poprawny kod:
    Code:
    $crystal = 11059200
    
    '$large
    Config Sda = P3.1
    Config Scl = P3.0
    Config Lcd = 16 * 1a
    Cursor Off
    I2csend 112 , 0
    Dim R As Byte
    Dim Directionflag As Bit
    Dim Layers As Byte
    Dim Layer As Word
    Dim Diameter As Byte
    Dim Motor1 As Byte
    Dim Turns As Long
    Dim Turning As Long
    Dim Motor2 As Byte
    Dim Layercount As Word
    Declare Sub 1 Turn
    Declare Sub Programowanie
    Declare Sub Work
    Declare Sub Wybor
    Declare Sub Motor2_right
    Declare Sub Motor2_left
    S1 Alias P3.7
    S2 Alias P3.5
    S3 Alias P3.4
    S4 Alias P3.3

    Cls
    Locate 1 , 4
    Lcd "AVT-896"
    Wait 3
    Cls
    Lcd "Programowanie"
    Wait 2
    Cls
    Turns = 100
    Diameter = 10
    Layer = 10

    Sub Programowanie
    Cls
    Lcd "Zwoje:" ;
    Do
    Locate 1 , 11
    Lcd "     "
    Locate 1 , 11
    Lcd Turns
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Turns
    End If
    Set S2
    If S2 = 0 Then
    Decr Turns
    If Turns = 5 Then
    Turns = 6
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop

    Cls
    Lcd "Warstwa:" ;
    Do
    Locate 1 , 11
    Lcd "     "
    Locate 1 , 11
    Lcd Layer
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Layer
    End If
    Set S2
    If S2 = 0 Then
    Decr Layer
    If Layer = 5 Then
    Layer = 6
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop
    Cls
    Lcd "Srednica: 0," ;
    Waitms 250
    Do
    Locate 1 , 13
    Lcd "     "
    Locate 1 , 13
    Lcd Diameter ; "mm"
    Waitms 250
    Set S1
    If S1 = 0 Then
    Incr Diameter
    If Diameter = 101 Then
    Diameter = 100
    End If
    End If
    Set S2
    If S2 = 0 Then
    Decr Diameter
    If Diameter = 0 Then
    Diameter = 1
    End If
    End If
    Set S4
    If S4 = 0 Then
    Exit Do
    End If
    Loop
    Call Wybor
    End Sub


    Sub Work
    Cls
    Directionflag = 0
    Layercount = 0
    Motor2 = 8
    Lcd "Working..";
    For Turning = 1 To Turns
    Locate 1 , 12
    Lcd Turning
    Call 1turn
    Incr Layercount
    If Layercount = Layer Then
    Directionflag = Not Directionflag
    Layercount = 0
    End If
    Set S4
    If S4 = 0 Then
    Call Wybor
    End If
    Next R
    I2csend 112 , 0
    Call Wybor
    End Sub

    Sub Wybor
    Cls
    Lcd "GO- S4, Prg.- S3"
    Waitms 250
    Do
    Set S4 : Set S3
    If S3 = 0 Then
    Call Programowanie
    End If
    If S4 = 0 Then
    Call Work
    End If
    Loop
    End Sub


    Sub 1turn
    Motor1 = 128
    For R = 1 To 100
    I2csend 112 , Motor1
    Waitms 7
    Shift Motor1 , Right , 1
    If Motor1 = 8 Then
    Motor1 = 128
    End If
    Next R
    If Directionflag = 0 Then
    Call Motor2_right
    Else
    Call Motor2_left
    End If
    End Sub

    Sub Motor2_left
    For R = 1 To Diameter
    I2csend 112 , Motor2
    Waitms 7
    Shift Motor2 , Right , 1
    If Motor2 = 0 Then
    Motor2 = 8
    End If
    Next R
    End Sub

    Sub Motor2_right
    For R = 1 To Diameter
    I2csend 112 , Motor2
    Waitms 7
    Shift Motor2 , Left , 1
    If Motor2 = 16 Then
    Motor2 = 1
    End If
    Next R
    End Sub