Einfach nur Zeichen senden

Gast #395313
Lesenswert?
• ▲
▼
Hallo Leute,

ich versuch lediglich meinem ATMega128 ein Zeichen zu entlocken, das
ich dann auf dem Windows-HyperTerminal empfangen will. Doch leider
macht er keinen Mucks. Könnt ihr euch bitte mal meine Einstellungen
anschauen, ich habe mitlerweile sooft drüber geschaut...
Die Verbindung soll über RS485 laufen, dem Baustein muss ich lediglich
sagen ober senden oder empfangen soll.  Das mach ich indem ich den PE2
setze (senden). Aber der 128'er sendet ja nicht (mit Oszi überprüft),
also is das erst mal noch nebensache. Mein µC läuft mom. noch mit 1MHz
internen Takt. Und eingestellt sollte der USART auf Baud 9600, Parität
keine, Stoppbit 1, Flussst. keine
Angehängte Dateien:
Gast #395314
Lesenswert?
• ▲
▼
Hast du da nicht was vergessen?
1
while ( ! ( UCSR0A & ( 1 << UDRE0 ) ) )
2
    
3
UDR0 = 'x';

Das bedeutet, du versuchst, genau solange in einer Schleife zu senden,
wie die Schnittstelle nicht bereit dazu ist.
Gast #395315
Lesenswert?
• ▲
▼
Du hast vollkommen Recht!!!
Im Datenblatt des 128'er steht drin das der Bereit ist wenn des UDRE 1
ist und nicht (wie angenommen) bei 0.
Zwei Dinge:
Erstens, ich hab die Anweisung while... vom AVR-GCC Tutorial  UART 
Wie kann ich das ändern? Will ja nicht das noch andere Anfänger
drüberfallen.

Zweitens, nun macht er wie verrückt (wieder mit Oszi nachgeprüft). Auch
nach dem 485'er Baustein. --> Signal ist also auf der Leitung. An der
Gegenstelle hängt wieder ein 485-USB Wandler. Wenn ich nun mein
HyperTerminal anwerf und die selben Übertragungswerte einstelle müsste
er mir doch eigentlich den Bildschirm mit lauter x'en zumüllen. Tut
aber gar nichts :-(
Gast #395317
Lesenswert?
• ▲
▼
Du benutzt den intenen RC-Oszillator. Der ist nicht besonders
frequenzstabil. Würdest du dann noch einen Baudratenquarz (z.B.
3,686MHz) benutzen, hättest du keine Probleme mit der momentan
abweichenden Baudarate deines Controllers.
Gast #395318
Lesenswert?
• ▲
▼
> Erstens, ich hab die Anweisung while... vom AVR-GCC Tutorial /
> UART /  Wie kann ich das ändern?

Hast du nicht. Dein Code:
1
while ( ! ( UCSR0A & ( 1 << UDRE0 ) ) )

Der vom Tutorial:
1
while (!(UCSRA & (1<<UDRE)));

Da ist ein kleiner, aber sehr wichtiger Unterschied.
Gast #395320
Lesenswert?
• ▲
▼
Um's nochmal klar zu machen (weil es auch ein paar kleine und
unwichtige Unterschiede gibt): Es geht um das Semikolon dahinter. Wenn
man das vergißt, wird die folgende Anweisung innerhalb der Schleife
ausgeführt, was natürlich nicht sein soll.

@Rahul:

Nur so am Rande:
IMHO (in my humble opinion - meiner bescheidenen Meinung nach) paßt
hier nicht. Besser hätte AFAIK (as far as I know - soweit ich weiß)
gepaßt.
Gast #395321
Lesenswert?
• ▲
▼
>Da ist ein kleiner, aber sehr wichtiger Unterschied.
Habs bemerkt! Danke für den Schubs

while (!(UCSRA & (1<<UDRE)));
warte solange UDRE noch 0 ist --> dann erst Schreiben

nicht wie bei mir in der Schleife.
Gast #395323
Lesenswert?
• ▲
▼
@Rolf: Danke für den Hinweis. Ich bin in dieser "Sprache" noch nicht
so weit, und "IMHO" konnte ich mir bis jetzt am besten merken.

@Screibweise:
Ich schreibe es so:

 while (!(UCSRA & (1<<UDRE)));

und lasse die nächste Zeile dann frei.
Wenn sich die Schleife auf die folgenden Anweisungen bezieht, folgt
unmittelbar in der nächsten Zeilte eine "{" oder eine einzelne,
eingerückte Anweisung.
Das liegt vermutlich daran, dass ich Quellcode gerne mit dem "Finger"
lese (das wird einem in der Grundschule eigentlich abgewöhnt...).

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.