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
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
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.
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