- LiFePO4 Speicher Test         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 32

Thema: Servo-Befehl stört 1wire Kommunikation

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    42
    Beiträge
    318
    Anzeige

    LiFePo4 Akku selber bauen - Video
    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
    ...::: AVRFreak :::...

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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
    Geändert von spelli2001 (27.08.2012 um 23:48 Uhr)

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    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.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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...

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Ohne Code kann man schwer was sagen, Dir ist aber klar, dass Du bei doppelter Quarzfrequenz die Werte für Pulseout auch verdoppeln musst ?

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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?
    Geändert von spelli2001 (10.09.2012 um 19:31 Uhr)

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    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.

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    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!

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. SD21 servo programm befehl speicherung problem
    Von michel999 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 0
    Letzter Beitrag: 17.01.2011, 16:13
  2. Servo stört Microcontroller
    Von Krampfda im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 19
    Letzter Beitrag: 08.10.2009, 20:22
  3. servo-befehl in interrupt-routine funzt nicht
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 28.02.2009, 18:49
  4. cmucam 2 frage zu befehl Servo Mask
    Von Projector im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 19.01.2007, 17:07
  5. Servo mit Bascom Befehl mach nur "scheiße"
    Von AVRboy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 22.10.2006, 22:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests