Skocz do zawartości

Proszę o pomoc z programem


bart989

Pomocna odpowiedź

Zbliżają się Bydgoskie walki robotów i mam mały problem z programem. Stosuje płytkę otrzymaną od UTP, ale napisałem do niej własny program, czy ktoś może mi wytłumaczyć gdzie jest błąd. Przy kompilowaniu nie wyrzuca błędów zgrywa się na płytkę też poprawnie jednak płytka nie reaguje na żaden z czujników.

$regfile = "m32def.dat"
$crystal = 14000000

Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Config Pina.3 = Input

Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input

Config Pinc.0 = Input
Config Pinc.1 = Input

Config Pind.4 = Input
Config Pind.5 = Input

Config Pinb.5 = Output
Config Pinb.7 = Output

Config Pind.2 = Output
Config Pind.3 = Output

Config Servos = 2 , Servo1 = Portd.5 , Servo2 = Portd.4 , Reload = 5

Dist1 Alias Pina.0                                          'Lewy przedni
Dist2 Alias Pina.1                                          'Prawy przedni
Dist3 Alias Pina.2                                          'Lewy tylni
Dist4 Alias Pina.3                                          'Prawy tylni

Grd1 Alias Pinb.0                                           'Lewy przedni
Grd2 Alias Pinb.1                                           'Prawy przedni
Grd3 Alias Pinb.2                                           'Lewy tylni
Grd4 Alias Pinb.3                                           'Prawy tylni

Sil1k Alias Pinc.0                                          'Kierunek silnika 1 0to do przodu 1 do tyłu
Sil2k Alias Pinc.1                                          'Kierunek silnika 2
Sil1m Alias Pind.4                                          'Moc silnika 1
Sil2m Alias Pind.5                                          'Moc silnika 2


Config Watchdog = 1024

Start Watchdog

Enable Interrupts


Reset Porta.0
Reset Porta.1
Reset Porta.2
Reset Porta.3
Reset Portb.0
Reset Portb.1
Reset Portb.2
Reset Portb.3


Poczatek:

Waitms 5000

Do

Restartpetli:

'sprawdzanie groundow

If Grd1 = 1 And Grd2 = 0 And Grd3 = 0 And Grd4 = 0 Then

Sil1k = 0
Sil2k = 0
Servo(1) = 50
Servo(2) = 25

Waitms 50
Goto Restartpetli

End If

If Grd1 = 1 And Grd2 = 1 And Grd3 = 0 And Grd4 = 0 Then

Sil1k = 0
Sil2k = 0
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Grd1 = 0 And Grd2 = 1 And Grd3 = 0 And Grd4 = 0 Then

Sil1k = 0
Sil2k = 0
Servo(1) = 25
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Grd1 = 0 And Grd2 = 0 And Grd3 = 1 And Grd4 = 0 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 50
Servo(2) = 25

Waitms 50
Goto Restartpetli

End If

If Grd1 = 0 And Grd2 = 0 And Grd3 = 1 And Grd4 = 1 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Grd1 = 0 And Grd2 = 0 And Grd3 = 0 And Grd4 = 1 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 25
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Grd1 = 1 And Grd2 = 0 And Grd3 = 1 And Grd4 = 0 Then

Sil1k = 0
Sil2k = 1
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Grd1 = 0 And Grd2 = 1 And Grd3 = 0 And Grd4 = 1 Then

Sil1k = 1
Sil2k = 0
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

'DISTY

If Dist1 = 0 And Dist2 = 0 And Dist3 = 0 And Dist4 = 0 Then

Sil1k = 1
Sil2k = 0
Servo(1) = 20
Servo(2) = 20

Waitms 50
Goto Restartpetli

End If

If Dist1 = 1 And Dist2 = 0 And Dist3 = 0 And Dist4 = 0 Then

Sil1k = 0
Sil2k = 0
Servo(1) = 20
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Dist1 = 1 And Dist2 = 1 And Dist3 = 0 And Dist4 = 0 Then
Sil1k = 0
Sil2k = 0
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Dist1 = 0 And Dist2 = 0 And Dist3 = 1 And Dist4 = 0 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 20
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

If Dist1 = 0 And Dist2 = 0 And Dist3 = 0 And Dist4 = 1 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 50
Servo(2) = 20

Waitms 50
Goto Restartpetli

End If

If Dist1 = 0 And Dist2 = 0 And Dist3 = 1 And Dist4 = 1 Then

Sil1k = 1
Sil2k = 1
Servo(1) = 50
Servo(2) = 50

Waitms 50
Goto Restartpetli

End If

Loop

End

SUMO2M.pdf

sumo_base_4.pdf

Link do komentarza
Share on other sites

Pierwszy grzech młodych programistów.

- używanie instrukcji goto zamiast zapisu proceduralnego.

- po co używasz WATCH DOGa, który pewnie restartuje ci procesor ? To owszem jest rodzaj timera, ale do zastosowań specjalnych.

- odblokowujesz system przerwań, ale nie odblokowujesz żadnego wektora przerwań instrukcją Enable xxxx.

itd. itd..

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

Nie dokońca rozumiem Wasze wskazówki.

Problem jest taki, że nie ja to pisałem, a gość który teoretycznie się na tym zna i to napisał teraz się ulotnił i nie mam się gdzie z tym zwrócić.

Mam książkę Piotra Góreckiego "Mikrokontrolery dla początkujących" trochę poczytałem, ale wciąż mam problemy, więc gdyby ktoś mógł odrobinę bardziej łopatologicznie to byłbym wdzięczny.

Link do komentarza
Share on other sites

🙂

Problem jest taki, że nie ja to pisałem, a gość który teoretycznie się na tym zna i to napisał teraz się ulotnił i nie mam się gdzie z tym zwrócić.

Jak myślisz czemu się ulotnił ?

Ogólnie program jest tak napisany że woła o pomstę do nieba. Ale szczerze mówiąc, jak bym miał poświęcić 2h na próbę reanimacji tego czegoś, to wolałbym napisać nowy program od zera.

Szybciej napiszesz sam nowy program z książką w ręku niż ożywisz to coś. A przynajmniej czegoś się nauczysz.

Ja rozumiem, że jesteś osobą początkującą, ale tym bardziej powinieneś sam spróbować to zrobić. Pomału krok po kroku, a nie ze stoperem w ręku, bo za tydzień są zawody.

Co jest największym błędem początkujących ?

1. Nie posiadają wiedzy o podstawach (tak elektroniki jak i programowania) i próbują od razu stworzyć kompletny działający program.

2. Patrz punkt 1.

Programowanie ma to do siebie że nie da się ogarnąć wszystkiego na raz. Napisałem że grzechem jest instrukcja Goto, bo jest i to ciężkim. Po pierwsze znacznie utrudnia analizę programu i powoduje że staje się on nieczytelny. a źle używana, powoduje często jego zawieszanie.

Dla tego należy zainteresować się, procedurami i funkcjami, które dzielą program na logiczne bloki funkcyjne, takie klocki które łączymy ze sobą, jak klocki Lego, aby zbudować interesujący nas pojazd.

Jak zaczynasz, weź sobie książkę najpierw opanuj podstawy, jak prosty START/STOP na jednej diodzie LED. Potem jak poznasz procedury i funkcje, Timery, przerwania, moduły sprzętowe, sam zrobisz sobie klocki w postaci procedur, z których zbudujesz swój pierwszy poważny program.

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.