Skocz do zawartości

[ Bascom] Co źle napisałem? Line follower Pwm


coollerus

Pomocna odpowiedź

To co w temacie. Bascom go nie kompiluje...

A to jest program:

 $regfile = "attiny2313.dat"
$crystal = 10000000
'$noramclear


Config Portb = &B11111101
Portb = &B00000010

Config Portd = &B00000000
Portd = &B00000000


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

Sensor_1 Alias Pind.3
Sensor_2 Alias Pind.4
Sensor_3 Alias Pind.5
Sensor_4 Alias Pind.2


Do
If Portb.6 = 1 Then Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 And Pind.2 = 0       'przełącznik

End If
Loop



Do

If Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Go

Elseif Sensor_1 = 1 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosublewo

Elseif Sensor_1 = 0 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Lewo_1

Elseif Sensor_1 = 0 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Lewo_1

Elseif Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 0 And Sensor_4 = 1 Then Gosub Prawo

Elseif Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 0 Then Gosub Prawo_1

Elseif Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 0 And Sensor_4 = 0 Then Gosub Prawo_1

Elseif Sensor_1 = 0 And Sensor_2 = 0 And Sensor_3 = 0 And Sensor_4 = 0 Then Gosub Lewo_1

End If
Loop



Go:
Pwm1a = 255
Pwm1b = 255
Return

Lewo:
Pwm1a = 255
Pwm1b = 150
Return

Lewo_1:
Pwm1a = 255
Pwm1b = 50
Return

Prawo:
Pwm1a = 150
Pwm1b = 255
Return

Prawo_1:
Pwm1a = 50
Pwm1b = 255
Return

A to schemat. Co prawda bez pwm (na płytce mam):

Czujniki ustawione są w lini prostej.

Dzięki za pomoc.

Link do komentarza
Share on other sites

Zamiast

Elseif Sensor_1 = 1 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosublewo 

To powinno być

Elseif Sensor_1 = 1 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub lewo 
Link do komentarza
Share on other sites

$regfile = "attiny2313.dat"
$crystal = 10000000
'$noramclear


Config Portb = &B11111101
Portb = &B00000010

Config Portd = &B00000000
Portd = &B00000000


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

Sensor_1 Alias Pind.3
Sensor_2 Alias Pind.4
Sensor_3 Alias Pind.5
Sensor_4 Alias Pind.2



'If Portb.6 = 1 Then
'Pind.3 = 0
'Pind.4 = 0
'Pind.5 = 0
'Pind.2 = 0       'przełącznik





Do

If Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Go
if Sensor_1 = 1 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub lewo
if Sensor_1 = 0 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Lewo_1
if Sensor_1 = 0 And Sensor_2 = 0 And Sensor_3 = 1 And Sensor_4 = 1 Then Gosub Lewo_1
if Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 0 And Sensor_4 = 1 Then Gosub Prawo
if Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 1 And Sensor_4 = 0 Then Gosub Prawo_1
if Sensor_1 = 1 And Sensor_2 = 1 And Sensor_3 = 0 And Sensor_4 = 0 Then Gosub Prawo_1
if Sensor_1 = 0 And Sensor_2 = 0 And Sensor_3 = 0 And Sensor_4 = 0 Then Gosub Lewo_1

Loop



Go:
Pwm1a = 255
Pwm1b = 255
Return

Lewo:
Pwm1a = 255
Pwm1b = 150
Return

Lewo_1:
Pwm1a = 255
Pwm1b = 50
Return

Prawo:
Pwm1a = 150
Pwm1b = 255
Return

Prawo_1:
Pwm1a = 50
Pwm1b = 255
Return
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

Można wykorzystać elseif który odciąży troche procka, ale na początek to co dałem ja wystarczy. Nie wiem po co dałeś tą pierwszą pętle do-loop, z której nigdy nie wskoczył by program w obsługę "czujników" tylko cały czas by czekał na zmianę pinu.Poza tym, nie wybrałeś najlepszego schematu z sieci... Cały czas uP będzie wisiał na resecie... Musisz zmienić układ resetu uProcesora tj :

Usunąć kondensator 10uF łączący się z pinem resetu i plusem zasilania, w jego miejsce dać ten rezystor który jest obok, a w miejsce pozostaw puste.

Pozdrawiam

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

Dobra, wielkie dzięki. Z tym kondensatorem to już gdzieś czytałem. A może zamiast zostawiać puste, to dać tam ten kond?

A, i jeszcze jedno. Czemu przy przełączniku jest ' bo nie rozumiem? Będzie czytał to?

Link do komentarza
Share on other sites

Kondensator przy reset można dać, ale mniejszy. 100nF wystarczy w zupełności.

Przydaje się z dwóch powodów. Po pierwsze filtruje zakłócenia. Po drugie zapewnie odpowiednią długość impulsu resetującego.

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