Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle ATmega128L


von Hans K. (losti85)


Lesenswert?

Hallo Leute,

ich habe da ein Problem. ich möchte die Serielle schnittstelle für eine 
gewisse Zeitabschalten. Ich sende derzeit vom Mikrocontroller Daten zum 
PC dies mache ich in dem ich immer wenn das UDR Register leer ist etwas 
neues reinschreibe.Hierfür gibt es einen passenden Intterupt: jetzt bin 
ich hingegangen und habe diesen und dann anshcliessend den kompletten 
sendeinterrupt gespeert:

So:

UCSR1B &= ~( 1 << UDRIE1 );
UCSR1B &= ~(1<<TXEN1);

Nachdem ich nun aber den Interrupt wieder einschalte mit:

UCSR1B |= (1<<TXEN1);
UCSR1B |= ( 1 << UDRIE1 );

bekomme ich durchgehend nullen und zwischendrin meine daten übertragen. 
Woran liegt das und wer kann das Problem lösen. Danke im Vorraus euer 
Hans

von TheMiB (Gast)


Lesenswert?

der TXC-Interrupt wird ja ausgelöst, wenn entsprechend das TXC-flag in 
UCSR1A gesetzt ist. gelöscht wird das entweder durch den Aufruf des 
Interruot oder durch das schreiben von EINS an die entsprechende 
Stelle...UCSR1A |= (1<<TXC);

Warum dein Interrupt immer nullen sendet wird wohl an der 
Interruptfunktion an sich liegen!?

mfg
TheMiB

von Hans K. (losti85)


Lesenswert?

Hmm an der Funktion die etwas in den Buffer hineinschreibt meinst du ?. 
Das kann ich mir eigentlich nicht vorstellen werde es aber sofort mal 
testen :). Danke für den ersten Tipp.

Gruß Hans

von Peter D. (peda)


Lesenswert?

Hans Klemer wrote:
1
> UCSR1B &= ~(1<<TXEN1);

Das ist Quatsch mit Soße.
Damit wird der Pin wieder ein IO-Pin und der ist nach nem Reset auf 0.

Wenn Du nichts senden willst, schreib eben nichts ins Senderegister und 
gut is.


Peter

von Hans K. (losti85)


Lesenswert?

Hi danke, das Problem ist dann aber das immer ein paar bytes verloren 
gehen warum auch immer. Hast du da eine Idee ?

von Peter D. (peda)


Lesenswert?

Hans Klemer wrote:
> Hi danke, das Problem ist dann aber das immer ein paar bytes verloren
> gehen

Wenn Bytes verloren gehen, werden sie entweder nicht gesendet oder der 
Empfänger ist nicht bereit (Pufferüberlauf).


Peter

von Hans K. (losti85)


Lesenswert?

Das dachte ich auch aber warum sollten Sie nicht gesendet werden wenn 
ich den Buffer EmptyInterrupt abschalte. An der Empfangsseite kann es 
nicht liegen

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.