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
warum machst du das nciht mittels PWM mit deinem piepser?? der braucht dann keinen int Gruss Jens
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
Könnte sein. PWM ist auf keine Fall aufwändiger, da braucht es nur 3-4 Zeilen Initialisierung und fertig ist der Lack :)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.