Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 00:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 2 lis 2019, o 07:41 
Offline
Użytkownik

Dołączył(a): 19 lip 2016
Posty: 114
Pomógł: 0

Witam
Mam silnik połączony z enkoderem 600 kroków
Po zliczeniu od 0 do 9 kroków (1 sekunda) silnik się zatrzymuje.
Jak spowodować żeby sekundy odliczały się cyklicznie?
Używam zegara DS3231

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2019, o 12:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

Kolacz napisał(a):
Z tego fragmentu kodu, bez szklanej kuli, nie da się pomóc. Administrator powinien kasować takie posty.


No powiem szczerze, że trudno się z tym nie zgodzić ...

więc proszę autora o jakieś uzupełnienie rzeczowe - jeśli wątek ma wisieć

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2019, o 17:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

Tu jest BABOL - zaznaczyłem na czerwono!
Lu_let napisał(a):
EIFR |= (1<<INTF0);     // kasowanie flagi za pomocą jedynki



akurat takie kasowanie trzeba koniecznie robić TAK

Kod:
EIFR = (1<<INTF0);     // kasowanie flagi za pomocą jedynki

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2019, o 17:27 
Offline
Użytkownik

Dołączył(a): 19 lip 2016
Posty: 114
Pomógł: 0

Rzeczywiście trochę mało napisałem.
Używam biblioteki MK_ENCODER i DS3231
Kod z biblioteki DS3231 nie wiem czy powinien być w przerwaniu?
Po uruchomieniu oś silnika przesuwa się o jedną sekundę i staje.
Przerwanie co 1 sekundę z DS3231 działa.
Jak napisać żeby po upływie jednej sekundy (info z DS3231) wykonała się akcja z przerwania itd.
Chodzi mi o uzyskanie sekundnika.
Przerwanie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2019, o 18:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jeśli dobrze rozumuję to po przerwaniu na INT0 (sygnał 1 sekundy z DS3231) silnik powinien obrócić się o kąt odpowiadający 10 impulsom z enkodera (1/10 z 600). A czy PD7 służy do włączania i wyłączania silnika?
Wypróbuj taki kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lis 2019, o 18:50 
Offline
Użytkownik

Dołączył(a): 19 lip 2016
Posty: 114
Pomógł: 0

Obrazek

Używam sterownika jak wyżej, PD7 służy do zmiany stanu na wejściu PUL
Przerwanie z DS3231 - INT/SQW przychodzi na PD2 INT0/PCINT 18 (atmega328P)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2019, o 20:50 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Lu_let napisał(a):
Używam sterownika jak wyżej, PD7 służy do zmiany stanu na wejściu PUL

I co wtedy się dzieje? Co jeśli podasz stan "1" = 5V, a co jeśli "0" = 0V na to wejście?

O ile użycie mikrokontrolera może być trudne ze względu na małą znajomość programowania to możesz napisać algorytm używając pseudokodu i wtedy wszyscy będą wiedzieć co chcesz osiągnąć i podpowiedzą Ci jak to już technicznie wykonać. Na przykład takie coś:
Po sygnale z RTC (co 1 sekundę) na wejściu przerwania INT0 uruchom silnik wyjściem PD7 ustawiając je w stan X.
Co 100ms sprawdzaj czy stan zmiennej która przechowuje impulsy z enkodera i jeśli jest więcej niż 9 to zatrzymaj silnik ustawiając na wyjściu PD7 stan Y.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2019, o 21:02 
Offline
Użytkownik

Dołączył(a): 19 lip 2016
Posty: 114
Pomógł: 0

Udało się ruszyć z miejsca.
Sekundnik pracuje prawidłowo od jakiejś godziny.
Trwają próby.
Dziękuję za odzew to motywuje do działania : )

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO