Skocz do zawartości

Robot odkurzacz


Pomocna odpowiedź

Chester11-86, musisz wyeksportować z eagla sam widok ścieżek/schemat w formie bitmapy, można przez file>export, można przez prnt scrn.

Teraz wygląda ok, za wyjątkiem podłączenia switch'y. Zwykło się łączyć do masy, a ja dodatkowo polecę Ci wspomniany wcześniej filtr RC:

.

Warto jeszcze na zaciskach silników dodać kondziory, np. 100nF, ale nie trzeba tego lutować na płytce - można przy samym silniku. Żadnych błędów nie znalazłem, ale niech ktoś jeszcze spojrzy bo pora taka dziwna i mój mózg jeszcze śpi... 😉

Zastosowałeś ten filtr RC i dodałeś jeszcze rezystor 10k. Czy taki sam rezystor mam dodać do tych swoich "czujników" (tzn one będą także switchami ale innej budowy)??

Tylko trochę nie rozumie Twojego schematu 🙁

Wyjście podprowadzamy pod nóżkę procesora?? Po naciśnięciu switcha na wyjściu pojawi się stan niski??

Pozdrawiam??

Bez filtra masz taką sytuację, że sprężyste blaszki wykonują oscylujące ruchy i wykres napięcia wygląda mniej-więcej tak (sorki, za painta - najlepiej by było spojrzeć na oscylograf 😉 )

W układzie jak na schemacie (zapożyczonym niegdyś z jakiegoś pdf'a, chyba jakaś praca dyplomowa), zamiast tych drgań i przeskoków, będziesz miał wygładzoną linię charakterystyki. To jest opcja przy naciśnięciu przycisku, przy puszczeniu sytuacja jest analogiczna. Zastosowany filtr dolnoprzepustowy "odcina" sygnały o wyższej częstotliwości (drgania), a "przepuszcza" sygnały o niższej częstotliwości. Nie musisz tego stosować jak nie chcesz, w programie możesz wykorzystać dwukrotne sprawdzanie stanu pinu z opóźnieniem np. 300ms. BASCOM ma nawet gotową funkcję - debounce, ale nie wypowiem się o jej działaniu bo nigdy nie używałem.

Rezystor 10k to po prostu pull-up, jeśli nie masz go na schemacie to włączasz ten wbudowany w strukturę uC (programowo).

Jeżeli chciałbym programowo zrobić pull-up to muszę w bascomie użyć komendy "Set" ?

Dziękuję bardzo za wyjaśnienie, o komendzie debounce też czytałem w kursie bascoma 🙂

Ale powtórzę pytanie jeszcze raz bo chodzi mi o to jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować i jak pisać program 🙂

Pozdrawiam!

powtórzę pytanie jeszcze raz bo chodzi mi o to jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować

Piny procka używane jako wejścia w przeważających przypadkach sterowane są od strony masy.

Ja zawsze tak steruję procesor i zawsze steruję stanem niskim na pinach używanych jako wyjścia.

Jeżeli chciałbym programowo zrobić pull-up...

Musisz ustawić piny jako wejścia i wymusić na nich stan 1 programowo, czyli tak jak mówisz.

jaki stan będzie na nóżce procesora bo nie wiem jak go wysterować i jak pisać program

Dopóki przycisk nie będzie wciśnięty, będziesz miał stan "1", w momencie wciśnięcia - "0". Obsługujesz to np. if'em - jeśli jest "0", to wykonaj jakąś tam akcję

If pinb.5 = 0 then
blablablaa
else
blablabla
endif

Właśnie to chciałem wiedzieć 🙂 no to teraz nic innego jak nauczyć się tych timerów w końcu 🙂

Kolego Armir wszystko będzie zasilane z akumulatora 6V i zastosowałem takie kondensatory. Uważasz że powinienem dać większe??

Najlepiej wartości dobierać zgodnie z notą katalogową, a nie dlatego, że "ktoś komuś powiedział, że powinno być..." 😃 Także google->nazwa_układu datasheet->czytanie (w tym wypadku oglądanie obrazków).

Dodam jeszcze, że gdybyś czytał datasheet (noty katalogowe, jak kto woli), to wiedziałbyś o minimalnej różnicy napięć wymaganej do stabilizacji...Która dla 7805T wynosi ok. 2V. Czyli z 6V nijak na tym układzie nie osiągniesz 5V. Polecam stabilizatory LDO (low-dropout).

  • 4 tygodnie później...

Witam!

Na początku zwracam się z prośbą do administratorów jak również moderatorów forum o nie kasowanie tego tematu ponieważ obiecuję, że będzie się rozwijał🙂

Na razie kompletuję sobie części jak również testuję gdy mam tylko wolną chwilkę moje rozwiązania mechaniczne ale chciałem sobie przetestować jedno rozwiązanie gdzie mam niestety mały problem z programem. Ciągle opieram się o testy płytki, która została wcześniej przedstawiona przez kolegę matrix'a.

Zasada działania jaką chce osiągnąć:

Sprawa wygląda tak, że mam do dyspozycji 3 switche. Jeden główny i dwa mają funkcję krańcówek. Po włączeniu zasilania nic się nie dzieje i na wstępie jedna z krańcówek jest wciśnięta. Po naciśnięciu głównego switcha na odpowiedniej nóżce procka jest podany stan wysoki, silnik się obraca do momentu aż zostanie wciśnięta druga krańcówka. po ponownym naciśnięciu głównego switcha silnik się kręci w drugą stronę i wraca do położenia początkowego do wciśnięcia pierwszej krańcówki.

Próbowałem sam coś stworzyć ale za dużo if'ów mi wyszło 😋

Czy mógłbym prosić o malutką podpowiedź?? Na co zwrócić uwagę??

Pozdrawiam!

Dorzucam jeszcze program jaki zrobiłem ale jest źle ponieważ nie chce się kompilować 🙁

$regfile = "attiny2313.dat"
$crystal = 4000000

Config Pinb.0 = Output                                      'ustalanie portow wyjscowych
Config Pinb.1 = Output
Config Pind.3 = Input                                       'ustalanie portow wejscoiwych
Config Pind.4 = Input
Config Pind.5 = Input


Kran_1 Alias Pind.4                                         'zmiana nazw portow
Kran_2 Alias Pind.5
Gl_1 Alias Pind.3
L1_a Alias Portb.0
L1_b Alias Portb.1


Set Portd.3                                                 'podcaganie portu
Set Portd.4
Set Portd.5

L1_a = 0                                                    'ustalenie stanow niskich
L1_b = 0                                                    'na wyjsciach






Do                                                          'glowny program

  Waitms 90                                                'czekaj 90ms


  If Kran_1 = 0 And Gl_1 = 0 Then                         
     Waitms 15
     Gosub Przod
  Elseif Kran_2 = 0 And Gl_1 = 0 Then                      '
     Waitms 15
     Gosub Tyl
  Else
     L1_a = 0
     L1_b = 0
  End If
Loop
End


Przod:
  L1_a = 1
  If Kran_2 = 0 Then
  L1_a = 0

  Return

Tyl:
  L1_b = 1
  If Kran_1 = 0 Then
  L1_b = 0

  Return

__________

Komentarz dodany przez: Nawyk

Proszę, używaj znaczników

 do zagnieżdżania kodów źródłowych.

Program jaki wgrałem znajduję się poniżej ale właśnie jest taka przypadłość że silnik się zatrzymuję 🙁 a powinien działać tak długo dopóki nie zostanie wciśnięta druga krańcówka. Co robię źle??

$regfile = "attiny2313.dat"
$crystal = 4000000

Config Pinb.0 = Output                                      'ustalanie portow wyjscowych
Config Pinb.1 = Output
Config Pind.3 = Input                                       'ustalanie portow wejscoiwych
Config Pind.4 = Input
Config Pind.5 = Input


Kran_1 Alias Pind.4                                         'zmiana nazw portow
Kran_2 Alias Pind.5
Gl_1 Alias Pind.3
L1_a Alias Portb.0
L1_b Alias Portb.1


Set Portd.3                                                 'podcaganie portu
Set Portd.4
Set Portd.5

L1_a = 0                                                    'ustalenie stanow niskich
L1_b = 0                                                    'na wyjsciach


Do                                                          'glowny program

  Waitms 90                                                'czekaj 90ms


  If Kran_1 = 0 And Gl_1 = 0 Then                          'jesli czu.1 zostanie zalaczony to przejdz do Cofnij
     Waitms 15
     Gosub Przod
  Elseif Kran_2 = 0 And Gl_1 = 0 Then                      'jesli czu.2 zostanie zalaczony to przejdz do Cofnij
     Waitms 15
     Gosub Tyl
  Else
     L1_a = 0
     L1_b = 0
  End If
Loop
End


Przod:
  L1_a = 1
  If Kran_2 = 0 Then
  L1_a = 0
  End If

Return

Tyl:
  L1_b = 1
  If Kran_1 = 0 Then
  L1_b = 0
  End If

Return

Przeanalizuj kod od początku (samą pętlę główną).

Najpierw sprawdzasz, czy nie ma sygnału do załączenia silników i to jest OK. Jeśli jakiś wystąpi (zakładamy że wystąpił) to przechodzimy do odpowiedniej procedury.

Następna iteracja i znowu sprawdzamy czy wystąpił sygnał. I tu jest problem. Nie może takowy wystąpić bo przed chwilą wystartowaliśmy silnik co w efekcie rozłącza krańcówkę i nie pozwala spełnić pierwszego warunku, a wózeczek nie zdąży w czasie ok. 100ms dojechać do drugiego końca, a co za tym idzie nie da rady spełnić drugiego warunku. I tu jest wykonywana instrukcja else w której zatrzymujesz silnik.

Po za tym sam sposób sprawdzania, czy silnik dojechał do końca nie jest zbyt fortunny. Warunek ten jest sprawdzany tylko podczas spełnienia innego warunku, startującego silnik. Czyli zostanie on wykonany tylko raz, ponieważ sytuacja w której Gl_1 i Kran_1 są załączone występuje tylko na początku pracy urządzenia.

IMO tutaj dobrze sprawdziłaby się pętla bodajże

while warunek
instrukcje
wend
  • Lubię! 1

Po pierwsze chciałem przeprosić że nie umieściłem kodu programu w odpowiednich znacznikach 🙁

Po drugie kolego Mihau, troszkę nie zrozumiałem gdzie mam umieścić te komendy?? To ma być umieszczone w podprogramie czy pętli głównej?? 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...