Skocz do zawartości
epsilon

[bascom] Kod do line followera + PWM

Pomocna odpowiedź

Witam... Mam taki problem, zbudowałem line followera, chciałem go dziś zaprogramować (jest to mój pierwszy program) i nie działa... Program pisałem w dużych odstępach czasowych, więc pewnie o czymś zapomniałem... Sprawdzałem kilka wersji programu, wgrałem nawet program testowy (tzw. migacz - działa, więc programator i Attiny2313 jest ok). Mam pomysł, ze może to leżeć w ustaleniach dotyczących poszczególnych pinów uC. Wszystkie połączenia na płytce sprawdziłem poprzez diodę z rezystorem i oddzielne źródło zasilania - wszystko sprawne.

Oto schemat:

i kod:


$regfile = "attiny2313.dat"                                 'procesor
$crystal = 8000000                                          'oscylator

Config Portd = &B00000010                                   ' wyznaczenie wyjść i wejść portu D
Portd = &B00000000                                          ' stan spoczynkowy portu D

Config Portb = &B0100000                                    ' wyznaczenie wyjść i wejść portu B
Portb = &B00000000                                          'stan spoczynkowy portu B

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64       'PWM

S_01 Alias Portd.3
S_02 Alias Portd.2
S_03 Alias Portd.5

Led Alias Portd.0


Do

  If S_01 = 0 And S_02 = 1 And S_03 = 0 Then               'jedz do przodu
     Gosub Go

   Elseif S_01 = 1 And S_02 = 1 And S_03 = 1 Then          'jedz do przodu
     Gosub Go

   Elseif S_01 = 1 And S_02 = 1 And S_03 = 0 Then          'skręć w lewo
     Gosub Lewo

   Elseif S_01 = 1 And S_02 = 0 And S_03 = 0 Then          'skręć w lewomocno
     Gosub Lewomocno

   Elseif S_01 = 0 And S_02 = 0 And S_03 = 1 Then          'skręć w prawomocno
     Gosub Prawomocno

   Elseif S_01 = 0 And S_02 = 1 And S_03 = 1 Then          'skręć w prawo
     Gosub Prawo

   Elseif S_01 = 0 And S_02 = 0 And S_03 = 0 Then          'stoj
     Gosub Stoj


  End If

Loop


Go:
Pwm1a = 255
Pwm1b = 255
Led = 1
Return

Lewo:
Pwm1a = 255
Pwm1b = 150
Led = 0
Return

Lewomocno:
Pwm1a = 255
Pwm1b = 50
Led = 0
Return

Prawo:
Pwm1a = 150
Pwm1b = 255
Led = 0
Return

Prawomocno:
Pwm1a = 50
Pwm1b = 255
Led = 0

Stoj:
Portb.1 = 0
Portb.6 = 0
Led = 1
Return

Edit: Bascom AVR również nie wyświetla błędów. Pozdrawiam 😉

Udostępnij ten post


Link to post
Share on other sites

Mam już teraz lekko wyłączony mózg, ale masz błąd chyba w instrukcjach bloków warunkowych, nie powinineś używać "and", bo to operator logiczny (vide algebra boole'a)

Udostępnij ten post


Link to post
Share on other sites

Schemat jest kopnięty (swoją drogą nie oszczędzaj na rozdzielczości, nie każdy ma taki dobry wzrok..). Odwrotnie podłączyłeś komparatory.

Powinno być tak:

gdzie SENSOR1 to pin uC skonfigurowany jako Input.

(fragment schematu nieznanego autorstwa, mam nadzieję, że nikt się nie obrazi)

Zasilanie komparatora podpięte do procka? Nietrzeźwo już myślę, ale nie gra mi to wszystko...Niech mnie ktoś poprawi..

Udostępnij ten post


Link to post
Share on other sites

Moim zdaniem zupełnie nie zgadza się schemat w okolicach wzmacniacza operacyjnego. W załączniku fragment z datasheeta - piny są zupełnie inne niż na schemacie...

Ale co ciekawe jak nie patrząc na schemat poczytamy numery pinów i porównamy z datasheetem, to wygląda to lepiej niż schemat. Coś tu pomyliłeś 🙂

Ja bym radził zacząć od poprawienia schematu, bo ciężko teraz powiedzieć o co chodzi.

Udostępnij ten post


Link to post
Share on other sites

ale ja użyłem tego kompilatora tylko do schametu, w rzeczywistości jest to LM324N a piny wzorowałem na schemacie właśnie z postu Nawyka... ja odrzuciłem tylko Ledy... ale jest to ten schemat tylko w nieco innym wydaniu, ponieważ LM324 nie mialem w bibliotece Eagle.

Udostępnij ten post


Link to post
Share on other sites

Zaciekawiło mnie o co w schemacie chodzi. Postanowiłem przerysować po swojemu.

LM324 jest w standardowej bibliotece Eagle, nie powinno być problemu.

Moje uwagi:

1) Czy podłączyłeś masę do pinu 11 LM324 ? (na schemacie brak)

2) Czy masz rezystory podłączone do fototranzystorów?

Jeśli wszystko masz, to proponuję napisać program, który będzie świecił LED-em, gdy na PD3 odczyta 1, gasił gdy 0. Wtedy będziesz mógł sprawdzić, czy czujniki działają.

Udostępnij ten post


Link to post
Share on other sites

1) na schemacie nie ma, w rzeczywistości jest ta ścieżka (to taki mój schemat na którego pod stawie robiłem plytkę, więc moga być małe niedociągnięcia)

2) są to rezystory 10k

dziś wyniknęły problemy z taśmą łączącą obie płytki. Prosiłbym o sprawdzenie stany pinów, bo sądzę, że tam może być błąd.

Edit:

sprawdziłem tak jak mówi Elvis - dioda świeci cały czas nawet jak wyjmuje wzmacniacz

Udostępnij ten post


Link to post
Share on other sites

Jak wyjmujesz wzmacniacz, to powinna świecić (o ile włączyłeś pullupy w procku).

Proponuję kolejny test:

Odłącz fototranzystor (zostaw tylko pullup) - dioda powinna zgasnąć.

Poźniej przyda się multimetr, mam nadzieję że masz pod ręką?

Udostępnij ten post


Link to post
Share on other sites

odłączałem już kabel łączący obie płytki do tego zasłaniałem wszystkie fototranzysotry po kolei

Udostępnij ten post


Link to post
Share on other sites

Później proponuję sprawdzić następująco:

Odłączyć fototranzystor, zamiast niego łatwiej zwierać obwód.

1) Podłączyć multimetr do pinu 2 wzmacniacza. Powinien wskazywać ok. 5V

2) Zewrzeć miejsce po fototranzystorze, powinien wskazywać 0V

3) Podłączyć multimetr do pinu 3, potencjometrem ustawić napięcie na 2,5V

4) Podłączyć multimetr do pinu 1 wzmacniacza, powinien wskazywać 0V, dioda nie powinna świecić

5) Zewrzeć miejsce po fototranzystorze, multimetr powinien wskazać 5V, dioda świecić

Udostępnij ten post


Link to post
Share on other sites

sprawdziłem, nic nie działa tak jak należy, sądzę że to jakiś błąd w PCB przy komparatorze, tak wiec pozostało mi tylko pobawić się w programowanie trasy, ewentualnie kilka drobnych zworek, krańców i robot omijający przeszkody ;] nie spodziewałem się, że mój pierwszy LF będzie działać od razu ;d

Udostępnij ten post


Link to post
Share on other sites

Ja bym się nie poddawał. Nie ma takiej płytki, której "na pająku" nie da się uruchomić. A przy najmniej będzie wiadomo co poprawić w następnej.

Udostępnij ten post


Link to post
Share on other sites

ale nie spodziewałem się wielkich efektów przy pierwszym programie, a płytka może służyć do testów podwozia, bo raczej driver jest ok, więc spoko 😉 ale mam nauczkę, ze nie można się rzucać od razu na głęboką wodę ;]

Udostępnij ten post


Link to post
Share on other sites

Można, ja też zrobiłem jako pierwszego robota linefollowera 🙂, dlaczego nie, inni robią np hexapody na pierwszego robota a efekty widać tu na diodzie. Wszystko jest kwestią samozaparcia i staranności w tym co się robi.

Udostępnij ten post


Link to post
Share on other sites

ale Ty miałeś już jakieś obycie z elektroniką etc. koniec offtopa ;]

Udostępnij ten post


Link to post
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...