mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit meiner Programmierung


Autor: mgiaco (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Die Waldfee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.