- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 47

Thema: Frage zum Pulsein Befehl

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Anzeige

    Praxistest und DIY Projekte
    Also ,das Anzeigen von Werten funktioniert tadellos.Es kommen je nach dem immer Werte von 100 bis 200 raus.
    müssen da nicht unterstriche zwischen die wörter ? meckert der nicht beim kompilieren ?
    Was für Unterstriche ?? Funktionier bei mir ohne ,ohne Probleme .
    D.7 ist doppelt configuriert ganz am Anfang.
    stört doch nicht .
    ...sind die absichtlich bei 2 Servostellungen identisch geschaltet ?
    ist doch egal oder ??

  2. #22
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Zitat Zitat von Der Einsteiger Beitrag anzeigen

    ist doch egal oder ??
    an sich schon... aber da bei "Select Case Rckanal" alle 3 Fälle die selbe Motorrichtung
    haben wundert mich nicht, wenn er nur in eine Richtung läuft.

    Noch was... wenn der Wert für Nullstellung nicht genau zwischen 140 und 160 liegt aufgrund
    irgendwelcher tolleranzen bekommst du den Motor nie zum stehen und hast keine Kontrolle, ob es funktioniert.

    Ausserdem wäre es sicher interessant für dich zu kontrollieren, wo Max und Min deines Signals liegen und ob die
    Mittelstellung überhaupt in diesem vorgegebenen Bereich (140-160) liegt.
    Geändert von JoeM1978 (04.01.2013 um 17:39 Uhr)

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Mittelstellung überhaupt in diesem vorgegebenen Bereich (140-160) liegt.
    natürlich ,dass habe ich doch vorher getestet.
    Noch was... wenn der Wert für Nullstellung nicht genau zwischen 140 und 160 liegt aufgrund
    irgendwelcher tolleranzen bekommst du den Motor nie zum stehen und hast keine Kontrolle, ob es funktioniert.
    Es liegt in dem Bereich ,doch wenn ich einen Hebel einmal bewege ,dann hört der Motor nicht mehr auf. Warum ??
    an sich schon... aber da bei "Select Case Rckanal" alle 3 Fälle die selbe Motorrichtung
    haben wundert mich nicht, wenn er nur in eine Richtung läuft.
    Das ist doch egal ,da ich in Case Else ja den Motor abgeschaltet habe will ,was aber leider nicht funktioniert.

  4. #24
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Mhm langsam weiss ich auch nicht weiter.
    Ich würd noch versuchen in die "Case Else" noch ein Pwm1X=0 einzufügen.
    Vieleicht überlagert der Timer irgendwie das.

    Wenn ich ende diese Woche wieder zu hause bin teste ich das selbst mal aus.

    Ich würde es allerdings direkt anderst aufbauen.
    Die Motoransteuerungen direkt in Sub-Routinen auslagern und
    vieleicht die Pausen zwischen den Messungen deitlich verkürzen
    oder gleich auf eine Interruptroutine legen. 20ms sind ne recht lange zeit für den Controller.
    Da kann man einiges an Programm abarbeiten in den Pausen zwischen den Messungen.
    Geändert von JoeM1978 (06.01.2013 um 09:59 Uhr)

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Das wäre nett.Hättest du vielleicht auch ein Beispiel für den Vorschlag mit den Subroutinen ??
    Ich wüsste zwar wie das mit dem Befehl funktioniert nur halt nicht in dem Beispiel.

  6. #26
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Also... die Abfrage über PulseIn hab ich ganz ohne Probleme gemacht...
    Habs direkt auf 4 Kanälen getestet mit meiner Funke.
    Kann man gut verwenden um den Empfänger zu prüfen.

    Jetzt werd ich noch sehen, das ich das PWM integriert bekomm und
    das Ganze möglichst noch in einzelne Funktionen aufteilen.

    Meld mich die Tage wieder.

  7. #27
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Also... Ich hab es so umgesetzt und auch getestet.
    Auf meinem MyAvr Board funktioniert es so einwandfrei.
    Hab sogar das Oszi drangehangen und es ist wirklich bestens möcht ich behaupten.

    Du musst es nurnoch anpassen auf deine Bedürfnisse.
    Ist soweit alles Ausdokumentiert und ich meine es ist auch alles recht Verständlich gemacht.

    Wichtig ist den Maximalwert für das PWM evtl. anzupassen (Manche Treiber mögen es nicht, wenn 100% PWM ankommt)
    Fürs Bremsen hab ich jetzt einfach mal beide Motorkanäle auf 0 stehen falls das wer braucht.
    und die Ports/Pins richtig zu setzen.
    Drehrichtung hab ich schon implementiert... allerdings jetzt "manuell" auf linkslauf gestellt.

    Aufgefallen ist mir vor allem, das meine Funke im Standardzustand NICHT den ganzen Bereich von 950 bis 2050 abgedeckt hat.
    Dazu musste ich erst ins Menü und die Anschläge der Servos ganz hochdrehen.

    Getestet hab ich mit MX-16S und R16Scan und die Ausgabe der PWM-Signale geprüft.
    Einzig ob die Ports der Motorkanäle richtig schalten hab ich nicht kontrolliert... aber sollte soweit passen.

    Ich übernehm keine Verantwortung... fürs anpassen und etwaige Fehler ausbessern ist jeder selber zuständig.


    Code:
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Programmname:    RCKanal-abfrage-PulseIn.bas
    '
    'Letzte Änderung: 09.01.2013
    '
    'Funktion:        Abfrage von RC-Kanälen mittels PulseIn
    '                 und Ausgabe über "Print" an die Konsole.
    '                 Inclusive Subroutine für MotorSteuerung über PWM
    '
    '
    'Mikrocontroller: Mega8
    '
    'Input:           D2 - RC-Kanal 1
    '                 D3 - RC-Kanal 2
    '                 D4 - RC-Kanal 3
    '                 D5 - RC-Kanal 4
    '
    'Output:          D6 - Motor1 links
    '                 D7 - Motor1 rechts
    '                 B1 - Motor1 PWM
    '                 B2 - Motor2 PWM
    '                 B3 - Motor2 links
    '                 B4 - Motor2 rechts
    '
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Den Atmega mit den passenden Daten füttern.
    '-------------------------------------------------------------------------------
    $regfile = "m8def.dat"                                      ' eingesetzter Mikrocontroller
    $crystal = 8000000                                          ' eingestellte Taktfrequenz (8MHz)
    $hwstack = 100                                              ' Standardwert
    $swstack = 100                                              ' Standardwert
    $framesize = 100                                            ' Standardwert
    '-------------------------------------------------------------------------------
    'Ports/Pins konfigurieren.
    '-------------------------------------------------------------------------------
    Config Pind.2 = Input                                       ' Signal 1(a) vom RC-Empfänger
    Config Pind.3 = Input                                       ' Signal 2(b) vom RC-Empfänger
    Config Pind.4 = Input                                       ' Signal 3(c) vom RC-Empfänger
    Config Pind.5 = Input                                       ' Signal 4(d) vom RC-Empfänger
    Config Portd.6 = Output                                     ' Motor 1 links
    Config Portd.7 = Output                                     ' Motor 1 rechts
    Config Portb.1 = Output                                     ' PWM Motor 1
    Config Portb.2 = Output                                     ' PWM Motor 2
    Config Portb.3 = Output                                     ' Motor 2 links
    Config Portb.4 = Output                                     ' Motor 2 rechts
    '-------------------------------------------------------------------------------
    'Timer/OCR/PWM/INT usw. setzen
    '-------------------------------------------------------------------------------
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1       ' ergibt 1.000.000 ticks/sekunde
    
    '-------------------------------------------------------------------------------
    'Variablen
    '-------------------------------------------------------------------------------
    Dim Rckanal_a As Word
    Dim Rckanal_b As Word
    Dim Rckanal_c As Word
    Dim Rckanal_d As Word
    
    Dim Motor As Byte                                           ' 1=Motor1 / 2=Motor2 /...
    Dim Drehrichtung As Byte                                    ' 0= Bremsen / 1=links / 2=rechts
    Drehrichtung = 1                                            ' Drehrichtung >>>jetzt manuell auf Links gestellt <<<
    Dim Geschwindigkeit As Word                                 ' Motorgeschwindigkeit
    Geschwindigkeit = 0                                         ' Motorgeschwindigkeit anfangs auf 0
    
    Declare Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    '-------------------------------------------------------------------------------
    'Hauptprogramm
    '-------------------------------------------------------------------------------
    Do
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_a , Pind , 2 , 1                         ' Wert vom Kanal 1...Motor 1.
       Motor = 1
       Geschwindigkeit = Rckanal_a
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
      
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_b , Pind , 3 , 1                         ' Wert vom Kanal 2...Motor 2.
       Motor = 2
       Geschwindigkeit = Rckanal_b
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
    
    
       Pulsein Rckanal_c , Pind , 4 , 1                         ' z.B. für weitere Funktionen
    
       Pulsein Rckanal_d , Pind , 5 , 1                         ' z.B. für weitere Funktionen
    
    
    
    Loop
    
    End
    
    '-------------------------------------------------------------------------------
    'Subroutinen
    '-------------------------------------------------------------------------------
    Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    
       Geschwindigkeit = Geschwindigkeit - 85                   'Wenn der Wert vom RC-Kanal etwa 90 bis 210 beträgt ...
       Geschwindigkeit = Geschwindigkeit * 2                    ' ... grob umrechnen um innerhalb 0 bis 255 zu sein fürs PWM-Signal
    
       Select Case Geschwindigkeit                              ' sicherstellen, das keine Falschen Werte durchkommen
       Case Is >= 255 : Geschwindigkeit = 255                   ' maximalwert 255
       Case Is <= 15 : Geschwindigkeit = 0                      ' Untere Schwelle, das der Motor auch wirklich still stehen kann
       End Select
    
          Select Case Motor                                     ' Welcher Motor soll gesteuert werden ?
          Case 1 : Select Case Drehrichtung                     ' wenn Motor1, in welche richtung soll er drehen ?
                   Case 0 : Portd.6 = 0                         ' Ports für Drehrichtung setzen
                            Portd.7 = 0
                   Case 1 : Portd.6 = 1
                            Portd.7 = 0
                   Case 2 : Portd.6 = 0
                            Portd.7 = 1
                   Case Else
                   Print "Fehler bei Drehrichtung Motor1"       ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1a = Geschwindigkeit                      ' Geschwindigkeit Motor 1 regeln
          Case 2 : Select Case Drehrichtung                     ' wenn Motor2, in welche richtung soll er drehen ?
                   Case 0 : Portb.3 = 0                         ' Ports für Drehrichtung setzen
                            Portb.4 = 0
                   Case 1 : Portb.3 = 1
                            Portb.4 = 0
                   Case 2 : Portb.3 = 0
                            Portb.4 = 1
                   Case Else
                   Print "Fehler bei Drehrichtung Motor2"       ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1b = Geschwindigkeit                      ' Geschwindigkeit Motor 2 regeln
          Case Else
          Print "Fehler bei Auswahl des Motors"                 ' bei ungültigen Werten fehler anzeigen
          End Select
    
       Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit       'Werte anzeigen als Kontrolle
    End Sub
    - - - Aktualisiert - - -

    Select Case Lala

    Case 90 To 140
    Portb.0 = 1
    Portb.1 = 0
    Portd.5 = 1

    Pwm1b = 600
    Waitms 10

    Case 160 To 200

    Portb.0 = 1
    Portb.1 = 0
    Portd.5 = 1

    Pwm1b = 600
    Waitms 10

    Case Else

    Portb.0 = 0
    Portb.1 = 1
    Portd.5 = 0

    Waitms 10

    End Select
    ...und ...
    >an sich schon... aber da bei "Select Case Rckanal" alle 3 Fälle die selbe Motorrichtung
    haben wundert mich nicht, wenn er nur in eine Richtung läuft.

    >Das ist doch egal ,da ich in Case Else ja den Motor abgeschaltet habe will ,was aber leider nicht funktioniert.
    da ist mir vorhin doch noch aufgefallen, was nicht vieleicht nicht Stimmt und warum der motor nichtmehr aus geht.

    Wenn der Motor aus sein soll legt man "normalerweise" beide Kanäle auf 0 und auch das PWM-Signal auf 0.
    Hier hast du einen Motorkanal angelassen in ALLEN Case-Fällen und das PWM nicht auf 0 gemacht.


    Also so:
    Code:
    Case Else
    
    Portb.0 = 0    'Motorkanal 1
    Portb.1 = 0    'Motorkanal 2
    Portd.5 = 0    'PWM
    Pwm1b=0      'Vorsichtshalber
    Ich frag mich dabei, ob das PWM-Signal trotzdem am Port anliegt, trotz das dieser auf 0 Steht.
    Wäre interessant zu wissen
    Geändert von JoeM1978 (09.01.2013 um 22:52 Uhr)

  8. #28
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Hallo JoeM1978,
    erst mal vielen Dank für deine Mühe ,aber ich muss dir leider mitteilen ,dass dein Code bei mir noch nicht ganz läuft.Die Motoren summen einfach die ganze Zeit.
    Wenn ich die Steuerknüppel bewege sogar ein bisschen (glaube ich ) mehr. Werde noch mal ein bisschen weiter prokeln.
    Da ich leider zur Zeit kein keine Rs-232 Auswertung zur Verfügung habe(auf das Thema antwortet mir auch keiner mehr ) ,kann ich dir leider auch nicht genau sagen ,was der Fehler ist.

    Zu dem anderen Code ganz unten : der funktioniert leider auch nicht ,da ,obwohl ich Pwm ausgeschaltet und Port auf Null gesetzt habe ,trotzdem ein Pwm Signal an den Treiber gesendet wird.
    Hoffe du kannst mir helfen
    Hier noch mal dein von mir übertragener Code:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Pind.2 = Input                                       ' Signal 1(a) vom RC-Empfänger
    Config Pind.3 = Input                                       ' Signal 2(b) vom RC-Empfänger
    Config Portc.6 = Output                                     'Motor links
    Config Portc.7 = Output                                     'Motor links
    Config Portb.0 = Output                                     'Motor rechts
    Config Portb.1 = Output                                     'Motor rechts
    Config Portd.4 = Output                                     'PWM links
    Config Portd.5 = Output                                     'PWM rechts
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    
    Dim Rckanal_a As Word
    Dim Rckanal_b As Word
    
    Dim Motor As Byte                                           ' 1=Motor1 / 2=Motor2 /...
    Dim Drehrichtung As Byte                                    ' 0= Bremsen / 1=links / 2=rechts
    Drehrichtung = 1                                            ' Drehrichtung >>>jetzt manuell auf Links gestellt <<<
    Dim Geschwindigkeit As Word                                 ' Motorgeschwindigkeit
    Geschwindigkeit = 0                                         ' Motorgeschwindigkeit anfangs auf 0
    
    Declare Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    
    
    Do
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_a , Pind , 2 , 1                         ' Wert vom Kanal 1...Motor 1.
       Motor = 1
       Geschwindigkeit = Rckanal_a
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
    
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_b , Pind , 3 , 1                         ' Wert vom Kanal 2...Motor 2.
       Motor = 2
       Geschwindigkeit = Rckanal_b
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
    
    Loop
    
    End
    
    
    Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    
       Geschwindigkeit = Geschwindigkeit - 85                   'Wenn der Wert vom RC-Kanal etwa 90 bis 210 beträgt ...
       Geschwindigkeit = Geschwindigkeit * 2                    ' ... grob umrechnen um innerhalb 0 bis 255 zu sein fürs PWM-Signal
    
       Select Case Geschwindigkeit                              ' sicherstellen, das keine Falschen Werte durchkommen
       Case Is >= 255 : Geschwindigkeit = 255                   ' maximalwert 255
       Case Is <= 15 : Geschwindigkeit = 0                      ' Untere Schwelle, das der Motor auch wirklich still stehen kann
       End Select
    
          Select Case Motor                                     ' Welcher Motor soll gesteuert werden ?
          Case 1 : Select Case Drehrichtung                     ' wenn Motor1, in welche richtung soll er drehen ?
                   Case 0 : Portc.6 = 0                         ' Ports für Drehrichtung setzen
                            Portc.7 = 0
                   Case 1 : Portc.6 = 1
                            Portc.7 = 0
                   Case 2 : Portc.6 = 0
                            Portc.7 = 1
                   Case Else
                   Print "Fehler bei Drehrichtung Motor1"       ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1a = Geschwindigkeit                      ' Geschwindigkeit Motor 1 regeln
          Case 2 : Select Case Drehrichtung                     ' wenn Motor2, in welche richtung soll er drehen ?
                   Case 0 : Portb.0 = 0                         ' Ports für Drehrichtung setzen
                            Portb.1 = 0
                   Case 1 : Portb.0 = 1
                            Portb.1 = 0
                   Case 2 : Portb.0 = 0
                            Portb.1 = 1
                   Case Else
                   Print "Fehler bei Drehrichtung Motor2"       ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1b = Geschwindigkeit                      ' Geschwindigkeit Motor 2 regeln
          Case Else
          Print "Fehler bei Auswahl des Motors"                 ' bei ungültigen Werten fehler anzeigen
          End Select
    
       Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit       'Werte anzeigen als Kontrolle
    End Sub

  9. #29
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    Scheint soweit alles zu passen....
    hast du mal versucht deinen Motortreiber abzuklemmen und die Signale einfach mit dem Multimeter zu messen ?

    So ganz ohne Rückmeldung ist das arg schwer... vieleicht könnten wir deinen Summer wenigstens als Statusmelder nutzen.
    Gib doch mal in den verschiedenen Fällen für die Geschwindigkeit unterschiedlich hohe Töne über den Summer aus.

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Scheint soweit alles zu passen....
    hast du mal versucht deinen Motortreiber abzuklemmen und die Signale einfach mit dem Multimeter zu messen ?
    Meinst du die Pwm Eingänge vom Motortreiber?

    Ich habe jetzt mal den Summer wieder eingebaut.Wenn ich jetzt das Programm starte beginnen die Motoren zu summen. Dann hören die Motoren aber wieder nicht auf und von dem Summer ist auch nichts zu hören.
    Aber es ist, wie in deinem Ursprungsprogramm, ein Unterschied zwischen Mittelstellung und Seitenstellung des Knüppels zu hören.
    Zu bedenken ist aber ,dass ich nicht den Summer für die Geschwindigkeit ,sondern für die Case Else Fälle eingesetzt habe.
    Jetzt probiere ich noch mal wie du das wolltest.
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Portd.7 = Output
    Config Pind.2 = Input                                       ' Signal 1(a) vom RC-Empfänger
    Config Pind.3 = Input                                       ' Signal 2(b) vom RC-Empfänger
    Config Portc.6 = Output                                     'Motor links
    Config Portc.7 = Output                                     'Motor links
    Config Portb.0 = Output                                     'Motor rechts
    Config Portb.1 = Output                                     'Motor rechts
    Config Portd.4 = Output                                     'PWM links
    Config Portd.5 = Output                                     'PWM rechts
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    
    Dim Rckanal_a As Word
    Dim Rckanal_b As Word
    
    Dim Motor As Byte                                           ' 1=Motor1 / 2=Motor2 /...
    Dim Drehrichtung As Byte                                    ' 0= Bremsen / 1=links / 2=rechts
    Drehrichtung = 1                                            ' Drehrichtung >>>jetzt manuell auf Links gestellt <<<
    Dim Geschwindigkeit As Word                                 ' Motorgeschwindigkeit
    Geschwindigkeit = 0                                         ' Motorgeschwindigkeit anfangs auf 0
    
    Declare Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    
    Sound Portd.7 , 400 , 450
    Sound Portd.7 , 400 , 250
    Sound Portd.7 , 400 , 450
    Wait 2
    
    Do
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_a , Pind , 2 , 1                         ' Wert vom Kanal 1...Motor 1.
       Motor = 1
       Geschwindigkeit = Rckanal_a
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
    
       ' Wert vom RC-Empfänger abfragen und weitergeben
       Pulsein Rckanal_b , Pind , 3 , 1                         ' Wert vom Kanal 2...Motor 2.
       Motor = 2
       Geschwindigkeit = Rckanal_b
       Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit)       'Daten an Subroutine/Motorsteuerung übergeben
       ' Subroutine hat Motor bearbeitet... weiter zum nächsten
    
    Loop
    
    End
    
    
    Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word)
    
       Geschwindigkeit = Geschwindigkeit - 85                   'Wenn der Wert vom RC-Kanal etwa 90 bis 210 beträgt ...
       Geschwindigkeit = Geschwindigkeit * 2                    ' ... grob umrechnen um innerhalb 0 bis 255 zu sein fürs PWM-Signal
    
       Select Case Geschwindigkeit                              ' sicherstellen, das keine Falschen Werte durchkommen
       Case Is >= 255 : Geschwindigkeit = 255                   ' maximalwert 255
       Case Is <= 15 : Geschwindigkeit = 0                      ' Untere Schwelle, das der Motor auch wirklich still stehen kann
       End Select
    
          Select Case Motor                                     ' Welcher Motor soll gesteuert werden ?
          Case 1 : Select Case Drehrichtung                     ' wenn Motor1, in welche richtung soll er drehen ?
                   Case 0 : Portc.6 = 0                         ' Ports für Drehrichtung setzen
                            Portc.7 = 0
                   Case 1 : Portc.6 = 1
                            Portc.7 = 0
                   Case 2 : Portc.6 = 0
                            Portc.7 = 1
                   Case Else
                   Sound Portd.7 , 400 , 450                    ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1a = Geschwindigkeit                      ' Geschwindigkeit Motor 1 regeln
          Case 2 : Select Case Drehrichtung                     ' wenn Motor2, in welche richtung soll er drehen ?
                   Case 0 : Portb.0 = 0                         ' Ports für Drehrichtung setzen
                            Portb.1 = 0
                   Case 1 : Portb.0 = 1
                            Portb.1 = 0
                   Case 2 : Portb.0 = 0
                            Portb.1 = 1
                   Case Else
                   Sound Portd.7 , 400 , 250                    ' bei ungültigen Werten fehler anzeigen
                   End Select
                   Pwm1b = Geschwindigkeit                      ' Geschwindigkeit Motor 2 regeln
          Case Else
          Sound Portd.7 , 400 , 600                             ' bei ungültigen Werten fehler anzeigen
          End Select
    
       Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit       'Werte anzeigen als Kontrolle
    End Sub
    Geändert von Der Einsteiger (11.01.2013 um 09:54 Uhr)

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Ähnliche Themen

  1. Frage zum Bascom "Sound"-Befehl
    Von DirkP im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 06.04.2012, 13:07
  2. Wert berechnen Pulsein-Befehl
    Von RAM im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 24.01.2011, 17:05
  3. Arbeiten mit dem PULSEIN-Befehl
    Von Powell im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 02.07.2007, 15:14
  4. Frage zum Befehl "readmagcard" bzw. abbruch des pr
    Von sephi23 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 29.06.2006, 08:20
  5. Frage zum Befehl outp!
    Von Decca im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 03.03.2005, 13:52

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad