Pinnummer bei Sub-Aufruf übergeben

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Pinnummer bei Sub-Aufruf übergeben

      Ich versuche verzweifelt ein Objekt (in meinem Fall einen Pin) zu dimensionieren. Weiß nicht ob ich mich richtig ausdrücke. Hänge mal ein Beispiel dran...


      Quellcode

      1. Led_1 Alias Portb. 0
      2. Led_2 Alias Portb. 1
      3. Led_3 Alias Portb. 2
      4. Call Led_dimmen(1)
      5. Sub Led_dimmen(Var)
      6. Select Case Var
      7. Case 1
      8. Led = Led_1
      9. Case 2
      10. Led = Led_2
      11. Case 3
      12. Led = Led_3
      13. End Select
      14. Led=1
      15. End Sub
      Alles anzeigen
      Wie kann ich anhand der Variable die LED einschalten ohne sie in die Case Anweisung rein zu setzen? Mit der LED soll später mehr gemacht werden und ich möchte mir ersparen in die Case Anweisungen alles mehrfach rein zu schreiben weil bis auf LED_1-3 alles gleich ist.
    • Michael schrieb:

      Erklär doch mal, was du bezwecken willst.
      Ich möchte in der Sub abhängig von der Variable (Var) die LED an dem entsprechenden Pin steuern( ein, aus, dimmen usw...).

      Ich könnte jetzt den Code in die Case Anweisungen schreiben, wollte aber wegen der Übersichtlichkeit den Codeblock nur einmal haben und mit der Case Anweisung nur den Pin zuordnen.

      Michael schrieb:

      Ist Led eine Variable?
      Gute Frage... Led soll durch die Case Anweisungen einem Register (Pin) zugeordnet werden.
    • So?

      Quellcode

      1. Led_1 Alias Portb. 0
      2. Led_2 Alias Portb. 1
      3. Led_3 Alias Portb. 2
      4. dim led as byte 'Oder as bit im Moment egal
      5. do
      6. Led=1
      7. Call Led_dimmen(1) 'led 1 ein
      8. wait 2
      9. call led dimmen(3) 'led 3 ein
      10. wait 1
      11. led=0
      12. call led_dimmen(1) ' led 1 wieder aus
      13. wait 3
      14. loop
      15. Sub Led_dimmen(Var)
      16. Select Case Var
      17. Case 1
      18. Led_1 = Led 'Pin übernimmt Variableninhalt von Led
      19. Case 2
      20. Led_2 = Led
      21. Case 3
      22. Led_3 = Led
      23. End Select
      24. Led=1
      25. End Sub
      Alles anzeigen
      So würde 2 immer aus und 3 immer an bleiben

      Zum Dimmen muß das aber sehr schnell passieren. Wen alle (die an sind) gleich gedimmt werden sollen würde sich ein gemeinsamer Pwm Pin Anbieten.
    • Sorry, hab gewusst dass ich mich schwer tue. Danke dafür dass Ihr Euch trotzdem bemüht habt. Versuche es nochmal mit zwei Beispielen:

      Statt so...

      Quellcode

      1. Led_1 Alias Portb. 0
      2. Led_2 Alias Portb. 1
      3. Led_3 Alias Portb. 2
      4. Call Led_dimmen( 2)
      5. Sub Led_dimmen(Var)
      6. Select Case Var
      7. Case 1
      8. For I = 0 To 1023 Step 5
      9. An = I : Aus = 1023 - I
      10. Led_1 = 1 : Waitus An : Led_1 = 0 : Waitus Aus
      11. Next I
      12. Case 2
      13. For I = 0 To 1023 Step 5
      14. An = I : Aus = 1023 - I
      15. Led_2 = 1 : Waitus An : Led_2 = 0 : Waitus Aus
      16. Next I
      17. Case 3
      18. For I = 0 To 1023 Step 5
      19. An = I : Aus = 1023 - I
      20. Led_3 = 1 : Waitus An : Led_3 = 0 : Waitus Aus
      21. Next I
      22. End Select
      23. End Sub
      Alles anzeigen

      möchte ich es vereinfachen. Etwa so:


      Quellcode

      1. Led_1 Alias Portb. 0
      2. Led_2 Alias Portb. 1
      3. Led_3 Alias Portb. 2
      4. Call Led_dimmen( 2)
      5. Dim Led as irgendwas??
      6. Sub Led_dimmen(Var
      7. Select Case Var
      8. Case 1
      9. Led = Led_1
      10. Case 2
      11. Led = Led_2
      12. Case 3
      13. Led = Led_3
      14. End Select
      15. For I = 0 To 1023 Step 5
      16. An = I : Aus = 1023 - I
      17. Led = 1 : Waitus An : Led = 0 : Waitus Aus
      18. Next I
      19. End Sub
      Alles anzeigen
      Angenommen ich möchte 10 LEDs dimmen dann wird die erste Version sehr lange und unübersichtlich wenn ich mal Änderungen machen möchte...

      Mit der Übergabe (Var) an die Sub möchte ich die Led auswählen welche gedimmt wird.

      Gruß, Martin
    • Wie dimensioniere ich Led?

      stefanhamburg schrieb:

      Soll immer nur genau EINE Led an/aus/gedimmt sein?
      Ja, genau. mit dem Aufruf der Sub und der Variable (VAR) bestimme ich welche LED gedimmt werden soll. In der Sub geht diese einmal an und wieder aus.


      stefanhamburg schrieb:

      Wie formulierst Du den Sub-Aufruf mit Worten?
      Sub Led_dimmen(1) => dimme LED 1
      Sub Led_dimmen(2) => dimme LED 2
      Sub Led_dimmen(3) => dimme LED 3
    • Pac-Man schrieb:

      Sub Led_dimmen(3) => dimme LED 3
      Der Name ist unglücklich gewählt , es schaltet die leds nur. Zum dimmen muß die led nur eine bestimmte zeit innerhalb eines Zyklus an sein. Das führt zu hoher Aktualisierung. Ca 30 mal pro Sekunde mal Helligkeitsstufen. Um beim obrigen Beispiel zu bleiben wären das 30 x 1024 / 5 macht über 6000 Aufrufe pro Sekunde. Und die müssen auch noch ziemlich gleichmäßig erfolgen. Das innerhalb der Main Loop zu erledigen scheint schwer. Wieviel hat er sonst noch zu tun? Und Wichtiger: ist immer nur eine Led betroffen oder haben alle Leds verschiedene Helligkeiten? Oder alle die an sind die gleiche Helligkeit?
    • stefanhamburg schrieb:

      Ich hatte es zuletzt so verstanden, dass alle Leds aus sind und bei Aufruf der Sub dann EINE angestoßen wird, einmal hoch- und wieder runter zu dimmen.
      Genau so ist es.

      Wenn ich die Sub aufrufe geht die LED langsam an und wieder aus.

      Das dimmen ist ja nicht mein Problem. Die Auswahl der LED die gedimmt werden soll ist das Problem.


      stefanhamburg schrieb:

      Vielleicht passt es für Dich, dass man einen Pin eines Ports auch mit einer Variablen ansprechen kann:
      Hab die Idee aufgegriffen und es klappt.


      Quellcode

      1. Sub Led_dimmen(pin , Schritt)
      2. Dim Dimmen As Word
      3. Dim An As Word
      4. Dim Aus As Word
      5. For Dimmen = 0 To 1023 Step Schritt
      6. Reset Watchdog
      7. An = Dimmen : Aus = 1023 - Dimmen
      8. Portb.pin = 1 : Waitus An : Portb.pin = 0 : Waitus Aus
      9. Next Dimmen
      10. For Dimmen = 0 To 1023 Step Schritt
      11. Reset Watchdog
      12. An = Dimmen : Aus = 1023 - Dimmen
      13. Portb.pin = 1 : Waitus Aus : Portb.pin = 0 : Waitus An
      14. Next Dimmen
      15. End Sub
      Alles anzeigen
      Vielen Dank!

      Gruß, Martin