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
Lesezeichen