- kanal_a alias pind.2
AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Witam a używałeś alias'w:
pozdr. Jacek.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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.
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.
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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 ?
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 ?
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $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
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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
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
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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.
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.
-,+, "idź dalej". W czasie pracy silników musi być możliwość "STOP" i wejście do poprawy nastaw.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- 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
Poprzedni kod jest niepełny brak deklaracji niektórych zmiennych.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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
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
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- 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
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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.
Wcięcia, mi obojętne są, zawsze trzeba wiedzieć jak to działa.
Mam 63lata, nie mam pojęcia co to jest BTW.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
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ą
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: AVR, PCF8574, sterowanie Silnikiem unipolarnym ok 1,5A
Witam !
Przyciski działają bardzo dobrze,
Zawsze gdy operuję S3 ( wykonaj/zrób) wpisuję tak jak Ty to napisałeś:
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.
Przyciski działają bardzo dobrze,
Zawsze gdy operuję S3 ( wykonaj/zrób) wpisuję tak jak Ty to napisałeś:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- If S3 = 0 Then
- Bitwait S3 , Set
- Waitms 20
- Gosub Przyciski
- End If
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.