Forum: Mikrocontroller und Digitale Elektronik UART Phänomen


von Daniel (Gast)


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

von Jens (Gast)


Lesenswert?

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

von Daniel (Gast)


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

von Mike (Gast)


Lesenswert?

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

von peter dannegger (Gast)


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

von Daniel (Gast)


Angehängte Dateien:

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

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.