Forum: Mikrocontroller und Digitale Elektronik Probleme mit meiner Programmierung


von mgiaco (Gast)


Angehängte Dateien:

Lesenswert?

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

von Die Waldfee (Gast)


Lesenswert?

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.

von mgiaco (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.