Skocz do zawartości

Pomocna odpowiedź

Napisano

Cześć, chciałem się zapytać, czy jak do uC Attiny2313 dodam kwarc 4MHz to szybkość, np. wykrycia przeszkody przez czujnik SHARP'a 10cm wzrośnie? Bo teraz mam bez kwarca i robot wjeżdża na przeszkodę zamiast ją ominąć.

AixI.

To czym to może być spowodowane?? Płyta główna robota jest na razie testowana na stykówce i położona na podwoziu robota.

Pokaże kod, bo schemat uległ zniszczeniu 😃 przy formacie systemu. Są to dwa kody połączone w jeden cały - mogę sterować pilotem RC5 i omijać przeszkody. (omijanie botowi jeszcze nie wychodzi tak jak pisałem wyżej)

$regfile "attiny2313.dat"
$crystal = 1000000
$lib "mcsbyte.lbx"

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Rc5 = Pind.5
Config Portb = Output
Config Pind.2 = Input
Config Pind.0 = Input


Silnik_lewy_a Alias Portb.1                                 'Atmega8 Silnik_lewy_a Alias Portb.4  V
Silnik_lewy_b Alias Portb.0                                 'Atmega8 Silnik_lewy_b Alias Portb.0  V
Silnik_prawy_a Alias Portb.5                                'Atmega8 Silnik_prawy_a Alias Portb.5 V
Silnik_prawy_b Alias Portb.6                                'Atmega8 Silnik_prawy_b Alias Portb.3 V


Pwm1a = 255
Pwm1b = 255

Dim Address As Byte , Command As Byte
Dim Tryb As Bit

Enable Interrupts



Do
  Debounce Pind.0 , 0 , Zmiana_trybu , Sub
  If Tryb = 1 Then

'1 program


     If Pind.2 = 1 Then


        Set Silnik_lewy_a
        Reset Silnik_lewy_b
        Set Silnik_prawy_a
        Reset Silnik_prawy_b

        Debounce Pind.2 , 0 , Skrec , Sub                  'skręć, gdy czujnik wykryje przeszkode

     End If

  Else

'2 program

  Getrc5(address , Command)

  Command = Command And &B01111111

  If Command = 2 Then                                      'przód
     Set Silnik_lewy_a
     Reset Silnik_lewy_b
     Set Silnik_prawy_a
     Reset Silnik_prawy_b
  Else
     Reset Silnik_prawy_a
     Reset Silnik_prawy_b
     Reset Silnik_lewy_a
     Reset Silnik_lewy_b


  If Command = 9 Then                                      'tył
     Reset Silnik_lewy_a
     Set Silnik_lewy_b
     Reset Silnik_prawy_a
     Set Silnik_prawy_b
  Else
     Reset Silnik_prawy_a
     Reset Silnik_prawy_b
     Reset Silnik_lewy_a
     Reset Silnik_lewy_b


  If Command = 5 Then                                      'lewo
     Reset Silnik_lewy_a
     Set Silnik_lewy_b
     Set Silnik_prawy_a
     Reset Silnik_prawy_b
  Else
     Reset Silnik_prawy_a
     Reset Silnik_prawy_b
     Reset Silnik_lewy_a
     Reset Silnik_lewy_b


  If Command = 7 Then                                      'prawo
     Set Silnik_lewy_a
     Reset Silnik_lewy_b
     Reset Silnik_prawy_a
     Set Silnik_prawy_b
  Else
     Reset Silnik_prawy_a
     Reset Silnik_prawy_b
     Reset Silnik_lewy_a
     Reset Silnik_lewy_b
  End If
  End If
  End If
  End If
End If
Loop

Zmiana_trybu:
Tryb = Not Tryb
Return

Skrec:
'skręć (w prawo)
Set Silnik_lewy_a
Reset Silnik_lewy_b
Reset Silnik_prawy_a
Set Silnik_prawy_b
Waitms 250

Return

Bobby, dzięki za uwagę 🙂

Propaganja, to wyjście czujnika muszę podłączyć do pinu INT0, INT1 lub INT2?? Czy programowo jakoś??

Muszą być podłączone do pinów przerwań, czyli INTx. Rób testy na razie z "laboratoryjną" przeszkodą - białą i stosunkowo dużą.

Sprawdzałem na INT1 z wgranym jednym kodem (na omijanie przeszkód) to radził sobie nieźle, a jak wgrałem ten sam kod połączony z drugim (RC5) to tak samo jak przedtem.

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