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:
Gruß KayCode:$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







Zitieren
Lesezeichen