Felipe Napisano Sierpień 19, 2009 Udostępnij Napisano Sierpień 19, 2009 Witam, jest to mój pierwszy post więc się przedstawię, nazywam się Filip i jestem w początkującym elektronikiem. Więc Proszę was o pomoc, bo nie wiem jaki jest błąd w programie do mojego pierwszego robota robota(LineFollowera): ' LineFollower 1.00 Dim One As Byte Config Portb = Output Portb = &B11111111 Config Portd = Input Portd = &B1111111 If Portd = &B1000011 Then One = 1 '0 If Portd = &B1000111 Then One = 2 '1 If Portd = &B1001011 Then One = 4 '2 If Portd = &B1001111 Then One = 2 '3 If Portd = &B1010011 Then One = 4 '4 If Portd = &B1010111 Then One = 1 '5 If Portd = &B1011011 Then One = 4 '6 If Portd = &B1011111 Then One = 1 '7 If Portd = &B1100011 Then One = 3 '8 If Portd = &B1100111 Then One = 1 '9 If Portd = &B1101011 Then One = 1 '10 If Portd = &B1101111 Then One = 1 '11 If Portd = &B1110011 Then One = 3 '12 If Portd = &B1110111 Then One = 1 '13 If Portd = &B1111011 Then One = 1 '14 If Portd = &B1111111 Then One = 1 '15 Select Case One Case 1: Portb = &B11111111 'Robot stoi Case 2: Portb = &B10111111 'Robot w lewo Case 3: Portb = &B11101111 'Robot w prawo Case 4: Portb = &B10101111 'Robot jedzie do przodu End Select Return End Program jest napisany dla uC AT90S2313 PB.7, 6, 5, 4 to wyjścia do scalonego mostka H(L293D), a PD.2, 3, 4, 5 to wejścia do czujnika linii. Z góry wielkie dzięki 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
pawel Sierpień 20, 2009 Udostępnij Sierpień 20, 2009 Najprawdopodobniej jeżeli zapiszesz te instrukcje warunkowe w ten sposub to będzie działało. If Portd = &B1000011 Then One = 1 '0 If Portd = &B1000111 Then One = 2 '1 If Portd = &B1001011 Then One = 4 '2 If Portd = &B1001111 Then One = 2 '3 If Portd = &B1010011 Then One = 4 '4 If Portd = &B1010111 Then One = 1 '5 If Portd = &B1011011 Then One = 4 '6 If Portd = &B1011111 Then One = 1 '7 If Portd = &B1100011 Then One = 3 '8 If Portd = &B1100111 Then One = 1 '9 If Portd = &B1101011 Then One = 1 '10 If Portd = &B1101111 Then One = 1 '11 If Portd = &B1110011 Then One = 3 '12 If Portd = &B1110111 Then One = 1 '13 If Portd = &B1111011 Then One = 1 '14 If Portd = &B1111111 Then One = 1 '15 Bascom ma trochę "upośledzony" kompilator więc wymaga odpowiedniej formy zapisu kodu, w innym przypadku jest dla niego nieczytelny. 1 Cytuj Link do komentarza Share on other sites More sharing options...
mskojon Sierpień 20, 2009 Udostępnij Sierpień 20, 2009 Jedyna rzecz jaką zauważyłem to brak pętli (Do...Loop). pawel, tamten sposób też jest dobry, są to proste warunki, tylko z jedną instrukcją. Felipe, testowałeś już ten program w swoim robocie? Cytuj Link do komentarza Share on other sites More sharing options...
Felipe Sierpień 20, 2009 Autor tematu Udostępnij Sierpień 20, 2009 Tak, testowałem go w moim robocie i żadnej reakcji silników. Teraz gdy wgrałem nowy program zrobiłem pomiary multimetrem i sygnał z czujnika dochodzi( stan 0 = 1,76V, stan 1 = 5,26V ), a już na wyjściu do mostka H nie ma żadnej zmiany wszystkie bity mają stan 1, może powinienem użyć rezystorów podciągających?? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Nawyk Sierpień 20, 2009 Udostępnij Sierpień 20, 2009 Podstawowa sprawa - nie If portd...., tylko If pind! Pytanie - czy skopiowałeś tutaj cały blok programu? Bo brakuje paru rzeczy, jak chociażby wspomniane Do...Loop. Zmylił mnie też return, jaką on pełni tam funkcję? OK, chciało mi się - ja to widzę tak: $regfile = "2313def.dat" $crystal = 1000000 Dim One As Byte Config Portb = Output Portb = &B11111111 Config Portd = Input Do If Pind = &B0000011 Then One = 1 Elseif Pind = &B0000111 Then One = 2 Elseif Pind = &B0001011 Then One = 4 Elseif Pind = &B0001111 Then One = 2 Elseif Pind = &B0010011 Then One = 4 Elseif Pind = &B0010111 Then One = 1 Elseif Pind = &B0011011 Then One = 4 Elseif Pind = &B0011111 Then One = 1 Elseif Pind = &B0100011 Then One = 3 Elseif Pind = &B0100111 Then One = 1 Elseif Pind = &B0101011 Then One = 1 Elseif Pind = &B0101111 Then One = 1 Elseif Pind = &B0110011 Then One = 3 Elseif Pind = &B0110111 Then One = 1 Elseif Pind = &B0111011 Then One = 1 Elseif Pind = &B0111111 Then One = 1 End if Select Case One Case 1: Portb = &B11111111 'Robot stoi Case 2: Portb = &B10111111 'Robot w lewo Case 3: Portb = &B11101111 'Robot w prawo Case 4: Portb = &B10101111 'Robot jedzie do przodu Case Else: Portb = &B10101111 'Robot jedzie do przodu End Select Loop End Zobacz czy działa, kompiluje się bez błędu. XX.rar 1 Cytuj Link do komentarza Share on other sites More sharing options...
Felipe Sierpień 20, 2009 Autor tematu Udostępnij Sierpień 20, 2009 Działa!!! 😃 Nawyk, miałeś racje to wina tego, że zamiast PIND dawałem PORTD. I tak mi się wcześniej nie chciało skompilować bez END IF. Teraz program wygląda tak: ' LineFollower 1.00 Dim One As Byte Config Portb = Output Portb = &B11111111 Config Portd = Input Portd = &B1111111 Do If Pind = &B1000011 Then One = 1 '0 End If If Pind = &B1000111 Then One = 2 '1 End If If Pind = &B1001011 Then One = 4 '2 End If If Pind = &B1001111 Then One = 2 '3 End If If Pind = &B1010011 Then One = 4 '4 End If If Pind = &B1010111 Then One = 1 '5 End If If Pind = &B1011011 Then One = 4 '6 End If If Pind = &B1011111 Then One = 1 '7 End If If Pind = &B1100011 Then One = 3 '8 End If If Pind = &B1100111 Then One = 1 '9 End If If Pind = &B1101011 Then One = 1 '10 End If If Pind = &B1101111 Then One = 1 '11 End If If Pind = &B1110011 Then One = 3 '12 End If If Pind = &B1110111 Then One = 1 '13 End If If Pind = &B1111011 Then One = 1 '14 End If If Pind = &B1111111 Then One = 1 '15 End If Select Case One Case 1: Portb = &B11111111 'Robot stoi Case 2: Portb = &B10111111 'Robot w lewo Case 3: Portb = &B11101111 'Robot w prawo Case 4: Portb = &B10101111 'Robot jedzie do przodu End Select Loop End Jak go skończę to zamieszczę go na forum. Wielkie dzięki bardzo mi pomogliście 🙂😃😅 Cytuj Link do komentarza Share on other sites More sharing options...
Nawyk Sierpień 20, 2009 Udostępnij Sierpień 20, 2009 Trochę w tym czasie "apdejtowałem" mój post, sprawdź z ciekawości czy mój kod śmiga, bo i tak dziwne wydają mi się te braki deklaracji procka, zegara itd... Cytuj Link do komentarza Share on other sites More sharing options...
Felipe Sierpień 20, 2009 Autor tematu Udostępnij Sierpień 20, 2009 Twój program nie działa silniki kręcą się niezależnie od czujnika. A propo tych deklaracji to wszystko można ustawić w opcjach Menu>Options>Compiler>Chip. 😃 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!