mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Phänomen


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist gerade etwas bei der Nutzung des UART und gleichzeitiger
Nutzung von Interrupts aufgefallen, vielleicht könnte mir das
irgendjemand hier bestätigen bzw. einen Alternativen Workaround
vorschlagen:
Ich nutze den UART und übertrage in einer Endlosschleife eine
Zeichenkette (Routinen von Peter Fleury). Wenn ich nun einen Beep
(5000Hz über Ausgang an Piezo) mit einem Timer0 Interrupt erzeuge stopt
der UART plötzlich, also der Text wird nicht mehr übertragen.
Wenn ich nun allerdings den UART auf der Computerseite oder auf der uC
Seite neu initialisiere läuft wieder alles.

Ich benutze einen ATMega8, der Piezo wird mit Timer0 gesteuert und der
Interrupt wird etwa 10000 mal pro Sek aufgerufen (für 5000Hz).

Wie schon erwähnt, ist meine Lösung, den UART dann nach jedem
Beep-Komando (das den Timer-Interrupt initialisiert) einfach den UART
neu zu initialisieren. Aber das finde ich ist eine unsaubere Lösung;
geht das nicht noch anders?

Vielen Dank,

Daniel

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum machst du das nciht mittels PWM mit deinem piepser??
der braucht dann keinen int
Gruss Jens

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok müsste ich mir nochmal ansehen... (kam mir irgendwie aufwändiger vor)
also glaubst du, dass es daran liegt, dass sich die interrupts in die
Quere kommen?

Gruß,

Daniel

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte sein. PWM ist auf keine Fall aufwändiger, da braucht es nur 3-4
Zeilen Initialisierung und fertig ist der Lack :)

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde trotzdem erstmal den Fehler suchen.

Fehler, die man nicht gleich sucht, fallen einem später wieder auf die
Füße.


Ohne Deine komplette Software zu kennen, kann man aber nichts genaues
dazu sagen.


Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Also hier im Anhang hab ich meinen kompletten Source.
Die erwähnten Stellen sind in der main()-Fkt. ganz am Ende. Der Beep
wird in der beep() Fkt. initialisiert und der Port wird dann in der
Interrupt-Routine getriggert.
Ich hoffe der Source ist einigermaßen klar geschrieben.

Danke für's Drüberschauen!

Daniel

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.