Skocz do zawartości

Elebot - robot dla początkujących.


Pomocna odpowiedź

Zamieszczam jeszcze kod programu bo może akurat gdzieś tu jest błąd coś źle podmieniłem i dlatego nie działa.

Config Portb = Output
Portb = &B00011000
Config Portd = Input
Portd = &B11111111

'****** deklaracja zmiennych i podprogramów ******
Dim Czas As Byte
Dim Ruchl As Bit
Dim Ruchp As Bit
Declare Sub Naprzod
Declare Sub Prawo
Declare Sub Lewo
Declare Sub Wstecz
Declare Sub Ddelay


'***** Program glowny *****
Do
'***** program obslugi czujnika odbiciowego *****
If Pind.5 = 1 Then
Czas = 50
Ruchl = 0
Ruchp = 0
Portb.1 = 1
Waitms 1
If Pind.6 = 0 Then Ruchl = 1
Portb.1 = 0
Portb.0 = 1
Waitms 1
If Pind.6 = 0 Then Ruchp = 1
Portb.0 = 0
If Ruchl = 1 And Ruchp = 0 Then Lewo
If Ruchl = 0 And Ruchp = 1 Then Prawo
If Ruchl = 0 And Ruchp = 0 Then Naprzod
If Ruchl = 1 And Ruchp = 1 Then Wstecz
End If



Loop
'***** prodprogramy ruchu *****
Sub Prawo:
Portb.7 = 1 : Portb.6 = 0 : Portb.5 = 0 : Portb.2 = 0
Call Ddelay
End Sub

Sub Lewo
Portb.7 = 0 : Portb.6 = 0 : Portb.5 = 1 : Portb.2 = 0
Call Ddelay
End Sub

Sub Naprzod:
Portb.7 = 1 : Portb.6 = 0 : Portb.5 = 1 : Portb.2 = 0
Call Ddelay
End Sub

Sub Wstecz:
Portb.7 = 0 : Portb.6 = 1 : Portb.5 = 0 : Portb.2 = 1
Call Ddelay
End Sub

'*****podprogram opoznienia *****
Sub Ddelay:
Waitms Czas
End Sub

End

Po każdym If'ie powinien być End If. Jeśli po wykonaniu Sub'a chcesz powrócić do pętli głównej do musisz dopisać Return przed End Sub (z tego co mi wiadomo, nie trzeba pisać End Sub, ale mogę się mylić). Mikrokontroler i wartość rezonatora definiujesz w ustawieniach Bascom'a tak? Jeśli nie to musisz dopisać to w programie (nawet jeśli to robisz w ustawieniach, to dla dobrych nawyków dopisz również w programie). Poza tym brak wcięć (bez nich wszystko źle się czyta i nieraz trzeba się sporo nagłowić, żeby odczytać o co ci chodzi).

Po każdym If'ie powinien być End If

No właśnie nie, jeśli piszesz w jednej linijce to nie musi być End if.

Przykład:

If A=B Then
A=C
End if
If A=B Then A=C

Obydwie formy są poprawne.

  • Lubię! 1

Czyli kod jest poprawny i pozostaje tylko możliwość, że robot nie działa z powodu błędu w połączeniu?

  • 1 miesiąc później...

Witam to mój pierwszy post na tym forum (nawiasem mówiąc bardzo ciekawym) ale do rzeczy zainspirowany projektem zacząłem tworzyć coś na kształt elebota nieco rózniący sie w konstrukcji ale zasadniczo podobny i pojawił sie u mnie następujący problem. Próbując regulować prędkość obrotów silnika przez PWM strasznie grzeje sie mostek L293NE (regulacja jest konieczna ponieważ używam 2ch różnych silników i tak musi zostać). Ustawiając porty b3 i b4 na wartość 1 (uC Attiny2313) układ pracuje prawidłowo. Włączając PWM kod:

$regfile = "attiny2313.dat"

$crystal = 4000000

Config Portb = Output

Config Portd.5 = Output

Config Portd.3 = Input

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1

Declare Sub Naprzod

Declare Sub Rstop

Declare Sub Wstecz

'***** Program glowny *****

Do

Compare1a = 180

Compare1b = 230

naprzod

Loop

'***** prodprogramy ruchu *****

Sub Naprzod:

Portb.5 = 1 : Portd.6 = 0 : Portb.7 = 1 : Portb.1 = 0

End Sub

Sub Rstop:

Portb.5 = 0 : Portd.6 = 0 : Portb.7 = 0 : Portb.1 = 0

End Sub

Sub Wstecz:

Portb.5 = 0 : Portd.6 = 1 : Portb.7 = 0 : Portb.1 = 1

End Sub

Mostek sie grzeje silniki działają przez kilkanaście sekund po czym stają pobór prądu na kążdym z osobna nie przekracza 800MA. Może ktoś ma pomysł co może być przyczyną ? A dodam jeszcze że bez obciążenia układ sie nie przegrzewa na multimetrze wynika że napięcie podawane przez mostek jest prawidłowe

Przede wszystkim to wywaliłbym przed pętlę ten fragment:

Compare1a = 180 
Compare1b = 230 

naprzod

Robienie tego w pętli głównej bez jakichkolwiek opóźnień, to nie jest zbyt dobry pomysł. I tak chcesz żeby jechał tylko prosto, więc wywalenie tego przed pętle nie zrobi ci różnicy.

Poza tym to powinieneś ustawić pinom stan spoczynkowy.

Ustawiłem stany spoczynkowe sprawdzałem i na H i L bez rezultatu compare też wywaliłem po za pętle głowną też nie pomogło mostek jak się grzał tak sie grzeje.

[ Dodano: 26-04-2012, 16:14 ]

Może pomiędzy EN mostka a uC powinny być jakieś rezystory?

silniki są mi bliżej nieznane pochodzą za 2ch zabawek zasilanych czterema bateriami r6 każdy na multimetrze jeden pobiera 600ma drugi 700 - 780ma wiec przekroczenie jest ale niewielkie. Zastanawiam sie też nad prądem indukcyjnym bo L293NE a taki jest załozony nie ma diód zabezpieczających. Scalak raczej sprawny wczoraj działał ponad godzine na diodach i był całkiem zimny program wykonywał gaszenie i stopniowe rozjasnianie diody czyli pwm działa scalak tez problem ewidentnie z silnikami

No wiem że być powinny doraźnie rozwiązałem problem przegrzewania instalując radiator od starej karty graficznej chociaż zdarza sie że i tak sie przegrzewa. Zastanawia mnie jednak inne zjawisko zresztą opisyawne juz gdzies tu na forum i chyba niewyjaśnione czyli - przy odłączonych przewodach enable układ pracuje jak by było na nich logiczne 1

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