-         

Ergebnis 1 bis 4 von 4

Thema: Prob mit servo timer und adc

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27

    Prob mit servo timer und adc

    Anzeige

    hi,
    habe ein prob. mit den Servos in bascom, der irq wird zwar ausgelöst aber inerhalb des irqs funktionieren die Servos nicht


    Code:
    $regfile = "m32def.dat"
    $crystal = 14745600
    $baud = 115200
    
    $framesize = 32
    $swstack = 256
    $hwstack = 128
    
    
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Ontimer1
    Enable Timer1
    Timer1 = 7935
    
    'servo
    Config Servos = 2 , Servo1 = Portc.2 , Servo2 = Portc.3 , Reload = 10       ', Timer = Timer2
    Config Pinc.3 = Output
    Config Pinc.2 = Output
    
    'ADC
    Config Adc = Single , Prescaler = Auto , Reference = Avcc  , Timer = Timer2
    
    Config Pinb.0 = Output
    
    
    Enable Interrupts
    
    Declare Sub Stopleft
    Declare Sub Stopright
    Declare Sub Stopfull
    Declare Sub Forwardleft
    Declare Sub Forwardright
    Declare Sub Rewardleft
    Declare Sub Rewardright
    Declare Sub Turnleft
    Declare Sub Turnright
    
    Declare Sub Ausweichen
    
    Dim Dist1 As Integer
    Dim Speed As Integer
    Speed = 50
    
    Stopfull
    
    
    'Now give power to the chip
    Start Adc
    
    'Waitms 5000
    
    'Forwardleft
    'Forwardright
    Waitms 2000
    Stopfull
    
    Speed = 10
    Do
    
    '      W = Getadc(0)
    
          Forwardleft
          Waitms 2250
          Stopfull
          Forwardright
          Waitms 2250
          Stopfull
          Forwardleft
          Forwardright
          Waitms 2000
          Stopfull
          Turnleft
          Waitms 2000
          Stopfull
    
       Waitms 2000
       Stopfull
    
    Loop
    
    End
    
    Sub Ausweichen
          Dist1 = Getadc(0)
          Print "0 value: " ; Dist1
          If Dist1 > 19 Then
          Print "trunright " ; Dist1
    '         Stopfull
             Turnright
             Portb.0 = 1
    
             Do
                Waitms 500
                Dist1 = Getadc(0)
                Print "ausweichen: " ; Dist1
                If Dist1 < 19 Then
                   Stopfull
                   Portb.0 = 0
                   Return
                Else
                   Turnright
                End If
             Loop
          End If
    End Sub
    
    OnTimer1:                                                   'Interrupt-Routine
       Timer1 = 7935
       Ausweichen
       Return
    
    
    
    Sub Stopleft
       Servo(1) = 100
    End Sub
    
    Sub Stopright
       Servo(2) = 100
    End Sub
    
    Sub Stopfull
       Servo(1) = 100
       Servo(2) = 100
    End Sub
    
    Sub Forwardleft
       Servo(1) = Speed + 100
    End Sub
    
    Sub Forwardright
       Servo(2) = 100 - Speed
    End Sub
    
    Sub Rewardleft
       Servo(1) = 100 - Speed
    End Sub
    
    Sub Rewardright
       Servo(2) = Speed + 100
    End Sub
    
    
    Sub Turnleft
       Servo(1) = 100 - Speed
       Servo(2) = 100 - Speed
    End Sub
    
    Sub Turnright
       Servo(1) = Speed + 100
       Servo(2) = Speed + 100
    End Sub
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731

    Re: Prob mit servo timer und adc

    Hallo,

    Zitat Zitat von mki
    ...aber inerhalb des irqs funktionieren die Servos nicht
    stimmt,
    denn der Servo wird von einer eigenen ISR gesteuert, die nicht aktiv werden kann, solange ein anderer IRQ läuft.
    Deshalb soll man so lange Programmteile nicht in einer ISR selber erledigen. [-X

    Um das zu umgehen, eine Variable als Flag anlegen, die von der Timer-Isr gesetzt wird, und vom Hauptprogramm abgefragt wird (und später wieder zurückgesetzt), und wenn der richtige Wert erkannt wird, wird die gewünschte Routine ausgeführt (vom Hauptprogramm aus).

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Potsdam
    Beiträge
    27
    Hi,
    danke für deine Antwort, sowas habe ich mir schon fast gedacht.

    dann muß ich das halt anders lösen....

    mal ne frage wie kommt ein linuxer zu bascom???

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    zu Bascom ... einfach runterladen
    man hat doch auch eine Windose hier stehen so als Softwaredeveloper
    geht ja leider nicht anders.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •