Forum: Mikrocontroller und Digitale Elektronik UART erfahrenen!


von britneypunter (Gast)


Lesenswert?

Hallo,

also ich versuche jetzt schon seit 2 Wochen ne verbindung von meinem
ATmega8(in verbindung mit MAX232) zu meinem PC(Win2000) hin zu
bekommen, aber es will einfach nicht klappen.

Ich benutze dazu derzeit das testprog. zum senden eines textes ins
Hyper-Terminal, welches hier auf der Seite veröffentlicht ist. Die
kofiguration der Bautrate und Stopbits simmt auch. Befor ein neues
Zeichen gesendet wird soll ja mit sbis UCSRA,UDRE geprüft werden, ob
das nächste zeichen gesendt werden kann bzw. ob UDR empty ist. Mit
dieser zeile allerdings sendet er granicht's (gemessen). Lasse ich nun
diese Zeile weg und ersetze sie duch eine delay schleife, so sendet der
controller bzw. besser gesagt empfängt das Hyperterminal immer weiter
Euro zeichen.

Hat jemand ne ahnung, ich verzweifele nämlich so langsam daran.

von AbsoluteBeginner (Gast)


Lesenswert?


von Sebastian Wille (Gast)


Lesenswert?

Hi,

lade Dir mal das komplette Atmel-Datemblatt für Deinen MC herunter. Da
gibt sowohl ain Assembler als auch in C Beispiele für die
Anfangskonfiguration, das Senden und das Empfangen. Diese Beispiele
gehen 100%ig!

Noch ein Tip: Erst das High-Byte beschreiben, dann das Low-Byte!

Sebastian

von Peter D. (peda)


Lesenswert?

In meinem Bootloaderbeispiel ist eine UART mit drin, probiers mal aus.
Der Empfang ist über den Interrupt mit 256 Bytes gepuffert. Den
CRC-Code kannst Du rausschmeißen oder drinlassen.

getchar ist zum Empfang, putchar zum Senden.
Die beiden auskommentierten Zeilen unter uart_init müssen wieder
eingefügt werden.


Peter

von britneypunter (Gast)


Lesenswert?

Welche Frequenz muß ich denn für die Berechnung des Wertes für das
Bautratenregister nehmen? Die interne Frequenz oder die
Oszilatorfrequenz des angeschlossenen Quarzes?

von Uwe (Gast)


Lesenswert?

Hi!
Immer die mit der der Proz.getaktet wird, also System Clk.

MFG uwe

von xandl (Gast)


Lesenswert?

Hi,

ich hab n ähnliches Problem.

Ich empfange auch Daten mit dem Hyperterminal unter Win98se, aber das
sieht dann so aus:

&#128;xxüx<xÀxÀxx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü 
&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xø 
x<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128; 
&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xx 
üx<xÀxü&#128;xøx<&#128;&#128;xx&#128;xøx<&#128;&#128;xx&#128;xxxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀ 
xü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128; 
xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#12 
8;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128; 
xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<xÀxü&#128;xøx<&#128;&#128;xxüx<

Sollte allerdings "Test!" heißen. (Code stammt vom Tutorialteil auf
dieser Seite)
Ich bin mittlerweile ratlos. Ich denk es ist was simples, aber ich komm
ned drauf.

ATmega8515,
4Mhz Quarz,
Baudrate 9600
LT1081 als MAX232 ersatz

Grüße
 Xandl

von Michael Ortenstein (Gast)


Lesenswert?

@Xandl:

Hi,
das schaut so aus, als ob ein nullterminierter String nicht terminiert
ist, oder der Pointer nicht auf den String zeigt.

Falls Du einen Text so im Codesegment definierst:

Text:
.DB "Test!",0

dann musst Du den Pointer darauf so setzen:

ldi ZH,HIGH(2*Text)
ldi ZL,LOW(2*Text)

vergisst Du dabei das 2*... landest Du irgendwo und die Routine gibt so
lange aus, bis endlich ne Null in der Speicherzelle steht.

So far
Michael

von britneypunter (Gast)


Lesenswert?

Ich hab die LÖSUNG!!!!!

Die ATmega's laufen,wenn sie Fabrik neu sind, voreingestellt immer mit
1MHz und sie ignorieren den angeschlossenen externen Quarz. Dieser mus
mit Pony Prog erst frei geschaltet werden.

Näheres hier:
http://www.elektronik-projekt.de/include.php?path=content/articles.php&contentid=29&PHPKITSID=36bf35ae7fdf55bcedf503458a54e663

von xandl (Gast)


Lesenswert?

THX @britneypunter

war wirklich so.
so n sch*! aber was solls.
Darauf hätt ich selber kommen können, aber wie gesagt war nur ne
Kleinigkeit.

mfg
Xandl

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.