Skocz do zawartości

Linefollower nie działa [AVR]


Kangurek

Pomocna odpowiedź

Hejka, przedwczoraj miałem okazje ( po długim okresie czasu) skończyć projekt robota. Jest nim linefollower. W prawdzie nie wyszedł tak jak na początku go planowałem ale tego już nie będę opisywał. Problem polega na tym, że programuje robota a on nie działa =/ Programuje go w bascomie i jest to stary i prosty program tylko przerobiony na moje potrzeby (tzn. odpowiednie porty itp.). Schemat zaciągnąłem ze strony http://myrobot.ru/stepbystep/r_firstbot2.php i lekko go zmodyfikowałem:

dodałem switch'e do PD0...PD3

oraz czujniki do PD5...PD7 i PB0...PB2

Czujniki to TCRT5000

nie mam żadnego komparatora ponieważ kiedyś jak robiłem (było to na ATtiny2313) to działało bez niego. Może to był błąd jednak wydaje mi sie, że tutaj nie tkwi problem. Program napisałem tak, żeby odczytywał stany z czujników i ze switch'ów i odpowiednio uruchamiał silniczki. Czyli wciskam przycisk 1 i robot jedzie do przodu, 2 do tyłu itd. ta metoda zawiodła. Sprawdzałem sprawność ATmegi8 i działało (sprawdzałem programem ze strony kursc.forbot.pl) jednak kiedy wgrywam program pisany w bascomie to nie działa. Sprawdziłem to też w taki sposób(nie wiem czy dobrze...):

wziąłem woltomierz i dałem plus do plusa a minus do nóżki uC gdzie powinien wysyłać sygnał do uruchomienia silniczków (czyli z tego co wiem powinno sie pojawic napiecie). Niestety nie wysyłał żadnego sygnału.

Oto program do tego robota:

$regfile = "m8def.dat"


Portc = &B11111111
Portd = &B00000000
Portb = &B00000000

'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_prawy1 Alias Pind.5
Sensor_prawy2 Alias Pind.6
Sensor_srodkowy Alias Pind.7
Sensor_przedni Alias Pinb.0
Sensor_lewy1 Alias Pinb.1
Sensor_lewy2 Alias Pinb.2
Przycisk_1 Alias Pind.0
Przycisk_2 Alias Pind.1
Przycisk_3 Alias Pind.2
Przycisk_4 Alias Pind.3

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




  If Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

        Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Tyl

        Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

        Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

        Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

        Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 1 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 1 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 1 And Sensor_prawy1 = 0 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Lewo

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Lewo

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Lewo

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prawo

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prawo

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 1 Then
     Gosub Prawo

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 1 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 0 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 0 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 1 And Sensor_lewy2 = 1 And Sensor_srodkowy = 0 And Sensor_przedni = 0 And Sensor_prawy1 = 1 And Sensor_prawy2 = 1 Then
     Gosub Prosto

         Elseif Sensor_lewy1 = 0 And Sensor_lewy2 = 0 And Sensor_srodkowy = 1 And Sensor_przedni = 0 And Sensor_prawy1 = 0 And Sensor_prawy2 = 0 Then
     Gosub Prosto

  End If

  If Przycisk_1 = 1 Then
     Gosub Prosto
        Elseif Przycisk_2 = 1 Then
     Gosub Tyl
        Elseif Przycisk_3 = 1 Then
     Gosub Prawo
        Elseif Przycisk_4 = 1 Then
     Gosub Lewo
  End If
Loop

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

Return
Prawo:
Motor_lt = 0
Motor_pt = 1

Return
Lewo:
Motor_lt = 1
Motor_pt = 0
Return

PS. Proszę o cierpliwość i wyrozumiałość do mnie. 🙂

Link do komentarza
Share on other sites

Czemu nie ma

$crystal=xxxxxxx

Jakie są objawy jego niedziałania? Na jakiej wysokości masz czujniki? Działają ci? Sprawdź za pomocą kamery (np. z telefonu).

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Diody ir świecą a czujniki sprawdzalem na różnych wysokościach. Po za tym zamiast czujników mam tez zwykłe switche, które działają. Połączyłem też nóżki tranzystorów tzn żeby prąd przepływał ale to i tak nie pomogło. A co do tego kodu to gdzie mam umieścić tę wstawkę co napisałeś?? Bo ja nie jestem dobry w bascomie z reszta nauczyłem się tylko tyle żebym mógł przerobić kod, który zapożyczyłem od innego projektu. Więc nie mogę powiedzieć, że potrafię programować jednak trochę wiem co i jak.

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

Tam gdzie $regfile = m8def.dat, przed lub po tym.

Jeśli nie zminiałeś fusebitów wpisz:

$crystal = 1000000

dla kwarcu odpowiednio 2, 4, 8, 12, 16 MHz wpisz:

$crystal = 1000000
$crystal = 2000000
$crystal = 4000000
$crystal = 8000000
$crystal = 12000000
...

itd.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

A także nie masz konfiguracji wejść/wyjść... a to ważne i dlatego nie działa program 😉

A to nie jest konfiguracja wejść/wyjść??

Portc = &B11111111
Portd = &B00000000
Portb = &B00000000 

Wpisałem to

$crystal = 4000000 

Bo mam kwarc 8MHz

Niestety nadal nie działa

[ Dodano: 06 Gru 09 10:34 ]

Aaa i jeszcze jedno:

układ l293d się lekko nagrzewa, ale wydaje mi się, że to jest normalne...

Link do komentarza
Share on other sites

DDRc = &B11111111
DDRd = &B00000000
DDRb = &B00000000 

To jest konfiguracja wejść wyjść (1- wyjście, 0 wejście)

To co Ty napisałeś, to konfiguracja pull'upów.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Wpisałem to

Kod:

$crystal = 4000000

Bo mam kwarc 8MHz

Niestety nadal nie działa

Miałeś przedrostki na fizyce? 1M = milion, 8Mhz to 8.000.000hz, a nie 4.000.000hz, jak wpisałeś w programie.

Zmieniałeś fusebity? Pewnie podłączyłeś kwarc bez ich zmiany i myślisz że masz 8Mhz. Jak nic nie zmieniałeś to masz 1Mhz = 1.000.000hz (wpisujesz $crystal - 1000000).

Tak jak napisał kuczus, nie skonfigurowałeś weejść/wyjść, podałeś tylko stany jakie mają być na portach. wejścia/wyjścia można ustawić pojedynczo w następujący sposób:

Config Pind.2 = input                    'pind.2 jako wejście

Config Pind.2 = output                   'pind.2 jako wyjście

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Co do tych przedrostków to wiem jakie są i też mi nie pasowało jednak kolega napisał kolejno. Fakt jest taki, że myślałem żeby to jeszcze zmienić ale potem jakoś mi to wyleciało z głowy... Teraz sprawdzę to co napisaliście i za chwilkę napiszę odpowiedź czy działa

[ Dodano: 07 Gru 09 05:09 ]

OK Wszystko działa tak jak należy. Wielkie dzięki 😃

Link do komentarza
Share on other sites

Dla samego działania programu inna wartość "crystal" - kwarcu, nie była rażąca. Głównym błędem był brak konfiguracji portów.

Pozdrawiam i ciesze się że działa (do zobaczenia w elho - hehe)

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.