Skocz do zawartości

Problem BASCOM


Felipe

Pomocna odpowiedź

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 🙂

Link do komentarza
Share on other sites

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.

  • Lubię! 1
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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

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

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

  • Lubię! 1
Link do komentarza
Share on other sites

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 🙂😃😅

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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