Hallo, ich möchte einene kleine Platine bauen, mit einem Atmega8535 einem Display und einem Servo. Uber ein Poti möchte ich das Servo Steuern. Und auf dem Display möchte ich dann noch Strom und Spannung usw. darstellen. Poti => Spannung Messen => 0 - 100% ==> Servoausgabe 1 - 2ms Pulslänge insgesamt 20ms Periodendauer. Das Problem ist die Ansteuerung des Servos. Ich habe es versucht mit dem Timer 0 einen Tick von 10µs zu erzeugen das sind dann 100 Schritte bei 1 ms. Die Ansteuerung des Servos alleine Funktioniert auch. Als nächstes wollte ich dann mit dem Timer2 eine Tick erzeugen => mit 100µs. Und mit diesem wollte ich dann das andere alles machen, zum Beispiel alle 300µs Poti einlesen und Servo nachstellen usw. eventuell noch Leistung berechnen und ausgeben etc. Aber schon als ich nur das Poti einlesen und die Spannung auf dem Display ausgeben wollte wurde alles zu langsam und das Poti fing an zu zittern sprich die Pulslängen stimmen nicht mehr. ==> zu langsam. Wie macht man den sowas richtig, ich habe bis jetzt noch nie sowas zeitkritisches gemacht. ==>Ich bin noch Student also wenig Erfahrung ==> Dozent meinte RTOS, aber das kanns do auch nicht sein oder? Wegen eine Servo Poti und Display so ein aufwand. Der Code ist nur da Main, aber da ist ja das wichtige drin. Besten Dank im Voraus mfg mathias
Zu langsam ist der Atmel mit Sicherheit nicht, es ist alles eine Frage des richtigen Timings bzw. der Synchronisation zwischen den Aufgaben. Servos sind sehr empfindlich auf Schwankungen im Timing, deshalb muß dieses Timing oberste Priorität haben. Ich würde ausschließlich den Servo per Interrupt bedienen, ein zweiter Timer-Interrupt kann - wie Du schon bemerkt hast - gewaltig hineinpfuschen. Versuche den zweiten Timer nicht per Interrupt ins Programm zu implementieren, sondern in die Hauptschleife. Oder alles mit einem einzigen Timer zu realisieren, eben mit unterschiedlichen Zählervariablen für die Wiederholrate der Ereignisse. Es funktioniert auf jeden Fall - ich habe eine Applikation, bei der 4 Servos angesteuert werden, nebenbei wird der SPI-Bus abgefragt und ein LCD bedient.
Ja, super Danke das sich jemand meldet. Ich habe es gleich so probiert sieht schon besser aus. Habe den Timer2 rausgenommen und dann im Timer0 eine zusätzliche variable hochgezahlt die mir dann einen 100ms Tick macht für Spannung einlesen usw. Mit dem Tick setzt ich zum Beispiel Spannunglesen auf True und in der For Loop lese ich dann die Spannung, usw. Übrigen das mit dem Servo, macht man das so. Oder gibts da noch bessere Lösungen. Ich habe mir einiges Überlegt, aber mir ist dann nichts besseres eingefallen. Wenn man es mit PWM macht hat man ja nur 31 Schritte auflösung und das ist für Modellbau zu wenig. mfg mathias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.