Skocz do zawartości

[Bascom] Błędny program dla Linefollowera


Kangurek

Pomocna odpowiedź

Witam, nie działa mi poprawnie program napisany w BASCOMIE =/ Docelowo ma być dla line followera, jednak przerobiłem go na prosty, bo nawet taki mi nie działa. W czym może być problem?

$regfile = "m8def.dat"

$crystal = 1000000

Portc = &B11111111

Portd = &B00000000

DDRc = &B11111111

Ddrd = &B00000000

'lp - lewy przód, lt - lewy tył, pp - prawy przód, pt - lewy tył

Motor_lt Alias Portc.3

P1 Alias Pind.0

'Polecenia wydawane na podstawie stanów wejściowych:

Do

If P1 = 1 Then

Gosub Prosto

Elseif P1 = 0 Then

Gosub Tyl

End If

Loop

Return

Prosto: 'Tryby pracy silników dla poszczególnych ruchów

Motor_lt = 1

Return

Tyl:

Motor_lt = 0

Return

Link do komentarza
Share on other sites

$regfile = "m8def.dat"

$crystal = 8000000

Config Portd = Input

Portd = &B00000000

Config Portc = Output

Portc = &B000000

Do

If Pind.0 = 1 Then

Portc.3 = 1

Elseif Pind.1 = 0 Then

Portc.3 = 0

End If

Loop

End

Teraz powinno być dobrze ale niestety nic nie reaguje =/

[ Dodano: 05-03-2011, 14:16 ]

Dodam tylko że programując w C prosty program mrugajacej diody wszystko działa, więc to nie wina układu.

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

Ok, działa i teraz do programu do robota wystarczy dopisać to samo tylko na piny od czujników?

[ Dodano: 06-03-2011, 21:08 ]

PS. Pytam profilaktycznie bo bede to mógł sprawdzić dopiero jak mi dojdzie układ L293D z allegro bo ten co mialem to sie przepalił 🙂

Link do komentarza
Share on other sites

Kangurek, możesz wpisywać też bezpośrednio jakby: np. PORTD.110101. Jest to wymagane, jeśli pin miałby wisieć w powietrzu, często inne czujniki wystawiają prawdziwe 1 (vcc, a nie odpięcie od gnd). Ale ogólnie to prawie na pewno nie zaszkodzi.

Link do komentarza
Share on other sites

Czyli tak powinien wygladać wstęp do programu??

$regfile = "m8def.dat"

$crystal = 8000000

Config Portd = Input

Portd = &B00000000

PORTD =11111111

Config Portb = Input

Portb = &B00000000

PORTB=11111111

Config Portc = Output

Portc = &B000000

'lp - lewy przód, lt - lewy tył, pp - prawy przód, pt - lewy tył

Motor_lp Alias Portc.4

Motor_lt Alias Portc.3

Motor_pp Alias Portc.2

Motor_pt Alias Portc.1

Sensor_prawy2 Alias Pind.5

Sensor_prawy1 Alias Pind.6

Sensor_srodkowy Alias Pind.7

Sensor_przedni Alias Pinb.0

Sensor_lewy1 Alias Pinb.1

Sensor_lewy2 Alias Pinb.2

P1 Alias Pind.0

P2 Alias Pind.1

P3 Alias Pind.2

P4 Alias Pind.3

Link do komentarza
Share on other sites

Config Portd = Input

Portd = &B00000000

PORTD =11111111

Rozumiem, że chodzi o ustawienie wszystkich portów jako input i podłączenie pull-up'a?

W takim razie wystarczy:

config portd = input '(opcjonalnie config portd = &B00000000)

portd = &B11111111

Link do komentarza
Share on other sites

Ten program działa

$regfile = "m8def.dat"

$crystal = 8000000

Config Portd = Input

Portd.0 = 1

Config Portc = Output

Portc = &B000000

Do

If Pind.0 = 1 Then

Portc.3 = 1

Elseif Pind.1 = 0 Then

Portc.3 = 0

End If

Loop

End

Natomiast ten już nie =/

$regfile = "m8def.dat"

$crystal = 8000000

Config Portd = Input

Portd = &B11111111

Config Portc = Output

Portc = &B000000

Do

If Pind.0 = 1 Then

Portc.3 = 1

Elseif Pind.1 = 0 Then

Portc.3 = 0

End If

Loop

End

I żadne inne ustawienia portów nie działają. Tzn dopiszę

Portd.1 = 1

albo

Portd = &B10000000

To już program zaczyna wariować. Tzn silniczek się kręci, ale jak naciskam przyciski to zero reakcji.

Link do komentarza
Share on other sites

Kangurek, w ogóle w dziwny sposób używasz polecenia Elseif. Według mnie dotyczyć ono powinno tego samego pinu, a ty w Elseif chcesz sprawdzać zupełnie inny pin, najpierw sprawdzasz Pind.0 (w pierwszym If'ie) za to w Elseif sprawdzasz już Pind.1 a powinieneś sprawdzać zgodnie z logiką Pind.0.

Na sprawdzanie różnych pinów powinieneś używać wielokrotnego If'a.

Link do komentarza
Share on other sites

Moja wiedza jest zaczerpnięta z kursu bascoma na tej stronie, tam jest używane elseif (z reszta to właściwie kopia programu z tego kursu). Ale jak programuje na 4 przyciski (bo niestety nie mam czujników bo sie zepsuły) tzn kod wygląda tak:

If P1 = 1 and P2 = 0 and P3 = 0 and P4 =0 Then 
Gosub Prosto
elseif P1 = 0 and P2 = 1 and P3 = 0 and P4 =0 Then 
Gosub Tyl

I tak dalej, to też mi to nie działa =/

[ Dodano: 10-03-2011, 20:38 ]

Ok, już doszedłem do sedna sprawy. Nie działa mi P4, przez co zaprogramowany program działał źle a właściwie to nie działał. Teraz wszystko śmiga jak należy, i przy okazji dowiedziałem się paru różnych rzeczy na temat programowania. Też myślałem że w komendzie PORTD = &B11111111 od lewej liczy od PD0 a jest dokładnie na odwrót i od prawej jest PD0 itd.

Oto kod programu jakby ktoś miał podobne problemy:

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

Config Portd = Input
Portd = &B00000111
Config Portc = Output
Portc = &B000000

Motor_lp Alias Portc.4
Motor_lt Alias Portc.3
Motor_pp Alias Portc.2
Motor_pt Alias Portc.1
P1 Alias Pind.0
P2 Alias Pind.1
P3 Alias Pind.2

Do

If P1 = 0 And P2 = 1 And P3 = 1 Then
Gosub Prosto
Elseif P1 = 1 And P2 = 0 And P3 = 1 Then
Gosub Tyl
Elseif P1 = 1 And P2 = 1 And P3 = 1 Then
Gosub Stoj
End If

Loop

Return
Prosto:                                                     'Tryby pracy silników dla poszczególnych ruchów
Motor_lt = 1
Motor_pt = 1
Motor_lp = 0
Motor_pp = 0
Return
Tyl:
Motor_lt = 0
Motor_pt = 0
Motor_lp = 1
Motor_pp = 1

Return
Prawo:
Motor_lt = 0
Motor_pt = 1
Motor_lp = 0
Motor_pp = 0
Return
Lewo:
Motor_lt = 1
Motor_pt = 0
Motor_lp = 0
Motor_pp = 0
Return
Stoj:
Motor_lt = 0
Motor_pt = 0
Motor_lp = 0
Motor_pp = 0
Return
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.