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

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

Link do komentarza
Share on other sites

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

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.