Dvoukanál SSC

Je téměř stejný kód jako předcházející „Dvoukanál“, jen pro příjem používá protokol SSC (Serial Servo Controler) a je tam drobné „vylepšení“, které se týká citlivosti pohybu serva. To znamená , že si můžete volit krok v 0.5us o který servo polohuje při změně hodnoty kterou posíláte. V programu je default krok = 6 tedy 3us. Krok můžete libovolně měnit, adresa registru je 7 (jelikož používáme pouze dvě serva a také si jí můžete změnit). Pokud pošlete krok 0 servo se samozřejmě nepohne, pokud krok bude vysoká hodnota, bude celý přejezd rozsahu pouze pár poloh (to se může také někdy hodit). Neutrál nebo jinak střed je standardních 1500us.

 

$regfile = "attiny2313.dat"                                 ' typ MCU
$crystal = 16000000                                         ' kmitočet krystalu
$baud = 38400                                               ' rychlost seriového portu

$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 16

Config Portb.3 = Output                                     ' servo "0"
Config Portb.4 = Output                                     ' servo "1"

Dim Packethere As Bit
Dim A As Byte                                               ' pomocné proměnné
Dim H As Word
Dim X8(4) As Byte                                           ' v X8(1) je registr kam zapisovat
Dim Ix8 As Byte                                             ' index přijatého byte

Dim Krok As Byte                                            ' citlivost serva 1-14
Dim Minpuls As Word
Dim Puls As Word

Config Serialin = Buffered , Size = 20                      ' bufer pro příjem byte po seriové lince
Enable Interrupts                                           ' pro funkci bufferu je nutné mít zapnuté globální IRQ

Ix8 = 1

Compare1a = 3000                                            ' nastavení šířky pulzu pro servo "0" v 0,5us
Compare1b = 3000                                            ' nastavení šířky pulzu pro servo "1" v 0,5us
Capture1 = 40000                                            ' TOP TIMER1u 40000 = 20ms
Tccr1a = &B10100010                                         ' konfigurace TIMER1 viz datasheet strana 82
Tccr1b = &B00011010                                         ' konfigurace TIMER1 viz datasheet strana 82

Krok = 6                                                    ' 6 je 0.5us *6 tedy krok 3us

Do                                                          ' Hlavní smyčka programu

  While Ischarwaiting() = 1                                 ' Dokud čekají nějaké znaky ve vstupním buferu seriového portu
                                                             ' tak prováděj jeho čtení
     A = Inkey()

     If A <> 255 Then                                       ' neni &ff zapisujeme byte

         X8(ix8) = A                                        ' x8 - prijaty byte
         Incr Ix8                                           ' index +1

         If Ix8 = 3 Then                                    ' prijaty dva byte, nastavuji, ze paket prijat
            Set Packethere
            Ix8 = 1
         End If
                                                              ' je &ff tedy reset indexu
     Else

       Ix8 = 1

     End If

     If Ix8 > 3 Then
      Ix8 = 1                                               ' zabrani preteceni
     End If

  Wend


  If Packethere = 1 Then                                    ' Pokud se přijal platný paket, vyhodnocujeme

      Select Case X8(1)

         Case 0 To 1 : H = Krok * 127
                        Minpuls = 3000 - H

                        H = X8(2) * Krok
                        Puls = Minpuls + H

                        If X8(1) = 0 And Puls >= 1800 And Puls =< 4200 Then Compare1a = Puls       ' pokud je hodnota v povoleném rozsahu (900us - 2100us)
                        If X8(1) = 1 And Puls >= 1800 And Puls =< 4200 Then Compare1b = Puls       ' zapisujeme puls do Compare1x

          Case 7 : Krok = X8(2)

      End Select

      Reset Packethere                                      ' smažeme příznak nově přijatého paketu

  End If

Idle                                                        ' pokud nepřichází nové instrukce , odpočinek

Loop                                                        ' konec smyčky

 

Schéma zapojení je stejné jako v konstrukci "Dvoukanál" rozdíl je pouze v ovládacím protokolu.

Vyhledávání

Kontakt

Jiří Ježerský

Diskusní téma: Dvoukanál SSC

Nebyly nalezeny žádné příspěvky.