Hallo, aus dem -morgen testen- sind 6 Wochen vergangen... Ich bin Vater geworden und da waren einige Dinge wichtiger...

Bei 4 MHz gibt pulsout alle 1us einen Wert aus.
Bei 7,3728 MHz wären das 1,843us...

möchte ich also meinen 7,4 Volt Servo "Jamara HVD10MG" auf eine 1ms (= 1000us) oder 2ms (= 2000us) ansteueren,

rechne ich für links, 1000us, -> 1000us / 1,843us = 542,6

rechne ich für rechts, 2000us -> 2000us / 1,843 us = 1085,2

mittig wäre dann 1500us / 1,843us = 813,9


Allerdings höre ich immer nur ein "pulsen"... am Servo passiert nichts.

Was mache ich falsch?

Anbei der grds. Syntax für das Pulseout und der gesamte Code.

Danke, Christoph


Code:
Dim 20ms_flag As Bit
Dim Servo As Word


Const Timer2vorgabe = 112

Config Portb.2 = Output

Config Timer2 = Timer , Prescale = 1024


On Timer2 Timer2_irq

Enable Interrupts
Enable Timer2

Servo = 814

Do

   If 20ms_flag = 1 Then

      Pulseout Portb , 2 , Servo
      20ms_flag = 0

   End If


Loop
End





Timer2_irq:

  20ms_flag = 1

  Timer2 = Timer2vorgabe


Return

Hier nochmal der vollständige Code:

Code:
'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 7372800                                          ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 64
$swstack = 64
$framesize = 64

$baud = 9600


'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------

Pwr_all Alias Portc.4                                       'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portc.1
Pwr_video Alias Portd.4
Pwr_atmega Alias Portd.3

Bit0 Alias Portc.2
Bit1 Alias Portd.5
Bit2 Alias Portb.5

Cam_gnd Alias Portd.6

Led_rot Alias Portc.5

Pan1 Alias Portb.0                                          ' für L293 D
Pan2 Alias Portd.7



'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------

Const Adc_multi = 0.0048828125                              ' = 5.0 / 1024.0 -> ADC auflösen

Const Timer2vorgabe = 112

Const S1_links = 100                                        'je nach Servo!
Const S1_rechts = 50                                        'je nach Servo!

'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------

'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5

'---- Commands ----
Dim Quittierung As String * 14
Dim Gpshoehe As String * 13


'---- Command empfangen xxx----

Dim Cmd As Byte



'Dim für GPS einlesen
Dim Gelesen As Byte                                         'eingelesenes Zeichen

Dim Teilstring(14) As String * 12
Dim Anzahl2 As Byte
Dim Gpsdaten As String * 98
Dim Header As String * 6
'Dim Stunde As Byte
Dim Tempstring As String * 2



'---- Temperaturmessung ----
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5


'--- Servo ---
Dim 20ms_flag As Bit
Dim Servo As Word


'---- PWM für A293D ----
Dim A As Byte

Dim Swert As Byte

'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------

'---- CONFIG ----

' RS232 Hardware
Config Serialin = Buffered , Size = 1                       ' konfig serial in
Open "COMB.7:9600,8,N,1" For Input As #1                    'PB.7 = RxD SoftUART / GPS


' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'ADC Wandler definieren

' Servo
'Config Servos = 1 , Servo1 = Portb.2 , Reload = 10

' Timer für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8

' Timer für Servosteuerung
Config Timer2 = Timer , Prescale = 1024

' schaltbare Ausgänge
Config Pwr_all = Output                                     ' GPS- und Video-Modul sowie 5 Volt Versorgung hierfür abschalten
Config Pwr_gps = Output
Config Pwr_video = Output
Config Pwr_atmega = Output

Config Bit0 = Output
Config Bit1 = Output
Config Bit2 = Output

Config Cam_gnd = Output

' Status-LED rot
Config Led_rot = Output

' L293D für Servo als Motor
Config Portb.1 = Output
Config Pan1 = Output                                        'LD293
Config Pan2 = Output

' Servo PIN
Config Portb.2 = Output

'1wire für Temp.-Messung
Config 1wire = Portc.0                                      ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert

'Interrupts
On Timer2 Timer2_irq

Enable Interrupts
Enable Timer1
Enable Timer2

' sonstige
Start Adc
Declare Sub Xbee                                            ' Senderoutine, um $GROUND#... permanent zu senden

'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------

Pwr_atmega = 1                                              ' FET für Atmega auf ON

Pwr_all = 0                                                 ' bei Systemstart Peripherie auf OFF
Pwr_video = 0
Pwr_gps = 0

Led_rot = 1                                                 ' Led_rot OFF

Pan1 = 0                                                    'L293D OFF
Pan2 = 0

Bit0 = 1
Bit1 = 1
Bit2 = 1

Cam_gnd = 1


Servo = 814

'Swert = 100
'Servo(1) = Swert                                            'Servo

'LED blinken lassen
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0


'nach einer Sek. Pwr_all ON
Wait 1
Pwr_all = 1

'nach einer weiteren Sek. Pwr_gps ON
Wait 1
Pwr_gps = 1





' Begrüßung

   Quittierung = "Hallo"


Wait 2
Cam_gnd = 0
Waitms 150
Cam_gnd = 1
Cam_gnd = 0
Waitms 150
Cam_gnd = 1


'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------

Do




   '========== hier laufen Tests ab ==========================================

   If 20ms_flag = 1 Then

      Pulseout Portb , 2 , Servo
      20ms_flag = 0

   End If



   '==========Temperaturmessung mit DS18B20Z 1Wire============================


   1wreset

   1wwrite &HCC
   1wwrite &H44
   Waitms 600

   1wreset
   1wwrite &HCC
   1wwrite &HBE


   For X = 1 To 9
      Temp(x) = 1wread()
   Next

   Celsius = Makeint(temp(1) , Temp(2))


   T = Celsius / 16

   Temperatur = Fusing(t , "##.#")



   '==========Spannung LiPo 2S messen========================================

   Spannung = Getadc(3)                                     ' Zelle messen und berechnen
   Zellspannung_orig = Spannung * Adc_multi
   Zellspannung_orig = Zellspannung_orig * 2
   Zellspannung = Fusing(zellspannung_orig , "#.#")

   If Zellspannung_orig <= 6.4 Then                         ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
      Gosub Lipo_saver_off
   End If



   '==========Rx Prüfen auf GPS Eingang GPGGA=================================




  Gelesen = Inkey(#1)

   If Gelesen = 36 Then Input #1 , Gpsdaten Noecho          '36 = $
      Header = Mid(gpsdaten , 1 , 5)

      If Header = "GPGGA" Then
         Anzahl2 = Split(gpsdaten , Teilstring(1) , ",")
         Gpsdaten = ""
         Gpshoehe = Teilstring(10)

   End If




   '==========Rx Prüfen auf Befehlseingänge==================================

  ' Inputbin Cmd


    If Ischarwaiting() = 1 Then
      Cmd = Inkey()
    End If


    Select Case Cmd

    Case "r"
       Clear Serialin
       Cmd = ""
       Quittierung = "rechts"
       Call Xbee
       A = 160
       Compare1a = A
       Pan1 = 0
       Pan2 = 1
       Waitms 70
       Pan1 = 0
       Pan2 = 0


    Case "R"
       Clear Serialin
       Cmd = ""
       Quittierung = "REchts"
       Call Xbee
       A = 160
       Compare1a = A
       Pan1 = 0
       Pan2 = 1
       Waitms 700
       Pan1 = 0
       Pan2 = 0


     Case "l"
       Clear Serialin
       Cmd = ""
       Quittierung = "links"
       Call Xbee
       A = 160
       Compare1a = A
       Pan1 = 1
       Pan2 = 0
       Waitms 70
       Pan1 = 0
       Pan2 = 0


    Case "L"
       Clear Serialin
       Cmd = ""
       Quittierung = "LInks "
       Call Xbee
       A = 160
       Compare1a = A
       Pan1 = 1
       Pan2 = 0
       Waitms 700
       Pan1 = 0
       Pan2 = 0


    Case "+"
       Clear Serialin
       Cmd = ""
       Quittierung = "S1 hoch  "

       Servo = Servo + 50


    '(

     Case "U"
       Clear Serialin
       Cmd = ""
       Quittierung = "S1 Hoch  "

       Servo(1) = S1_links
')

    Case "-"
       Clear Serialin
       Cmd = ""
       Quittierung = "S1 runter  "

       Servo = Servo - 50

'(
    Case "D"
       Clear Serialin
       Cmd = ""
       Quittierung = "S1 Runter  "

       Servo(1) = S1_rechts
')
    Case "1"
       Clear Serialin
       Cmd = ""
       Quittierung = "LED     "

       Cam_gnd = 0
       Waitms 150
       Cam_gnd = 1


    End Select


     Call Xbee                                              ' kontinuierliches Senden der Parameter


Loop



End


'----------------Timer2 "20ms" für Servosteuerung-------------------------------

Timer2_irq:

  20ms_flag = 1

  Timer2 = Timer2vorgabe


Return


'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------

Lipo_saver_off:
   Quittierung = "LiPo-Saver!"                              ' Quittierung an Bodenstation
   Quittierung = ""                                         'Quittierung löschen
   Waitms 500

   Pwr_video = 0
   Pwr_gps = 0
   Pwr_all = 0                                              ' pwr_all off
   Led_rot = 1                                              ' led_rot off

   Pwr_atmega = 0                                           ' atmega8 off

   Powerdown

Return


'----------------Sonstiges------------------------------------------------------



Link:

Led_rot = 1

Return



No_link:

Led_rot = 0

Return



Sub Xbee

    Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe


End Sub