-         

Ergebnis 1 bis 2 von 2

Thema: Servo zuckt beim RC Kanal einlesen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318

    Servo zuckt beim RC Kanal einlesen

    Anzeige

    Hallo,

    ich lese mit hilfe des Int0 und Timer1 einen RC-Kanal ein. Wenn ich mir den berechneten wert über die serielle schnittstelle an den PC schicke, dann kommen die werte je nach Knüppelstellung sauber ohne ausbrecher an. Sobald ich aber ein servo konfiguriere ( über config servos=1 ... ) , dann zucken die werte ( und das Servo ) immer 1-2 nach oben oder unten. An was kann das liegen ?

    hier der Code:

    Code:
    $regfile "m88def.dat"
    'Angabe der Taktfrequenz (8Mhz)
    $crystal = 8000000
    $baud = 9600
    
    Config Portc = Output
    Config Portd = Input
    
    'Angabe der Display-Größe
    Config Lcd = 20 * 4
    
    'Konfiguration des Timer1
    Config Timer1 = Timer , Prescale = 1
    
    'Konfiguration des INT0
    'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
    Config Int0 = Change
    
    '======================================================
    'Deklarationen
    '======================================================
    Dim Reading As Bit
    Dim Rc_value As Word
    Dim Calc As Word
    Dim Location As Word
    Dim Error As Bit
    
    '======================================================
    'Initialisierungen
    '======================================================
    
    'Zuweisung der Interrupt-Service-Routinen
    On Int0 Rc_read
    On Timer1 Rc_error
    
    'Timer-Freigabe
    Enable Timer1
    Stop Timer1
    
    'Freigabe der Interrupt-Routinen
    Enable Int0
    Enable Interrupts
    
    'Ports initialisieren
    Portc = &B11111111
    
    
    '======================================================
    'Hauptprogramm-Schleife
    '======================================================
    
    Do
    
    'LED an bei Fehler (Timer-Überlauf)
    Portc.2 = Not Error
    
         Calc = Rc_value - 7000
         Calc = Calc / 100
    
         Print Calc
    
    Loop
    'Programmende (nur formal)
    End
    
    '======================================================
    'ISR für INT0 - R/C-Kanal lesen
    '======================================================
    Rc_read:
    'Den Timer starten mit steigender Flanke
    If Reading = 0 Then
       Start Timer1
       Reading = 1
       Toggle Portc.0
    'Den Timer stoppen mit fallender Flanke
    Else
       Stop Timer1
       Rc_value = Timer1
       Timer1 = 0
       Reading = 0
       Toggle Portc.1
    End If
    'Error-Bit rücksetzen
    Error = 0
    Return
    
    '======================================================
    'ISR für Timer1 - Fehlerhandling
    '======================================================
    Rc_error:
    'Error-Bit setzen
    Error = 1
    Reading = 0
    Stop Timer1
    Rc_value = 6300
    
    Return
    Gruß Kay

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Mal so als Anfang: "Print" verlangsamt deinen Code ziemlich stark (fast so wie waitms 1). Wenn du den Print Befehl rausnimmst und statt dessen eine Servoposition stellst, dann könnte es sein dass dein Code einfach zu schnell läuft. Versuchs doch mal ohne den Servobefehl (mit einer eigenen Servo Routine) oder verlangsame deinen Code per Waitms oder so.
    Viele Grüße, William
    -> http://william.thielicke.org/

Berechtigungen

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