Zeit über Poti einstellen

    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!

    • Zeit über Poti einstellen

      Hallo zusammen,

      ich habe eine kurze Frage: Ich würde gerne die die Servogeschwindigkeit eines Servos mittels Poti einstellen ( Pausenzeit einstellen ). Hier wären Zeiten von 0 - 100 ms optimal. Kann auch + - 5 ms abweichen. Nun wäre meine Frage, wie ich in diesen Wert hinbekomme. Meine Idee war, der ADC gibt ja Werte von 0 - 1024 raus. Teile ich den ADC wert durch 10, käme ich auf max 102,4 . Da habe ich aber wohl einen Denkfehler. In der Praxis funktioniert das so nicht. In der Praxis kann ich den Poti drehen und es ändert sich ein paar mal die Geschwindigkeit. Also nicht von ganz links nach ganz rechts.

      Könnt ihr meinen einen Tipp geben, wo mein Fehler liegt ?

      Besten Dank im Voraus !

      Viele Grüße
      Sven
    • Hier nun der Code. Nicht wundern. Ich bewege den Servo testweise erstmal nur in eine Richtung. Das Programm ist noch im Anfangsstadium. ;) Wie gesagt, wenn ich in Zeile 60 statt "Geschwindigkeit" einen Wert eingebe, klappt das wunderbar.

      BASCOM-Quellcode

      1. $regfile = "m8adef.dat"
      2. $crystal = 8000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. ' Ein / Ausgänge festlegen:
      7. Config Portc = Input
      8. Config Portd = Input
      9. Config Portb = Output
      10. ' Variablen festlegen:
      11. Dim A As Byte
      12. Dim Geschwindigkeit As Byte
      13. Dim B As Word
      14. ' Alias festlegen:
      15. P1 Alias Pinc.0
      16. P2 Alias Pinc.1
      17. P3 Alias Pinc.2
      18. Pg Alias Pinc.3
      19. T1 Alias Portb.2
      20. R1 Alias Portb.3
      21. R2 Alias Portb.4
      22. R3 Alias Portb.5
      23. ' Pullup Widestände einschalten:
      24. P1 = 1
      25. P2 = 1
      26. P3 = 1
      27. Pg = 1
      28. ' Ausgänge ausschalten.
      29. T1 = 0
      30. R1 = 0
      31. R2 = 0
      32. R3 = 0
      33. ' Servo Routine laden:
      34. Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
      35. Enable Interrupts
      36. ' ADC Wandler laden:
      37. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      38. Start Adc
      39. '*******************************
      40. Servo(1) = 35
      41. Wait 2
      42. Do
      43. B = Getadc(3)
      44. Geschwindigkeit = B / 10
      45. For A = 35 To 160
      46. Waitms Geschwindigkeit
      47. Servo(1) = A
      48. Next
      49. Loop
      Alles anzeigen
    • Hab ich auch gerade gesehen und meinen Einwand gelöscht a_38_b45e201d
      Über die PullUps würde ich aber nochmal nachdenken, insbesondere bei C.3!

      Ich hab leider gerade kein bascom dabei, sonst könnte ich es im Simlator probieren - aber was passiert denn, wenn Du erst die Division auf Word-Ebene ausführst und dann erst das Ergebnis der Byte-Variablen zuweist?

      B = Getadc(3)
      B = B / 10
      Geschwindigkeit = B

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Einzeller ()

    • Sven Loeffler schrieb:

      Diesen speichere ich dann in eine BYTE Variable ( Geschwindigkeit ).
      Das geht schief. Beim Umrechen fehlt ihm das Zweite Byte (vom Word)
      B=B/10
      Geschwindigkeit=B
      sollte funktionieren.
      PS Das ist aber eine Geduldsprobe - bei max braucht er zwei Minuten für die Bewegung. a_481_60a3be70
      PPS Ein schreiben auf Pin bewirkt ein Toggeln. Kann nützlich sein macht mir aber unbehagen :
      Set Pin - Ist er nun an oder aus? ?(
      Config Port = input : set port aktiviert den Pullup - mit set pin wird er umgeschaltet

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • ich denk mal, dein Servo kommt nicht hinterher. Dein loop dauert doch nur paar hundert ms, wenn der loop neu anfängt, muss das Servo vom einen Anschlag zum anderen zurück fahren, von A=160 auf A=35.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Sven Loeffler schrieb:

      ' Alias festlegen:
      P1 Alias Pinc.0
      P2 Alias Pinc.1
      P3 Alias Pinc.2
      Pg Alias Pinc.3
      T1 Alias Portb.2
      R1 Alias Portb.3
      R2 Alias Portb.4
      R3 Alias Portb.5
      Wenn du bei der Definition der Alias-Bezeichnungen keine selbstsprechenden Bezeichnungen verwendest,
      dann schreibe doch bitte Kommentare dahinter, dass man nachvollziehen kann was da angeschlossen ist, gemessen wird, oder ausgegeben wird.

      Bei den Bezeichnungen R1 bis R3, sind da Register oder Portpins gemeint?
    • Vielen Dank für eure Hilfe. Habe es jetzt nochmal angespasst, bekomme aber eine Fehlermeldung: 100 .DEF not found [PORT.3 [assb]

      BASCOM-Quellcode

      1. $regfile = "m8adef.dat"
      2. $crystal = 8000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. ' Ein / Ausgänge festlegen:
      7. Config Portc = Input
      8. Config Portd = Input
      9. Config Portb = Output
      10. ' Variablen festlegen:
      11. Dim A As Byte
      12. Dim Geschwindigkeit As Byte
      13. Dim B As Word
      14. ' Alias festlegen:
      15. P1 Alias Pinc.0 ' Poti Stellung 1
      16. P2 Alias Pinc.1 ' Poti Stellung 2
      17. P3 Alias Pinc.2 ' Poti Stellung 3
      18. T1 Alias Portb.2 ' Transistor
      19. R1 Alias Portb.3 ' Rückmeldung 1 ( LED )
      20. R2 Alias Portb.4 ' Rückmeldung 2 ( LED )
      21. R3 Alias Portb.5 ' Rückmeldung 3 ( LED )
      22. ' Pullup Widestände einschalten:
      23. Portc.0 = 1
      24. Portc.1 = 1
      25. Portc.2 = 1
      26. ' Ausgänge ausschalten.
      27. T1 = 0
      28. R1 = 0
      29. R2 = 0
      30. R3 = 0
      31. ' Servo Routine laden:
      32. Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
      33. Enable Interrupts
      34. ' ADC Wandler laden:
      35. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      36. Start Adc
      37. '*******************************
      38. Servo(1) = 35
      39. Wait 2
      40. Do
      41. B = Getadc(3)
      42. B = B / 10
      43. Geschwindigkeit = B
      44. For A = 35 To 160
      45. Waitms Geschwindigkeit
      46. Servo(1) = A
      47. Next
      48. Loop
      Alles anzeigen
    • tschoeatsch schrieb:

      vom einen Anschlag zum anderen zurück fahren,
      Das schaffen die ganz gut wenn das Netzteil das mitmacht a_28_2c02f089 :D

      Sven Loeffler schrieb:

      bekomme aber eine Fehlermeldung
      Da liegt an den von Mitch angesprochenen R1... Das sind vorhandene Register die nicht als Variablennamen vergeben werden können, da sie schon damit angesprochen werden. Ähnliches passiert wenn man zweimal den gleichen Namen "Dimmt"
    • Nun funktioniert es. Vielen Dank für Eure Hilfe. Der Vollständigkeit halber hier nochmal der Code.

      BASCOM-Quellcode

      1. $regfile = "m8adef.dat"
      2. $crystal = 8000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. ' Ein / Ausgänge festlegen:
      7. Config Portc = Input
      8. Config Portd = Input
      9. Config Portb = Output
      10. ' Variablen festlegen:
      11. Dim A As Byte
      12. Dim Geschwindigkeit As Byte
      13. Dim B As Word
      14. ' Alias festlegen:
      15. P1 Alias Pinc.0 ' Poti Stellung 1
      16. P2 Alias Pinc.1 ' Poti Stellung 2
      17. P3 Alias Pinc.2 ' Poti Stellung 3
      18. T1 Alias Portb.2 ' Transistor
      19. Led1 Alias Portb.3 ' Rückmeldung 1 ( LED )
      20. Led2 Alias Portb.4 ' Rückmeldung 2 ( LED )
      21. Led3 Alias Portb.5 ' Rückmeldung 3 ( LED )
      22. ' Pullup Widestände einschalten:
      23. Portc.0 = 1
      24. Portc.1 = 1
      25. Portc.2 = 1
      26. ' Ausgänge ausschalten.
      27. T1 = 0
      28. Led1 = 0
      29. Led2 = 0
      30. Led3 = 0
      31. ' Servo Routine laden:
      32. Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
      33. Enable Interrupts
      34. ' ADC Wandler laden:
      35. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      36. Start Adc
      37. '*******************************
      38. Servo(1) = 35
      39. Wait 2
      40. Do
      41. B = Getadc(3)
      42. B = B / 10
      43. Geschwindigkeit = B
      44. For A = 35 To 160
      45. Waitms Geschwindigkeit
      46. Servo(1) = A
      47. Next
      48. Loop
      Alles anzeigen