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







Zitieren

Lesezeichen