AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Jak to nie problem i możesz/chcesz to wrzuć ten kod w jednym kawałku to może coś tu wspólnie poprawimy
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Witam !
O to chodzi że kopiuję z oryginału który przerobiłem na AVR i kolejno wklejam/przerabiam program.
W oryginale nie ma przerwań.
W oryginale są podprogramy SUB nie mam pojęcia jak działają SUBy, gdzie program idzie po wyjściu z SUBa ? to dla mnie magia.
dlatego przerabiam na podprogramy np: gosub przyciski i wiem dokąd pójdzie program.
Przyciski:
"kod
return
Na razie nie dam kodu, sam będę próbował. Przynajmniej mam jakieś zajęcie.
Bardzo dziękuję za chęć pomocy, jak się "zatnę" w przerabianiu na pewno tu napiszę.
O to chodzi że kopiuję z oryginału który przerobiłem na AVR i kolejno wklejam/przerabiam program.
W oryginale nie ma przerwań.
W oryginale są podprogramy SUB nie mam pojęcia jak działają SUBy, gdzie program idzie po wyjściu z SUBa ? to dla mnie magia.
dlatego przerabiam na podprogramy np: gosub przyciski i wiem dokąd pójdzie program.
Przyciski:
"kod
return
Na razie nie dam kodu, sam będę próbował. Przynajmniej mam jakieś zajęcie.
Bardzo dziękuję za chęć pomocy, jak się "zatnę" w przerabianiu na pewno tu napiszę.
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Witam po przerwie !
Kilka dni temu uszkodzeniu uległ silnik pompy spustowej w mojej pralce, nawijarka nie skończona i musiałem sobie poradzić w inny sposób. ( silnik miał przerwę uzwojenia )
Z trzech kawałków "łat 40x50" skręciłem prowizoryczną nawijarkę, odwinąłem część przerwanego uzwojenia, nawinąłem z powrotem ten sam drut, złożyłem i pralka działa.
Miał bym niej pracy gdybym miał ukończoną nawijarkę, dlatego powróciłem do poprawiania programu.
Oto obecny program:
Testowałem program bez silników z ośmioma LEDami.
Sterowanie silników jest ok, ale chciałbym poprawić zapis na LCD
tak aby wartość zmiennej "Turns" nie zerowała się po skończeniu nawijania.
Druga sprawa to "odchudzenie" kodu jeśli to możliwe.
Pozdrawiam. Stefan
Kilka dni temu uszkodzeniu uległ silnik pompy spustowej w mojej pralce, nawijarka nie skończona i musiałem sobie poradzić w inny sposób. ( silnik miał przerwę uzwojenia )
Z trzech kawałków "łat 40x50" skręciłem prowizoryczną nawijarkę, odwinąłem część przerwanego uzwojenia, nawinąłem z powrotem ten sam drut, złożyłem i pralka działa.
Miał bym niej pracy gdybym miał ukończoną nawijarkę, dlatego powróciłem do poprawiania programu.
Oto obecny program:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '16.08.2020
- $regfile = "attiny2313.dat"
- $crystal = 8000000
- Config Lcdpin = Pin , Db7 = Pd.3 , Db6 = Pd.2 , Db5 = Pa.0 , Db4 = Pa.1 , E = Pd.1 , Rs = Pd.0
- Config Lcd = 16 * 2
- Cursor Off
- Cls
- Locate 1 , 1
- Lcd "Nawijerka 16.08"
- Wait 1
- Cls
- Config Portb = Output
- Config Pind.6 = Input
- Portd.6 = 1
- Config Pind.5 = Input
- Portd.5 = 1
- Config Pind.4 = Input
- Portd.4 = 1
- S3 Alias Pind.6 'Enter
- S2 Alias Pind.5 'plus
- S1 Alias Pind.4 'minus
- Dim R As Byte
- Dim Directionflag As Bit 'flaga kierynkowa
- Dim Layers As Byte 'warstwy
- Dim Zw_1war As Word 'ile zwojow w jednej warstwie
- Dim Srednica As Byte 'srednica
- Dim Motor1 As Byte
- Dim Turns As Long 'zamienia siÄ™
- Dim Turning As Long 'obracenie
- Dim Motor2 As Byte
- Dim Layercount As Word 'ilosc nawinietych zwojow w warstwie
- Dim Zwoje As Word 'zmienna pomocnicza do liczenia w dol‚ do zera
- Dim Ile_warstw As Word
- Zwoje = 6
- Zw_1war = 2
- Srednica = 5
- Locate 2 , 1
- Lcd "--->"
- Do
- Gosub Programowanie
- Loop
- End
- Programowanie:
- Turns = Zwoje
- Portb = &B00000000
- Locate 1 , 1
- Lcd "Zwoje:"
- Do
- Locate 1 , 11
- Lcd " "
- Locate 1 , 11
- Lcd Turns
- If S1 = 0 Then
- Decr Turns
- End If
- If S2 = 0 Then
- Incr Turns
- End If
- Zwoje = Turns 'zwoje
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Ilosc_zw_warstwa
- End If
- Waitms 120
- Loop
- Return
- Ilosc_zw_warstwa:
- Cls
- Lcd "zw_1war:" 'liczba zwojĂłw w warstwie
- Do
- 'Locate 1 , 11
- 'Lcd " "
- Locate 1 , 11
- Lcd Zw_1war
- Waitms 250
- If S1 = 0 Then
- Decr Zw_1war
- End If
- If S2 = 0 Then
- Incr Zw_1war
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Srednica_drutu
- End If
- Loop
- Return
- Srednica_drutu:
- Cls
- Lcd "Srednica: 0," ;
- Waitms 250
- Do
- 'Locate 1 , 13
- Lcd " "
- Locate 1 , 13
- Lcd Srednica ; "mm"
- Waitms 250
- If S1 = 0 Then
- Decr Srednica
- If Srednica = 101 Then
- Srednica = 100
- End If
- End If
- If S2 = 0 Then
- Incr Srednica
- If Srednica = 0 Then
- Srednica = 1
- End If
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Work
- End If
- Loop
- Return
- Work:
- Cls
- Directionflag = 0 'flaga kierunkowa
- Layercount = 0 'liczba warstw ?
- Motor2 = 8
- Locate 1 , 1
- Lcd "Nawija..."
- For Turning = 1 To Turns 'turning-obracanie =1 to turns- zmienia siÄ™
- Locate 1 , 12
- Lcd Turns ' Turning
- Incr Layercount 'liczba warstw ???
- If Layercount = Zw_1war Then '
- Directionflag = Not Directionflag 'flaga kierunkowa
- Layercount = 0
- End If
- Gosub 1_obrot
- Next
- Return
- 1_obrot:
- Decr Zwoje 'zwoje do nawinięcia
- Locate 2 , 12
- If Zwoje < 10 Then
- Lcd " "
- Elseif Zwoje < 100 Then
- Lcd " "
- Elseif Zwoje < 1000 Then
- End If
- Lcd Zwoje
- Ile_warstw = Zwoje / Zw_1war
- Ile_warstw = Ile_warstw + 1
- If Zwoje = 0 Then Ile_warstw = 0
- Locate 2 , 6
- If Ile_warstw < 10 Then
- Lcd " " 'zmniejszyć o jedną spację
- End If
- Lcd Ile_warstw
- If Zwoje = 0 Then Gosub Programowanie
- Motor1 = 128
- For R = 1 To 200
- Portb = Motor1
- Waitms 10 ' 7
- Shift Motor1 , Right , 1
- If Motor1 = 8 Then
- Motor1 = 128
- End If
- If S3 = 0 Then 'zatrzymuje nawijanie
- Bitwait S3 , Set
- Waitms 20
- Gosub Programowanie
- End If
- Next R
- Locate 2 , 1
- If Directionflag = 0 Then ' flaga kierunkowa
- Lcd "--->"
- Gosub Motor2_prawo
- Else
- Lcd "<---"
- Gosub Motor2_lewo
- End If
- Return
- Motor2_lewo:
- Motor2 = 8
- For R = 1 To Srednica
- Portb = Motor2
- Waitms 5 '50 '200
- Shift Motor2 , Right , 1
- If Motor2 = 0 Then
- Motor2 = 8
- End If
- Next R
- Return
- Motor2_prawo:
- Motor2 = 1
- For R = 1 To Srednica
- Portb = Motor2
- Waitms 5 '50
- Shift Motor2 , Left , 1
- If Motor2 = 16 Then
- Motor2 = 1
- End If
- Next R
- Return
Sterowanie silników jest ok, ale chciałbym poprawić zapis na LCD
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Locate 1 , 12
- Lcd Turns
Druga sprawa to "odchudzenie" kodu jeśli to możliwe.
Pozdrawiam. Stefan
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Niestety Tiny2313 ma tylko 2KB Flash a sama obsługa wyświetlacza zajmuje około 1KB. Stąd to obciążenie.
Jeśli podłączyłbyś LCD do jednego portu to mógłbyś skorzystać z biblioteki LCD4.LIB https://wiki.mcselec.com/bavr/LCD4.LIB i oszczędzić sporo miejsca.
Tak na szybko udało mi się oryginalny program odchudzić z 99% do 97%.
Potem sprawdziłem jeszcze jeden myk. Jesli nie potrzebujesz nawijać więcej niż 65535 zwojów to możesz zamiast Long użyć Word i wtedy użyć biblioteki $lib "mcsbyteint.lbx"
W ten sposób kod maleje do 87% O tym zerowaniu zmiennej zapomniałem. Napisz dokładniej o co chodzi. Zajrzę później.
Jeśli podłączyłbyś LCD do jednego portu to mógłbyś skorzystać z biblioteki LCD4.LIB https://wiki.mcselec.com/bavr/LCD4.LIB i oszczędzić sporo miejsca.
Tak na szybko udało mi się oryginalny program odchudzić z 99% do 97%.
Potem sprawdziłem jeszcze jeden myk. Jesli nie potrzebujesz nawijać więcej niż 65535 zwojów to możesz zamiast Long użyć Word i wtedy użyć biblioteki $lib "mcsbyteint.lbx"
W ten sposób kod maleje do 87% O tym zerowaniu zmiennej zapomniałem. Napisz dokładniej o co chodzi. Zajrzę później.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '16.08.2020
- $regfile = "attiny2313.dat"
- $crystal = 8000000
- $swstack = 8
- $hwstack = 14
- $framesize = 24
- Const 65535_only = 1
- #if 65535_only
- $lib "mcsbyteint.lbx"
- Dim Turns As Word 'zamienia siÄ™
- Dim Turning As Word 'obracenie
- #else
- Dim Turns As Long 'zamienia siÄ™
- Dim Turning As Long 'obracenie
- #endif
- Config Lcdpin = Pin , Db7 = Portd.3 , Db6 = Portd.2 , Db5 = Porta.0 , Db4 = Porta.1 , E = Portd.1 , Rs = Portd.0
- Config Lcd = 16x2
- Cursor Off
- Cls
- Locate 1 , 1 : Lcd "Nawijerka 16.08"
- Wait 1
- Cls
- Config Portb = Output
- 'Portd.6 = 1
- 'Portd.5 = 1
- 'Portd.4 = 1
- Portd = Portd Or &B0111_0000
- S3 Alias Pind.6 'Enter
- S2 Alias Pind.5 'plus
- S1 Alias Pind.4 'minus
- Dim R As Byte
- Dim Directionflag As Byte 'flaga kierynkowa
- Dim Layers As Byte 'warstwy
- Dim Zw_1war As Word 'ile zwojow w jednej warstwie
- Dim Srednica As Byte 'srednica
- Dim Motor1 As Byte
- Dim Motor2 As Byte
- Dim Layercount As Word 'ilosc nawinietych zwojow w warstwie
- Dim Zwoje As Word 'zmienna pomocnicza do liczenia w dol‚ do zera
- Dim Ile_warstw As Word
- Zwoje = 6
- Zw_1war = 2
- Srednica = 5
- Locate 2 , 1 : Lcd "--->"
- Do
- Gosub Programowanie
- Loop
- End
- Programowanie:
- Turns = Zwoje
- Portb = &B00000000
- Locate 1 , 1
- Lcd "Zwoje:"
- Do
- Locate 1 , 11 : Lcd " "
- Locate 1 , 11 : Lcd Turns
- If S1 = 0 Then
- Decr Turns
- End If
- If S2 = 0 Then
- Incr Turns
- End If
- Zwoje = Turns 'zwoje
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Ilosc_zw_warstwa
- End If
- Waitms 120
- Loop
- Return
- Ilosc_zw_warstwa:
- Cls
- Lcd "zw_1war:" 'liczba zwojĂłw w warstwie
- Do
- 'Locate 1 , 11
- 'Lcd " "
- Locate 1 , 11
- Lcd Zw_1war
- Waitms 250
- If S1 = 0 Then
- Decr Zw_1war
- End If
- If S2 = 0 Then
- Incr Zw_1war
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Srednica_drutu
- End If
- Loop
- Return
- Srednica_drutu:
- Cls
- Lcd "Srednica: 0," ;
- Waitms 250
- Do
- 'Locate 1 , 13
- Lcd " "
- Locate 1 , 13
- Lcd Srednica ; "mm"
- Waitms 250
- If S1 = 0 Then
- Decr Srednica
- If Srednica = 101 Then
- Srednica = 100
- End If
- End If
- If S2 = 0 Then
- Incr Srednica
- If Srednica = 0 Then
- Srednica = 1
- End If
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Work
- End If
- Loop
- Return
- Work:
- Cls
- Directionflag = 0 'flaga kierunkowa
- Layercount = 0 'liczba warstw ?
- Motor2 = 8
- Locate 1 , 1 : Lcd "Nawija..."
- For Turning = 1 To Turns 'turning-obracanie =1 to turns- zmienia siÄ™
- Locate 1 , 12 : Lcd Turns ' Turning
- Incr Layercount 'liczba warstw ???
- If Layercount = Zw_1war Then
- If Directionflag = 0 Then Directionflag = 1 Else Directionflag = 0 'flaga kierunkowa '
- Layercount = 0
- End If
- Gosub 1_obrot
- Next
- Return
- 1_obrot:
- Decr Zwoje 'zwoje do nawinięcia
- Locate 2 , 12
- Select Case Zwoje
- Case Is < 10 : Lcd " "
- Case Is < 100 : Lcd " "
- End Select
- Lcd Zwoje
- Ile_warstw = Zwoje / Zw_1war
- Incr Ile_warstw
- If Zwoje = 0 Then Ile_warstw = 0
- Locate 2 , 6
- If Ile_warstw < 10 Then
- Lcd " " 'zmniejszyć o jedną spację
- End If
- Lcd Ile_warstw
- If Zwoje = 0 Then Gosub Programowanie
- Motor1 = 128
- For R = 1 To 200
- Portb = Motor1
- Waitms 10 ' 7
- Shift Motor1 , Right , 1
- If Motor1 = 8 Then
- Motor1 = 128
- End If
- If S3 = 0 Then 'zatrzymuje nawijanie
- Bitwait S3 , Set
- Waitms 20
- Gosub Programowanie
- End If
- Next R
- Locate 2 , 1
- If Directionflag = 0 Then ' flaga kierunkowa
- Lcd "--->"
- Gosub Motor2_prawo
- Else
- Lcd "<---"
- Gosub Motor2_lewo
- End If
- Return
- Motor2_lewo:
- Motor2 = 8
- For R = 1 To Srednica
- Portb = Motor2
- Waitms 5 '50 '200
- Shift Motor2 , Right , 1
- If Motor2 = 0 Then
- Motor2 = 8
- End If
- Next R
- Return
- Motor2_prawo:
- Motor2 = 1
- For R = 1 To Srednica
- Portb = Motor2
- Waitms 5 '50
- Shift Motor2 , Left , 1
- If Motor2 = 16 Then
- Motor2 = 1
- End If
- Next R
- Return
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Dziękuję za poprawki.
Dziękuję za odchudzenie, w moim Bascomie DEMO 2079 program zajmuje 87% pamięci.
Program do zakończenia nawijania działa poprawnie, ( liczenie w dół ilość zwojów =0, liczenie w dół ilość warstw=0, zwoje do nawinięcia =0, to chciałem aby po nawinięciu pozostało ). Do tej pory program działa dobrze.
Pokazują się same zera przedtem była możliwość wpisania kolejnych zwojów do nawinięcia, od zera można dodać ilość zwojów, ale kiedy nacisnę S3 aby przejść do zmiany nastawy ilości zwojów w warstwie, na LCD górna linia robi się cała czarna, dół bez napisów, przyciski nie reagują.
Dziękuję za odchudzenie, w moim Bascomie DEMO 2079 program zajmuje 87% pamięci.
Program do zakończenia nawijania działa poprawnie, ( liczenie w dół ilość zwojów =0, liczenie w dół ilość warstw=0, zwoje do nawinięcia =0, to chciałem aby po nawinięciu pozostało ). Do tej pory program działa dobrze.
Pokazują się same zera przedtem była możliwość wpisania kolejnych zwojów do nawinięcia, od zera można dodać ilość zwojów, ale kiedy nacisnę S3 aby przejść do zmiany nastawy ilości zwojów w warstwie, na LCD górna linia robi się cała czarna, dół bez napisów, przyciski nie reagują.
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Tak miał działać program:
Włączenie:
na LCD pojawia się Zwoje: ilość wstępnie zapisana w programie.
S1 zmniejsza ilość zwojów, S2 zwiększa
S3 wchodzi kolejno w zmiany ilości zwojów w każdej warstwie
S1 zmniejsza ilość zwojów w jednej warstwie, S2 zwiększa
S3 wchodzi do zmiany ustawień średnicy drutu
S1, S2 jak wyżej
S3 kończy zmiany i rozpoczyna nawijanie.
W czasie nawijania wciśnięcie S3 powoduje zatrzymanie pracy nawijarki i wejście do MENU.
Można wtedy modyfikować wszystkie trzy parametry.
S3 włącza nawijanie.
Po skończonej pracy nawijarki na LCD pojawiają wszystkie parametry wyzerowane.
Na LCD widoczne są kierunki nawijania kolejnych warstw ( strzałki - prawo/lewo ).
Chciałbym aby parametr zwoje pozostał, w tej chwili zeruje się razem z pozostałymi parametrami.
LCD jest na różnych portach.
Zaremowałem tą linię:
$lib "mcsbyteint.lbx"
teraz program działa, kod zajmuje 93% pamięci ATTiny2313.
Włączenie:
na LCD pojawia się Zwoje: ilość wstępnie zapisana w programie.
S1 zmniejsza ilość zwojów, S2 zwiększa
S3 wchodzi kolejno w zmiany ilości zwojów w każdej warstwie
S1 zmniejsza ilość zwojów w jednej warstwie, S2 zwiększa
S3 wchodzi do zmiany ustawień średnicy drutu
S1, S2 jak wyżej
S3 kończy zmiany i rozpoczyna nawijanie.
W czasie nawijania wciśnięcie S3 powoduje zatrzymanie pracy nawijarki i wejście do MENU.
Można wtedy modyfikować wszystkie trzy parametry.
S3 włącza nawijanie.
Po skończonej pracy nawijarki na LCD pojawiają wszystkie parametry wyzerowane.
Na LCD widoczne są kierunki nawijania kolejnych warstw ( strzałki - prawo/lewo ).
Chciałbym aby parametr zwoje pozostał, w tej chwili zeruje się razem z pozostałymi parametrami.
LCD jest na różnych portach.
Zaremowałem tą linię:
$lib "mcsbyteint.lbx"
teraz program działa, kod zajmuje 93% pamięci ATTiny2313.
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Dobry wieczór po dwóch latach !
Powróciłem do "nawijarki":
Zmiana koncepcji, dwa silniki bipolarne, dwa sterowniki TB6600, oto "program":
Silnik nr. 1 odpowiada za nawijanie - ta część programu działa poprawnie.
Silnik nr. 2 odpowiada za posuw lewo/prawo - tu mam problem, nie umiem zmusić sterownika TB6600 aby silnik wykonał jeden obrót.
Sterowniki ustawione na krok 200.
Proszę o pomoc.
W programie są pozostawione, zaremowane fragmenty sterowania silnikami unipolarnymi przez klucze tranzystorowe.
Pozdrawiam. Stefan
Powróciłem do "nawijarki":
Zmiana koncepcji, dwa silniki bipolarne, dwa sterowniki TB6600, oto "program":
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "attiny2313.dat"
- $crystal = 8000000 'wewnętrzny oscylator 8MHz
- $swstack = 8
- $hwstack = 14
- $framesize = 24
- Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7
- 'Config Lcdpin = Pin , Db7 = Pd.3 , Db6 = Pd.2 , Db5 = Pa.0 , Db4 = Pa.1 , E = Pd.1 , Rs = Pd.0
- Config Lcd = 16 * 2
- Cursor Off
- Cls
- Locate 1 , 1
- Lcd "Naw 07.12.22"
- 'Wait 1
- Cls
- Config Pind.0 = Output
- Dir_1 Alias Portd.0
- Config Pind.1 = Output
- Pul_1 Alias Portd.1
- Config Pind.2 = Output
- Pul_2 Alias Portd.2
- Config Pind.3 = Output
- Ena_1 Alias Portd.3
- Config Pina.1 = Output
- Dir_2 Alias Porta.1
- Config Pind.6 = Input
- Portd.6 = 1
- Config Pind.5 = Input
- Portd.5 = 1
- Config Pind.4 = Input
- Portd.4 = 1
- S3 Alias Pind.6 'Enter
- S2 Alias Pind.5 'plus
- S1 Alias Pind.4 'minus
- Dim Licz As Integer
- Dim R As Integer 'Byte
- Dim Directionflag As Bit 'flaga kierynkowa
- Dim Layers As Byte 'warstwy
- Dim Zw_1war As Word 'ile zwojow w jednej warstwie
- Dim Srednica As Byte 'srednica
- Dim Motor1 As Byte
- Dim Turns As Word 'Long 'zamienia siÄ™
- Dim Turning As Word 'obracenie
- Dim Motor2 As Byte
- Dim Layercount As Word 'ilosc nawinietych zwojow w warstwie
- Dim Zwoje As Word 'zmienna pomocnicza do liczenia w dol‚ do zera
- Dim Ile_warstw As Word
- Dim Zwoje_lcd As Word
- Zwoje = 10
- Zw_1war = 2
- Srednica = 5
- 'Locate 2 , 1
- 'Lcd "--->"
- Do
- Gosub Programowanie
- Loop
- End
- 'Zwoje_lcd = Zwoje
- Programowanie:
- 'Zwoje_lcd = 0
- Turns = Zwoje
- 'Portb = &B00000000
- Locate 1 , 1
- Lcd "Zwoje:"
- Do
- Locate 1 , 11
- If Turns < 10 Then Lcd " "
- If Turns < 100 Then Lcd " "
- If Turns < 1000 Then Lcd " "
- Lcd Turns
- If S1 = 0 Then
- Decr Turns
- End If
- If S2 = 0 Then
- Incr Turns
- End If
- Zwoje = Turns 'zwoje
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Ilosc_zw_warstwa
- End If
- Waitms 200
- Loop
- Return
- Ilosc_zw_warstwa:
- Cls
- Lcd "zw_1war:" 'liczba zwojĂłw w warstwie
- Do
- Locate 1 , 11
- If Zw_1war < 10 Then Lcd " "
- Lcd Zw_1war
- If S1 = 0 Then
- Decr Zw_1war
- End If
- If S2 = 0 Then
- Incr Zw_1war
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Srednica_drutu
- End If
- Waitms 200
- Loop
- Return
- Srednica_drutu:
- Cls
- Lcd "Srednica: 0,"
- Do
- 'Locate 1 , 13
- Lcd " "
- Locate 1 , 13
- Lcd Srednica ; "mm"
- If S1 = 0 Then
- Decr Srednica
- If Srednica = 101 Then
- Srednica = 100
- End If
- End If
- If S2 = 0 Then
- Incr Srednica
- If Srednica = 0 Then
- Srednica = 1
- End If
- End If
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Work
- End If
- Waitms 200
- Loop
- Return
- Work:
- Cls
- Directionflag = 0 '0 'flaga kierunkowa
- Layercount = 0 'liczba warstw ?
- Motor2 = 8
- Locate 1 , 1
- Lcd "Nawija..."
- Locate 2 , 1
- Lcd "--->"
- For Turning = 1 To Turns 'turning-obracanie =1 to turns- zmienia siÄ™
- Locate 1 , 11
- If Turns < 10 Then Lcd " "
- If Turns < 100 Then Lcd " "
- Lcd Turns ' Turning
- Incr Layercount 'liczba warstw ???
- If Layercount = Zw_1war Then '
- Directionflag = Not Directionflag 'flaga kierunkowa
- Layercount = 0
- End If
- Gosub 1_obrot
- Next
- Return
- 1_obrot:
- 'Decr Zwoje
- Incr Zwoje_lcd
- Locate 2 , 11
- If Zwoje_lcd < 10 Then Lcd " "
- Lcd Zwoje_lcd
- If Zwoje_lcd = Zwoje Then
- Zwoje_lcd = 0
- 'End If
- Gosub Programowanie
- End If
- Ile_warstw = Zwoje / Zw_1war
- 'Ile_warstw = Ile_warstw + 1
- If Zwoje = 0 Then Ile_warstw = 0
- Locate 2 , 6
- If Ile_warstw < 10 Then Lcd " " 'zmniejszyć o jedną spację
- Lcd Ile_warstw
- If Zwoje = 0 Then Gosub Programowanie
- Motor1 = 128
- For R = 1 To 800 '0
- Toggle Pul_1
- 'Dir_1 = 1
- 'Portb = Motor1
- Waitms 1 ' 7
- 'Shift Motor1 , Right , 1
- 'if Motor1 = 8 Then
- 'Motor1 = 128
- 'End If
- If S3 = 0 Then 'zatrzymuje nawijanie
- Bitwait S3 , Set
- Waitms 20
- 'Gosub Ilosc_zw_warstwa ' Programowanie
- Gosub Programowanie
- End If
- Next R
- Locate 2 , 1
- If Directionflag = 0 Then ' flaga kierunkowa
- Lcd "--->"
- Gosub Motor2_prawo
- Else
- Lcd "<---"
- Gosub Motor2_lewo
- End If
- Return
- Motor2_lewo:
- 'Dir_2 = 0
- Motor2 = 0 '8
- For R = 1 To Srednica
- Incr Licz
- 'For Licz = 1 To 800 '0
- Licz = 0
- Toggle Pul_2
- 'Next Licz
- 'If Motor2 = 0 Then
- 'Toggle Pul_2
- Waitms 10
- 'Portb = Motor2
- 'Waitms 500 '50 '200
- 'Shift Motor2 , Right , 1
- 'If Motor2 = 0 Then '0
- 'Motor2 = 8 '8
- 'End If
- Next R
- Return
- Motor2_prawo:
- 'Dir_2 = 1
- Locate 2 , 1
- Lcd "--->"
- Motor2 = 1 '1
- For R = 1 To Srednica
- Incr Licz
- 'For Licz = 1 To 800 '0
- 'Licz = 0
- Toggle Pul_2
- Waitms 10
- 'Next Licz
- 'Portb = Motor2
- 'Waitms 500 '50
- 'Shift Motor2 , Left , 1
- 'If Motor2 = 16 Then '16
- 'Motor2 = 0 '1
- 'End If
- Next R
- Return
Silnik nr. 2 odpowiada za posuw lewo/prawo - tu mam problem, nie umiem zmusić sterownika TB6600 aby silnik wykonał jeden obrót.
Sterowniki ustawione na krok 200.
Proszę o pomoc.
W programie są pozostawione, zaremowane fragmenty sterowania silnikami unipolarnymi przez klucze tranzystorowe.
Pozdrawiam. Stefan
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Stefan czy Jacek?
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Witam - nie mój temat
pozdrawiam Jacek.
pozdrawiam Jacek.