-
Hi,
ein analoges Servo hat normalerweise ja eine Refreshzeit von 20ms. Aber auch mit ner zeit von 10ms oder 30ms funktionieren die meisten Servos. Allerdings darf die Zeit nicht zu lange werden, da sonst die Stellkraft des Servos verringert wird.
Gruß BlaueLED
-
Hallo,
ich muss an dieser Stelle nochmal nachfragen:
Also 20ms bei ca. 8 MHz war kein Problem mit dem 8Bit Timer.
Nun Ist es aber so, dass ich die Schaltugn neu aufgebaut habe und diese mit 16 MHz läuft. Da komme ich jetzt aber nur auf 16ms.
Rechne ich bzgl. Pulseout ein bisschen hin und her meine ich diese Werte verwenden zu müssen:
PULSE OUT
4 MHz = 1us
16 MHZ = 4us
links (1000us) mittig (1500us) rechts (2000us)
1000 / 4 = [250] 1500 / 4 = [375] 2000 / 4 = [500]
Ist aber leider nicht von Erfolg gekrönt... Die ganze Geschichte bei 32ms macht auch keinen Sinn... Da wird der Servo vermutl. auch nicht mehr die nötige Stellkraft haben...
Dann habe ich den Timer mit 10ms getestet... Also einen Zähler hochgezählt. Bei 2x gezählten Zähler wollte ich dann pulsout verwenden...
Ich verwende einen 5V Schaltregler (Servo hat eine Betriebsspannung von 7,4 V) der schaltet dann aber ab bzw. stimmt dann da etwas nicht...
Gruß
Christoph
-
Ein einzelnes Servo lässt sich allein über die Timer1-Hardware steuern, da stört dann auch gar nichts mehr die 1wire.
Allerdings muss der OC1A oder ..B Pin verwendet werden.
-
Hallo,
Servo ist an OC1B. 16 MHz, Atmega8, Timer0 wird von 1wire genutzt, Timer1 für PWM an L293D für gehackten Servo als Getriebemotor und dann bleibt nur noch Timer2 über... Das klappte auch gut mit 8 MHz...
Mit 16MHz habe ich Probleme...
-
Ohne Code kann man schwer was sagen, Dir ist aber klar, dass Du bei doppelter Quarzfrequenz die Werte für Pulseout auch verdoppeln musst ?
-
Hallo,
anbei mein Code.
Ich bekomme kein vernünftiges Pulseout für den 7,4 Volt Servo hin...
bei Bestromen der Schaltung fährt der Servo kurz in seine Ausgangsposition. Dann fährt er augenscheinlich den pulseout-Befehl - und mein Schaltregler (1A kann der) bzw. die Schaltung schaltet sich ab....
Ich bin echt am verzweifeln....
Der Pulseoutbefehl ist unten in der Hauptschleife...
Code:
'#############################################################################
'
' KAPRIG Control RX
' -------------------------------------
'
' Stand: 10.09.2012, ATmega8
'
'
' Volt Temp.Höhe
' Sendesyntax to GROUND: $GROUND#quittierung#7,4#23,1#64
'
' Sendesyntax to KAPRIG: $KAPRIG#cmd
'
'
' system command function
' --------------------------------------------------------------
'
' KAPRIG 0 all off -> power down
'
' KAPRIG 1 video_5,8 GHz on
' KAPRIG 2 video_5,8 GHz off / BIT 2 | BIT1 | BIT0
' KAPRIG a CH1 - 5740 MHz 0 0 0
' KAPRIG b CH2 - 5760 MHz 0 0 1
' KAPRIG c CH3 - 5780 MHz 0 1 0
' KAPRIG d CH4 - 5800 MHz 0 1 1
' KAPRIG e CH5 - 5820 MHz 1 0 0
' KAPRIG f CH6 - 5840 MHz 1 0 1
' KAPRIG g CH7 - 5860 MHz 1 1 0
' KAPRIG h CH7 - 5860 MHz 1 1 1
'
' KAPRIG 3 gps on
' KAPRIG 4 gps off
' KAPRIG 5 pan links
' KAPRIG 6 pan rechts
' KAPRIG 7 pan speed 1
' KAPRIG 8 pan speed 2
' KAPRIG 9 pan speed 3
' KAPRIG i pan speed 4
' KAPRIG j pan speed 5
'
' KAPRIG + tilt up
' KAPRIG - tilt down
' KAPRIG k photo mode, shutter 1x photo
' KAPRIG l photo mode, shutter 2x photo, 1 Sek. Abstand
' KAPRIG m photo mode, shutter 3x photo, 1 Sek. Abstand
' KAPRIG n photo mode, shutter 4x photo, 1 Sek. Abstand
' KAPRIG o photo mode, shutter 5x photo, 1 Sek. Abstand
' KAPRIG p photo mode, shutter alle 2 Sek.
'
' KAPRIG q zoom in
' KAPRIG r zoom out
'
' KAPRIG s video mode, video start
' KAPRIG t video mode, video stop
'
' KAPRIG x LEDs ON
'
'#############################################################################
'-----------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'-----------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 16000000 ' 16 Mhz Quarz
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600
'-----------------------------------------------------------------------------
' Definition von Ressourcen
'-----------------------------------------------------------------------------
Pwr_all Alias Portc.0 'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portb.3
Pwr_video Alias Portb.0
Bit0 Alias Portd.7
Bit1 Alias Portd.6
Bit2 Alias Portd.5
5v_usb Alias Portc.2
Led_rot Alias Portc.3
Led_gruen Alias Portc.4
Led_blau Alias Portb.5
Led_weiss Alias Portb.4
Pan_a Alias Portc.5 ' für L293 D
Pan_b Alias Portd.2
'-----------------------------------------------------------------------------
' Definition von Konstanten
'-----------------------------------------------------------------------------
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen
Const Timer2vorgabe = 99 ' 10ms 6=16ms
'-----------------------------------------------------------------------------
' 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
'---- Zähler etc. ----
Dim Zaehler_1wire As Byte
Dim Zaehler_xbee As Byte
Dim Zaehler_cam As Byte
Dim Chdk As Byte
Dim Zaehler_lipo As Byte
Dim Zaehler_quittierung As Byte
Dim Quittierung_flag As Bit
Dim Zaehler_pwm As Byte
Dim Zaehler_pwm_flag As Bit
'--- Servo ---
Dim 16ms_flag As Bit
Dim Servo As Word
Dim 16ms As Byte
'---- PWM für A293D ----
Dim A As Integer
Dim Zaehler_sec1 As Byte
Dim Zaehler_sec2 As Byte
'-----------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'-----------------------------------------------------------------------------
'---- CONFIG ----
' RS232 Hardware
Config Serialin = Buffered , Size = 1 ' konfig serial in
Open "COMD.4:9600,8,N,1" For Input As #1 'PD.4 = RxD SoftUART / GPS
' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
' Timer0 für 1wire
' Timer1 für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
' Timer2 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 Bit0 = Output
Config Bit1 = Output
Config Bit2 = Output
Config 5v_usb = Output
' Status-LED rot
Config Led_rot = Output
Config Led_gruen = Output
Config Led_blau = Output
Config Led_weiss = Output
' L293D für Servo als Motor
Config Portb.1 = Output
Config Pan_a = Output 'LD293
Config Pan_b = Output
' Servo PIN
Config Portb.2 = Output
'1wire für Temp.-Messung
Config 1wire = Portd.3 ' 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_all = 1 ' bei Systemstart Peripherie (Relais) auf ON
Led_gruen = 0 ' Led_gruen ON für Betriebszustand
Pwr_video = 0 ' Video OFF
Bit0 = 1 ' damit der Video Tx kein GND erhält, BITs für die Kanäle auf "1"
Bit1 = 1
Bit2 = 1
Pwr_gps = 0 ' GPS OFF
Led_rot = 1 ' Led_rot OFF
Led_blau = 1 ' Led_blau OFF
Led_weiss = 1 ' Led_weiss OFF
Pan_a = 0 ' L293D OFF
Pan_b = 0
A = 150 ' Anfangsgeschwindigkeit für PWM L293D
' Befehlsparameter für "getusb_power" -> CHDK
Chdk = 0
5v_usb = 0 ' Kamera Auslöser für "get_usb_power" OFF
Zaehler_1wire = 0 ' alle 16ms Zaehler auf 0
Zaehler_xbee = 0
Zaehler_cam = 0
Zaehler_lipo = 0
Zaehler_quittierung = 0
Zaehler_pwm = 0
Zaehler_pwm_flag = 1 ' zaehler_pwm_flag auf 1, damit grds. PWM/L293D nur Impuls macht
Quittierung_flag = 1 ' quittierung_flag auf 1, damit grds. Quittierung geleert wird
'Servo = 375 ' Servo Mittelstellung
16ms_flag = 0
Wait 1
Pwr_gps = 1 'nach einer weiteren Sek. Pwr_gps ON
'-----------------------------------------------------------------------------
' Hauptprogramm
'-----------------------------------------------------------------------------
Do
'========== hier laufen Tests ab ==========================================
'==========Temperaturmessung mit DS18B20Z 1Wire============================
1wreset
1wwrite &HCC
1wwrite &H44
If Zaehler_1wire = 38 Then
Zaehler_1wire = 0
Gosub 1wire_temp
End If
'==========Spannung LiPo 2S messen=========================================
Spannung = Getadc(1) ' Zelle messen und berechnen
Zellspannung_orig = Spannung * Adc_multi
Zellspannung_orig = Zellspannung_orig / 0.3333
Zellspannung = Fusing(zellspannung_orig , "#.#")
If Zellspannung_orig <= 6.4 Then ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
If Zaehler_lipo > 63 Then
Gosub Lipo_saver_off
End If
Elseif Zellspannung_orig > 6.4 Then
Zaehler_lipo = 0
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===================================
If Ischarwaiting() = 1 Then
Cmd = Inkey()
End If
'==========BEFEHLE Auswerten===============================================
Select Case Cmd
'----------ALL Power OFF---------------------------------------------------
Case "0"
Clear Serialin
Cmd = ""
Quittierung = "!!!ALL OFF!!!"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Gosub Lipo_saver_off
'----------ALL LEDs ON-----------------------------------------------------
Case "x"
Clear Serialin
Cmd = ""
Quittierung = "all LEDs ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Led_rot = 0
Led_blau = 0
Led_weiss = 0
Waitms 1000
Led_rot = 1
Led_blau = 1
Led_weiss = 1
'----------Photo Mode------------------------------------------------------
Case "k"
Clear Serialin
Cmd = ""
Quittierung = "1 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
' Übergabe von "Chdk"-Modus <1> für Zeit-Steuerung "get_usb_power" für CHDK
Chdk = 1
Case "l"
Clear Serialin
Cmd = ""
Quittierung = "2 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 2
Case "m"
Clear Serialin
Cmd = ""
Quittierung = "3 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 3
Case "n"
Clear Serialin
Cmd = ""
Quittierung = "4 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 4
Case "o"
Clear Serialin
Cmd = ""
Quittierung = "5 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 5
Case "p"
Clear Serialin
Cmd = ""
Quittierung = "sec-Photo"
'Zaehler_quittierung = 0
Quittierung_flag = 0
Gosub Xbee
Chdk = 6
Case "q" ' weitere Funktionen CHDK / Canon!
Clear Serialin
Cmd = ""
Quittierung = "zoom in"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 7
Case "r" ' weitere Funktionen CHDK / Canon!
Clear Serialin
Cmd = ""
Quittierung = "zoom out"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Chdk = 8
'----------Video On / OFF--------------------------------------------------
Case "1" ' Video ON
Clear Serialin
Cmd = ""
Quittierung = "Video ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Pwr_video = 1
Case "2" ' Video OFF
Clear Serialin
Cmd = ""
Quittierung = "Video OFF"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Pwr_video = 0
Bit2 = 1
Bit1 = 1
Bit0 = 1
' Bit2 | Bit1 | Bit0
Case "a" ' BIT: 0 0 0
Clear Serialin ' CH1 5740 MHz
Cmd = ""
Quittierung = "CH1 : 5740MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 0
Bit1 = 0
Bit0 = 0
Case "b" ' BIT: 0 0 1
Clear Serialin ' CH2 5760 MHz
Cmd = ""
Quittierung = "CH2 : 5760MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 0
Bit1 = 0
Bit0 = 1
Case "c" ' BIT: 0 1 0
Clear Serialin ' CH3 5780 MHz
Cmd = ""
Quittierung = "CH3 : 5780MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 0
Bit1 = 1
Bit0 = 0
Case "d" ' BIT: 0 1 1
Clear Serialin ' CH4 5800 MHz
Cmd = ""
Quittierung = "CH4 : 5800MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 0
Bit1 = 1
Bit0 = 1
Case "e" ' BIT: 1 0 0
Clear Serialin ' CH5 5820 MHz
Cmd = ""
Quittierung = "CH5 : 5820MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 1
Bit1 = 0
Bit0 = 0
Case "f" ' BIT: 1 0 1
Clear Serialin ' CH6 5840 MHz
Cmd = ""
Quittierung = "CH6 : 5840MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 1
Bit1 = 0
Bit0 = 1
Case "g" ' BIT: 1 1 0
Clear Serialin ' CH7 5860 MHz
Cmd = ""
Quittierung = "CH7 : 5860MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 1
Bit1 = 1
Bit0 = 0
Case "h" ' BIT: 1 1 1
Clear Serialin ' CH7 5860 MHz
Cmd = ""
Quittierung = "CH7 : 5860MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Bit2 = 1
Bit1 = 1
Bit0 = 1
'----------GPS ON / OFF---------------------------------------------------
Case "3" ' GPS ON
Clear Serialin
Cmd = ""
Quittierung = "GPS ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Pwr_gps = 1
Case "4" ' GPS OFF
Clear Serialin
Cmd = ""
Quittierung = "GPS OFF"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Pwr_gps = 0
'----------PAN 360°-------------------------------------------------------
Case "5" ' Motor PAN 360° links
Clear Serialin
Cmd = ""
Quittierung = "PAN links"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Compare1a = A
Pan_a = 1
Pan_b = 0
Zaehler_pwm_flag = 1
Zaehler_pwm = 0
Case "6" ' Motor PAN 360° rechts
Clear Serialin
Cmd = ""
Quittierung = "PAN rechts"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Compare1a = A
Pan_a = 0
Pan_b = 1
Zaehler_pwm_flag = 1
Zaehler_pwm = 0
Case "7" ' Motor PAN 360° Speed 1
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 1"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 160
Case "8" ' Motor PAN 360° Speed 2
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 2"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 180
Case "9" ' Motor PAN 360° Speed 3
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 3"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 200
Case "i" ' Motor PAN 360° Speed 4
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 4"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 220
Case "j" ' Motor PAN 360° Speed 5
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 5"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 240
'----------PAN Photo TOUR--------------------------------------------------
Case "X" ' Motor PAN 360° links
Clear Serialin
Cmd = ""
Quittierung = "Photo Tour"
'Zaehler_quittierung = 0
Quittierung_flag = 0
Gosub Xbee
A = 160
Compare1a = A
Pan_a = 1
Pan_b = 0
Zaehler_pwm_flag = 0
'Zaehler_pwm = 0 ' PWM/L293D läuft nun permanent
Chdk = 6
'----------TILT------------------------------------------------------------
Case "+" 'And Servo >= 1500 ' Motor TILT 90° hoch
Clear Serialin
Cmd = ""
Quittierung = "S1 hoch"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Servo = Servo - 30
Case "-" 'And Servo <= 4400 ' Motor TILT 90° runter
Clear Serialin
Cmd = ""
Quittierung = "S1 runter"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
Servo = Servo + 30
Case Else
If Zaehler_pwm_flag = 1 Then ' PWM / L293D nur abschalten, wenn zaehler_pwm_flag = 1
If Zaehler_pwm > 16 Then ' wenn PWM für 256ms auf L293D
Pan_a = 0
Pan_b = 0
End If
End If
'Chdk = 0
End Select
' --- Befehle für get_usb_power -> CHDK --- === --- === --- === --- === --- ===
Select Case Chdk
Case "0" ' do nothing im Bezug auf Canon CHDK!
Case "1" ' 1 FOTO
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 2 Then ' wenn Zaehler_cam größer 2 bzw. 32ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "2" ' 2 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 4 Then ' wenn Zaehler_cam größer 4 bzw. 64ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "3" ' 3 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 6 Then ' wenn Zaehler_cam größer 6 bzw. 96ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "4" ' 4 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 8 Then ' wenn Zaehler_cam größer 8 bzw. 128ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "5" ' 5 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 10 Then ' wenn Zaehler_cam größer 10 bzw. 160ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "6" ' immer Fotos jede Sekunde eines!
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 12 Then ' wenn Zaehler_cam größer 12 bzw. 192ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "7" ' ZOOM IN
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 14 Then ' wenn Zaehler_cam größer 14 bzw. 224ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
Case "8" ' ZOOM OUT
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!
If Zaehler_cam > 16 Then ' wenn Zaehler_cam größer 16 bzw. 256ms, dann...
5v_usb = 1 ' 5V USB auf Low
End If
End Select
' --- sonstiges ---
If Zaehler_quittierung = 250 Then ' Quittierung nach 2 Sek. leeren
If Quittierung_flag = 1 Then
Quittierung = " connected! " ' kontinuierliches Senden der Parameter
End If
End If
If Zaehler_xbee = 32 Then ' alle 500ms Senden der Parameter
Zaehler_xbee = 0
Gosub Xbee ' kontinuierliches Senden der Parameter
End If
If 16ms_flag = 1 Then 'alle 16ms Impuls an Servo TILT 90°
Pulseout Portb , 2 , 5000
16ms_flag = 0
End If
Loop
End
'----------------Timer2 "10ms" für Servosteuerung-------------------------------
Timer2_irq: ' Interrupts pro Sek. (Frequ.): 62,5
' Interrupt alle 16000 us / 16 ms
Incr Zaehler_1wire ' Zaehler für 1wire-Abfrage
Incr Zaehler_xbee ' Zaehler zum Senden XBee
Incr Zaehler_lipo ' Zaehler um LiPo nach 1 Sekunde Abzuschalten
Incr Zaehler_cam ' Zaehler für CHDK Abschaltung "get_usb_power"
Incr Zaehler_quittierung ' Zaehler für Leeren der Quittierung
Incr Zaehler_pwm ' Zaehler für Dauer PWM
Incr Zaehler_sec1
Incr Zaehler_sec2
Incr 16ms
16ms_flag = 1
Timer2 = Timer2vorgabe
Return
'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
Lipo_saver_off:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
Gosub Xbee
Waitms 500
Pwr_video = 0
Pwr_gps = 0
Led_rot = 1
Led_gruen = 1
Led_blau = 1
Led_weiss = 1
Pwr_all = 0 ' pwr_all off
Powerdown
Return
'----------------sonstiges------------------------------------------------------
1wire_temp:
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 , "##.#")
Return
Xbee:
Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe
Return
-
Hallo,
soweit läuft es jetzt, anfänglich war mein Lipo Saver ein Problem. Nun schaue ich immer, ob die Spannung für eine gewisse Zeitspanne unter 6.4 Volt fällt, erst dann schalte ich ab.
Ich habe jetzt wiederum ein Problem mit dem "Anfangswert" des Servos. Der scheint nicht immer gleich zu sein? Also die Stellung, die er beim Start anfährt?
ich kann Pulselängen von max. 16,384 ms ausgeben. - wann hat ein Servo seine größte Stellkraft?
-
Ich bin am verzweifeln.
Wie bekomme ich es hin, einen 7,4 Volt Servo mittels des Timer2 (8 Bit) eines Atmega8 bei 16MHz anzusprechen? Mal läuft der Servo, dann hakt er bzw. hat keine Stellkraft etc.
Aktuell mache ich es so:
Timerstartwert ist 61; Config Timer2 = Timer , Prescale = 1024
Code:
If 16ms_flag = 1 Then 'alle 16ms Impuls an Servo TILT 90°
Pulseout Portb , 2 , Servo
16ms_flag = 0
End If
Mit den Werten kann ich aber nicht vernünftig arbeiten...
Danke, ich bin echt am verzweifeln!
Christoph
-
Ich hätt' gesagt, das Konzept ist verkorkst. Den 16 Bit Timer1 auf 8 Bit PWM zu kastrieren und dann mit dem 8 Bit Timer2 zu versuchen über Pulseout eine Servosteuerung hinzumurksen ist suboptimal.
Man hätte Timer2 für die PWM nehmen können, um mit Timer1 im Modus 14 oder 15 eine völlig auf Hardware basierende Servoansteuerung ohne jedes Gewackel zu bauen. Auch 'ne ISR kann man dranpappen, wenn man 'nen Zeitgeber braucht.
ICR1 oder OCR1A muss als Top verwendet werden, bei 39999 gibt's 20ms, das Servo kann dann mit Werten von 2000-4000 für Compare1A oder ..B von 1-2ms eingestellt werden.
-
Hallo MagicWSmoke!
Ja, ich habes ja auch schon gemerkt...
Ich kann aber die beiden Pins noch umlöten, sodass ich für PWM (L293D) den Timer2 und dann fürs Servo den Timer1 nehme! Das mache ich jetzt!