Skocz do zawartości

Czy to ma prawo działać ?


mati 6

Pomocna odpowiedź

Jak w temacie - samego schematu nie mam - bo po prostu nie powstał. Wzorowałem się na https://www.forbot.pl/forum/upload_img/obrazki/IMG_4c483ad3876602231.png tylko piny mam inaczej podłączone. Czy ten program ( napisany w bascom) ma prawo działać ? Przy dobrym programie będę wiedział, czy nie popełniłem jakichś błędów przy przenoszeniu schematu bądź samym lutowaniu.

$regfile = "m8def.dat"
$crystal = 1000000


Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb = Output


S1 Alias Portd.5
S2 Alias Portd.6
S3 Alias Portd.7
S4 Alias Portb.0
Czujnik1 Alias Portd.2
Czujnik2 Alias Portd.3
Czujnik3 Alias Portd.4


Portb = &00000000

Portd = &00000000




Do

If Czujnik1 = 1 And Czujnik2 = 1 Then
S1 = 0
S2 = 0
S3 = 1
S4 = 0
Elseif And Czujnik2 = 1 And Czujnik3 = 0 Then
S1 = 1
S2 = 0
S3 = 0
S4 = 0
Elseif If Czujnik1 = 1 Then
S1 = 0
S2 = 0
S3 = 1
S4 = 0
Elseif Czujnik2 = 1 Then
S1 = 1
S2 = 0
S3 = 1
S4 = 0
Elseif Czujnik3 = 1 Then
S1 = 1
S2 = 0
S3 = 0
S4 = 0

Elseif Then
S1 = 0
S2 = 0
S3 = 0
S4 = 0

Loop

Jestem zupełnie zielony w programowaniu. Powyższy kod to na razie jedyne co udało mi się napisać pod line followera - a mimo wszystko nie działa. Cała elektronika nie działa poprawnie - silniki w ogóle nie reagują na czujniki - obojętnie na to, czy przystawiam je do czarnej / białej powierzchni albo też nawet świecę latarką na nie. Same diody w czujnikach się świecą.

Jeśli to zły dział to przepraszam - po powierzchownym przeglądnięciu forum nie znalazłem stosownego działu

Link do komentarza
Share on other sites

Nie masz zakończenia warunku - End If. Czytaj błędy, jakie pokazuje Ci kompilator.

Portb = &00000000

Portd = &00000000

Tu powinno być &B00....

Elseif And Czujnik2 = 1 And Czujnik3 = 0 Then

Nie powinno być tego And

Elseif If Czujnik1 = 1 Then

A tu tego If..

Strasznie niedbale napisany kod, to nie ma prawa działać. Skup się, jak piszesz. Wszystkie błędy pokazuje ci kompilator, jak klikniesz na błąd to nawet podświetli ci linię w której jest.

Link do komentarza
Share on other sites

faktycznie te niepotrzebne ''and'' i ''if'' były wynikiem bezmyślnego kopiowania i usuwania niektórych warunków, gdy przeczytałem, że najlepiej jest pomijać te piny, na ktorych ma być stan niski. Muszę się przyznać, że nie zauważyłem tych errorów pod programem - znaczy się nigdy nie myślałem, ze wskazują one błędy w programie ( tak jak w pascalu) bo nie dawno borykałem się z problemem wykrycia przez programator mikrokontrolera i myślałem, że głównie tego one dotyczą - problem już oczywiście rozwiązany.

Więc tak. Poprawiłem te błędy, które zauważyłeś i wygląda to teraz tak :

$regfile = "m8def.dat"
$crystal = 1000000


Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb = Output


S1 Alias Portd.5
S2 Alias Portd.6
S3 Alias Portd.7
S4 Alias Portb.0
Czujnik1 Alias Portd.2
Czujnik2 Alias Portd.3
Czujnik3 Alias Portd.4


Portb = &B00000000

Portd = &B00000000




Do

If Czujnik1 = 1 And Czujnik2 = 1 And Czujnik3 = 1 Then
S1 = 0
S2 = 0
S3 = 0
S4 = 0


Elseif Czujnik1 = 1 And Czujnik2 = 1 Then
S1 = 0
S2 = 0
S3 = 1
S4 = 0
Elseif Czujnik2 = 1 And Czujnik3 = 1 Then
S1 = 1
S2 = 0
S3 = 0
S4 = 0
Elseif Czujnik1 = 1 Then
S1 = 0
S2 = 0
S3 = 1
S4 = 0
Elseif Czujnik2 = 1 Then
S1 = 1
S2 = 0
S3 = 1
S4 = 0
Elseif Czujnik3 = 1 Then
S1 = 1
S2 = 0
S3 = 0
S4 = 0

Elseif Czujnik1 = 0 And Czujnik2 = 0 And Czujnik3 = 0 Then
S1 = 0
S2 = 0
S3 = 0
S4 = 0


End If

Loop

Żadne errory już nie wyskakują 🙂

No ale oczywiście silniki ani drgną. Połączenie między mostkiem H a mikrokontrolerem jest dobre, bo już wcześniej uruchamialem silniki za pomocą programu.

Sprawdziłem też napięcie jakie dochodzi do trzech pinów amtegi8 od modułu z czujnikami CNY70 - mianowicie gdy przytknę czujniki do blatu biurka napięcie wynosi ok. 2V a gdy świecę latarką na fototranzystory to 4v... na razie chodzi mi o to, by po prostu silniki jakoś reagowały

Link do komentarza
Share on other sites

Napisz sobie program, który cały czas będzie kręcił silnikami. Najpierw do przodu, później do tyłu i skręcanie. Jak to będzie Ci działało, to zamknij sobie kod sterujący silnikami w funkcji i zajmij się obsługą silników.

Aha, gdzie masz podłączone piny Enable mostka? W programie z tego co widzę, sterujesz tylko 4 pinami, a powinno być sześć... (ew. 4 jeśli EN dałeś na stałe do 5V)

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No zgadza się..... steruje tylko 4 pinami.... EN są do plusa. Na tym etapie zabawy w elektronike wystarczy mi na razie obrót silników w jedną stronę xD jak uda mi się uruchomić moduł do line followera to zabiorę się do modułów z fototranzystorami ( do light followera ) i z przedłużonymi krańcówkami do omijania przeszkód ( w tym ostatnim porzebne są obroty silników w dwie strony - co nadal jest możliwe przy 4 pinach). Z tą funkcją obrotów silnika masz na myśli 4 osobne funkcje ? ( jedx prosto, stoj, skrec w lewo, skrec w prawo)

Stąpam po nieznanym gruncie. Pewnie niedlugo będę się śmiał z pytań które zadaję - tak jak to było w przypadku mojej pierwszej konstrukcji ( światłoluba beam).

czy sygnały od modułu z cny70 powinny być skrajne ? ( 5v albo 0v) czy mogą się wahać tak jak u mnie w zakresie 2-4v

Edit: Co do tej funkcji to być może chodzi Ci jednak o wprowadzenie zmiennej, nadanie jej wartości przy odczytywaniu stanów czujników i potem w samej funkcji poleceniami warunkowymi uzyskać konkretna reakcje? druga myśl która mi przyszla do głowy.

Ale to daje nie wyjaśnia czemu te silniki nie ruszają się mimo świecenia latarką na fototranzystory w cny70

[ Dodano: 24-07-2011, 10:55 ]

Uznałem, że nie ma sensu tworzyć nowego tematu, mimo, iż moje problemy odbiegają troche od programowania. Pobawiłem się chwile miernikiem i wyszło mi, że:

napięcie przed stabilizatorem to 6V, a za stabilizatorem 7805 zamiast 5V jest 4,3V.

napięcie na diodach nadawczych ( między katodą i anodą) wynosi zaledwie 1,1V - tu ciekawostka - do diód mam podłączone oporniki 220 ohm - przed rezystorem napięcie wynosi 4,2V a tuz za nim już 1,1V

napiecie na fototranzystorze dalej waha się miedzy 1v-4v, ale nie udaje mi sie uzyskać skrajnych stanów przy przykladaniu do białej kartki - no ale to pewnie przez te słabo świecace diody

Link do komentarza
Share on other sites

napięcie przed stabilizatorem to 6V, a za stabilizatorem 7805 zamiast 5V jest 4,3V.

napięcie na diodach nadawczych ( między katodą i anodą) wynosi zaledwie 1,1V - tu ciekawostka - do diód mam podłączone oporniki 220 ohm - przed rezystorem napięcie wynosi 4,2V a tuz za nim już 1,1V

napiecie na fototranzystorze dalej waha się miedzy 1v-4v, ale nie udaje mi sie uzyskać skrajnych stanów przy przykladaniu do białej kartki - no ale to pewnie przez te słabo świecace diody

Nie ma w tym nic dziwnego, jeśli używasz zwykłego stablilizatora a nie o niskim spadku napięcia, na takim stabilizatorze jest spadek napięcia około 2V, wniosek, dajesz za małe napięcie zasilające na taki stabilizator. Na diodach masz spadek 1,1V oznacza to, że płynie przez nie mały prąd, poniżej 20mA. I co masz na myśli pisząc skrajnych stanów? Napięcia 1V i 4V spokojnie będą interpretowane jako 0 i 1, jeśli układ, który ma to rozpoznać jest zasilany z napięcia około 5V.

Link do komentarza
Share on other sites

Robot przy programie takim jak 3 posty wyżej zupełnie nie reaguje na światło, nawet jeśli do pinów input dochodzi to napięcie 4V. A co poradzić na ten mały prąd w diodach ? nie wiem czy tak niskie napięcie pozwoli diodzie świecic wystarczająco, by spełniała swoją rolę

Link do komentarza
Share on other sites

To, czy opornik jest przed, czy za diodą nie zmienia kompletnie nic. Poza tym policzyłem sobie na szybko, że prąd płynący przez diodę masz 14mA, czyli w zupełności wystarczający.

Co do funkcji, to ja zazwyczaj piszę taką:

Silnik( unsigned char prędkość, char kierunek )

W bascomie pewnie to jakoś inaczej się zapisuje, ale ogólnie chodzi o to, że dla każdego silnika z osobna jednym poleceniem ustawiam prędkość i kierunek obrotów. W Twoim przypadku prędkości oczywiście nie będzie.

Link do komentarza
Share on other sites

Hejo,
czemu proponujesz podać do funkcji parametr typu char? Ja proponuję zrobić to jeszcze inaczej:

SilnikX(signed int Prędkość)

Wtedy tak jak mówi kolega mactro sterujesz prędkością X-owego silnika, zaś kierunek jego obrotu masz ukryty w znaku parametru Prędkość: jeżeli jest większa od zera, to do przodu, mniejsza - do tyłu.

Pzdr. 🙂

Link do komentarza
Share on other sites

Przepraszam wszystkich, którzy starali mi się pomóc w kwestii elektroniki, gdyż problem okazał się w złym połączeniu dwuprzewodowej tasiemki ze złaczeniami bls ( z vcc i gnd) do goldpinów na płytce głównej, po prostu miałem trzy goldpiny obok siebie i podłaczoną miałem do pierwszego i drugiego zamiast drugiego i trzeciego - taki głupi błąd, że aż nie myślałem, ze moglem to zrobić źle. A już prawie miałem rozlutowywać cały moduł. Teraz już fototranzystor prawidłowo reaguje i wysyła odpowiednie stany do pinów mikrokontrolera.... No i dalej problem z programem.... jeszcze raz dla pewności zmieniłem ten mój poprawiony kod na taki, w którym zamiast tych poleceń warunkowych były tylko różne kombinacje

na przykład

S1=1
S2=0
S3=1
S4=0

Silniki obydwa się kręciły w jedną stronę, czyli tak jak być miało.... innych kombinacji też próbowałem. Natomiast gdy dochodzą te polecenia warunkowe to silniki ani drgną podczas gdy na piny dochodzi napięcie 4V ( stan wysoki/ 1 ). Zmieniłem też ten warunek, w którym wcześniej przy wszystkich trzech stanach wysokich silniki staly - teraz miał w takim wypadku się kręcić jeden a mimo świecenia latarką na wszystkie dalej nic. Komuś coś jeszcze przychodzi do głowy ? może jakiś waitms przy odczycie stanu albo coś jest źle w konfiguracji pinów ( może te input mają mieć stan wysoki) ? ogromne piwo dla wybawcy.

Co do funkcji silników to zrobie je, gdy uda mi się uruchomić jakoś tą elektronikę linefollowera, gdyż priorytetem w tej chwili jest to, by to coś w ogóle ruszyło, a obecne rozwiązanie mimo nie praktycznosci jakoś działa.

[ Dodano: 24-07-2011, 20:18 ]

No i przypominam, ze czujników nie mam podłaczonych tak jak na schemacie w 1 poscie do ADC tylko zwykłych ( pd2,pd3,pd4)... ale to chyba nie wiele zmienia przy tak prostej konstrukcji... W innym temacie przeczytałem taką radę , że pin z resetem podciąga się przez rezystor 10k do vcc. To konieczne ? nie tyle żeby to był dla mnie problem tylko po prostu z ciekawości

[ Dodano: 24-07-2011, 20:31 ]

Przeglądając inne tematy kolejna myśl mnie naszła.... Może to brak filtrowania ? mam tylko 2 kondensatory pociągnięte przed stabilizatorem od + do gnd i za stabilizatorem od + do gnd.

[ Dodano: 25-07-2011, 14:59 ]

nikt nie ma żadnego pomysłu ?

Link do komentarza
Share on other sites

No i w końcu znalazłem problem.

Wy go przeoczyliście, a ja nie wiedziałem, że tak sie powinno robić 🙂

zamiast

Czujnik1 Alias Portd.2
Czujnik2 Alias Portd.3
Czujnik3 Alias Portd.4 

powinno być

Czujnik1 Alias pind.2
Czujnik2 Alias pind.3
Czujnik3 Alias pind.4 

silniki zaczęły reagować na białą powierzchnię 🙂 teraz kwestia poskładania mechaniki

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.