Servo verhält sich an verschiedenen µCs unterschiedlich

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Servo verhält sich an verschiedenen µCs unterschiedlich

      Hallo,

      ich betrieb bisher einen Servo an einem Attiny85 mit 8MHz.

      Die Endanschläge lagen bei 35 und 140.

      Jetzt ist das Programm gewachsen und ich habe es auf einen Mega8 auch mit 8MHz portiert.
      Die Frequenz von 8MHz des jeweiligen µCs wurde mit einem Blinkprogramm bestätigt.

      Beim Mega8 liegt aber der eine Endanschlag bei 80 (vorher 35) und der zweite jenseits von 255 (vorher 140).

      Wie kann das sein?

      Deklariert ist der Servo jeweils mit (natürlich unterschiedlichen Ports, als Ausgang konfiguriert)

      Config Servos = 1 , Mode = Servo , Servo1 = Portd.6

      Ich kann mit unterschiedlichen Werten eigentlich leben, aber der Grund würde mich schon interessieren.
      Da Servo() nur Bytes aufnehmen kann, komme ich momentan nicht an den 2. Anschlag.

      Mein Testprogramm:

      Source Code

      1. $regfile = "m8def.dat"
      2. $framesize = 42
      3. $swstack = 32
      4. $hwstack = 32
      5. $crystal = 8000000
      6. Config Servos = 1 , Mode = Servo , Servo1 = Portd.6
      7. Config Portd.6 = Output
      8. Servo(1) = 80
      9. Do
      10. Loop
      Display All
      Den Wert setzte ich beim Test manuell.


      MfG
      Tido

      The post was edited 2 times, last by Tido ().

    • Tido wrote:

      Testprogramm siehe 1. Post
      Das würde nichts tun. Die Servos brauchen ein "Enable Interrupts"
      Möglicherweise ist da noch irgendwas anders? (z,B, m8Adef)
      Ein Tccr0=4 nach dem Config Servo könnte den Bereich vierteln?
      Vorsicht, ich haB hier einen so in den Anschlag gedonnert, daß er nur noch mit Zangengewalt wieder beweglich wurde.
      Einen weiteren Mega8 da? Vielleicht stimmt seine Calibrierung nicht. Das Blinken wurde nicht mit einem Zeitmesser kontrolliert?
    • Pluto25 wrote:

      Tido wrote:

      Testprogramm siehe 1. Post
      Das würde nichts tun. Die Servos brauchen ein "Enable Interrupts"Möglicherweise ist da noch irgendwas anders? (z,B, m8Adef)
      Ein Tccr0=4 nach dem Config Servo könnte den Bereich vierteln?
      Vorsicht, ich haB hier einen so in den Anschlag gedonnert, daß er nur noch mit Zangengewalt wieder beweglich wurde.
      Einen weiteren Mega8 da? Vielleicht stimmt seine Calibrierung nicht. Das Blinken wurde nicht mit einem Zeitmesser kontrolliert?
      ups, das ist beim Entfernen von

      Config Timer2 = Timer , Prescale = 1024
      On Timer2 Isr_time
      Enable Timer2
      Enable Interrupts

      verloren gegangen, ist aber im Programm enthalten.

      Ich habe es gerade mit einem 2. M8 und einem 328p geprüft, alle zeigen dasselbe Verhalten wie der ursprüngliche M8.
      Ich muss ja aber irgendwie bis zum 2. Endanschlag kommen, das ist das Ziel. Momentan erfüllt das nur der Tiny (def. mit 8MHz), der aber für das Projekt zu wenige Pins hat.
    • Eine "Lösung" habe ich jetzt gefunden:

      Statt: Config Servos = 1 , Mode = Servo , Servo1 = Portd.6
      jetzt: Config Servos = 1 , Servo1 = Portd.6 , Reload = 10

      Damit passen die "alten" Anschläge. Beim Tiny ging es ohne Reload.
      Leider bremst das Reload = 10 mein Programm auf dem M8 zu sehr aus.
    • Das ist erstaunlich. Ich hab gerade etwas in den Histories gestöbert. Die 40/140 blieben gleich ob M8 8Mhz oder 4Mhz oder tiny44 8Mhz. Das ist ein "seltsamer" Servo :D .
      Eine Möglichkeit wäre ihn auf einen Pwm Ausgang des Timer1 zu hängen. (Das entlastet den Avr ungemein)
      Das Tccr0=4 könnte auch gehen (nie versucht)
      Einen anderen Servo zur Hand?

      Das Reload hatte ich auskommentiert. ging trotzdem. Gehts noch mit einem höheren Reload?
    • Positiv für den Servo spricht die Tatsache, dass er am 8MHz Tiny die 40/140 zeigt.
      Außerdem, sobald ich Reload = 10 einfüge.

      Aber da es ohne Reload = 10 am Tiny läuft, sollte es das auch am M8 oder 328p tun.

      Ich komme damit aktuell nicht weiter. Laut Bascom-Hilfe benötigt Mode = Servo auch kein Reload.