Forum: Compiler & IDEs usart strings senden problem


von ralph (Gast)


Lesenswert?

hi
also ich habe follgendes problem:

also ich verwende einen Atmega 8-16PU und betreibe diesen mit dem 
internen Oszilator mit 8Mhz

wenn ich einen string senden möchte bekomm ich bei hyperterminal 
entweder irgendwelche zeichen heraus(zb: "{Aaaa") obwohl ich "hallo" 
über die schnittstelle senden möchte oder es steht "Com9 kann nicht 
geöffnet werden.Bitte prüfen sie die Anschlusseinstellungen!"

liegt in diesem fall ein fehler mit meinem Code vor(ich tippe mal auf 
baudrate falsch eingestellt) oder ist was anderes falsch?????
stimmt überhaupt der Code wenn ich einen string senden möchte???

es funktioniert wenn ich einen buchstaben sende doch sobald mehr 
buchstaben sind geht gar nichts mehr!!

danke im vorhinein für eure hilfe!
mfg ralph

von ralph (Gast)


Angehängte Dateien:

Lesenswert?

so hier ist der Code

von Johannes M. (johnny-m)


Lesenswert?

Ich wiederhole mich zwar nur ungern, aber UART mit dem internen 
Oszillator ist grundsätzlich Glückssache, speziell bei den älteren AVRs 
(wie dem Mega8), deren Oszillator noch deutlich ungenauer war als bei 
den aktuellen Modellen. UART geht sinnvoll nur mit Quarz!

von Johannes M. (johnny-m)


Lesenswert?

ralph wrote:
> so hier ist der Code
Und warum als .txt? Wenn schon C-Code, dann bitte als .c!

von Stefan E. (sternst)


Lesenswert?

1
UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
Das ist eine ganz schlechte Idee.
Konkret steht da nämlich im Augenblick:
1
UCSRC = UBRRH | ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0));
Gut, UBRRH ist bei dir im Augenblick 0, so dass es kein fehlerhaftes 
Verhalten verursacht, trotzdem würde ich das "|=" schleunigst in ein "=" 
umwandeln.

von Stefan E. (sternst)


Lesenswert?

Ach, noch was:
Auch wenn du einen Quarz verwendest, wird nichts Sinnvolles am PC 
ankommen. 115,2 kBaud geht mit 8 MHz nicht.

von ralph (Gast)


Lesenswert?

warum soll 115,2k baud rate nicht mit 8Mhz gehn????

im datenblatt steht das es funktioniert und außerdem schaffe ich es ja 
auch einen buchstaben zu senden   es geht nur nicht einen string zu 
senden!!

von Stefan E. (sternst)


Lesenswert?

ralph wrote:

> im datenblatt steht das es funktioniert

Im Gegenteil. Da steht, dass es nicht geht:
1
115.2k 3 8.5% 8 -3.5%
8,5% und -3,5% sind zu große Fehler.

> und außerdem schaffe ich es ja auch einen buchstaben zu senden

Purer Zufall.

von ralph (Gast)


Lesenswert?

danke stefan

man lernt immer wieder dazu auf das wär ich auf gar keinen fall gekommen

so dann werd ich mir mal einen quarz besorgen!!!!
aber vom Code passt alles oder???

Mfg ralph

von Stefan E. (sternst)


Lesenswert?

> so dann werd ich mir mal einen quarz besorgen!!!!

Dann aber auch gleich einen so genannten Baudraten-Quarz.

> aber vom Code passt alles oder???

Vom bereits angesprochenen "|=" abgesehen, sehe ich keine groben 
Schnitzer.

Kleinigkeiten:

1
//Globale Variablen definieren
2
unsigned char* str;
Diese Variable wird nirgendwo verwendet.

1
     while(!(UCSRA & (1<<UDRE)));
2
     {
3
        UDR = *str++;
4
     }
Wozu Klammern und Einrückung? Das suggeriert, dass das UDR= zum while 
gehört. Dem ist aber nicht so.

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.