www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Robotersteuerung mit ATTiny 2313-Interrupt nervt


Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und guten Abend,
ich habe ein Assembler Programm für den AT Tiny 2313 geschrieben.
Ein Interrupt wird ausgelöst, sobald über UART ein Zeichen empfangen
wird. Dann wird ein Unterprogramm abgearbeitet, das die Elektromotoren
eines Roboters ansteuert. Funktioniert soweit.
Gleichzeitig steuert das gleiche Programm ein Ultraschallmodul. In
einer Schleife wird ständig die Entfernung des US Moduls zum nächsten
Hindernis gemessen. Auch das funktioniert.
Mein Problem ist jetzt aber, dass wenn ich andauernd Steuerzeichen
(also konkret: Vorwärts, wenn Entfernung>20cm und STOP, wenn
Entfernung<20cm) zum Tiny schicke, dann geht das US Modul nicht mehr
richtig. Es gibt dann nur noch Quark aus. Ich vermute, dass dann
einfach zu oft der Interrupt ausgelöst wird und der Rest des Programms
zu stark gebremst wird. Was kann ich da machen ?

Danke für Tips,
Tilman

Autor: Pöschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

dektiviere doch einfach den Interrupt, wenn du die Entfernung misst.
Wenn der AVR über den UART ein Byte empfängt bleibt es in dem
Datenregister bis es ausgelesen wird. Um einen Datencrasch zu vermeiden
muss dein UART nach jedem ausgelesenem Byte ein Antwort senden und erst
dann kommen das nächste Byte.
Sowas in der Art sollte funktionieren, hab ich auch mal gemacht: PC
Schickt ein Byte an MC und wartet bis der die Daten verarbeiten kann
und eine Antwort schickt erst dann schickt der PC die restlichen Bytes.

Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, gute Idee, ich werds mal ausprobieren. Weiss allerdings im Moment
noch nicht, wie man den Interrupt zur Laufzeit deaktiviert...mal im
Datenblatt nachgucken oder so

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das Programm mehrere Jobs parallel ausführen soll, dann muss es
auch dementsprechend programmiert worden sein (Programmierstil).

Dazu gehört (unter Anderem), dass:

- die ISRs so kurz (schnell) wie möglich sind (keine Warteschleifen!),
- die ISR keine Unterprogramme aufruft, sondern nur ein Flag setzt,
  welches vom Hauptprogramm ausgewertet wird, das dann das Unter-
  Programm aufruft und das Flag wieder löscht,
- Unterprogramme des Hauptprogramms sofort zum Hauptprogramm zurück
  springen, falls sie im Moment nix ausrichten können (z.B. Busywait),
- Unterprogramme und Hauptprogramm keine Warteschleifen enthalten,
  sondern evtl. Verzögerungen von einem (sowiso benutzten) Timer
  (über Flags) synchronisiert werden...

(Die Liste lässt sich erweitern.)

...

Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Pöschi: Vielen Dank, das klappt ! (cli & sei), hätte ich gar nicht
gedacht, denn die Zeit, in der der Interrupt ausgeführt werden kann,
kann höchstens 1 oder 2 Systemtakte sein...aber egal- es geht nun.

@Hannes: Ja hmmm. was heisst ISR ?

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR = Interrupt Service Routine :)

Oder auf Deutsch, Die Routine, die der jeweilige Interrupt anspringt.

Mfg Sascha

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.