www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle ATmega128L


Autor: Hans Klemer (losti85)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TheMiB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Klemer (losti85)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans Klemer wrote:
> 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

Autor: Hans Klemer (losti85)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Klemer (losti85)
Datum:

Bewertung
0 lesenswert
nicht 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

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.