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
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!
ralph wrote:
> so hier ist der Code
Und warum als .txt? Wenn schon C-Code, dann bitte als .c!
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.
Ach, noch was: Auch wenn du einen Quarz verwendest, wird nichts Sinnvolles am PC ankommen. 115,2 kBaud geht mit 8 MHz nicht.
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!!
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.