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

      New

      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 ().

    • New

      Pluto25 wrote:

      Tido wrote:

      nur einen internen RC Oszillator mit 8MHz
      Nicht ganz Der M8 kann 1,2,4,8Mhz . Der Tiny 16,128 Khz,1,2,4,6.4,8,16 Mhz vielleicht noch mehr.In dem Code wird Timer0 nicht genutzt? (Außer von Bascom für den Servo)
      Beide laufen laut Blinkprogramm mit 8MHz.
      Testprogramm siehe 1. Post, beim Tiny sieht es abgesehen vom regfile und Servoport genauso aus.
    • New

      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?
    • New

      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.
    • New

      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.
    • New

      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?
    • New

      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.