Nawijarka do cewek na AT89C2051

Zapraszam do dyskusji bo nie tylko Atmelem/Microchipem warto się interesować
ODPOWIEDZ
Gienekb
Posty: 2
Rejestracja: 19 sie 2015, 19:51

Nawijarka do cewek na AT89C2051

Post autor: Gienekb » 16 paź 2022, 10:49

Witam :D
Mam nawijarkę do cewek opublikowaną w Elektronice Praktycznej. Wykonana według tego opisu i z oprogramowaniem zamieszczonym przez Autora wykorzystywałem do nawijania cewek masowych. Zaszła potrzeba nawinięcia cewek warstwowych z przekładkami izolacyjnymi po każdej warstwie i zaczęły się "schody". Nie jestem "biegły" w Bascomie 8051 i nie wiem jak "zmusić" oprogramowanie, by podczas nawijania program zatrzymał się np. na 1 minutę po nawinięciu warstwy i po upływie tego czasu nawijarka kontynuowała wykonywanie programu. Po nawinięciu kolejnej warstwy ponowne zatrzymanie itd.
A może jest możliwość wykorzystania przycisku S4 (on teraz służy do wyjścia z pętli i z podprogramu), by po zatrzymaniu się po nawinięciu jednej warstwy, włożeniu przekładki tym przyciskiem wznowić kontynuowanie wykonywania programu?
Będę wdzięczny za uwagi i podpowiedzi.
A tu jest program:
  1. $crystal = 11059200
  2. '$large
  3. Config Sda = P3.1
  4. Config Scl = P3.0
  5. Config Lcd = 16 * 1a
  6. Cursor Off
  7. I2csend 112 , 0
  8. Dim R As Byte
  9. Dim Directionflag As Bit
  10. Dim Layers As Byte
  11. Dim Layer As Word
  12. Dim Diameter As Byte
  13. Dim Motor1 As Byte
  14. Dim Turns As Long
  15. Dim Turning As Long
  16. Dim Motor2 As Byte
  17. Dim Layercount As Word
  18. Declare Sub 1 Turn
  19. Declare Sub Programowanie
  20. Declare Sub Work
  21. Declare Sub Wybor
  22. Declare Sub Motor2_right
  23. Declare Sub Motor2_left
  24. S1 Alias P3.7
  25. S2 Alias P3.5
  26. S3 Alias P3.4
  27. S4 Alias P3.3
  28.  
  29. Cls
  30. Locate 1 , 4
  31. Lcd "AVT-896"
  32. Wait 3
  33. Cls
  34. Lcd "Programowanie"
  35. Wait 2
  36. Cls
  37. Turns = 100
  38. Diameter = 10
  39. Layer = 10
  40.  
  41. Sub Programowanie
  42. Cls                                                           'wyczyść Ekran Wyświetlacza
  43. Lcd "Zwoje:" ;                                                'wyświetl Komunikat Zachęty
  44. Do
  45. Locate 1 , 11
  46. Lcd "     "
  47. Locate 1 , 11
  48. Lcd Turns                                                     'wyświetl Wartość Zmiennej Rurns Określającej Liczbę Zwojów Do Nawinięcia
  49. Waitms 250                                                    'zaczekaj 250 ms
  50. Set S1                                                        'ustaw stan wysoki na przycisku S1
  51. If S1 = 0 Then                                                'jeżeli przycisk naci.nięty to:
  52.    Incr Turns                                                 'zwiększ warto.ć zmiennej TURNS
  53. End If                                                        'koniec warunku
  54. Set S2                                                        'ustaw stan wysoki na przycisku S2
  55. If S2 = 0 Then                                                'jeżeli przycisk naciśnięty to:
  56.    Decr Turns                                                 'zmniejsz warto.ć zmiennej TURNS
  57. If Turns = 5 Then
  58. Turns = 6
  59. End If                                                        'koniec warunku
  60. End If                                                        'koniec warunku
  61. Set S4                                                        'ustaw stan wysoki na przycisku S4
  62. If S4 = 0 Then                                                'jeżeli przycisk naciśnięty to:
  63.    Exit Do                                                    'wyjdź z pętli i podprogramu
  64. End If                                                        'koniec warunku
  65. Loop
  66.  
  67. Cls
  68. Lcd "Warstwa:" ;
  69. Do
  70. Locate 1 , 11
  71. Lcd "     "
  72. Locate 1 , 11
  73. Lcd Layer
  74. Waitms 250
  75. Set S1
  76. If S1 = 0 Then
  77.    Incr Layer
  78. End If
  79. Set S2
  80. If S2 = 0 Then
  81.    Decr Layer
  82. If Layer = 5 Then
  83. Layer = 6
  84. End If
  85. End If
  86. Set S4
  87. If S4 = 0 Then
  88.    Exit Do
  89. End If
  90. Loop
  91. Cls
  92. Lcd "Srednica: 0," ;
  93. Waitms 250
  94. Do
  95. Locate 1 , 13
  96. Lcd "     "
  97. Locate 1 , 13
  98. Lcd Diameter ; "mm"
  99. Waitms 250
  100. Set S1
  101. If S1 = 0 Then
  102.    Incr Diameter
  103. If Diameter = 101 Then
  104. Diameter = 100
  105. End If
  106. End If
  107. Set S2
  108. If S2 = 0 Then
  109.    Decr Diameter
  110. If Diameter = 0 Then
  111. Diameter = 1
  112. End If
  113. End If
  114. Set S4
  115. If S4 = 0 Then
  116.    Exit Do
  117. End If
  118. Loop
  119. Call Wybor
  120. End Sub
  121.  
  122.  
  123. Sub Work
  124. Cls
  125. Directionflag = 0
  126. Layercount = 0
  127. Motor2 = 8
  128. Lcd "Working..";
  129. For Turning = 1 To Turns
  130. Locate 1 , 12
  131. Lcd Turning
  132. Call 1turn
  133.      Incr Layercount
  134. If Layercount = Layer Then
  135. Directionflag = Not Directionflag
  136. Layercount = 0
  137. End If
  138. Set S4
  139. If S4 = 0 Then
  140. Call Wybor
  141. End If
  142. Next R
  143. I2csend 112 , 0
  144. Call Wybor
  145. End Sub
  146.  
  147. Sub Wybor
  148. Cls
  149. Lcd "GO- S4, Prg.- S3"
  150. Waitms 250
  151. Do
  152. Set S4 : Set S3
  153. If S3 = 0 Then
  154. Call Programowanie
  155. End If
  156. If S4 = 0 Then
  157. Call Work
  158. End If
  159. Loop
  160. End Sub
  161.  
  162.  
  163. Sub 1turn                                                     'podprogram wykonujący 1 obrót silnika krokowego
  164. Motor1 = 128                                                  'nadanie Wstępnej Wartości Zmiennej Wysyłanej Do Pcf8574.wykonanie Tej
  165.                                                               'linii Programu Spowoduje Powstanie Stanu Wysokiego Na Wyjściu D7 Ic3
  166. For R = 1 To 100                                              'aby Uzyskać Obrót Silnika O 360 Stopni Należy Poniższe Czynności
  167.                                                               'powtórzyć Sto Razy:
  168.     I2csend 112 , Motor1                                      'wyślij Do Pcf8574 Zmienną Motor1
  169.     Waitms 7                                                  'zaczekaj 7 Ms(największa Możliwa Prędkość Obrotowa)
  170.     Shift Motor1 , Right , 1                                  'przesuń Wartość Zmiennej Motor1 O 1 Bit W Prawo
  171.           If Motor1 = 8 Then                                  'jeżeli Wartość Zmiennej Motor1 Równa 8 To:
  172.                   Motor1 = 128                                'zmienna Motor1 Przyjmuje Wartość 8
  173.           End If                                              'koniec Warunku
  174. Next R
  175. If Directionflag = 0 Then                                     'jeżeli wartość zmiennej pomocniczej DIRECTIONFLAG równa 0 to:
  176. Call Motor2_right                                             'wezwij podprogram przesuwania prowadnicy przewodu w prawo
  177. Else                                                          'w przeciwnym wypadku:
  178. Call Motor2_left                                              'wezwij Podprogram Przesuwania Prowadnicy Przewodu W Lewo
  179. End If                                                        'koniec warunku
  180. End Sub                                                       'koniec podprogramu
  181.  
  182. Sub Motor2_left
  183. For R = 1 To Diameter
  184. I2csend 112 , Motor2
  185. Waitms 7
  186. Shift Motor2 , Right , 1
  187. If Motor2 = 0 Then
  188. Motor2 = 8
  189. End If
  190. Next R
  191. End Sub
  192.  
  193. Sub Motor2_right
  194. For R = 1 To Diameter
  195. I2csend 112 , Motor2
  196. Waitms 7
  197. Shift Motor2 , Left , 1
  198. If Motor2 = 16 Then
  199. Motor2 = 1
  200. End If
  201. Next R
  202. End Sub
Awatar użytkownika
niveasoft
Posty: 1191
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Nawijarka do cewek na AT89C2051

Post autor: niveasoft » 16 paź 2022, 11:12

Kiedy nawija to głównym Subem jest "Work" a tam przycisk S4 jest już używany. Chyba lepiej po skonczeniu warstwy wejść w pętlę i czekać na naciśnięcie S3.

Sprawdź taki mod.
  1. Sub Work
  2.    Cls
  3.    Directionflag = 0
  4.    Layercount = 0
  5.    Motor2 = 8
  6.    Lcd "Working..";
  7.    For Turning = 1 To Turns
  8.       Locate 1 , 12
  9.       Lcd Turning
  10.       Call 1turn
  11.       Incr Layercount
  12.       If Layercount = Layer Then
  13.        '----------------------------------------
  14.         Set S3
  15.         Do
  16.          S3 = 0 Then Exit Do
  17.         Loop
  18.        '----------------------------------------
  19.          Directionflag = Not Directionflag
  20.          Layercount = 0
  21.       End If
  22.       Set S4
  23.       If S4 = 0 Then
  24.          Call Wybor
  25.       End If
  26.    Next R
  27.    I2csend 112 , 0
  28.    Call Wybor
  29. End Sub
Gienekb
Posty: 2
Rejestracja: 19 sie 2015, 19:51

Re: Nawijarka do cewek na AT89C2051

Post autor: Gienekb » 16 paź 2022, 11:43

Dzięki za odpowiedź.
Wydaje mi się (jeszcze praktycznie nie sprawdziłem), że to rozwiązanie powinno być dobre. Chociaż w pośpiechu :D zabrakło If przed S3=0
Jednak zastanawiam się czy zastosowanie S3 nie będzie kolidowało z podprogramem "WYBÓR", bo tam też jest wykorzystany?
Przepraszam, ale jestem "cienki" :D

Po kilku dniach przerwy, dopisuję ciąg dalszy.
Trwało to trochę zanim dobrałem się do nawijarki. Teraz to nie jest już nawijarka cewek, ale nawijarka transformatorów. Działa wyśmienicie.
Serdeczne dzięki za szybkie rozwiązanie mojego problemu. Szacunek dla Twojej wiedzy.

Pozdrawiam,
ODPOWIEDZ