Hallo,
nach dem Einlesen in die Programmierung habe ich versucht, mit dem nachfolgenden Programm die Länge der Impulse von meiner Fernsteuerung zu messen. Das ist mein kleines Einstiegsprojekt![]()
Im Bascom-Simulator läuft es einwandfrei, aber im real existierenden Leben tut es absolut nicht das, was es soll. De facto ist keine Reaktion auf das Eingangssignal festzustellen; d.h. trotz Variation der Eingangs-Impulslänge am Servotester reagieren die am PortD verbundenen LED's nicht.Code:'----- Titel ------------------------------------------------------------------- ' Module.......: ServoSignal.bas ' Purpose......: Measure and show radio control pulse length '------------------------------------------------------------------------------- '----- Settings ---------------------------------------------------------------- $regfile = "2313DEF.Dat" $crystal = 4000000 Config PortB = Output Config PinB.0 = input 'used for RC signal Config PortD = Output config Timer0 = timer , prescale = 64 on timer0 Mispulse '----- Functions --------------------------------------------------------------- Declare Sub GetPulse(PulseLength As byte ) '----- Variables --------------------------------------------------------------- Dim PulseLength As byte 'stores current reading of RC signal Dim PulseLast As byte 'stores last reading of RC signal Dim PulseError as Byte 'stores errors, given by timer0 'Dim PulseLengthMin As Byte 'Dim PulseLengthMax As Byte '----- Initialization ---------------------------------------------------------- PulseLength = 0 PulseLast = 0 PulseError = 0 PortB = &B00000000 'PulseLengthMax = 0 'PulseLengthMin = 0 enable Timer0 enable Interrupts '----- Program ----------------------------------------------------------------- do call GetPulse(PulseLength) 'PulseLast = PulseLength PortD = &B00000000 'delete last value of pulse length select case PulseLength case 000 to 036 : PortD.0 = 1 case 037 to 072 : PortD.1 = 1 case 073 to 108 : PortD.2 = 1 case 109 to 144 : PortD.3 = 1 case 145 to 180 : PortD.4 = 1 case 181 to 216 : PortD.5 = 1 case 217 to 252 : PortD.6 = 1 end select 'print PulseLast loop end 'end program '----- Subroutines ------------------------------------------------------------- Sub GetPulse(PulseLength As byte) PulseLength = 0 WaitForPulse: !sbis PinB,0 'jump if bit is set = pulse is positive !rjmp WaitForPulse WaitForLow: 'run loop until pulse gets negative Incr PulseLength 'add 1 in variable PulseLength !sbic PinB,0 'jump if bit is not set = pulse is negative !rjmp WaitForLow Timer0 = 0 End Sub Mispulse: 'print "Timer0 active" incr PulseError 'Print "Fehler #" ; PulseError PortB.1 = 0 wait 1 PortB.1 = 1 return
Deshalb weiß ich jetzt erst einmal nicht weiter...Kann hier jemand mit einem Tipp helfen (ich werde das Gefühl nicht los, dass ich einfach etwas Grundlegendes übersehen habe)?
Beste Grüße
Jürgen







Kann hier jemand mit einem Tipp helfen (ich werde das Gefühl nicht los, dass ich einfach etwas Grundlegendes übersehen habe)?
Zitieren

Lesezeichen