- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 15

Thema: Mehrere Servos parallel steuern ATMega8

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Ja, na endlich hat er es gesagt: Zwei Taster, zwei Klappen - jeweils ein Taster pro Klappe. Nicht das das wichtig wäre um ein Programm zu beurteilen

    ...interessanter Verlauf ....was ich nicht verstehe ist warum du Deine Hardware ständig änderst? Konkret die Frage: Hast du nun einen 8Mhz oder einen 3686411 Crystal, intern oder extern ?

    Ich hätte auch vermutet das wenn ein Taster auf 0 (GND) im Debounce eingestellt wird, nicht nochmal im Unterprogramm geprüft werden muss ob der 0 ist - weil sonst hätte man ja in dem Unterprogramm nichts verloren, oder? Der Merker wäre so oder so okay. Naja, wenn es nicht stört und funktioniert.

    Wäre es nicht auch möglich jeweils die letzte if m(x) abfrage in die da vor zu packen weil du löscht den Merker ja sowieso danach, dann kannst Du ihn auch gleich noch mit auf 0 setzen.

    Mir wäre es ja auch lieb gewwesen wenn du gleich gesagt hättest das Du für die Beleuchtung extra Schalt-Kanäle an der Funke hast. Aber sowas passiert jedem Mal

    Viele Grüße
    Jörg
    Geändert von HeXPloreR (07.10.2014 um 16:22 Uhr)

  2. #2
    Hallo Jörg

    ...und vielen lieben Dank für Antwort und Verständnis.

    Ja, korrekt. 2 Klappen, 2 Servos. Die letzte "If" kann ich jedoch nicht heraus nehmen - habe ich schon mehrfach probiert. Wenn ich diese voran setze, dann wird der Merker zeitgleich auf Null gesetzt und das Servo bleibt in der Position des davor stehenden Punktes (Anlaufpunkt nach ersten Tasten) stehen, da der Frequenzwechsel weitaus schneller von statten geht, als das Servo anlaufen kann (zu träge halt).
    So funktioniert es prima und bleibt es nun auch.

    Habe heute zudem die anderen Befehle für die PWM-Kanalabfrage und das Setzen von 3 zusätzlichen Ausgängen in das Programm implementiert.
    Es funktionierte prima, bis zu dem Punkt, an dem ein Ausgang durch 2 Bedingungen gesetzt wird:

    1.) Durch das Erfassen eines PWM-Eingangssignals und entsprechend festgelegter Schaltroutine

    2.) Durch einen Taster per Debounce-Befehl.

    Das Problem war, dass der Debounce den Ausgang setzte, dieser jedoch durch den PWM-Input (bei PWM 1ms, also im Grunde "aus") nach 1-2 Sekunden wieder ausgeschaltet wurde.
    Und das Problem kannte ich (nach ein wenig Ausprobieren) noch aus meiner Zeit als Lehrling, wo ich mit SPS-Steuerungen zu tun hatte: Signalüberschneidung am Ausgang.

    Also habe ich für beide Bedingungen statt des direkten Ausgangs einen Merker als Schaltkontakt gesetzt und später in der Hauptschleife als IF-(OR)-Then Bedingung definiert.


    Hier das File - ist allerdings nicht ganz so gut beschrieben.

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686411
    
    
    Config Portb = Output
    Config Portc = Input
    Config Portd = Input
    
    
    '*** Konfiguriere Inputs ***
    
    Taster1 Alias Pinc.0
    Taster2 Alias Pinc.1
    Taster3 Alias Pinc.2
    Taster4 Alias Pinc.3
    
    
    
    ' *** Konfiguriere Outputs ***
    
    Pumpe Alias Portb.0
    Beleuchtung Alias Portb.1
    Scheinwerfer Alias Portb.2
    
    Pumpe = 1
    Beleuchtung = 1
    Scheinwerfer = 1
    
    
    '*** Konfiguriere Servos ***
    
    Config Servos = 2 , Servo1 = Portb.3 , Servo2 = Portb.4 , Reload = 10
    Enable Interrupts
    
    
    '*** Setze Servos für Startup auf Mittelstellung ***
    Dim Pos1 As Byte
    Pos1 = 124       ' 124 = Mittelstellung, 48 = rechter Anschlag, 210 = linker Anschlag, Servo 1
    Servo(1) = Pos1
    Dim Pos2 As Byte
    Pos2 = 130       ' 130 = Mittelstellung, 48 = rechter Anschlag, 215 = linker Anschlag, Servo 2
    Servo(2) = Pos2
    
    
    '*** Konfiguriere Variablen ***
    
    Dim Kanal5 As Byte
    Dim Kanal6 As Byte
    Dim M1 As Byte
    Dim M2 As Byte
    Dim M3 As Byte
    Dim M4 As Byte
    Dim Mbel1 As Bit
    Dim Mbel2 As Bit
    Dim Mschein1 As Bit
    Dim Mschein2 As Bit
    Dim Mpmp1 As Bit
    Dim Mpmp2 As Bit
    M1 = 0
    M2 = 0
    M3 = 0
    M4 = 0
    Mbel2 = 0
    Mschein2 = 0
    Mpmp2 = 0
    
    
    
    '  *****************************
    '    ***** Hauptprogramm *****
    '  *****************************
    
    Do
    
    
    Pulsein Kanal5 , Pind , 2 , 1
    Pulsein Kanal6 , Pind , 3 , 1
    
    
       If Kanal5 > 10 Then
          If Kanal5 >= 60 Then
             Mpmp1 = 1
          Else
             Mpmp1 = 0
          End If
          End If
    
       If Kanal6 > 10 Then
          If Kanal6 >= 50 Then
             Mbel1 = 1
          Else
             Mbel1 = 0
          End If
          If Kanal6 >= 70 Then
             Mschein1 = 1
          Else
             Mschein1 = 0
          End If
          End If
    
    
    
    Debounce Taster1 , 0 , Sub_taster1 , Sub
    Debounce Taster2 , 0 , Sub_taster2 , Sub
    Debounce Taster3 , 0 , Sub_taster3 , Sub
    Debounce Taster4 , 0 , Sub_taster4 , Sub
    
    
       If Mpmp1 = 1 Or Mpmp2 = 1 Then
          Pumpe = 0
       Else
          Pumpe = 1
       End If
    
    
       If Mbel1 = 1 Or Mbel2 = 1 Then
          Beleuchtung = 0
       Else
          Beleuchtung = 1
       End If
    
       If Mschein1 = 1 Or Mschein2 = 1 Then
          Scheinwerfer = 0
       Else
          Scheinwerfer = 1
       End If
    
    
    Loop
    
    
    
    ' *************************
    '   *** Unterprogramme ***
    ' *************************
    
    
    '  Klappensteuerung
    ' ******************
    
    Sub_taster1:
    
       If Taster1 = 0 Then
          M1 = M1 + 1       'Wenn Taster 1 gedrückt, zählt Merker1 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt eine neue Positionsausgabe per PWM an Servo1.
       Waitms 20
       End If
    
       If M1 = 1 Then
          Pos1 = 48
       Elseif M1 = 2 Then
          Pos1 = 210
       End If
       If M1 = 2 Then       'Wenn M1 den Wert 2 erreicht, wird M1 auf Null zurück gesetzt
          M1 = 0
       End If
       Servo(1) = Pos1
    
    Return
    
    
    'Wenn Taster 2 gedrückt wird, zählt Merker2 um Wert 1 hoch. Mit jedem neuen Wert von M1 erfolgt neue Positionsausgabe an Servo2.
    
    Sub_taster2:
    
       If Taster2 = 0 Then
          M2 = M2 + 1
       Waitms 20
       End If
    
       If M2 = 1 Then
          Pos2 = 48
       Elseif M2 = 2 Then
          Pos2 = 210
       End If
       If M2 = 2 Then       ' Wenn M2 den Wert 2 erreicht, wird M2 auf Null zurück gesetzt
          M2 = 0
       End If
       Servo(2) = Pos2
    
    Return
    
    
    
    
    ' Handbedienung Beleuchtung
    ' *************************
    
    Sub_taster3:
    
       If Taster3 = 0 And Mbel1 = 0 Then
          M3 = M3 + 1
       End If
    
       If M3 = 1 Then
          Mbel2 = 1
       Elseif M3 = 2 Then
          Mschein2 = 1
       End If
       If M3 = 3 Then
          Mbel2 = 0
          Mschein2 = 0
          M3 = 0
       End If
    
    Return
    
    
    
    ' Handbedienung Pumpe
    ' *******************
    
    Sub_taster4:
    
          If Taster4 = 0 And Mpmp1 = 0 Then
             M4 = M4 + 1
          End If
    
          If M4 = 1 Then
             Mpmp2 = 1
          End If
          If M4 = 2 Then
             Mpmp2 = 0
             M4 = 0
          End If
    
    Return
    
    End
    Mbel1 und Mbel2 stehen für die Merker des Ausgangs "Beleuchtung".
    Mschein1 und Mschein2 sind die Ausgangsmerker für den Scheinwerfer und
    Mpmp1 und Mpmp2 stehen für die Ausgangsmerker der Pumpe.


    Die Frequenz habe ich nun intern auf 3,2MHz festgelegt, weil so die Servos etwas besser arbeiten.

    Ich bin gespannt, ob das Programm auch in meinem Boot so gut funktioniert wie auf meinem STK-500 ^^.



    MFG - Maik

Ähnliche Themen

  1. Mehrere RC Signale einlesen und mehrere Servos ausgeben
    Von R2D2 Bastler im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 74
    Letzter Beitrag: 10.01.2022, 08:35
  2. Mehrere ATMEL parallel programmieren
    Von Realisator im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.05.2009, 16:54
  3. mehrere Ausgänge parallel regeln?
    Von marius86 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 20.07.2008, 21:23
  4. Mehrere RS232 Rx/Tx parallel?
    Von Jaecko im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 24.03.2007, 09:24
  5. [ERLEDIGT] Mehrere LED´s Parallel geschaltet
    Von Gast A.M. im Forum Sensoren / Sensorik
    Antworten: 25
    Letzter Beitrag: 05.06.2005, 11:37

Berechtigungen

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

Labornetzteil AliExpress