Strona 3 z 4
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 17:20
autor: Jacek
Witam a używałeś alias'w:
pozdr. Jacek.
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 18:06
autor: niveasoft
Tak prosto się chyba nie da. Jeśli bity w portach były by po kolei obok siebie tak jak pytałeś to jeszcze można by to ogarnąć kilkoma szybkimi instrukcjami.
Mógłbyś też rozważyć dodanie rejestru przesuwnego np. 74HC595. Właśnie coś na tym skończyłem i nadaję do nich dane szyną @4MHz.
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 20:18
autor: sp3ots
Dziękuję za wiadomość, jeśli w prosty sposób nie da się tego zrobić to przesunę LCD 2x16 na te porty o których pisałem wyżej, a port B w całości wykorzystam do sterowania dwóch silników krokowych.
Cały czas bawię się z przerabianiem KITu Nawijarka.
Wykorzystam ATtiny2313+LCD 2x16+ 8xIRLZ44 i tylko trzy przyciski ( oryginał miał 4 przyciski ).
Pinów w sam raz na taki projekt.
Mam pytanie jak poprawnie w przerwaniach pisać program z przyciskami ?
$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"
Cls
Config Timer0 = Timer , Prescale = 256
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
S2 Alias Pind.5
S1 Alias Pind.4
Dim Licz As Integer
Dim temp_4ms As Bit
On Timer0 Odmierz_czas
Enable Interrupts
Enable Timer0
Load Timer0 , 125
Licz = 0
Do
If temp_4ms = 1 Then
temp_4ms = 0
'Gosub Wyswietlanie
Gosub Przyciski
End If
Loop
End
przyciski:
'czy wolno, fachowo można tu używać Waitms dla zapobieżenia drganiom styków przycisków ?
'czy zastosować inne sposoby, jakie ?
return
Odmierz_czas:
Load Timer0 , 125 '4ms Timer0 = 131 bo 256-131=125
temp_4ms = 1
Incr Licz
If Licz = 250 Then '4ms x 250= 1000ms = 1sek
Licz = 0
End If
Return
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 20:27
autor: niveasoft
Zależy. Na proste pikanie plus minus to zwykłe Debounce nawet może być.
Debounce w pętli nie spowalnia niczego dopóki nie naciśniesz przycisku. Jak się naciska przycisk to samo liczy 25ms i po tym sprawdza stan przycisku. Zapamiętuje też stan przycisku i aż do puszczenia nie uruchomi powtórnie podłaczonego do niego sub`a.
Nie nadaje się więc do przycisków z Autorepeat. Czyli na Debounce nie da się zrobić "przytrzymujesz i samo się dodaje/odejmuje".
Zależy więc co tam masz w planie
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 20:38
autor: sp3ots
Nie ma to być proste pikanie, to ma być mini menu:
-,+, "idź dalej". W czasie pracy silników musi być możliwość "STOP" i wejście do poprawy nastaw.
Przyciski:
Lcd "Zwoje:"
Bitwait S3 , Set
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
If S3 = 0 Then
Gosub Ilosc_zw_warstwa
End If
'Locate 2 , 1
'Lcd "zw=" ; Turns
Waitms 120
Loop
Return
Ilosc_zw_warstwa:
Locate 1 , 1
Lcd "Warstwa:" 'liczba zwojów w warstwie
'Waitms 200
Bitwait S3 , Set
Do
Locate 2 , 11
Lcd " "
Locate 2 , 11
Lcd Layer
If S1 = 0 Then
Decr Layer
End If
If S2 = 0 Then
Incr Layer
'If Layer = 5 Then
'Layer = 6
'End If
End If
If S3 = 0 Then
Locate 1 , 1
Lcd "nawijaj"
Gosub Nawijanie
End If
'Locate 2 , 7
'Lcd " zw/war=" ; Layer
Waitms 120
Loop
Return
Nawijanie:
Cls
Bitwait S3 , Set
Do
Locate 1 , 1
Lcd Turns
Decr Turns
Motor1 = 128
For R = 1 To 200 ' 200 '100
'Motor3 = 255 - Motor1
Portb = Motor1 '3 '112
Waitms 100 ' 7
Shift Motor1 , Right , 1
If Motor1 = 8 Then
Motor1 = 128
End If
Next R
If Directionflag = 0 Then
'Locate 2 , 1
'Lcd "prawo"
'Call Motor2_right
Else
'Locate 2 , 1
'Lcd "lewo"
'Call Motor2_left
End If
If Turns < 0 Then Turns = 0
Waitms 200
If Turns = 0 Then Gosub Przyciski
Loop
Return
Taki kod napisałem ( część skopiowałem z oryginału KITu ), on działa nie pewnie ( przyciski ) dodałem tam BITWAITy co nieco poprawiło działanie.
Poprzedni kod jest niepełny brak deklaracji niektórych zmiennych.
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 21:29
autor: niveasoft
Zobacz tak na odwrót. Najpierw musi być zwolniony przycisk żeby skoczył. To już w kolejnym subie raczej nie wyskoczy
BTW. Taki kod z wcięciami chyba sie lepiej czyta co?
Z Twoim zrobiłem tak że w Bascom CTRL+A i potem EDIT->Proper Indent
Przyciski:
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
If S3 = 0 Then
Bitwait S3 , Set 'najpierw poczekaj na zwolnienie przycisku
Waitms 20
Gosub Ilosc_zw_warstwa
End If
'Locate 2 , 1
'Lcd "zw=" ; Turns
Waitms 120
Loop
Return
Ilosc_zw_warstwa:
Locate 1 , 1
Lcd "Warstwa:" 'liczba zwojów w warstwie
'Waitms 200
Do
Locate 2 , 11
Lcd " "
Locate 2 , 11
Lcd Layer
If S1 = 0 Then
Decr Layer
End If
If S2 = 0 Then
Incr Layer
'If Layer = 5 Then
'Layer = 6
'End If
End If
If S3 = 0 Then
Bitwait S3 , Set
Waitms 20
Locate 1 , 1
Lcd "nawijaj"
Gosub Nawijanie
End If
'Locate 2 , 7
'Lcd " zw/war=" ; Layer
Waitms 120
Loop
Return
Nawijanie:
Cls
Do
Locate 1 , 1
Lcd Turns
Decr Turns
Motor1 = 128
For R = 1 To 200 ' 200 '100
'Motor3 = 255 - Motor1
Portb = Motor1 '3 '112
Waitms 100 ' 7
Shift Motor1 , Right , 1
If Motor1 = 8 Then
Motor1 = 128
End If
Next R
If Directionflag = 0 Then
'Locate 2 , 1
'Lcd "prawo"
'Call Motor2_right
Else
'Locate 2 , 1
'Lcd "lewo"
'Call Motor2_left
End If
If Turns < 0 Then Turns = 0
Waitms 200
If Turns = 0 Then Gosub Przyciski
Loop
Return
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 21:40
autor: sp3ots
Dziękuję, jutro sprawdzę jak działa.
Wcięcia, mi obojętne są, zawsze trzeba wiedzieć jak to działa.
Mam 63lata, nie mam pojęcia co to jest BTW.
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 21:52
autor: niveasoft
BTW to skrót od angielskiego 'By The Way" i znaczy tutaj "a tak na marginesie" lub "a tak nie w związku z tematem". Skrót dla tych co nie lubią pisać. Chyba przestanę go używać bo mi klikanie przychodzi z łatwością
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 25 wrz 2019, 21:53
autor: sp3ots
Ok, rozumiem.
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
: 26 wrz 2019, 9:16
autor: sp3ots
Witam !
Przyciski działają bardzo dobrze,
Zawsze gdy operuję S3 ( wykonaj/zrób) wpisuję tak jak Ty to napisałeś:
If S3 = 0 Then
Bitwait S3 , Set
Waitms 20
Gosub Przyciski
End If
DZIEKUJĘ
Pozostało mi dopracować wyświetlanie na LCD i dodanie fragmentu kodu z podziałem na warstwy.
Ta część programu dla mnie jest nie zrozumiała/nie wiem jak ona działa, ale to POTEM.
W czasie testów zauważyłem brak możliwości korekcji zmiany ilości zwoi gdy jestem w części nastawianie ilości zwojów w jednie warstwie. Ale to wina braku jednego klawisza, właściwie jest jeszcze jeden pin RESET, ale jak go użyję to stracę możliwość programowania USBasp.
Na razie niech tak zostanie.