Mini8x - free

je kód volně k použití ve vašich projektch pro ovládání osmi modelářský serv. V případě, že použijete vývojové prostředí Bascom AVR, můžete dál upravovat a vylepšovat a nebo použít hotovou binárku z archivu. V ATTiny2313 musí být nastaveny fuses pro 16Mhz krystal, rychlost komunikačního portu je 38400. Pro komunikaci s PC nebo jiným kontrolérem se používá SSC protokol. Adresa serv je 0-7, délka kroku v 0.5us je v registru 9, registry 6670 ovládají výstupní piny. Jak jsou signály rozmístněné na pinech IO najdete na stránce Mini8x (dokumentace je identická - schéma ,DPS).

 

 

$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 38400                                               ' use baud rate
$prog &HFF , &HCE , &HDF , &H00                             ' generated. Take care that the chip supports all fuse bytes. To 8
$hwstack = 16                                               ' default use 32 for the hardware stack
$swstack = 8                                                ' default use 10 for the SW stack
$framesize = 8
Config Portb = Output
Config Portd.2 = Output
Config Portd.3 = Output                                     ' svetlo                                       ' serva
Config Portd.4 = Output                                     ' svetlo
Config Portd.5 = Output                                     ' svetlo
Config Portd.6 = Output                                     ' svetlo
Dim Packethere As Bit
Dim A As Byte
Dim I As Byte
Dim I1 As Byte
Dim Ix As Byte
Dim H1 As Word                                              ' index servos for timer
Dim S(8) As Word                                            ' delky pulsu pro serva 1-8
Dim Q As Byte
Dim Krok As Byte
Dim X8(4) As Byte
Dim Ix8 As Byte
Dim H2 As Word
Dim Puls As Word
Dim Minpuls(8) As Word
Dim Maxpuls(8) As Word
Config Serialin = Buffered , Size = 20
Enable Interrupts
Ix8 = 1                                                     ' nastavi indexy
Ix = 1
Krok = 10                                                   ' krok v 0.5us = 5us
For I = 1
   S(i) = 3000
   Minpuls(i) = 1200                                        ' minimalni delka pulsu v 0.5us
   Maxpuls(i) = 4800                                        ' maximalni delka pulsu v 0.5us
Next I
Capture1 = 4999                                             ' 2.5ms frame
Tccr1a = &B00000010
Tccr1b = &B00011010
 
On Oc1a Endpuls Nosave                                      'konfigurace irq timeru1
On Ovf1 Startpuls Nosave
Set Timsk.7
Set Timsk.6
Do                                                          ' hlavni smycka 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(1)  adresa, x8(2) hodnota
         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
      Select Case X8(1)
            Case 0 To 7 : H1 = Krok * 127                   ' vypocet delky pulsu podle nastaveneho kroku
                           H2 = 3000 - H1
                           H1 = X8(2) * Krok
                           Puls = H2 + H1
                           I1 = X8(1) + 1
                           If Puls >= Minpuls(i1) And Puls <= Maxpuls(i1) Then S(i1) = Puls
            Case 9 : Krok = X8(2)
            Case 66 : If X8(2) = 0 Then Reset Portd.2 Else Set Portd.2
            Case 67 : If X8(2) = 0 Then Reset Portd.3 Else Set Portd.3
            Case 68 : If X8(2) = 0 Then Reset Portd.4 Else Set Portd.4
            Case 69 : If X8(2) = 0 Then Reset Portd.5 Else Set Portd.5
            Case 70 : If X8(2) = 0 Then Reset Portd.6 Else Set Portd.6

      End Select
      Reset Packethere
  End If

Idle
Loop

Endpuls:
  push r24
  in r24,sreg
  push r27
  push r26
  push r25
  push r24
  push r16
  push r11
  push r10
   Portb = 0
   Incr Ix
   If Ix = 9 Then Ix = 1
   Compare1a = S(ix)
  pop r10
  pop r11
  pop r16
  pop r24
  pop r25
  pop r26
  pop r27
  !out sreg,r24
  pop r24
Return

Startpuls:
  push r24
  in r24,sreg
  push r26
  push r25
  push r24
  push r20
  push r16
   Q = Ix - 1
   Set Portb.q
  pop r16
  pop r20
  pop r24
  pop r25
  pop r26
  !out sreg,r24
  pop r24
Return

Vyhledávání

Kontakt

Jiří Ježerský

Anketa

Jak by jste chtěli přenášet data do kontroléru pro ovládání serv?

Sériový port (31)
26%

USB port (17)
15%

LAN (9)
8%

Bluetooth (24)
21%

WiFi (17)
15%

ZigBee (8)
7%

Optika (11)
9%

Celkový počet hlasů: 117

Pro řízení serv SimpleJack byl použit tento kód - Mini8x_free